2017-06-18 8 views
0

ユーザーがGUIを使用してコミットする間隔と間隔に基づいてrrdデータベースを作成しようとしています。私は毎分更新機能を呼び出すタイマーを作成しました。測定の後、私はfetch-methodを使って収集したデータを調べようとしますが、 "none"値しか表示されません。更新中のRRDデータベースが空です

def update(self): 
    t=getTemperature() 
    h=getHumidity() 
    if self.status==11: 
     rrdtool.update(self.path,"N:"+t+":"+h) 
    elif self.status==10: 
     rrdtool.update(self.path,"N:"+t) 
    elif self.status==01: 
     rrdtool.update(self.path,"N:"+h) 

センサーの値は正しいですか、プリントアウトで確認しました。 rrdtool.create-methodも完全に正常に動作しますが、データベースが作成されますが、実際に正しく更新されていないと言われています。ここで

rrdtool.createの使用():

def __init__(self,term,temEnabled,humEnabled,mins,hrs,fre): 
    self.path="/home/pi/Wetterstation/Speicherort/"+term+".rrd" 
    if os.path.exists(self.path)==False: 
     totalEntries=int((mins+hrs*60)/fre) 
     totalEntries=str(totalEntries) 
     if temEnabled==True and humEnabled==True: 
      rrdtool.create(self.path, 
          "DS:temperature:GAUGE:900:0:50", 
          "DS:humidity:GAUGE:"+str(fre)+":0:100", 
          "RRA:AVERAGE:0.5:1:"+totalEntries,          "RRA:MIN:0.5:12:2400", 
          "RRA:MAX:0.5:"+totalEntries+":1", 
          "RRA:MIN:0.5:"+totalEntries+":1") 
      self.status=11 
     elif temEnabled==True: 
      rrdtool.create(self.path, 
          "DS:temperature:GAUGE:"+str(fre)+":0:50", 
          "RRA:AVERAGE:0.5:1:"+totalEntries, 
          "RRA:MIN:0.5:"+totalEntries+":1", 
          "RRA:MAX:0.5:"+totalEntries+":1") 
      self.status=10 
     elif humEnabled==True: 
      rrdtool.create(self.path, 
          "DS:hum:GAUGE:"+str(fre)+":0:100", 
          "RRA:AVERAGE:0.5:1:"+totalEntries, 
          "RRA:MIN:0.5:"+totalEntries+":1", 
          "RRA:MAX:0.5:"+totalEntries+":1") 
      self.status=01 
     self.success=True 
    else: 
     self.success=False 
+0

'fre'の値は何ですか?これはあなたの湿度の鼓動です。 totalEntriesとは何ですか?これはあなたのRRAsのサイズです。最後に、update()を呼び出す頻度と、データを表示する前に保存するサンプルの数はどれくらいですか?おそらく、あなたはRRAエントリーを得るために十分長い時間(45分以上)データを提出していませんか?保存されたデータのリストと、抽出に使用したコマンドを表示できますか?保存されたデータと異なる時間ウィンドウを照会している可能性がありますか? –

+0

また、両方のDSが存在する場合、ハートビートが900にハードコードされているようですが、それ以外の場合は 'fre'を使用します。別のハートビートが期待どおりになっている場合、これは問題を引き起こしている可能性があります。ステップを指定していないので、おそらくデフォルトとして300を取得していますが、RRAの計算は、ステップ上にあるときのハートビートに基づいています。 –

+0

@SteveShipway "fre"は、 totalEntries "は値を保存する回数を計算します。私はメソッド更新を-fre-分ごとに呼びます。短時間(テスト中)のデータのみを提出します。一分。 900私は今もfreを定義するので、私は "fre"と置き換えることを忘れました。 – byteshark17

答えて

0

あなたの問題は、ステップサイズ、DSのハートビート、およびRRA XFFの設定との関係の誤解です。あなたの 'fre'値が実際に何であるかを教えてはいませんが、RRDの定義が正しくないことは明らかです。

ステップサイズは、RRDファイルの最小時間間隔です。デフォルトでは、これは300秒(5分)ですが、作成時に必要に応じて小さくまたは大きく指定できます。一般的には、これをデータサンプル間の予想時間に設定します。あなたのサンプルがおよそ5分ごとに来たら、これを5分に設定します。それらは不明とみなされる前に

ハートビートは、サンプル間の時間の最大量です。これはサンプルの不規則性の指標です。一般的には、これはの2倍のの予想サンプル間隔です。もしあなたのサンプルが5分ごとに来たら、600s(10min)に設定してください。これより大きい隙間があると、サンプル範囲に「不明」と表示されます。

XFFは、RRAのconsolodatedデータポイントを構成するDSデータポイントの割合であり、consolodatedデータポイントが未知になる前に不明である可能性があります。一般的には0.5に設定されますが、必要に応じて高く設定できます(たとえば0.9など)。あなたのRRAは1のconsolodation係数を使用しました。この場合、XFFは無関係ですが、要約を開始するときにはより重要です。

到着したデータサンプルのおおよその頻度であるfreに設定されていますので、「不明」以外のものとして保存されるのに十分なサンプルを十分に確保することはできません。 。 RRDはデータを正規化して保存し、データが到着すると内部的にレートに変換することに注意してください。これは、着信データがかなり規則的である必要があることを意味します。サンプル間隔に標準偏差が高い場合は、高いハートビートが必要で、多くの調整が行われます。

あなたのケースでは、RRDのステップサイズを60または300(いずれか小さい方がfre)に設定し、ハートビートを2*freに設定することをお勧めします。

関連する問題