Sensorlogger
Statistik & Logbücher
Statistische Auswertungen sind im Sensorlogger immer an die Spalten eines Logbuchs gebunden. Um eine statistische Auswertung durchzuführen, muss daher immer ein gedachtes Logbuch konfiguriert werden, egal, ob dieses letztlich tatsächlich in Form einer Datei geschrieben wird oder nicht.
Logbücher sind tab-getrennte Textdateien, in denen die gemessenen Werte zyklisch aufbereitet und aufgezeichnet werden. Es können beliebig viele Logbücher konfiguriert werden, mit unterschiedlichen Spalten, statistischen Operationen und Zyklusdauern. Ein sehr einfaches Beispiel für eine Logbuchdatei ist im Folgenden zu sehen. Hier werden die Werte alle 30 Minuten als Mittelwerte zusammengefasst.
# Time Temp [°C] Luftfeuchte [%RH] 2021-01-31 15:00:00 2.79615 65.0923 2021-01-31 15:30:00 1.182 70.46 2021-01-31 16:00:00 0.90467 75.36 2021-01-31 16:30:00 0.56 75.8733 2021-01-31 17:00:00 0.0286667 80.5067 2021-01-31 17:30:00 -0.499333 84.76 2021-01-31 18:00:00 -0.926 89.06 2021-01-31 18:30:00 -1.14067 89.1933
Logbücher konfigurieren
Bei dem Parameter logbooks in der Konfigurationsdatei des Sensorloggers handelt es sich immer um ein JSON-Array, das beliebig viele Logbuch-Definitionen aufnehmen kann.
"logbooks": [ ... { "filename": "/home/user/weather/weatherlog.txt", "cycle_time": {"value": 15, "unit": "min"}, "max_entries": 96, "missing_data": "-", "columns": [ ... ] }, ... ]
"filename": Gibt den Dateinamen für diese Logbuch-Datei an. Kann auf null gesetzt werden, wenn keine Datei erzeugt werden soll, aber die Statistik einzelner Spalten dennoch per MQTT verteilt oder an die HomeMatic-Zentrale gesendet werden soll.
Standardwert: null
"cycle_time": Dauer eines Messzyklus. Bitte beachten, dass die Messzyklusdauer einiges oberhalb der Auslese-Intervalldauer der Sensoren liegen sollte, damit Messwerte akkumuliert werden. Der numerische Wert wird über "value" angegeben, die Einheit über "unit". Folgende Einheiten sind erlaubt: "ms", "s", "min", "h", "d".
Standardwert: 15 min
"max_entries": Maximale Anzahl der Logbucheinträge. Wird die Zahl überschritten, werden die ältesten Einträge aus der Datei gelöscht.
Standardwert: 30
"missing_data": Zeichenkette, die für fehlende Einträge eingesetzt werden soll. Dies kann z.B. auftreten, wenn Sensoren nicht ausgelesen werden konnten oder die Ruhezeit der Sensoren größer ist als die Messzyklusdauer.
Standardwert: "-"
"columns": JSON-Array, in dem die einzelnen Spalten der Logdatei definiert werden. Siehe nächster Abschnitt.
Logbuch-Spalten
Bei "columns" (als Unterobjekt eines Logbuch-Objekts) handelt es sich immer um ein JSON-Array, das beliebig viele Spalten-Definitionen aufnehmen kann. Die erste Spalte eines jeden Logbuchs enthält das Datum und die Uhrzeit der Einträge. Alle weiteren Spalten werden hier konfiguriert.
"columns": [ ... { "title": "Temperatur", "unit": "°C", "sensor_id": "Wetterstation/Temperatur", "mqtt_publish": "Haus/Wetterstation/Temperatur/Mittelwert", "homematic_publish": "34572", "operation": "mean", "evaluation_period": {"value": 1, "unit": "h"}, "confidence_absolute": 10.0, }, { "title": "Luftfeuchte", "unit": "%rel", "sensor_id": "Wetterstation/Luftfeuchte", "mqtt_publish": "Haus/Wetterstation/Luftfeuchte/Median", "homematic_publish": "37856", "operation": "median", "confidence_sigma": 3.0 }, { "title": "Wind", "unit": "Hz", "sensor_id": "Wetterstation/Wind", "mqtt_publish": "Haus/Wetterstation/Wind/Frequenz", "homematic_publish": "22156", "operation": "freq", "count_factor": 0.5 }, ... ]
"title": Spaltentitel, wird in einer ersten Kommentar-Kopfzeile in die Logbuchdatei geschrieben.
"unit": Einheit der Größe. Steht in eckigen Klammern neben dem Spaltentitel in der Logbuchdatei.
Standardwert: null
"sensor_id": ID des Sensors, mit dessen Werten hier gearbeitet werden soll. Die ID ist eine Zeichenkette, die den Sensor eindeutig definiert und die vorher in der Sektion für die Sensoren festgelegt wurde.
"mqtt_publish": Topic, unter dem der statistisch ermittelte Wert per MQTT verteilt werden soll.
Standardwert: null
"homematic_publish": ISE-ID der Systemvariable, deren Wert auf den statistisch ermittelten Wert gesetzt werden soll.
Standardwert: null
"operation": Statistische Operation, die mit den über den vergangenen Messzyklus gesammelten Werten durchgeführt werden soll, um den Spalteneintrag zu berechnen. Die folgenden Angaben sind erlaubt:
- "mean" — Arithmetisches Mittel
- "median" — Medianwert
- "max" — Maximum
- "min" — Minimum
- "sum" — Summe
- "stddev" — Standardabweichung (RMSD) um das arithmetische Mittel
- "stddev_mean" — Standardabweichung (RMSD) um das arithmetische Mittel
- "stddev_median" — Standardabweichung (RMSD) um den Medianwert
- "count" — Anzahl der Messwerte, oder Anzahl der gezählten Impulse im Falle eines Impulszählers.
- "freq" — Frequenz der eingetroffenen Impulse oder Messwerte, in 1/s.
- "freq_min" — Minimal aufgetretene Frequenz, d.h. das Reziproke der maximal aufgetretenen Dauer zwischen zwei aufeinanderfolgenden Impulsen oder Messwerten. In 1/s.
- "freq_max" — Maximal aufgetretene Frequenz, d.h. das Reziproke der minimal aufgetretenen Dauer zwischen zwei aufeinanderfolgenden Impulsen oder Messwerten. In 1/s. Vorsicht: Impulse können nur anhand ihrer Eintreffzeit beim Sensorlogger verarbeitet werden. Der tatsächliche Zeitpunkt der Auslösung ist allerdings nicht bekannt. Wird der Brick Daemon auf einem anderen Rechner im Netzwerk betrieben als der Sensorlogger, können (schwankende) Netzwerklatenzen sensible Auswirkungen auf die Ermittlung der Minimal- und Maximalfrequenz haben, insbesondere bei sehr schnell aufeinander folgenden Impulsereignissen.
Standardwert: "mean"
"evaluation_period": Länge des Zeitraums, der zusammengefasst werden soll. Standardmäßig ist dies zwar die Dauer des Messzyklus des Logbuchs selbst, allerdings kann der Zeitraum hier erweitert oder verkürzt werden, und so beispielsweise auch gleitende Mittelwerte abgebildet werden. Der numerische Wert wird über "value" angegeben, die Einheit über "unit". Folgende Einheiten sind erlaubt: "ms", "s", "min", "h", "d".
Standardwert: null
"count_factor": Mit diesem Faktor wird die Anzahl der Werte des Impulszählers gewichtet. Er findet Anwendung bei den Operationen "count", "freq", "freq_min" und "freq_max". Im obigen Beispiel löst der Windmelder beispielsweise zweimal pro Umdrehung einen Impuls aus. Von Interesse ist allerdings die Rotationsfrequenz, daher wird hier die Impulsfrequenz mit dem Faktor 0,5 gewichtet.
Standardwert: 1
"confidence_absolute": Dieser Parameter kann verwendet werden, um Ausreißer in den Messwerten zu ignorieren, z.B. bei der Mittelwertbildung. Messwerte, die sich innerhalb des Messzyklus um mehr als den hier angegeben absoluten Wert a vom Medianwert μ entfernen, werden ausgeschlossen. Das heißt, wir definieren hier einen Vertrauensbereich μ±a, in dem alle zu verarbeitenden Messwerte des Messzyklus liegen müssen.
Der Parameter findet Anwendung bei den Operationen "mean", "median", "max", "min", "sum", "stddev", "stddev_mean" und "stddev_median". Wird dieser Parameter nicht angegeben oder auf 0 oder null gesetzt, finden alle gesammelten Werte Beachtung.
Standardwert: null
"confidence_sigma": Dieser Parameter kann verwendet werden, um einige wenige Ausreißer in den Messwerten zu ignorieren, z.B. bei der Mittelwertbildung. Er gibt die Größe des Vertrauensbereichs um den Medianwert an, in dem Messwerte beachtet werden. Werte außerhalb des Bereichs werden ignoriert. Sei μ der Medianwert aller Messwerte des Messzyklus und σ die Standardabweichung der Werte (d.h. die Wurzel der mittleren quadratischen Abweichung) vom Medianwert. Der hier festgelegte Parameter gibt nun einen Faktor f der Standardabweichung an, sodass alle Werte, die im Bereich μ±(f·σ) liegen, akzeptiert werden.
Zu beachten ist, dass Ausreißer die Standardabweichung σ je nach Gesamtzahl der Messwerte im Messzyklus enorm vergrößern können. Daher sollte der Faktor f hier nicht zu groß gewählt werden, weil die Ausreißer sonst schnell im Vertrauensbereich liegen können. Allerdings sollte f auch nicht zu klein gewählt werden, um nicht zu viele Werte zu eliminieren, insbesondere bei sich schnell verändernden Größen.
In bestimmten Fällen kann es passieren, dass hierdurch alle Messwerte eliminiert werden, z.B. wenn der Bereich zu eng gewählt wird. In diesem Fall wird der Medianwert als einziger Repräsentant der Messwerte verwendet. Dies würde sich nicht unbedingt negativ auf Mittelungen auswirken, aber für die Bildung von Summen, Minima, Maxima und Standardabweichungen ist es kontraproduktiv.
Um ein Gefühl hierfür zu bekommen, können parallel zu einer Spalte mit angewendetem Vertrauensbereich Spalten erzeugt werden, wo kein Vertrauensbereich Anwendung findet oder wo die jeweilige Standardabweichung vom Median aufgelistet wird.
Der Parameter findet Anwendung bei den Operationen "mean", "median", "max", "min", "sum", "stddev", "stddev_mean" und "stddev_median". Wird dieser Parameter nicht angegeben oder auf 0 oder null gesetzt, finden alle gesammelten Werte Beachtung.
Falls definiert, wird diese Methode angewendet anstatt der Methode, Werte aufgrund einer absoluten Medianabweichung auszusortieren (siehe letzter Punkt).
Standardwert: null