NEWS
MQTT Broker/Client Adapter sendet nicht alle Variablen
-
@andygr42 ginge natürlich auch. Ich werde es einmal testen ob es am Sender oder am Broker liegt... Danke
-
@andygr42
Leider das identische Bild. Es scheint am Client und nicht am Broker zu liegen. Aktuell würde ich sagen, dass nur Variablen vom Typ read, nicht aber alle vom Typ write übertragen werden.
EDIT: Beim MQTT-Client Adapter verhält es sich identisch. Auch hier funktionieren nur read Variablen. Habe das gerade auch noch mal für nen Shelly Plug getestet. Power (read) funktioniert einwandfrei, switch (write) funktioniert nicht... -
@passuff Also dass der MQTT Broker ein Problem mit nicht bestätigen Änderungen hat, das weiß ich auch und bin seit dem auch auf die Kombination MQTT Adapter als Client und mosquitto als Broker sehr zufrieden und klappt auch alles.
Kannst Du mal Deine Einstellungen per Screenshot schicken - das JSON Teil nützt mir nichts - es empfiehlt sich alle Haken raus zu machen.
-
@passuff Die Shelly plugs funktionieren auch einwandfrei, dafür nutzt Du den command Datenpunkt:
-
Wenn ich alle Haken entferne, wird bei mir rein gar nichts gesendet... Hier meine Einstellungen:
-
@passuff
Du machst einen Fehler beim Publishen - da fehlt ja die Instanz.Das soll wohl viessmann.0.* heißen
Mit Deinen Einstellungen kann der Adapter ja gar nichts finden, wenn die Instanz nicht richtig eingegeben wurde.
-
@mickym das passt schon so... Ich habe mehrere Heizungen und daher mehrere Instanzen. Wie gesagt, ich will nur publishen, nichts subscriben....
-
@passuff Dann musst Du auch alle Instanzen mit Komma so eingeben (denke nicht, dass der Adapter das so macht).
-
@mickym Doch funzt einwandfrei für die read variablen, nicht aber für die write variablen... Wenn ich den Datentyp manuell ändere, funktioniert es auch.. Aber das macht verständlicherweise wenig Sinn
-
@passuff Ich würde es trotzdem mal so versuchen:
viessmann.0.*,viessmann.1.*
Mein publish Einstellungen sind so:
Ändern geht aber natürlich nur in dem Publishing Ast. Also nichts unter mqtt.*
Sprich da sind im iobroker logischerweise keine Objekte. Also geschrieben werden kann mit Deinen Einstellungen nur unter viessmann.
-
@mickym habe es versucht, macht aber keinen Unterschied. Ich denke die zwei MQTT Clients haben doch unterschiedliche Probleme bei den write Variablen:
MQTT Broker/Client (Als client konfiguriert):
Write Variablen werden nur übertragen, wenn diese einen Wert haben. Dies ist beim Viessmann Adapter leider nur der Fall, wenn bereits zuvor ein Wert gesendet wurde.
In diesem Fall wurde nur die Pumpendrehzahl übertragen.
MQTT Client: Write Variablen werden grundsätzlich nicht gesendet. Ich habe zumindest keine Konfiguration gefunden die funktioniert. Sobald man den Datentyp auf read ändert, funktioniert alles wunderbar. Das ist logischerweise nicht zielführend und diente nur als Test...
-
@passuff Nun im Prinzip ist das ja auch nicht schlimm, wenn nur übertragen wird, wenn ein Wert vorhanden ist.
Ich ändere grundsätzlich gar nichts am Lesen/Schreiben an den Datenpunkten.
Wie gesagt ich habe 2 mqtt Adapter Instanzen laufen.
- Eine Frontend Instanz mit dem ich alles subscribe und publishe
- Eine Veröffentlichungsinstanz
Wo ist denn ein Problem, dass nur die Werte übertragen werden, wenn was drin steht. Wenn Du was anderes abonnierst und der Datenpunkt existiert noch nicht, ist das unter mqtt überhaupt kein Problem. Insbesondere bei SET Kommandos. Wenn kein Kommando abgesetzt wurde, braucht es auch keinen DP. Dann finde ich es ggf. auch sehr problematisch wenn diese Kommandos beim Verbinden alle nochmal geschickt werden.
Mqtt legt grundsätzlich keine leeren Datenpunkte an.
Ich habe nur mit dem MQTT Broker/Client Adapter Erfahrungen, nicht mit dem MQTT Client Adapter an sich.
Schließlich dient eine MQTT Datenbank nicht dazu ein Spiegelbild Deiner Adapterdatenpunkte abzubilden. Wie gesagt abonnieren kann man immer, auch wenn die Datenpunkte noch gar nicht existieren.
-
Openhab bekommt die Write Variablen zum beschreiben zur Verfügung gestellt. Wenn zukünftig Openhab meine Heizung steuern soll, geht das natürlich nur, wenn die Variablen auch zur Verfügung stehen. Das wäre so aktuell nicht möglich. Den Rest deiner Antwort verstehe ich nicht wirklich bzw. kann das auf meine Problemstellung nicht anwenden, da ich nur publishe und nicht subscribe.
-
@passuff sagte in MQTT Broker/Client Adapter sendet nicht alle Variablen:
Openhab bekommt die Write Variablen zum beschreiben zur Verfügung gestellt. Wenn zukünftig Openhab meine Heizung steuern soll, geht das natürlich nur, wenn die Variablen auch zur Verfügung stehen.
Wenn Openhab Deine Heizung steuert, dann published Openhab diese Werte einfach in dem set Ast. Dafür braucht es keine Variablen. Mqtt ist ein reines eventbasiertes Protokoll ohne "Variablen". Im Gegenteil müsste dann Dein iobroker dies dann subscriben - aber das geht nicht in den Viessmann Adapter, sondern dann unter der mqtt Instanz, die Du dann mit Deinem Adapter aber subscriben müsstest. Im Prinzip publishst Du gar nichts vom iobroker, sondern von Openhab.
Du brauchst dann aber trotzdem noch Deine Logikamschine, die das was Dein Openhab System gepublished hat in Deinen Adapter schreibt.
Der mqtt Adapter wird nie in Datenpunkte eines fremden Adapters schreiben, sondern nur lesen.Meines Erachtens publishst Du die Status Werte, wenn Du sie in Openhab benötigst, abonnierst aber die set Werte, die Du mit Openhab schreibst und fügst sie ggf. in den Adapter ein.
mqtt stellt nichts zur Verfügung, sondern der Broker sammelt gepublishte Informationen und benachrichtigt Clients, wenn bestimmte Themen subscribed wurden. Ohne Dir zu nahe zu treten, denke ich dass Du ein nicht ganz richtiges Verständnis von mqtt hast.
-
@mickym Openhab hat aber keinen Adapter um die Heizung zu steuern, daher muss die über ioBroker bzw. MQTT erfolgen...
Openhab<->MQTT<->Iobroker<->Viessmann
-
@passuff Ja ist ja richtig.
Aber nochmal Du stellst nichts zu verfügung, sondern abonnierst was Du brauchst und veröffentlichst.
Wenn Du mit OpenHab steuern willst, aber in iobroker der Adapter ist, veröffentlicht iobroker den Status, Openhab die Befehle. Die können auch in einer beliebigen Struktur sein und Du musst dann mit Deiner Logikmaschine die Openhab Befehle in Deine Adapterpunkte schreiben.
- Also iobroker published Heizungsstatus (falls in Openhab) benötigt. Openhab subscribed (abonniert) diese falls benötigt.
- Openhab published die Befehle zur Heizungssteuerung - kann ja auch eine von Dir festgelegte Struktur sein.
- iobrokere subscribed (abonniert) diese Befehle und diese sind dann unter mqtt.0.* sichtbar.
- Deine Logikmaschine nimmt diese und schreibt sie in die viessmann Adapter Instanzen.
So funktioniert nun mal mqtt und das ist das was Du ja erreichen willst.
-
@passuff sagte in MQTT Broker/Client Adapter sendet nicht alle Variablen:
@mickym Openhab hat aber keinen Adapter um die Heizung zu steuern, daher muss die über ioBroker bzw. MQTT erfolgen...
Openhab muss deshalb die Befehle im MQTT veröffentlichen und iobroker subscribed die, damit Du im iobroker auf die Befehle , die Du aus Openhab schickst reagieren kannst.
-
@mickym sagte in MQTT Broker/Client Adapter sendet nicht alle Variablen:
eshalb die Befehle im MQTT veröffentlichen und iobroker subscribed die, damit Du im iobroker auf die Befehle , die Du aus Openhab schickst reagieren kannst.
Vermutlich stehe ich auf dem Schlauch. Das macht aus meiner Sicht so keinen Sinn. Bleiben wir mal bei der Verbindung iobroker<->MQTT:
iobroker mit dem MQTT Client veröffentlich Variablen vom Typ read/write auf dem Mosquitto Broker, die, wie auch immer von Openhab bearbeitet werden können. Wenn jetzt der MQTT Client auf dem iobroker die Variablen vom Typ write nicht published, da kein Wert darin enthalten ist, kann auf dem Broker durch Openhab auch nichts beschrieben werden...
Du sagst jetzt, dass Openhab die Befehle veröffentlichen soll. Wie soll das gehen? Die sind Openhab mangels Adapter völlig unbekannt...
Ich möchte mit iobroker auch auf nichts reagieren.. Wie gesagt, soll iobroker lediglich die Verbindung zu Viessmann zur Verfügung stellen...Die Verbindung MQTT<->Openhab steht aktuell noch nicht. Ich nutze zum Testen noch den MQTT Explorer. Das tut aber aktuell noch nichts zur Sache. Wenn ich in iobroker eine write Variable befülle, wird mir diese sofort auf dem Broker zur Verfügung gestellt und ich kann mit dem Explorer diese beschreiben. So funktioniert der Test Aufbau perfekt. Einzig und allein scheitert es em veröffentlichen der Variablen wenn es (noch) keinen Wert gib. Daran kann ich aber nichts ändern, da der Viessmann Adapter bzw. die Verbindung zur Heizung nun mal so arbeitet. Die Heizung stellt diese variablen nicht zur Verfügung... Ich kann es somit nur im MQTT Adapter ändern.
Was mich bestätigt ist der Fakt, dass es den MQTT Client Adapter nicht stört. Wenn ich die leere Variable vom Typ write auf Typ read umstelle, wird diese ebenfalls übertragen...
Wie ich es drehe und wende, ich sehe das Problem beim Adapter und nicht bei meinem Verständnis, lasse mich aber gerne vom Gegenteil überzeugen... -
@passuff Im Prinzip gibt es weder Read noch Write Variablen.
MQTT arbeitet mit Zuständen/States und sonst gar nichts. Jeder mqtt-Client kann einen state veröffentlichen (schreiben) oder einen state abbonnieren (lesen).
Ich verstehe zwar was Du willst - nämlich die set Struktur Deines viessmann Adapters im mqtt zum Schreiben für Openhab zur Verfügung zu stellen - aber so funktioniert mqtt NICHT.
Vergiss Deine Read und Write Variablen. Du schreibst oder liest, aber mqtt stellt keine Variablen zur Verfügung. Wenn Du etwas publishst, dann macht der mqtt Broker nichts weiter, als diese Werte an die Clients zu schicken, die dieses Thema abonniert haben. Der Broker stellt aber KEINE Variablen zur Verfügung. Ein Broker wird auch nichts zur Verfügung stellen wo es keinen Wert gibt. MQTT stellt keine Variablen oder Datenpunkte zur Verfügung. Jeder mqtt Client schreibt oder liest Werte sonst nichts.
Ich kanns Dir nicht anders erklären, vielleicht kann das jemand anders besser als ich. MQTT ist ein nachrichtenbasierendes Protokoll zum Austausch von Informationen zwischen Maschinen und keine Datenbank im herkömmlichen Sinne. Deswegen haben in der Regel auch keine Werte da drin Bestand - es sei denn man speichert sie mit dem Retain Flag.
Vielleicht erklärt es Steve besser (wenn auch in Englisch): http://www.steves-internet-guide.com/mqtt-basics-course/
Wie gesagt Du kannst Dein Ziel ja erreichen, aber eben so, wie ich es beschrieben habe und nicht mit Deiner Vorstellung von Variablen mit Read und Write. Aber wie schon gesagt, gibt hier einige Fachleute, wenn die es besser wissen, lasse ich mich auch gerne belehren.
Ansonsten kann ich Dir nur noch sagen, wie Du es halt konkret machen könntest, ansonsten bin ich hier dann aber raus.