Sensorlogger
Struktur der Konfigurationsdatei
Unten auf dieser Seite ist eine Beispielkonfiguration zu finden. Die Konfiguration geschieht über eine JSON-Datei, die sich in folgende Sektionen gliedert.
- general ist für allgemeine Einstellungen gedacht, wie z.B. die globale Logdatei für Statusmeldungen und Fehler.
- tinkerforge enthält die Konfiguration für die Verbindung mit dem Brick Daemon.
- mqtt enthält die Konfiguration für die Verbindungen mit MQTT-Brokern.
- homematic enthält die Konfiguration für die Verbindung mit der XML-API einer HomeMatic-CCU.
- sensors enthält die Beschreibung aller Sensoren, von denen Werte gesammelt werden. Es handelt sich hierbei um ein JSON-Array, das eine beliebige Anzahl von Sensor-Definitionsobjekten beinhalten kann.
- logbooks definiert Logbuch-Dateien und die dazu gehörenden Spalten (columns). Analog zur Sensorkonfiguration handelt es sich hier ebenfalls um JSON-Arrays, damit eine beliebige Anzahl von Logbüchern und zugehörigen Spalten definiert werden kann.
Es müssen nicht immer alle Parameter oder Sektionen in einer Konfigurationsdatei auftreten. Ist ein Parameter nicht relevant, kann er ausgelassen werden. Es wird dann ggf. der angegebene Standardwert verwendet.
Tip: JSON-Dateien können in Firefox geöffnet und deren Baumstruktur sichtbar gemacht werden. Außerdem werden syntaktische Fehler angezeigt.
Allgemeine Einstellungen
Der Abschnitt "general" in der Konfigurationsdatei kann die folgenden Einstellungen enthalten."general": { "logfile": "/home/username/sensorlogger.log", "loglevel": "info", "http_timeout": 20, "default_rest_period": {"value": 60, "unit": "s"}, "default_retry_time": {"value": 10, "unit": "s"} }
"logfile": Definiert den Pfad zur Logdatei für Status- und Fehlermeldungen. Kann ausgelassen oder auf null gesetzt werden, wenn keine Logdatei erwünscht ist.
Standardwert: null
"loglevel": Welche Art von Ereignissen im Logfile protokolliert werden soll. Die folgenden Werte sind möglich:
- "error" — Nur Fehlermeldungen protokollieren.
- "warning" — Fehlermeldungen und Warnungen protokollieren.
- "info" — Fehlermeldungen, Warnungen und Info-Nachrichten protokollieren.
- "debug" — Fehlermeldungen, Warnungen, Info- und Debug-Meldungen protokollieren.
Standardwert: "info"
"http_timeout": Timeout (in Sekunden) für HTTP-Anfragen.
Standardwert: 10
"default_rest_period": Standard-Ruhezeit für alle Sensoren, die keine eigene Ruhezeit definieren. Die Ruhezeit ist typischerweise die Zeit zwischen zwei Messungen, in der ein Sensor ruht. Der numerische Wert wird über "value" angegeben, die Einheit über "unit". Folgende Einheiten sind erlaubt: "ms", "s", "min", "h", "d".
Standardwert: 60 s
"default_retry_time": Standard-Wiederanlaufzeit für alle Sensoren, die keine eigene Wiederanlaufzeit definieren. Wenn ein Sensor nicht ausgelesen werden kann, wird der nächste Ausleseversuch nach der Wiederanlaufzeit unternommen (sofern sie kürzer ist als die Ruhezeit des Sensors). Der numerische Wert wird über "value" angegeben, die Einheit über "unit". Folgende Einheiten sind erlaubt: "ms", "s", "min", "h", "d".
Standardwert: 5 min
Beispielkonfiguration
Hier wird eine Konfigurationsdatei für folgendes Beispielszenario gezeigt.
- Eine Wetterstation draußen verfügt über zwei Tinkerforge-Sensoren, um die Außentemperatur und den Wind zu messen. Die Temperaturmessung erfolgt über ein Temperatur-Bricklet. Der Windmesser wird an ein IO-Bricklet an Kanal 0 angeschlossen und mit Hilfe des Sensorloggers alle Low-Zustände gezählt.
- Im Wohnzimmer befindet sich ein Temperatursensor, der seine Messwerte per MQTT an einen Broker schickt. Das entsprechende Topic wird vom Sensorlogger abonniert. Außerdem gibt es im Wohnzimmer einen HomeMatic-Feuchtigkeitssensor. Die entsprechenden Datenpunkte werden alle 2 Minuten über die XML-API der HomeMatic-Zentrale ausgelesen.
- Die Solaranlage wird über eine externe Anwendung ausgelesen und für die aktuellen Werte eine JSON-Datei angelegt. Der Wert für die aktuell erzeugte Leistung wird über die konfigurierte Schlüsselfolge aus der JSON-Datei im lokalen Dateisystem ausgelesen.
- Zwei Logbücher werden konfiguriert, eines für die Wetterstation und eines für das Haus. Für das Wetter wird alle 5 Minuten ein Logbucheintrag angelegt: jeweils für den aktuellen Temperatur-Mittelwert der letzten 15 Minuten, sowie für die Rotationsfrequenz des Windsensors (hier für die letzten 5 Minuten, die Standard-Zyklusdauer des Logbuchs). Für das Haus wird alle 15 Minuten die Wohnzimmertemperatur und -feuchte als Mittelwert der letzten 15 Minuten aufgezeichnet. Für die Solarleistung wird ebenfalls alle 15 Minuten der Durchschnitt und das Maximum der letzten 60 Minuten ermittelt und aufgezeichnet.
- Sowohl aktuelle Sensorwerte als auch die Ergebnisse der statistischen Auswertungen werden jeweils unter eigenen MQTT-Topics veröffentlicht und per HomeMatic XML-API die Werte für die Systemvariablen unter den angegebenen ISE-IDs gesetzt.
{ "general": { "logfile": "/home/username/sensorlogger.log", "loglevel": "info", "http_timeout": 20, "default_rest_period": {"value": 60, "unit": "s"}, "default_retry_time": {"value": 10, "unit": "s"} }, "tinkerforge": { "comment": "Connecting to the Brick Daemon, and error management.", "host": "192.168.1.2", "port": 4223, "max_bricklet_read_failures": 2, "max_brickd_restart_attempts": 3, "brickd_restart_command": null, "system_restart_command": null }, "mqtt": [ { "comment": "Connecting and communicating with the MQTT broker.", "host": "192.168.1.3", "port": 1883, "qos": 1, "retained": false, "connected_topic": "Sensorlogger/status", "connected_message": "online", "lwt_topic": "Sensorlogger/status", "lwt_message": "offline", "enable_publish": true, "enable_subscribe": true, "topic_domain": "" } ], "homematic": { "comment": "URL of your HomeMatic's XML API", "xmlapi_url": "http://192.168.1.4/config/xmlapi" }, "sensors": [ { "comment": "Tinkerforge sensor for outside temperature.", "sensor_id": "Weather/Temperature", "tinkerforge_uid": "z3L", "channel": 0, "factor": 1, "offset": -4, "counter": false, "trigger": "periodic", "rest_period": {"value": 60, "unit": "s"}, "retry_time": {"value": 30, "unit": "s"}, "mqtt_publish": "Weather/Temperature/current", "homematic_publish": "25484" }, { "comment": "Tinkerforge IO bricklet triggers count events whenever getting to low state.", "sensor_id": "Weather/Wind", "tinkerforge_uid": "9Ws", "channel": 0, "counter": true, "trigger": "low", "rest_period": {"value": 8, "unit": "ms"}, "io_debounce": {"value": 8, "unit": "ms"} }, { "comment": "MQTT sensor for the living room temperature.", "sensor_id": "House/Living_Room/Temperature", "mqtt_subscribe": "House/Living_Room/Temperature/current", "factor": 1, "offset": 0, "counter": false, "trigger": "periodic", "rest_period": {"value": 2, "unit": "min"}, "homematic_publish": "74633" }, { "comment": "HomeMatic sensor for the living room humidity.", "sensor_id": "House/Living_Room/Humidity", "homematic_subscribe": "94836", "factor": 1, "offset": 0, "counter": false, "trigger": "periodic", "rest_period": {"value": 2, "unit": "min"}, "retry_time": {"value": 30, "unit": "s"}, "mqtt_publish": "House/Living_Room/Humidity/current" }, { "comment": "Current solar power from local JSON file.", "sensor_id": "House/Solar/Power", "json_file": "/var/log/solar.json", "json_key": ["solar", "creation", "power"], "factor": 1, "offset": 0, "trigger": "periodic", "rest_period": {"value": 5, "unit": "s"}, "retry_time": {"value": 2, "unit": "s"}, "mqtt_publish": "House/Solar/Power/current", "homematic_publish": "23674" } ], "logbooks": [ { "filename": "weather.txt", "cycle_time": {"value": 5, "unit": "min"}, "max_entries": 288, "missing_data": "-", "columns": [ { "title": "Temperature 15 minute average", "unit": "°C", "sensor_id": "Weather/Temperature", "operation": "mean", "evaluation_period": {"value": 15, "unit": "min"}, "mqtt_publish": "Weather/Temperature/average15min", "homematic_publish": "83472" }, { "title": "Wind sensor rotation frequency", "unit": "Hz", "sensor_id": "Weather/Wind", "operation": "freq", "mqtt_publish": "Weather/Wind/average15min", "homematic_publish": "75653" } ] }, { "filename": "house.txt", "cycle_time": {"value": 15, "unit": "min"}, "max_entries": 48, "missing_data": "-", "columns": [ { "title": "Living room temperature", "unit": "°C", "sensor_id": "House/Living_Room/Temperature", "operation": "mean", "mqtt_publish": "House/Living_Room/Temperature/average15min", "homematic_publish": "23545" }, { "title": "Living room humidity", "unit": "%rel.", "sensor_id": "House/Living_Room/Humidity", "operation": "mean", "mqtt_publish": "House/Living_Room/Humidity/average15min", "homematic_publish": "12736" }, { "title": "Mean solar power (last 60 minutes)", "unit": "W", "sensor_id": "House/Solar/Power", "operation": "mean", "evaluation_period": {"value": 1, "unit": "h"}, "mqtt_publish": "House/Solar/Power/mean", "homematic_publish": "34653" }, { "title": "Peak solar power (last 60 minutes)", "unit": "W", "sensor_id": "House/Solar/Power", "operation": "max", "evaluation_period": {"value": 1, "unit": "h"}, "mqtt_publish": "House/Solar/Power/peak", "homematic_publish": "34654" } ] } ] }