MQTT Werte True/False in InfluxDB speichern
Einleitung
Die Integration von MQTT-Daten in InfluxDB ist ein häufiges Szenario in der Smart-Home- und IoT-Entwicklung. Insbesondere die Umwandlung von booleschen Werten (True/False) in numerische Werte (1/0) ist entscheidend, um die Daten korrekt in einer Zeitreihe zu speichern. Dieser Artikel behandelt die Problematik und bietet eine Lösung zur direkten Umwandlung von MQTT-Werten in ein für InfluxDB geeignetes Format.
Problem
Ein Benutzer hat Schwierigkeiten, die von einem Sensor über MQTT gesendeten booleschen Werte (True/False) in InfluxDB zu speichern. Die InfluxDB erwartet numerische Werte (1 für True und 0 für False), was zu einem Problem führt, da die empfangenen Werte nicht in das erforderliche Format umgewandelt werden. Der Benutzer hat bereits Erfahrung mit MariaDB, wo die Speicherung problemlos funktionierte, und fragt sich, ob es möglich ist, eine Umwandlung direkt im MQTT-Sensor zu implementieren.
Lösung
Um die booleschen Werte von MQTT in numerische Werte für InfluxDB zu konvertieren, kann ein value_template
im MQTT-Sensor verwendet werden. Dieses Template ermöglicht es, die empfangenen Werte direkt zu transformieren, bevor sie in die Datenbank geschrieben werden. Hier ist ein Beispiel, wie der Sensor konfiguriert werden kann:
mqtt:
sensor:
- name: "ESP8266-05 - Get Sensor 2"
unique_id: "ESP8266-05-mqtt.Get_Sensor_2"
state_topic: "dein-MQTT-Topic"
value_template: "{{ 1 if value == 'True' else 0 if value == 'False' else None }}"
In diesem Beispiel wird der Wert des Sensors überprüft: Wenn der Wert 'True' ist, wird 1 zurückgegeben; wenn der Wert 'False' ist, wird 0 zurückgegeben. Andernfalls wird None
zurückgegeben, was bedeutet, dass kein Wert vorhanden ist.
Schritte zur Umsetzung
1. Öffne die Konfigurationsdatei deines MQTT-Setups (z.B. configuration.yaml
).
2. Füge den MQTT-Sensor mit dem entsprechenden value_template
hinzu.
3. Stelle sicher, dass das state_topic
korrekt auf das MQTT-Topic verweist, von dem die Daten empfangen werden.
4. Speichere die Änderungen und starte den MQTT-Server neu, um die Konfiguration zu übernehmen.
5. Überprüfe die InfluxDB, um sicherzustellen, dass die Werte korrekt gespeichert werden.
Hintergrundwissen
MQTT (Message Queuing Telemetry Transport) ist ein leichtgewichtiges Protokoll für die Nachrichtenübertragung, das häufig in IoT-Anwendungen verwendet wird. InfluxDB ist eine Zeitreihendatenbank, die für die Speicherung und Analyse von Zeitstempeldaten optimiert ist. Die Umwandlung von booleschen Werten in numerische Werte ist notwendig, da InfluxDB keine booleschen Datentypen unterstützt.
Typische Fehler, die bei der Konfiguration auftreten können, sind:
- Falsches state_topic
, was dazu führt, dass keine Daten empfangen werden.
- Syntaxfehler im value_template
, die zu unerwarteten Ergebnissen führen können.
Zusätzliche Infos
Funktion | Erklärung |
---|---|
`state_topic` | Das MQTT-Topic, von dem der Sensor die Daten empfängt. |
`value_template` | Ein Template, das die empfangenen Werte in ein gewünschtes Format umwandelt. |
`unique_id` | Eine eindeutige Kennung für den Sensor, um Kollisionen zu vermeiden. |
Hinweise & Best Practices
- Teste die Konfiguration in einer Entwicklungsumgebung, bevor du sie in einer Produktionsumgebung einsetzt.
- Überwache die Logs des MQTT-Brokers und der InfluxDB, um sicherzustellen, dass keine Fehler auftreten.
- Berücksichtige die Verwendung von None
im Template, um sicherzustellen, dass keine falschen Daten in die Datenbank geschrieben werden.
- Halte die MQTT- und InfluxDB-Dokumentation bereit, um bei Bedarf auf spezifische Konfigurationsdetails zugreifen zu können.