NEWS
MQTT Publish Bug?
-
@homezecke öhm, Zigbee und MQTT sind ja eigentlich 2 verschiedene Dinge ...
also den Deconz-Adapter kenne ich nicht aber du hast von diesem Datenpunkte im MQTT?
Wie der das Auswertet würde ja dann diesem liegen ...Also alle MQTT-Geräte die ich kenne (zu 90% Tasmota) haben für das Melden von Zuständen und für das Setzen immer unterschiedliche Topics. Vermutlich weil man so sauber trennt und die Gefahr einer Schleife etc. umgeht.
Ich will nicht ausschließen das per /set das anders geht, das wäre dann aber eher der Deconz-Adapter und wie der das an das ZigBee Gerät sendet.
-
Also der Deconz war nur ein Beispiel. Ich könnte auch ein Homematic oder shelly usw. nehmen. der IOBroker setzt das auf das Gerät um. Muss nur der richtige Wert in das Topic geschrieben werden. Aber eben nur, wenn dieses /set mitgeht. Und das erschließt sich mir nicht.
Das Problem ist nämlich, dass wenn auf einen "normalen" MQTT-Client publisht werden soll, muss er dieses automatisch angehängte "/set" auch verstehen. Und das denke ich dürfte kaum der Fall sein.
-
@homezecke Wie kommen denn die Homematic und Shelly Topics da in den MQTT-Broker? Bei mir sind im MQTT-Adapter = auf dem Broker nur die Datenpunkte zu sehen die meine MQTT-Clients dort selbst erzeugt haben. Tasmota dann z.B. stat/ und tele/ über die mir der Client etwas mitteilt, cmnd/ um den Client zu steuern (und nur auf diese Datenpunkte hört der Client, die anderen ignoriert er)
-
@homezecke Nachtrag: Was passiert denn wenn du das z.B. über den MQTT-Explorer versuchst? http://mqtt-explorer.com/
-
Also ich nutze den MQTT-Explorer auch und publishe mit diesem einfach auf den Datenpunkt des Gerätes das ich schalten möchte. Egal ob HM Gerät, Deconz oder sonst was. Und im Objekt-Tree von IObroker kann ich auch die Änderung des states sehen. Aber schalten tut das Gerät nur, wenn eben "unterschiedliche Namen für setzen und lesen" gesetzt wird. Das Gerät wird von IOBroker geschaltet, es erhält die MQTT Nachricht gar nicht, vermute ich.
-
@homezecke sagte in MQTT Publish Bug?:
Also der Deconz war nur ein Beispiel. Ich könnte auch ein Homematic oder shelly usw. nehmen. der IOBroker setzt das auf das Gerät um. Muss nur der richtige Wert in das Topic geschrieben werden. Aber eben nur, wenn dieses /set mitgeht. Und das erschließt sich mir nicht.
Das Problem ist nämlich, dass wenn auf einen "normalen" MQTT-Client publisht werden soll, muss er dieses automatisch angehängte "/set" auch verstehen. Und das denke ich dürfte kaum der Fall sein.
Nun - Tasmota hat immer unterschiedliche Topics für den Status und für das Kommando. Wenn Du und das Gerät in den gleichen Topic schreibt, dann habt ihr ganz schnell eine Endlosschliefe, die das System zum Erliegen bringt.
Wenn Du es nicht über set machst und über das topic selbst schaltest, dann meldet das Gerät über das gleiche Gerät den neuen status usw.Man kann schon schalten - am Besten man macht alle Haken raus im MQTT-Adapter.
-
@mickym sagte in MQTT Publish Bug?:
Man kann schon schalten - am Besten man macht alle Haken raus im MQTT-Adapter.
Ja, habe ich auch gemacht, nutze im Moment auschließlich selbst programmierte ESP's per MQTT. Nutze da auch getrennte Topics. Aber so kann ich mittels client keine Geräte außerhalb von MQTT steuern. Außer ich aktiviere den Haken für unterschiedliche Topic's.
-
@homezecke Schau mal ob Du Nachrichten im Log bekommst, dass nach 11 Retries eine Message gelöscht wurde. Dann hast Du ein Problem mit dem ACK-Flag und ich kann Dir nur zu einem externen Broker (mosquitto) raten und den MQTT-Adapter als Client einzusetzen.
https://forum.iobroker.net/topic/33772/mqtt-message-xxx-deleted-after-11-retries?_=1635961518096
Können auch 12 sein.
-
Ich glaube ich muss auch mal sagen was ich eigentlich vor habe. Ich möchte mir praktisch eine Art "Fernbedienung" basteln die als MQTT Client in IOBRoker alles schalten kann. Beim rumspielen in MQTT-Explorer stellte ich fest, dass ich alle Datenpunkte in Iobroker über MQTT ändern kann. Nicht nur die unter mqtt. Aber die Änderung der Datenpunkte hat nur einen Effekt, wenn ich den Haken bei "unterschiedliche Namen für setzen und lesen" gesetzt wird.
-
@homezecke Also, jetzt glaube ich langsam dein Problem zu erkennen:
- In MQTT sind es 2 Datenpunkte
- Aber für ein Widget Switch kanns du nur einen verwenden
Dieses sagenhafte Problem hat mich von Tag 1 mit ioBroker bzw. Smarthome beschäftigt.
In meinen Anfängen (und deshalb bin ich bei ioBroker gelandet weil es mein Problem lösen konnte) habe ich das mit einem Bulb on/off Widget für Tasmota so lösen können:
Über die Extrasteuerung. In Allgemein ist der stat Datenpunkt, unter Extrasteuerung dann der cmnd Datenpunkt.Das ist natürlich total mühsam und unbequem.
Weshalb ich mir (statt den Sonoff-Adapter zu nehmen) ein JavaScript geschrieben habe welches mir die MQTT-Datenpunkte in ioBorker Datenpunkte mit True und False umbaut welche ich dann stattdessen als Datenpunkt für die Widgets nehme: https://forum.iobroker.net/topic/48945/tasmota-steckdosen-per-mqtt-javascript-direkt-ansteuern
Dabei musste ich dann das auch von @mickym beschriebene Problem mit der Endlosschleife lösen und auswerten ob der Datenpunkt vom Benutzer oder vom Script selbst, z.B. durch eine Änderung des MQTT Datenpunktes, ausgelöst wurde.
-
@bananajoe Das ist nur eines... Ich möchte aber auf etwas anderes hinaus.
Ich kann den MQTT Adapter so konfigurieren dass ich mittels eines MQTTclients alle states der Adapter in IObroker zumindest lesen kann. Dazu müssen Haken bei "Unterschiedliche Topic-Namen für setzen und lesen" und bei "Send state object as mqtt message" rein.
Wenn ich jetzt zb. MQTT Explorer starte kann ich ALLE Datenpunkte des IOBRoker lesen und auch states verändern. Ein Topic bei mir wäre also wie ich bereits beschrieb "deconz/0/Lights/1/on/set" auf "true" zu setzen damit diese Zigbee Lampe angeht. Das ist toll, denn so kann ich zb. über eine MQTT App auf'm Smartphone alles in meinem Smarthome steuern.
Der Haken "Unterschiedliche Topic-Namen für setzen und lesen" erfordert es, dass an das MQTT-Topic, wenn man ein state ändern möchte "/set" anhängen muss also im MQTT Explorer so:
deconz/0/Lights/1/on/set - true publish : geht, schaltet die Lampe
deconz/0/Lights/1/on - true publish : geht nicht, nur der Wert wird geändert, Lampe schaltet nichtIch denke damit soll die Endlosschleife verhindert werden. Alles OK, bis hier..
Jetzt zu meinem Problem: Da ich das in meinen selbstgebauten und selbst programmierten ESP8266 Geräten die ich per MQTT ansteuere schon unterschiedlice Topic-Namen nutze, kommt es zu Problemen. Ein Topic sieht bei mir in etwa so aus:MeinGerät/relais1/On - Das Topic zum lesen des states für das relais
MeinGerät/relais1/On/set - Das Topic zum ändern des states für das relaisDas "/set" ist bereits fest einprogrammiert. Aber jetzt hängt der MQTT Adapter von IOBroker automatisch ein "/set" an. Bei meinen ESP's kommt jetzt ein "MeinGerät/relais1/On/set/set" an. Ein "/set" zuviel. Das Topic wird damit natürlich nicht mehr von meiner Topic-Abfrage im ESP erkannt.
Jetzt weiß ich eben nicht, ist das ein BUG im MQTT Adapter? Bei per MQTT angebundenen Geräten darf ich kein "/set" im Topic haben, da es automatisch angehängt wird, bei allen anderen Adaptern muss ich ein "/set" selber dranhängen???? Es wäre viel einfacher, wenn bei allen anderen IOBroker Geräten auch ein automatisches "/set" angehängt werden würde!
-
@homezecke ich denke es ist kein Bug. Wie oben schon empfohlen wurde am besten im MQTT Adapter alle Haken raus. Dann hast du das Problem nicht, musst dich aber selbst ggf. um das /set kümmern.
Da das mit dem /set scheinbar nicht einheitlich ist ... keine Ahnung. manche Geräte würden es brauchen, manche nicht. Ich glaube nicht das der MQTT Explorer das automatisch richtig macht.
Kannst ja sonst mal den Programmierer des MQTT Adapters fragen / möglich Bug auf GitHub melden.
Aber du bist der erste auf den ich treffe mit dem Problem.
Alternativ könntest du mehrere Instanzen des MQTT Adapters mit unterschiedlichen Konfigurationen nutzen, ggf. auf Topics beschränkt.
-
@bananajoe sagte in MQTT Publish Bug?:
Wie oben schon empfohlen wurde am besten im MQTT Adapter alle Haken raus.
Wenn ich das mache, kann ich über einen MQTT Client keine anderen IOBroker Adapter states verändern. Und darum geht es mir ja. Im Moment löse ich das indem ich in meiner Firmware für die ESP's das überflüssige "/set" herausfiltere. Und dann läuft es ja wie es soll. Aber was macht zb. Tasmota? Ich nutze keins. Werde mir aber jetzt mal einen Wemos flashen um damit mal zu experimentieren.
Aber du bist der erste auf den ich treffe mit dem Problem.
Vermutlich ist noch keiner auf die verrückte Idee gekommen IObroker Adapter states über MQTT zu bearbeiten...? Das ist aber eine von externen Apps einfach zu nutzende Schnittstelle zu IOBroker, wie ich finde.