welchen MQTT Broker nehmen? welche Datenbank?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
stonev
Beiträge: 16
Registriert: 10. Sep 2019 10:00

welchen MQTT Broker nehmen? welche Datenbank?

Beitrag von stonev »

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?

Benutzeravatar
udo1toni
Beiträge: 13955
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: welchen MQTT Broker nehmen? welche Datenbank?

Beitrag von udo1toni »

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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

stonev
Beiträge: 16
Registriert: 10. Sep 2019 10:00

Re: welchen MQTT Broker nehmen? welche Datenbank?

Beitrag von stonev »

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?

Benutzeravatar
udo1toni
Beiträge: 13955
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: welchen MQTT Broker nehmen? welche Datenbank?

Beitrag von udo1toni »

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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

stonev
Beiträge: 16
Registriert: 10. Sep 2019 10:00

Re: welchen MQTT Broker nehmen? welche Datenbank?

Beitrag von stonev »

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:

Code: Alles auswählen

cmnd/Gartenhaus/sensor29 9,on
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

Code: Alles auswählen

cmnd/Gartenhaus/sensor29
und ist der Payload.

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" ]
Irgendwie müsste ich ja mitteilen, dass die zu sendende Message nicht

Code: Alles auswählen

cmnd/Gartenhaus/sensor29 on
sondern

Code: Alles auswählen

cmnd/Gartenhaus/sensor29 9,on

lauten muss.

Benutzeravatar
udo1toni
Beiträge: 13955
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: welchen MQTT Broker nehmen? welche Datenbank?

Beitrag von udo1toni »

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?
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

stonev
Beiträge: 16
Registriert: 10. Sep 2019 10:00

Re: welchen MQTT Broker nehmen? welche Datenbank?

Beitrag von stonev »

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

Code: Alles auswählen

stateTopic="stat/Gartenhaus/RESULT"
nicht korrekt ausgelesen.

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"}}
Der Status wird zwar über das Topic

Code: Alles auswählen

stat/Gartenhaus/RESULT
zurückgemeldet, aber die Meldung sieht wie folgt aus:

Code: Alles auswählen

{"S29cmnd_D9":{"COMMAND":"OFF","STATE":"OFF"}}
Ich muss also wohl auch hier mit JSONPath den "State" von "S29cmnd_D9" irgendwie auslesen.
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" ]
...aber das funktioniert nicht. Nun schaltet das Licht erst gar nicht mehr. :(

Benutzeravatar
udo1toni
Beiträge: 13955
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: welchen MQTT Broker nehmen? welche Datenbank?

Beitrag von udo1toni »

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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

stonev
Beiträge: 16
Registriert: 10. Sep 2019 10:00

Re: welchen MQTT Broker nehmen? welche Datenbank?

Beitrag von stonev »

stonev hat geschrieben: 20. Sep 2019 21:44 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" ]
...aber das funktioniert nicht. Nun schaltet das Licht erst gar nicht mehr. :(
Ich habe am WE viel herumprobiert und am Ende stand die Erkenntnis:
==> 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!

Benutzeravatar
udo1toni
Beiträge: 13955
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: welchen MQTT Broker nehmen? welche Datenbank?

Beitrag von udo1toni »

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:

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>
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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten