SVG Plot Daten reduzieren

Begonnen von Spartacus, 06 November 2014, 22:36:46

Vorheriges Thema - Nächstes Thema

Spartacus

Hallo,
ich suche nach einer Möglichkeit, die Daten für die SVG-Plots einzuschränken.

Die Temperaturwerte eines Sensors werden alle 10min erfasst. Dass ist auch notwendig um Aktoren entsprechend zu steuern. Allerdings erzeugt dies im Logfile jede Menge Daten. Für die Langzeit-Anzeige bzw. den Temperatur-Trend reicht es aus, nur stündliche Werte für die Berechnung heranzuziehen. Das würde dann auch nicht so stark auf die Rechenleistung des rpi gehen (der geht bei großen Logfiles ziemlich in die Knie).

Man könnte jetzt ein at definieren, welches jede Stunde die Readings in separates Logfile schreibt, welches dann zur Anzeige benutzt wird. Hat jemand eine bessere Idee? Kann man das auch irgendwie einfacher lösen?

Spartacus.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Puschel74

addLog
event-on-change-reading
Wofür gibt es das Wiki und die comamdref??
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Spartacus

#2
Hi puschel,
Habe vielleicht die Situation nicht richtig beschrieben:

Das event-on-change reading steht auf 600s, damit die Lacrosse-Sensoren nicht jede Sekunde Daten liefern. Wenn ich das hier direkt auf 3600 s einschränkte werden die Werte zur Ansteuerung der Heizung zu ungenau. Zusätzlich werden die Daten noch per clonedummy auf einen anderen fhem Rechner übertragen. Der Zielrechner verarbeitet dann diese Daten und schreibt sie in das logfile. Wenn ich jetzt das clonedummy device wiederum mit event-on-change eingrenze, dann habe ich das gleiche Problem, ich hatte in den Readings nur stündliche Daten, die meine Heizung im Überwinterungslager meine Bananen steuern. Und das ist deutlich zu ungenau, da ich hier max. Auf 1 Grad aufheize, wenn die Temperatur unter 0,5 Grad sinkt.

Deshalb suche ich eine Lösung, einer Langzeitaufzeichnung mit deutlich reduziertem Datenvolumen für den SVG-Plot.


Oder kann man ein event-on-change auch auf das logfile direkt setzen? Das würde dann ja gehen. Schaue ich mir mal an....

Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

zohaa3492

Kennt sonst niemand das Problem beim Herauszoomen?

Puschel74

Zitat von: zohaa3492 am 07 November 2014, 13:42:02
Kennt sonst niemand das Problem beim Herauszoomen?
Falscher Beitrag.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Hollo

#5
Zitat von: Spartacus am 07 November 2014, 07:46:08...
Das event-on-change reading steht auf 600s, damit die Lacrosse-Sensoren nicht jede Sekunde Daten liefern. Wenn ich das hier direkt auf 3600 s einschränkte werden die Werte zur Ansteuerung der Heizung zu ungenau...
Dem Sensor ist die Einstellung egal, der sendet weiter wie gehabt alle paar Sekunden.
Fhem empfängt auch alles und aktualisiert entsprechend die Readings!

Womit steuerst Du, wofür benötigst Du ein Event?
Event brauchst Du für alles was Du triggern oder loggen willst.

Beispiel:
Für die Anzeige der Außenwerte auf dem Tablet nutze ich das temperature-/humidity-Reading; ist also immer aktuell.
Events habe ich auf alle 10 Minuten (temperature, humidity, state) bzw. jede Stunde (battery) beschränkt; event-min-interval.
Im Logfile selbst wird nur state abgespeichert.

So bleibt das Log schlanker, ich habe regelmäßige Events zum Triggern (z.B. battery notify), und aktuelle Werte zum Anzeigen und Rechnen.


Attributes:
   IODev      myJeeLink
   alias      Außensensor
   event-min-interval state:300,temperature:300,humidity:300,battery:3600
   group      Wetter
   room       Umwelt

FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

Spartacus

#6
Zitat von: Hollo am 07 November 2014, 14:29:39
Dem Sensor ist die Einstellung egal, der sendet weiter wie gehabt alle paar Sekunden.
Fhem empfängt auch alles und aktualisiert entsprechend die Readings!

Womit steuerst Du, wofür benötigst Du ein Event?
Event brauchst Du für alles was Du triggern oder loggen willst.

Beispiel:
Für die Anzeige der Außenwerte auf dem Tablet nutze ich das temperature-/humidity-Reading; ist also immer aktuell.
Events habe ich auf alle 10 Minuten (temperature, humidity, state) bzw. jede Stunde (battery) beschränkt; event-min-interval.
Im Logfile selbst wird nur state abgespeichert.

So bleibt das Log schlanker, ich habe regelmäßige Events zum Triggern (z.B. battery notify), und aktuelle Werte zum Anzeigen und Rechnen.


Attributes:
   IODev      myJeeLink
   alias      Außensensor
   event-min-interval state:300,temperature:300,humidity:300,battery:3600
   group      Wetter
   room       Umwelt


