Elencare i client iscritti a un determinato argomento nel server Mosquitto


8

Questa è la domanda generale, ma fornirò lo scenario qui.

Sto eseguendo il server Mosquitto per fornire comunicazioni mqtt tra i moduli relè esp ( Sonoff di Itead ) e Home Assistant . Il più delle volte funziona perfettamente. Ogni modulo ha il suo argomento, e ci sono tante configurazioni "leggere" in HASS quanti moduli, quindi possono essere controllati dal frontend web da singoli pulsanti di attivazione / disattivazione.

Ho sperimentato, tuttavia, situazioni di stato incoerenti in cui la luce è effettivamente accesa e l'interruttore in HASS è mostrato come spento (e anche la situazione opposta). Ispezionando i registri ho scoperto che Mosquitto non sta pubblicando alcuni messaggi su HASS (che dovrebbe essere abbonato a tutti gli argomenti sullo stato del modulo). Più specificamente, dati 4 moduli e i relativi argomenti di stato ( state/sonoff_xx/POWER), HASS sembra essere abbonato solo agli argomenti dei moduli 2 e 4, ma non 1 e 3. Di seguito è riportato il comportamento previsto per il modulo 4, lo stesso può essere verificato per il altro modulo funzionante, ma la pubblicazione su HASS è mancante per gli altri due.

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))

Questa non è una domanda riguardante HASS e i moduli di inoltro, ma riguarda come scavare nello stato del server MQTT che dovrebbe avere alcuni client sottoscritti ma, guardando i registri, non lo è.

Risposte:


6

No, non è possibile ottenere un elenco di quali clienti sono abbonati a cosa su mosquitto.

Ciò che è molto probabile qui è che HASS non stia effettuando la sottoscrizione piuttosto che mosquitto non stia pubblicando su un client sottoscritto.

È possibile ottenere mosquitto per accedere ogni volta che viene effettuata una richiesta di abbonamento che è possibile utilizzare per creare un elenco.

log_type subscribe, unsubscribe

Ciò registrerà tutti i client che si iscrivono / cancellano da quali argomenti.


1
Sto già registrando tutti i livelli ( log_type allin mosquitto.conf), in realtà ho controllato la voce di iscrizione connettendomi da una console mentre ero in journalctl -fesecuzione. Tuttavia, non sono riuscito a trovare voci sugli abbonamenti HASS perché ciò potrebbe accadere giorni fa e journald non è configurato come persistente, quindi avevo a portata di mano solo l'avvio corrente. Questo è il motivo per cui speravo di ispezionare lo stato di Mosquitto.
Dario,

1
Non dovresti concentrarti sul livello di QoS. La mia ipotesi è che i messaggi inviati dai nodi (unità Sonoff) vengano inviati utilizzando QoS = 0, il che significa che viene inviato solo una volta. Non affidabile in questo senso. Proverei a superare questo valore fino a quando non trovo un buon livello. Secondo me, gli stati di commutazione dovrebbero usare QoS 1 o 2. I valori dei sensori che possono andare persi uno o due di tanto in tanto dovrebbero usare QoS 0.
Jimmy Westberg,

3

Puoi abilitare il registro mosquitto per tutti e iscrivendoti al registro troverai messaggi che puoi decodificare per ogni azione del client come connessione, disconnessione, iscrizione e pubblicazione anche di errori.

tu fisserai

log_dest topic
log_type all

in mosquitto.conf quindi ti iscriverai a

$SYS/broker/log/#

Mi sono stancato di questo approccio Gli eventi di abbonamento e pubblicazione non sono mostrati
kavie il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.