Preciso transformar o tópico MQTT, é possível?

Aug 25 2020

Sou novo no MQTT, tenho um corretor Mosquitto MQTT em um Raspberry Pi.

Tenho alguns tópicos de um cliente neste formato /topic/lightonpode ser trueou false.

Por outro lado, posso invocar alguns tópicos como /topic/light_onvalor replaye /topic/light_offvalor replay.

Eu só preciso empurrar um desses dois tópicos se eu obtiver o primeiro tópico verdadeiro ou falso. Existe algum tipo de transformação ou algum cliente de software inscrito no primeiro tópico que publica o segundo tópico.

Respostas

1 JohnS Aug 25 2020 at 03:29

Você pode estar pensando demais nisso. Você pode simplesmente criar um serviço de cliente MQTT que é executado no RasPi separado do servidor mosquitto que se inscreve no tópico que deseja transformar e, em seguida, publica no novo tópico ao receber o original. É perfeitamente normal ter um cliente MQTT rodando na mesma máquina que o servidor MQTT.

Assim, o cliente MQTT assinaria /topic/lightone publicaria /topic/light_onou /topic/light_offapós processar o valor do que foi recebido. O serviço de transformação do cliente MQTT pode ser um programa Python simples ou estar em qualquer idioma de sua escolha usando uma biblioteca de cliente MQTT.

1 hardillb Aug 25 2020 at 03:51

Primeiro, é uma prática ruim começar os tópicos com um líder /(embora permitido na especificação, acaba causando problemas mais tarde quando você começa a usar coisas como assinaturas compartilhadas).

Como John S sugeriu em sua resposta, isso não é algo que você realmente deseja que o corretor faça; você deve fazer isso sozinho com um cliente separado.

Supondo que você esteja executando o Rasbian completo (RaspberryPi OS), você tem um aplicativo chamado Node-RED instalado. Este é um ambiente de programação baseado em fluxo gráfico que foi praticamente construído para fazer esse tipo de coisa.

Você pode arrastar um nó MQTT de entrada para a tela junto com um nó de alteração ou função para fazer a conversão e atualizar o tópico antes de passá-lo para um nó de saída MQTT para publicar a nova mensagem.