welchen MQTT Broker nehmen? welche Datenbank?
-
- Beiträge: 16
- Registriert: 10. Sep 2019 10:00
welchen MQTT Broker nehmen? welche Datenbank?
Hallo,
ich muss mich für einen MQTT Broker und eine Datenbank (Sensordaten) entscheiden.
Gibt es Vor-/ Nachteile des in Openhab2 installierbaren MQTT Broker Moquette im Vergleich zu Mosquitto?
MySQL oder influxDB?
Was wäre euer jeweiliger Favorit?
ich muss mich für einen MQTT Broker und eine Datenbank (Sensordaten) entscheiden.
Gibt es Vor-/ Nachteile des in Openhab2 installierbaren MQTT Broker Moquette im Vergleich zu Mosquitto?
MySQL oder influxDB?
Was wäre euer jeweiliger Favorit?
- udo1toni
- Beiträge: 13955
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: welchen MQTT Broker nehmen? welche Datenbank?
Bei der Datenbank kommt es klar darauf an, was Du weiter mit den Daten anstellen willst, und natürlich wie deine persönlichen Vorlieben gelagert sind.
MySQL oder MariaDB sind weit verbreitet und es gibt jede Menge Doku dazu. Mit HeidiSQL steht auch ein mächtiges Tool zur Wartung zur Verfügung, alternativ kann man aber natürlich auch mit einem Webserver phpMyAdmin laufen lassen.
InfluxDB hat allerdings auch gute Tools im Angebot, nur sind die halt nicht so verbreitet und entsprechend ist es etwas mühsamer, Informationen zusammenzutragen.
Grafana kann mit beiden Datenbanken umgehen, InfluxDB ist auf hohes Tempo optimiert, ob man das tatsächlich spürt, kann ich aber nicht beurteilen.
Beim MQTT Broker scheiden sich vermutlich die Geister. mosquitto kannst Du standalone installieren, der läuft also im Zweifel auch weiter, wenn Du openHAB mal neu startest (nur openHAB, nicht den Rechner natürlich). Moquette ist dafür super bequem zu installieren, direkt aus Paper UI heraus. Funktionieren tun sie beide, mir wäre jedenfalls nichts bekannt, dass einer von beiden größere Probleme hat.
Vielleicht könnte man noch schauen, ob einer der beiden merklich schneller ist als der andere, aber auch da habe ich keine Daten vorliegen.
MySQL oder MariaDB sind weit verbreitet und es gibt jede Menge Doku dazu. Mit HeidiSQL steht auch ein mächtiges Tool zur Wartung zur Verfügung, alternativ kann man aber natürlich auch mit einem Webserver phpMyAdmin laufen lassen.
InfluxDB hat allerdings auch gute Tools im Angebot, nur sind die halt nicht so verbreitet und entsprechend ist es etwas mühsamer, Informationen zusammenzutragen.
Grafana kann mit beiden Datenbanken umgehen, InfluxDB ist auf hohes Tempo optimiert, ob man das tatsächlich spürt, kann ich aber nicht beurteilen.
Beim MQTT Broker scheiden sich vermutlich die Geister. mosquitto kannst Du standalone installieren, der läuft also im Zweifel auch weiter, wenn Du openHAB mal neu startest (nur openHAB, nicht den Rechner natürlich). Moquette ist dafür super bequem zu installieren, direkt aus Paper UI heraus. Funktionieren tun sie beide, mir wäre jedenfalls nichts bekannt, dass einer von beiden größere Probleme hat.
Vielleicht könnte man noch schauen, ob einer der beiden merklich schneller ist als der andere, aber auch da habe ich keine Daten vorliegen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 16
- Registriert: 10. Sep 2019 10:00
Re: welchen MQTT Broker nehmen? welche Datenbank?
Danke für deine Einschätzung.
Ich habe jetzt den Moquette installiert und schau mir das mal an.
Bei den Datenbanken bin ich noch unschlüssig. Grundsätzlich tendiere ich zu influxDB, weil die eigentlich für solche Sachen gemacht ist. Es sollen ja nur ein paar Sensordaten gesammelt werden. Wichtig wäre nur, dass man Datenmengen begrenzen kann und z. B. alles älter als 1 bis 2 Jahre autom. löschen kann - da es sich sonst ja nur aufbläht.
By the way:
Ich habe jetzt MQTT Broker und Things erstmal über PaperUI eingerichtet. Eigentlich habe ich alles andere per VS als Datei geschrieben und würde das gern auch fortsetzen.
PaperUI schreibt die Konfiguration aber nicht in die *.things oder *.items Datei. Wohin aber dann? Kann man aus dieser Quelle nicht coppy/paste die *.things oder *.items Datein füttern?
Ich habe jetzt den Moquette installiert und schau mir das mal an.
Bei den Datenbanken bin ich noch unschlüssig. Grundsätzlich tendiere ich zu influxDB, weil die eigentlich für solche Sachen gemacht ist. Es sollen ja nur ein paar Sensordaten gesammelt werden. Wichtig wäre nur, dass man Datenmengen begrenzen kann und z. B. alles älter als 1 bis 2 Jahre autom. löschen kann - da es sich sonst ja nur aufbläht.
By the way:
Ich habe jetzt MQTT Broker und Things erstmal über PaperUI eingerichtet. Eigentlich habe ich alles andere per VS als Datei geschrieben und würde das gern auch fortsetzen.
PaperUI schreibt die Konfiguration aber nicht in die *.things oder *.items Datei. Wohin aber dann? Kann man aus dieser Quelle nicht coppy/paste die *.things oder *.items Datein füttern?
- udo1toni
- Beiträge: 13955
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: welchen MQTT Broker nehmen? welche Datenbank?
Paper UI (oder besser gesagt die openHAB API) schreibt die Konfiguration in eine JSON Datei, das Format hat dabei nichts mit dem der *.items oder *.things Dateien zu tun.
Trotzdem kann das JSON interessant sein, weil dort alle Schlüsselworte so drin stehen, wie sie in den Things Dateien gebraucht werden.
Einen Auszug aus den JSON Daten bekommt man bequem über die REST API, die Datei selbst sollte man besser nicht anfassen, insbesondere sollte man dort keine Änderungen vornehmen, wenn man nicht sehr genau weiß, was man da tut.
Speziell bei mqtt ist die Information, wie die Things Dateien aussehen müssen, etwas versteckt, weil der Autor diese Informationen in separaten Dateien gespeichert hat, die Mechanismen, die für die Dokumentation zuständig sind, aber nur jeweils eine Datei verwenden (die readme.md). Du findest die Dokumentation in diesem Fall nur in github.
Dies ist der Teil für den Broker:
https://github.com/openhab/openhab2-add ... xamples.md
Und dies der Teil für die Things (mitsamt dem Broker Teil):
https://github.com/openhab/openhab2-add ... xamples.md
Dabei muss man unbedingt den feinen Unterschied zwischen demo1.things und demo2.things verstehen.
In der 1. Datei sind alle Things als "Kinder" unterhalb der Bridge angelegt, was bedeutet, dass sie zwingend auch in der gleichen Datei stehen müssen.
In der 2. Datei sind alle Things unabhängig von der Bridge angelegt, dafür muss aber bei jedem Thing ein extra Verweis angegeben werden.
InfluxDB hat sogenannte Retention Policies, worüber genau definiert werden kann, wie lange Daten aufgehoben werden sollen. Wenn man z.B. eine Retention Policy 1 Jahr erstellt, so werden die Daten, die älter als ein Jahr sind, laufend automatisch gelöscht.
Trotzdem kann das JSON interessant sein, weil dort alle Schlüsselworte so drin stehen, wie sie in den Things Dateien gebraucht werden.
Einen Auszug aus den JSON Daten bekommt man bequem über die REST API, die Datei selbst sollte man besser nicht anfassen, insbesondere sollte man dort keine Änderungen vornehmen, wenn man nicht sehr genau weiß, was man da tut.
Speziell bei mqtt ist die Information, wie die Things Dateien aussehen müssen, etwas versteckt, weil der Autor diese Informationen in separaten Dateien gespeichert hat, die Mechanismen, die für die Dokumentation zuständig sind, aber nur jeweils eine Datei verwenden (die readme.md). Du findest die Dokumentation in diesem Fall nur in github.
Dies ist der Teil für den Broker:
https://github.com/openhab/openhab2-add ... xamples.md
Und dies der Teil für die Things (mitsamt dem Broker Teil):
https://github.com/openhab/openhab2-add ... xamples.md
Dabei muss man unbedingt den feinen Unterschied zwischen demo1.things und demo2.things verstehen.
In der 1. Datei sind alle Things als "Kinder" unterhalb der Bridge angelegt, was bedeutet, dass sie zwingend auch in der gleichen Datei stehen müssen.
In der 2. Datei sind alle Things unabhängig von der Bridge angelegt, dafür muss aber bei jedem Thing ein extra Verweis angegeben werden.
InfluxDB hat sogenannte Retention Policies, worüber genau definiert werden kann, wie lange Daten aufgehoben werden sollen. Wenn man z.B. eine Retention Policy 1 Jahr erstellt, so werden die Daten, die älter als ein Jahr sind, laufend automatisch gelöscht.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 16
- Registriert: 10. Sep 2019 10:00
Re: welchen MQTT Broker nehmen? welche Datenbank?
Vielen Dank, ich bin schon einiges weiter gekommen.
Eines ist mir noch unklar (owohl hier offtopic):
Ich habe einen ESP8266 mit Tasmota geflasht. Daran hängt ein MCP23017 Portexpander als Output. Alles funktioniert.
Wenn ich über MQTT folgende Nachricht publishe, schaltet Kanal 9 des MCP auch ganz braf:
Sensor29 steht für den MCP, die 9 ist der Outputkanal.
Wie bilde ich das nun als Channel ab? Ich gehe davon aus, das CommandTopic lautet
und
ist der Payload.
Wäre das so richtig?
Irgendwie müsste ich ja mitteilen, dass die zu sendende Message nicht
sondern
lauten muss.
Eines ist mir noch unklar (owohl hier offtopic):
Ich habe einen ESP8266 mit Tasmota geflasht. Daran hängt ein MCP23017 Portexpander als Output. Alles funktioniert.
Wenn ich über MQTT folgende Nachricht publishe, schaltet Kanal 9 des MCP auch ganz braf:
Code: Alles auswählen
cmnd/Gartenhaus/sensor29 9,on
Wie bilde ich das nun als Channel ab? Ich gehe davon aus, das CommandTopic lautet
Code: Alles auswählen
cmnd/Gartenhaus/sensor29
Code: Alles auswählen
9,on
Wäre das so richtig?
Code: Alles auswählen
Type switch : ch9 "Schalter" [ stateTopic="stat/Gartenhaus/RESULT", commandTopic="cmnd/Gartenhaus/sensor29", on="9,on", off="9,off" ]
Code: Alles auswählen
cmnd/Gartenhaus/sensor29 on
Code: Alles auswählen
cmnd/Gartenhaus/sensor29 9,on
lauten muss.
- udo1toni
- Beiträge: 13955
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: welchen MQTT Broker nehmen? welche Datenbank?
Sowas habe ich noch nicht benutzt, aber ich gehe mal davon aus, dass das so schon passen wird.
Auf der anderen Seite hast Du ja nur ein Topic, aber jede Menge mögliche Befehle.
Wie bekommst Du den Status von MQTT?
Auf der anderen Seite hast Du ja nur ein Topic, aber jede Menge mögliche Befehle.
Wie bekommst Du den Status von MQTT?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 16
- Registriert: 10. Sep 2019 10:00
Re: welchen MQTT Broker nehmen? welche Datenbank?
Ich habe es gerade probiert. Das Vertrauen in meine Überlegungen wahr wohl zu gering - es funktioniert tatsächlich auf Anhieb.
Aber: Der Status wird mit
nicht korrekt ausgelesen.
Im Log steht:
Der Status wird zwar über das Topic
zurückgemeldet, aber die Meldung sieht wie folgt aus:
Ich muss also wohl auch hier mit JSONPath den "State" von "S29cmnd_D9" irgendwie auslesen.
Dachte so:
...aber das funktioniert nicht. Nun schaltet das Licht erst gar nicht mehr.
Aber: Der Status wird mit
Code: Alles auswählen
stateTopic="stat/Gartenhaus/RESULT"
Im Log steht:
Code: Alles auswählen
2019-09-20 21:14:19.539 [WARN ] [eneric.internal.generic.ChannelState] - Command '{"S29cmnd_D9":{"COMMAND":"ON","STATE":"ON"}}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"S29cmnd_D9":{"COMMAND":"ON","STATE":"ON"}}
2019-09-20 21:15:08.238 [WARN ] [eneric.internal.generic.ChannelState] - Command '{"S29cmnd_D9":{"COMMAND":"OFF","STATE":"OFF"}}' not supported by type 'OnOffValue': No enum constant org.eclipse.smarthome.core.library.types.OnOffType.{"S29cmnd_D9":{"COMMAND":"OFF","STATE":"OFF"}}
Code: Alles auswählen
stat/Gartenhaus/RESULT
Code: Alles auswählen
{"S29cmnd_D9":{"COMMAND":"OFF","STATE":"OFF"}}
Dachte so:
Code: Alles auswählen
Type switch : ch2 "Schalter Licht" [ stateTopic="stat/Gartenhaus/RESULT", transformationPattern="JSONPATH:$.S29cmnd_D9.STATE", commandTopic="cmnd/Gartenhaus/sensor29", on="9,on", off="9,off" ]
- udo1toni
- Beiträge: 13955
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: welchen MQTT Broker nehmen? welche Datenbank?
Leg mal das stateTopic als separaten Channel an, einfach, um zu sehen, ob es dann funktioniert.
Eventuell wäre es ohnehin sinnvoll, die beiden Wege zu trennen, immerhin kanst Du über ein und dasselbe Topic immer nur eine Botschaft zur selben Zeit senden. Es böte sich also an, ein String Item zu verwenden und per Rule immer den passenden String zu senden, wenn das entsprechende Item geschaltet wurde.
Eventuell wäre es ohnehin sinnvoll, die beiden Wege zu trennen, immerhin kanst Du über ein und dasselbe Topic immer nur eine Botschaft zur selben Zeit senden. Es böte sich also an, ein String Item zu verwenden und per Rule immer den passenden String zu senden, wenn das entsprechende Item geschaltet wurde.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 16
- Registriert: 10. Sep 2019 10:00
Re: welchen MQTT Broker nehmen? welche Datenbank?
Ich habe am WE viel herumprobiert und am Ende stand die Erkenntnis:stonev hat geschrieben: ↑20. Sep 2019 21:44 Dachte so:...aber das funktioniert nicht. Nun schaltet das Licht erst gar nicht mehr.Code: Alles auswählen
Type switch : ch2 "Schalter Licht" [ stateTopic="stat/Gartenhaus/RESULT", transformationPattern="JSONPATH:$.S29cmnd_D9.STATE", commandTopic="cmnd/Gartenhaus/sensor29", on="9,on", off="9,off" ]
==> Openhab will nach Änderungen gerne auch mal neu gestartet werden!
Oben genannte Lösung funktioniert hervorragend. Status kommt in Openhab auch an, wenn der Switch außerhalb von Openhab geschaltet wird.
Sicherlich ist unglücklich, dass Tasmota - hier insbesondere bei der Einbung des MCP23017 - vieles über die gleichen Topics sendet. Aber das gehört woanders hin.
Danke für deine Hilfe!
- udo1toni
- Beiträge: 13955
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: welchen MQTT Broker nehmen? welche Datenbank?
Super! Die Sache mit dem Neustart... das entfällt mir immer...
Ein Neustart ist übrigens nicht unbedingt notwendig, es reicht auch, das betreffende Addon mittels Karaf Konsole neu zu starten. In diesem Fall also:
Dadurch wird auch das neu Einlesen der entsprechenden Dateien erzwungen. Der Restart eines Bundles dauert nur Bruchteile von Sekunden
Wie man erkennen kann, handelt es sich im Beispiel um eine alte Nightly Version. Im aktuellen Milestone Build (OH2.5M3) ist der Name ein anderer, da der Namensraum eclipse nach openhab migriert wurde. Die Karaf Konsole bietet an dieser Stelle (leider nicht überall) Autovervollständigung, so dass man relativ schnell den korrekten Namen zusammensuchen kann.
Das Problem sollte außerdem eigentlich in OH2.5M3 gefixt sein, da ich momentan kein Testsystem habe, kann ich das aber nicht sicher bestätigen.
Ein Neustart ist übrigens nicht unbedingt notwendig, es reicht auch, das betreffende Addon mittels Karaf Konsole neu zu starten. In diesem Fall also:
Code: Alles auswählen
openhabian@openhab2:~$ openhab-cli console
Logging in as openhab
__ _____ ____
____ ____ ___ ____ / / / / | / __ )
/ __ \/ __ \/ _ \/ __ \/ /_/ / /| | / __ |
/ /_/ / /_/ / __/ / / / __ / ___ |/ /_/ /
\____/ .___/\___/_/ /_/_/ /_/_/ |_/_____/
/_/ 2.5.0-SNAPSHOT
Build #1502
Hit '<tab>' for a list of available commands
and '[cmd] --help' for help on a specific command.
Hit '<ctrl-d>' or type 'system:shutdown' or 'logout' to shutdown openHAB.
openhab> bundle:restart org.eclipse.smarthome.binding.mqtt.generic
openhab>
Wie man erkennen kann, handelt es sich im Beispiel um eine alte Nightly Version. Im aktuellen Milestone Build (OH2.5M3) ist der Name ein anderer, da der Namensraum eclipse nach openhab migriert wurde. Die Karaf Konsole bietet an dieser Stelle (leider nicht überall) Autovervollständigung, so dass man relativ schnell den korrekten Namen zusammensuchen kann.
Das Problem sollte außerdem eigentlich in OH2.5M3 gefixt sein, da ich momentan kein Testsystem habe, kann ich das aber nicht sicher bestätigen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet