mdzio / ccu-jack

CCU-Jack bietet einen einfachen und sicheren REST- und MQTT-basierten Zugriff auf die Datenpunkte der Zentrale (CCU) des Hausautomations-Systems HomeMatic. Zudem können einfach Fremdgeräte an die CCU angebunden werden.
GNU General Public License v3.0
112 stars 11 forks source link

Homeassistant Entitäten werden nicht aktualisiert #174

Closed slg60 closed 2 months ago

slg60 commented 2 months ago

Versuche den CCU Jack auf meiner Raspimatic auch für Homeassistant zu nutzen. Mit der in HA bereitgestellten MQTT Integration funktioniert das auch soweit. Die Daten werden von einer AHOY DTU zur Verfügung gestellt. Es gibt Daten die werden in HA aktualisiert, es gibt aber welche, wie z.B Yield/Total werte, die werden nur nach einem Neustart ein mal in HA aktualisiert oder wenn man das Topic manuell über die Integration abonniert. Auch hier werden die Daten nur ein einziges mal zur Verfügung gestellt. Andere Broker scheinen in HA da keine Probleme zu haben.

Kann sich das jemand erklären? Das Problem scheint es wohl öfter schon gegeben haben. Die Betroffenen sind dann meist auf einen anderen Broker gewechselt und die Probleme waren weg. Ich würde den Jack aber gerne als einzigen Broker behalten.

Jemand eine Idee?

slg60 commented 2 months ago

https://community.home-assistant.io/t/mqtt-problem-after-core-update-to-2023-6/595076 Hier ist ganz gut beschrieben was das Problem sein wird. Hat offenbar etwas mit dem Retain Handling zu tun.

Wenn ich in HA versuche den Mosquitto als Bridge für den Jack zu nutzen, dann bekomme ich das hier

mosquitto version 2.0.18 running 2024-04-11 15:54:33: Connection Refused: unacceptable protocol version 2024-04-11 15:54:33: Client local.core-mosquitto.bridge-01 closed its connection. 2024-04-11 15:54:33: New connection from 127.0.0.1:48084 on port 1883. 2024-04-11 15:54:33: Client disconnected due to protocol error.

Irgendwas passt HA mit dem MQTT Protocol in CCU Jack nicht

Hier das Log vom Jack image Kann hier jemand unterstützen?

slg60 commented 2 months ago

Ich nutze jetzt den internen Mosquitto Broker und den Jack als Bridge, das Läuft! Der Mosquitto funktioniert einwandfrei und die Werte kommen zyklisch rein. Hier liegt irgend eine Inkompatibilität vom Jack zum HA vor. Evtl. schaut sich das mal jemand an, denn ich könnte mir vorstellen, dass auf dieses Problem mehrere Leute stoßen werden.

wolwin commented 2 months ago

Arbeite ebenfalls gerade an einer Home Assistant Integration - bei der MQTT Umsetzung kann ich bestätigen, dass der CCU-Jack bei gesetztem Retained Flag mit HA nicht korrekt zusammenarbeitet.

Folgende Test-Stellung:

  1. alle Geräte sind mit dem CCU-Jack verbunden - das Retained Flag ist gesetzt
    • der 'homeassistant' Ordner wird mit allen Topics automatisch von EMS-ESP / AI auf dem CCU-Jack Broker angelegt
    • lediglich wenn HA neu startet, werden einmalig alle MQTT-Werte der Geräte übertragen (retained eben ...)
    • danach findet keine Aktualisierung auf der HA Seite mehr statt, obwohl im MQTT-Explorer, der mit dem CCU-Jack verbunden ist, die Änderungen MQTT-Topics sichtbar sind
  2. alle Geräte sind mit dem CCU-Jack verbunden - das Retained Flag ist nicht gesetzt
    • der 'homeassistant' Ordner wird mit den Topics von EMS-ESP / AI angelegt, die übertragen (aktualisiert) werden (?)
    • wenn HA neu startet, werden die jeweils aktualisierten MQTT-Werte der Geräte übertragen - immer - alle ...
    • alle MQTT Aktualisierungen funktionieren
  3. alle Geräte sind mit einem externen Mosquitto Broker (Debian 12) verbunden - das Retained Flag ist gesetzt
    • der 'homeassistant' Ordner wird mit allen Topics automatisch von EMS-ESP / AI angelegt
    • wenn HA neu startet, werden die jeweils aktualisierten MQTT-Werte der Geräte übertragen - immer - alle ...
    • alle MQTT Aktualisierungen funktionieren

Zusammenfassung Der vergleichende Test mit dem Mosquitto Broker zeigt, dass sich der CCU-Jack im Zusammenspiel mit HA nicht 'korrekt' verhält - ich würde auf einen Protokollfehler im Zusammenhang mit dem Retained Flag tippen - aber wo genau der Fehler liegt (CCU-Jack oder HA), kann ich nicht sagen.

Trotzdem würde ich die Meldung gerne als 'issue' sehen (... und nicht als 'question') - Danke!

mdzio commented 2 months ago

Ist denn in HA die MQTT-Version einstellbar? Der CCU-Jack unterstützt maximal V3.1.1.

wolwin commented 2 months ago

Ja, steht aber standardmäßig auf 3.1.1 - eine Änderung auf 3.1 hatte keine (positive) Auswirkung ...

slg60 commented 2 months ago

Ja da hatte ich auch mit rumgespielt, ohne Erfolg.

mdzio commented 2 months ago

Dann muss ich mal HA bei mir installieren und testen.