Hallo Hollo,
ok, verstehe! Du hast alle 10min (wobei 300s nur 5min sind!) ein Event auf das Du reagieren kannst und schreibts alle 10min "State" in das Logfile. Das wertest Du dann, zum Beispiel, grafisch aus.

Wenn ich es richtig verstehe, könnte man jetzt das event-min-interval wie folgt abändern:
event-min-interval state:3600,temperature:600,humidity:600,battery:3600

Dann würde man das Logfile nur jede Stunde beschreiben, wenn man state auf 3600 abändert, richtig?
Spartacus.

NACHTRAG:
Ich lasse jetzt mit stateFormat STATE wie im Bildchen unten anzeigen. Wie kann ich das denn ins Logfile schreiben? denn STATE ist ja nicht gleich state!
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

Hollo

#7
Zitat von: Spartacus am 07 November 2014, 14:58:11
Hallo Hollo,
ok, verstehe! Du hast alle 10min (wobei 300s nur 5min sind!) ein Event auf das Du reagieren kannst und schreibts alle 10min "State" in das Logfile. Das wertest Du dann, zum Beispiel, grafisch aus.

Wenn ich es richtig verstehe, könnte man jetzt das event-min-interval wie folgt abändern:
event-min-interval state:3600,temperature:600,humidity:600,battery:3600

Dann würde man das Logfile nur jede Stunde beschreiben, wenn man state auf 3600 abändert, richtig?
Spartacus.

NACHTRAG:
Ich lasse jetzt mit stateFormat STATE wie im Bildchen unten anzeigen. Wie kann ich das denn ins Logfile schreiben? denn STATE ist ja nicht gleich state!
Sorry, mein Fehler; ich hatte vorher 10 Minuten und hab das dann auf 5 Minuten geändert.

Das bedeutet, mindestens ungefähr alle 5 Minuten (bzw. stündlich bei battery) kommt ein Event. Das könnte ich für irgendwas nutzen.
Das Log brauche ich nur für den Plot, in der Definition des FileLog des Sensors habe dann definiert, was ich da rein haben will.

List FileLog_Sensor_02:
Internals:
   CFGFN      /opt/fhem/FHEM/dienste.cfg
   DEF        ./log/Sensor_02-%Y.log Sensor_02:T:.*
   NAME       FileLog_Sensor_02
   NOTIFYDEV  Sensor_02
   NR         156
   NTFY_ORDER 50-FileLog_Sensor_02
   REGEXP     Sensor_02:T:.*
   STATE      active
   TYPE       FileLog
   currentlogfile ./log/Sensor_02-2014.log
   logfile    ./log/Sensor_02-%Y.log
   Pos:
Attributes:
   logtype    temp4hum6:Temp/Hum,text
   room       LaCrosse

damit übernehme ich also aus den Events die Einträge des Sensors, die mit T: beginnen; was dem state (mit Temp und Luftfeuchtigkeit) entspricht.

Das sieht dann im Ergebnis so aus:

...
2014-11-07_15:26:39 Sensor_02 T: 9 H: 72
2014-11-07_15:31:39 Sensor_02 T: 9 H: 73
2014-11-07_15:36:40 Sensor_02 T: 9 H: 73
2014-11-07_15:41:41 Sensor_02 T: 8.8 H: 73
2014-11-07_15:46:59 Sensor_02 T: 8.7 H: 73
2014-11-07_15:52:04 Sensor_02 T: 8.6 H: 73

Somit habe ich relativ wenige aber regelmäßige Einträge, unabhängig von Änderung oder nicht; Resultat ist eine recht saubere Grafik.

Tipp:
Wenn Du etwas änderst, lass es erstmal eine Zeit lang laufen.
Ich habe beim Probieren oft komische Zeitdifferenzen und zersemmelte Grafiken gehabt, weil ich einfach zu ungeduldig war.
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

Spartacus

Hallo,
Besten Dank für die Antwort. Ich habe das jetzt so gelöst:

attr <Device> userReading all {sprintf("T: %.1f H: %.1f D: %.1f A: %.1f", ReadingsVal("$name","temperature",0), ReadingsVal("$name","humidity",0), ReadingsVal("$name","dewpoint",0), ReadingsVal("$name","absFeuchte",0))}
Damit lege ich mir ein benutzerdefiniertes Reading an.

Über
event-min-interval: all:3600,battery:600,humidity:600,state:600,temperature:600,dewpoint:600
event-on-change-reading: all,humidity,state,temperature,dewpoint

steure ich nun die Event-Intervalle. Die 10min-Events werte ich für die Anzeige in einer readingsGroup aus und steure Aktoren an.
Mit dem "all"-Event schreibe ich die Werte ins Logfile.

Das Logfile schreibt nun jede Stunde folgende Zeile:
2014-11-07_17:11:13 TX29D_Innen all: T: 9.6 H: 77.0 D: 5.8 A: 7.1
Das benutze ich dann für mein Diagramm.
Christian
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R