Listar clientes inscritos em um determinado tópico no servidor Mosquitto

8

Essa é a pergunta geral, mas vou fornecer o cenário aqui.

Estou executando o servidor Mosquitto para fornecer o mqtt comm entre os módulos de retransmissão esp ( Sonoff da Itead ) e o Home Assistant . Na maioria das vezes, funciona muito bem. Cada módulo tem seu próprio tópico e há tantas configurações "leves" no HASS quanto os módulos, para que possam ser controlados a partir da interface da Web por botões de alternância individuais.

Porém, experimentei situações de estado inconsistentes em que a luz está realmente acesa e a alternância no HASS é mostrada como desligada (e a situação oposta também). Ao inspecionar os logs, descobri que o Mosquitto não está publicando determinadas mensagens no HASS (que devem ser assinadas em todos os tópicos de estado do módulo). Mais especificamente, dados 4 módulos e seus tópicos de estado correspondentes ( state/sonoff_xx/POWER), o HASS parece ser inscrito apenas nos módulos 2 e 4, mas não 1 e 3. A seguir, o comportamento esperado para o módulo 4, o mesmo pode ser verificado para o outro módulo de trabalho, mas a publicação no HASS está ausente para os outros dois.

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 não é uma pergunta sobre o HASS e os módulos de retransmissão, mas sobre como cavar o status do MQTT Server que deveria ter certos clientes inscritos, mas, observando os logs, não o fez.

Dario
fonte

Respostas:

6

Não, você não pode obter uma lista de quais clientes estão inscritos no que sai do mosquito.

O mais provável aqui é que o HASS não esteja assinando, em vez de o mosquito não publicar em um cliente inscrito.

Você pode fazer com que o mosquitto faça logon sempre que uma solicitação de assinatura for feita, que você poderá usar para criar uma lista.

log_type subscribe, unsubscribe

Isso registrará todos os clientes que assinam / cancelam a assinatura de quais tópicos.

hardillb
fonte
1
Já estou registrando todos os níveis ( log_type allin mosquitto.conf); na verdade, verifiquei a entrada de inscrição conectando-me a partir de um console enquanto estiver em journalctl -fexecução. Porém, não consegui encontrar entradas sobre as assinaturas do HASS porque isso aconteceu dias atrás e o journald não está configurado como persistente; portanto, eu tinha em mãos apenas a inicialização atual. Essa é a razão pela qual eu esperava inspecionar o status do Mosquitto.
Dario
1
Você não deveria se concentrar no nível de QoS. Meu palpite é que as mensagens enviadas pelos nós (unidades Sonoff) estão sendo enviadas usando QoS = 0, o que significa que são enviadas apenas uma vez. Não é confiável nesse sentido. Eu tentaria aumentar esse valor até encontrar um bom nível. Os estados do switch devem estar usando QoS 1 ou 2 na minha opinião. Sensor valores que é ok perder um ou dois de vez em quando deve usar QoS 0.
Jimmy Westberg
3

Você pode ativar o log de mosquito para todos e assinar o log. Você encontrará mensagens que podem ser decodificadas para cada ação do cliente, como conectar, desconectar, assinar e publicar até erros.

você irá definir

log_dest topic
log_type all

no mosquitto.conf, você assinará

$SYS/broker/log/#
Anas Naguib
fonte
Eu cansei dessa abordagem Cadastrando e eventos de publicação não são mostrados
kavie