Die Fehlermeldungen "Cannot publish to $ topics" kommen dann, wenn ein MQTT-Client (hier die Bridge von Mosquitto) Topics beschreibt, die mit $ anfangen. Dies ist nicht erlaubt. Diese am besten bei der Bridge-Konfiguration (in Mosquitto) ausschließen.

Die Fehlermeldung "Decoding of connect message failed .... unacceptable protocol version" kommt in der Regel, wenn ein Client als erstes MQTT Version 5 ausprobiert. In der Regel wird dann ein zweiter Verbindungsversuch mit MQTT V3.1.1 versucht.

slg60 commented 2 months ago

Ich muss hier ein bisschen differenzieren. Hier ist etwas Mischung zwischen dem eigentlichen Problem und den ersten Gehversuchen der Einrichtung einer Bridge des Mosquitto am Jack vorhanden. Zu dem Zeitpunkt war mir auch nicht nicht klar das ich offenbar bestimmte Themen zum Abo definieren muss. Ich dachte wenn ich das leer lasse werden einfach alle Themen automatisch abonniert.

mdzio commented 2 months ago

Ich habe zum ersten mal HA installiert und konnte auch die MQTT-Anbindung in Betrieb nehmen. Das Problem kann ich bei mir reproduzieren: Nachrichten mit gesetztem RETAIN werden nicht von HA verarbeitet (getestet mit "Auf ein Topic hören" in HA), in anderen MQTT-Clients werden sie hingegen gezeigt.

Ich habe mal die "Debug-Protokollierung" in HA bei MQTT eingeschaltet. Dort ist aber ersichtlich, dass die Nachrichten mit RETAIN empfangen werden:

[homeassistant.components.mqtt.client] Subscribing to test/#, mid: 33, qos: 0
[homeassistant.components.mqtt.client] Received retained message on test/command (qos=0): b'1'
[homeassistant.components.mqtt.client] Received message on test/command (qos=0): b'0.2'
[homeassistant.components.mqtt.client] Received message on test/command (qos=0): b'0.2'
[homeassistant.components.mqtt.client] Received message on test/command (qos=0): b'0.77'
[homeassistant.components.mqtt.client] Received message on test/command (qos=0): b'0.76'
[homeassistant.components.mqtt.client] Received message on test/command (qos=0): b'0.76'
[homeassistant.components.mqtt.client] Received message on test/command (qos=0): b'0.45'
[homeassistant.components.mqtt.client] Received message on test/command (qos=0): b'0.45'
[homeassistant.components.mqtt.client] Received message on test/command (qos=0): b'0.73'
[homeassistant.components.mqtt.client] Received message on test/command (qos=0): b'0.73'
[homeassistant.components.mqtt.client] Received message on test/command (qos=0): b'0'
[homeassistant.components.mqtt.client] Received retained message on test/command (qos=0): b'0.26'
[homeassistant.components.mqtt.client] Received retained message on test/command (qos=0): b'0.25'
[homeassistant.components.mqtt.client] Received retained message on test/command (qos=0): b'0.49'
[homeassistant.components.mqtt.client] Received retained message on test/command (qos=0): b'0.48'
[homeassistant.components.mqtt.client] Received retained message on test/command (qos=0): b'0.73'
[homeassistant.components.mqtt.client] Received retained message on test/command (qos=0): b'1'
[homeassistant.components.mqtt.client] Unsubscribing from test/#, mid: 34

Das Problem müsste also innerhalb von HA liegen.

Wieso das über Mosquitto mit Bridge dann funktionieren soll, ist für mich derzeit nicht erklärbar. Ich habe da aber auch noch nicht nachgeforscht.

slg60 commented 2 months ago

Wenn man den Mosquitto auf HA anstatt des Jacks als Broker nutzt dann werden genau diese retained topics vom selben client halt einwandfrei übermittelt. Angeblich soll es mit anderen externen brokern auch gehen. Das habe ich selber aber nicht getestet. Irgendwas muss anders sein beim jack...

mdzio commented 2 months ago

Ich denke, dass ich einen Unterschied gefunden habe: Der CCU-Jack setzt Retain bei jeder gesendeten Nachricht. Andere MQTT-Server senden nur die erste Nachricht nach dem Verbinden eines MQTT-Clients mit gesetztem Retain. Die zweite Nachricht auf das selbe Topic hat Retain nicht mehr gesetzt. HA ist in der letzten Version wohl etwas intoleranter geworden. Ich schaue mal nach, ob ich das im eingebetteten MQTT-Server des CCU-Jacks entsprechend anpassen kann. Langfristig will ich einen MQTT-Server mit V5 Unterstützung einbetteten. Das ist aber aufwändiger.

Ergänzung: Das gewünschte Verhalten bei der Behandlung des Retain-Flags ist in der MQTT-Spezifikation in des Sätzen MQTT-3.3.1-8 und MQTT-3.3.1-9 beschrieben.

mdzio commented 2 months ago

Der Fehler wurde im eingebetteten MQTT-Server behoben (siehe mdzio/go-mqtt#1).

mdzio commented 2 months ago

Eine Vorabversion kann hier heruntergelande werden. Bitte mal testen!

slg60 commented 2 months ago

Klasse, danke fürs fixen. Mir bringt es zwar nichts mehr, aber ich glaube einigen anderen in Zukunft. Werde das in meinem HA Thread zu dem Thema auch noch kommunizieren.

wolwin commented 2 months ago

Danke für den Fix - Habe Vorabversion 2.9.1 mit HA 2024.4.4 und AI on the edge (15.6.0) getestet ... läuft mit gesetztem retained Flag incl. Aktualisierung wie es soll.