Lista de clientes suscritos a un tema determinado en el servidor Mosquitto

8

Esa es la pregunta general, pero proporcionaré el escenario aquí.

Estoy ejecutando el servidor Mosquitto para proporcionar comunicación mqtt entre los módulos de retransmisión esp ( Sonoff de Itead ) y Home Assistant . La mayoría de las veces, funciona bien. Cada módulo tiene su propio tema, y ​​hay tantas configuraciones "ligeras" en HASS como módulos, por lo que pueden controlarse desde la interfaz web mediante botones de alternancia individuales.

Sin embargo, he experimentado situaciones de estado inconsistente en las que la luz está realmente encendida y la palanca en HASS se muestra apagada (y la situación opuesta también). Al inspeccionar los registros, descubrí que Mosquitto no publica ciertos mensajes en HASS (que deberían suscribirse a todos los temas de estado de los módulos). Más específicamente, dados 4 módulos y sus temas de estado correspondientes ( state/sonoff_xx/POWER), HASS parece estar suscrito solo a los módulos 2 y 4 temas, pero no 1 y 3. El siguiente es el comportamiento esperado para el módulo 4, lo mismo puede verificarse para el otro módulo de trabajo, pero falta publicar en HASS para los otros dos.

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

Esta no es una pregunta con respecto a HASS y los módulos de retransmisión, pero se trata de cómo profundizar en el estado del servidor MQTT que se supone que tiene ciertos clientes suscritos, pero al mirar los registros, no lo ha hecho.

Darío
fuente

Respuestas:

6

No, no puede obtener una lista de qué clientes están suscritos a qué de mosquitto.

Lo más probable aquí es que HASS no se suscriba en lugar de mosquitto no publicar en un cliente suscrito.

Puede hacer que mosquitto se registre cada vez que se realice una solicitud de suscripción que luego podría usar para crear una lista.

log_type subscribe, unsubscribe

Esto registrará todos los clientes que se suscriban / cancelen de qué temas.

hardillb
fuente
1
Ya estoy registrando todos los niveles ( log_type allen mosquitto.conf), en realidad he comprobado la entrada de suscripción conectándome desde una consola mientras journalctl -fejecuto. Sin embargo, no pude encontrar entradas sobre suscripciones de HASS porque eso podría haber sucedido hace días y journald no está configurado como persistente, por lo que tenía a mano solo el arranque actual. Esa es la razón por la que esperaba inspeccionar el estado de Mosquitto.
Dario
1
¿No deberías concentrarte en el nivel de QoS? Supongo que los mensajes enviados desde los nodos (unidades Sonoff) se envían usando QoS = 0, lo que significa que se envía solo una vez. No es confiable en ese sentido. Intentaría aumentar este valor hasta que encuentre un buen nivel. Cambiar estados debería estar usando QoS 1 o 2 en mi opinión. Los valores del sensor que está bien omitir uno o dos de vez en cuando deben usar QoS 0.
Jimmy Westberg
3

Puede habilitar el registro mosquitto para todos y suscribirse al registro, encontrará mensajes que puede decodificar para cada acción del cliente, como conectarse, desconectarse, suscribirse y publicar incluso errores.

usted establecerá

log_dest topic
log_type all

en mosquitto.conf, entonces se suscribirá a

$SYS/broker/log/#
Anas Naguib
fuente
Me cansé de este enfoque de Noticias y eventos que publican no se muestran
kavie