Listen Sie Clients auf, die ein bestimmtes Thema auf dem Mosquitto-Server abonniert haben

8

Das ist also die allgemeine Frage, aber ich werde das Szenario hier bereitstellen.

Ich verwende den Mosquitto-Server, um mqtt comm zwischen esp-Relay-Modulen ( Sonoff von Itead ) und Home Assistant bereitzustellen . Meistens funktioniert es einwandfrei. Jedes Modul hat sein eigenes Thema, und es gibt in HASS so viele "leichte" Konfigurationen wie Module, sodass sie über einzelne Umschalttasten vom Web-Frontend aus gesteuert werden können.

Ich habe jedoch inkonsistente Zustandssituationen erlebt, in denen das Licht tatsächlich eingeschaltet ist und das Umschalten in HASS als ausgeschaltet angezeigt wird (und auch die entgegengesetzte Situation). Beim Überprüfen der Protokolle habe ich festgestellt, dass Mosquitto bestimmte Nachrichten nicht an HASS veröffentlicht (die alle Modulstatus-Themen abonnieren sollten). state/sonoff_xx/POWERInsbesondere scheint HASS bei 4 Modulen und den entsprechenden Status-Themen ( ) nur die Themen der Module 2 und 4 zu abonnieren, nicht jedoch die Themen 1 und 3. Das Folgende ist das erwartete Verhalten für Modul 4, das gleiche kann für das überprüft werden anderes Arbeitsmodul, aber das Veröffentlichen in HASS fehlt für die anderen beiden.

Jun 15 19:22:46 nas mosquitto[9486]: Received PUBLISH from sonoff4 (d0, q0, r1, m0, 'stat/sonoff4/POWER', ... (2 bytes))
Jun 15 19:22:46 nas mosquitto[9486]: Sending PUBLISH to home-assistant (d0, q0, r0, m0, 'stat/sonoff4/POWER', ... (2 bytes))

Dies ist keine Frage in Bezug auf HASS und die Relay-Module, sondern es geht darum, wie Sie den Status des MQTT-Servers ermitteln können, für den bestimmte Clients abonniert sein sollen, bei Betrachtung der Protokolle jedoch nicht.

Dario
quelle

Antworten:

6

Nein, Sie können keine Liste darüber erhalten, welche Kunden was von Moskito abonniert haben.

Was hier am wahrscheinlichsten ist, ist, dass HASS nicht abonniert, sondern Moskito nicht für einen abonnierten Kunden veröffentlicht.

Sie können Moskito dazu bringen, sich jedes Mal zu protokollieren, wenn eine Abonnementanfrage gestellt wird, mit der Sie dann eine Liste erstellen können.

log_type subscribe, unsubscribe

Dadurch werden alle Clients protokolliert, die sich zu welchen Themen anmelden / abmelden.

hardillb
quelle
1
Ich protokolliere bereits alle Ebenen ( log_type allin mosquitto.conf). Tatsächlich habe ich den Abonnementeintrag überprüft, indem ich während der journalctl -fAusführung eine Verbindung von einer Konsole aus hergestellt habe . Ich konnte jedoch keine Einträge zu HASS-Abonnements finden, da dies möglicherweise vor Tagen passiert ist und Journald nicht als persistent konfiguriert ist, sodass ich nur den aktuellen Startvorgang zur Hand hatte. Aus diesem Grund habe ich gehofft, den Moskito-Status überprüfen zu können.
Dario
1
Sollten Sie sich nicht auf die QoS-Ebene konzentrieren? Ich vermute, dass die von den Knoten (Sonoff-Einheiten) gesendeten Nachrichten mit QoS = 0 gesendet werden, was bedeutet, dass sie nur einmal gesendet werden. In diesem Sinne nicht zuverlässig. Ich würde versuchen, diesen Wert zu erhöhen, bis ich ein gutes Niveau finde. Switch-Zustände sollten meiner Meinung nach QoS 1 oder 2 verwenden. Sensorwerte, die in Ordnung sind, ab und zu ein oder zwei zu verpassen, sollten QoS 0 verwenden.
Jimmy Westberg
3

Sie können das Moskito-Protokoll für alle aktivieren und das Protokoll abonnieren. Dort finden Sie Nachrichten, die Sie für jede Client-Aktion wie Verbinden, Trennen, Abonnieren und Veröffentlichen von Fehlern dekodieren können.

du wirst einstellen

log_dest topic
log_type all

in mosquitto.conf abonnieren Sie dann

$SYS/broker/log/#
Anas Naguib
quelle
Ich habe diesen Ansatz satt Abonnement- und Veröffentlichungsereignisse werden nicht angezeigt
kavie