NEWS
MQTT Schwierigkeiten mit verschiedenen Adaptern
-
...........................................
-
@stefan247
Fehlt irgendwie ein Broker der den Datenverkehr regelt.
-
.................................
-
@stefan247
Laufen die Instanzen unter unterschiedlichen Ports? Standardmäßig sind beide auf Port 1883 eingestellt. Falls ja, eine von den Adapterinstanzen auf einen anderen Port (z.B. 1886) umstellen. Dann die gewählte Portnummer ebenfalls in der Tasmota oder Shelly GUI umstellen...
-
.....................................
-
@stefan247
Jede Adapter-Instanz, die ein Pseudo MQTT durchführt "muss" einen separaten Port haben.
Beispiel:
Shelly-Adapter: 1882
Sonoff-Adapter: 1883
MQTT-Adapter: 1886 (nutzt zwei Ports, falls Broker)Falls eine weitere Instanz des gleichen Adapter, dann wieder eine neue Nummer
Beispiel
mqtt.0 1886
mqtt.1 1888Einfach mal in der Adapter-Instanz und in der WebGUI des Devices konfigurieren. Ansonsten auch mal die Büchse durchstarten.
-
@stefan247
Nicht 1 Adapter steuern alle geräte sondern sonoff für Tasmota, shelly für shelly und mqtt für das wofür es keinen anderen Adapter gibt. -
...........................................
-
@stefan247 sagte in MQTT Schwierigkeiten mit verschiedenen Adaptern:
Mir war nicht bewusst, dass MQTT von den drei Adaptern nicht "richtig" miteinander kommunizieren. Dachte über den MQTT- Adapter würden Sonoff (Tasmota) und Shelly miteinander sprechen
Moin,
bin kein MQTT Experte und vielleicht ist es nicht ganz korrekt, aber so verstehe ich das.
In
ioBroker
geschieht die Kommunikation über die Datenpunkte, die Adaptersonoff
,Shelly
,Zigbee2MQTT
bauen einen eigenen Broker zumPublishen/Subscriben
auf.Dann gibt es noch die Möglichkeit einen eigenen MQTT Broker, entweder als externen Server, mit
Moaquitto
,EMQX
oder ebenmqtt-Adapter
imioBroker
aufzubauen.Hier mal eine Grafik:
Geräte veröffentlichen (publish) Daten, die an denBroker
weitergegeben werden, hier z. B. die Temperatur, der Broker nimmt die Daten an und stellt sie dann in eine Queue, Anzeigegeräte, oder andere Adapter, können dann beim Broker, diese Daten abonnieren.Ist jetzt sicherlich ziemlich verkürzt, da gibt es aber denke ich genug Information im WWW.
VG
Bernd -
@stefan247 Ich kann den Post von @dp20eic nur unterstreichen. Gut kommunizieren müssen die Adapter ja nicht, aber wer alles unter einem Hut haben möchte, der installiert EINEN mqtt-Broker und gewöhnt sich an, mit JSON Strings zu hantieren. Das mag auf den ersten Blick unkomfortabler erscheinen, hat aber in der Praxis Vorteile, wenn man mehrere Informationen in EINEM Objekt hat. Ich empfehle zudem mosquitto als externen Broker zu verwenden, da der mqtt-Adapter als Broker manchmal Probleme macht und dann den mit dem mqtt-Adapter als Client zu betreiben und alle topics mit # einzubinden (zu abonnieren oder auf Denglisch zu subscriben) .
Der Zigbee2MQTT Adapter ist EINE rühmliche Ausnahme, da er auch die Interpretation der topics über einen externen mqtt-Broker zulässt und nicht wie die anderen Adapter einen Broker simuliert.
Bei allen anderen Adaptern (sonoff, etc... ) werdet ihr immer das Problem haben, dass diese nur so gut funktionieren, solange sie die topics die von den Geräten geliefert werden, verstehen und interpretieren können. Außerdem kann man sich an die Dokumentation des Herstellers halten.Bei mir sind alle Systeme die mqtt sprechen dann unter einem Adapter mit Standardport 1883 eingebunden. Ein welches Gerät kommuniziert spricht über welchen Port mqtt gibt es somit nicht.
Zu dem kann man wenn man nicht den sonoff Adapter nutzt auch die topics/prefix Kombination frei anpassen:
So hat man unter jedem Gerät eigene cmnd, stat und tele Äste. Selbst hier hat man die Möglichkeit über das topic hierarchische Strukturen aufzubauen, wie ich es sonst bei den anderen Geräten gemacht habe. Also erst Gerätetyp, dann Raum und dann Gerät selbst. Und auch wenn ich mir hier keine Freunde mache, der SONOFF Adapter ist KEIN Mqtt Adapter, sonder simuliert einen Mqtt Broker. Der einzige iobroker-Adapter, der nativ die Informationen so ausgibt, wie sie vom Gerät geliefert werden, ist der MQTT-Adapter.Auch bei Shellies oder Zigbee2mqtt kann man die topics frei strukturieren - was mit den Adapter nicht geht:
Wie gesagt man sollte sich halt etwas mit Objekten und JSON beschäftigen, was aber KEIN Hexenwerk ist.
-
.......................................
-
@stefan247
Wenn du alles auf Mqtt abgestimmt hast ist es kein Hexenwerk, wenn du mit allem anfängst irgendwie schon
Ich benutze alles und werde mir unter alias.0 mit der Zeit eine ordentliche Struktur aufbauen der es dann egal ist ob ich davor mqtt, einen adapter oder ein Skript habe. Bis dato hab ich das nicht ordentlich sortiert, aber da jetzt langsam mal dieses oder jenes Gerät den Geist auf gibt, ist es dann doch schön einen Datenpunkt zu haben der nur ein Link ist.
-
@stefan247 Also das sind alles Objekte. Auf eine Eigenschaft in einem Attribut eines Objektes greifst Du über Blockly mit dem Attribut zu. Du kannst auch eine Eigenschaft über einen Alias extrahieren:
https://forum.iobroker.net/post/980575
In dem Beitrag habe ich beschrieben wie Du über einen Alias eine Eigenschaft extrahiertst.
Ich glaube @ticaki hat sogar ein Javascript geschrieben -um aus einem JSON einzelne Datenpunkte zu machen. Ich habe einen Subflow in NodeRed gemacht der Dir immer alle Einzelpunkte schreibst.
https://forum.iobroker.net/topic/43856/json-oder-javascript-objekt-in-iobroker-datenpunkte-zerlegen
Beispiele siehst Du im ersten Post als Beispiel 4,5,6.
Wie gesagt später wirst Du aber ggf. froh sein, nicht alles in eigenen Datenpunkten zu haben. Lediglich wenn Du in VIS was anzeigen willst, dann solltest Du den Wert extrahieren. Das machst Du dann wie anfangs beschrieben über einen Alias.
-
.....................................
-
@stefan247 Na dann war der Wert vielleicht in einem Objekt - so kann man das nicht sagen. Aber wenn es im Tasmota vorhanden ist, dann ist es auch im mqtt vorhanden. Ganz sicher.
-
......................................
-
@stefan247 Die Datenpunkte sind wahrscheinlich in einem der Objekte.
Entweder Du extrahierst die Werte wie beschrieben mittels eines Alias oder nutzt ggf. meinen NodeRed Flow. Aber meist braucht man ja nicht alles Werte