Receber dados via MQTT na plataforma

Olá , boa noite!
Creio que seja algo simples a minha dúvida, mas não encontrei algo semelhante no fórum.
Eu já fiz algumas aplicações com ESP32 e a plataforma Wnology, como lê sensores e enviar comandos por MQTT. Porém, eu gostaria de saber como fazer para pegar um payload publicado pelo ESP32 e usá-lo em outras aplicações, para outras pessoas usarem os dados. Que tipo de device deve-se usar? que tipo de workflow deve-se usar? como configurar o workflow?

1 Curtida

Olá Luiz Henrique!

Na expressão “para outras pessoas usarem” os dados, se for “visualizar” os dados via dashboards, é desenvolvido um acesso via usuário e senha, onde as pessoas acessarão as telas desenvolvidas por você. Temos um exemplo neste post do Fórum:

Particularmente para “pegar o payload publicado no ESP32 e usá-lo em outras aplicações”
, aí é preciso usar as diversas formas de integração que a Plataforma disponibiliza, por exemplo, usando WebHooks e Integrations.

image

Olá, Luiz.

Você pode usar a API do wgnology para consultar a tabela de dados do device via HTTP.
OU
se é para consumir os dados via MQTT Subscribe, você pode:
-Criar um device standalone e usar ele como como o ID dele como um dispositivo subscribe apenas. Importante usar as chave de acesso que tenha permissão para todos os tópicos.

1 Curtida

ola @NeemiasPereira eu sou da eletrônica e tem alguns termos e situações que estou aprendendo ainda, desculpa se parecer óbvio as dúvidas! Teria algum exemplo de algo deste tipo, eu quero apenas receber os dados na plataforma! eu crie a aplicação e ja estou recebendo o payload.

,


A minha dúvida é como receber esses dados em outra aplicação nova. teria essa possibilidade do jeito que está? tentei usar as soluções propostas mas devo estar cometendo algum erro.

1 Curtida

Bom dia!

Estou em dúvida sobre esta sua frase “… receber esses dados em outra aplicação nova…”.
Não entendi esta dúvida.
Você quer “do mesmo ESP32 enviar dados para mais aplicações na WEGnology”?

Existem as seguintes regras:

  • Somente 1 dispositivo real pode publicar para 1 dispositivo na plataforma
  • Da mesma forma somente 1 dispositivo pode assinar tópicos em um dispositivo na plataforma.

Para seu ESP32 “receber” dados da plataforma existem os comandos, ou seja, a plataforma escreve nos dispositivos através dos comandos, que é o tópico “wnology/DeviceID/command”.

Quando a Plataforma “escreve”, por padrão (e por facilidade) usamos o tópico “command”.
Para isto temos os blocos de workflow “Device Command” por exemplo.

Vamos lá, digamos que você quer ligar e desligar um LED, recebendo um comando da plataforma para o ESP.

Para seu ESP32 fazer isto, é preciso que ele monitore as mensagens que recebe.
Para isto existem as funções de “callback” do mqtt. Por exemplo, mqtt_client.callback()

Trago um trecho de código para ESP32, onde o tópico lido, faz acender ou apagar um LED.
Na variável “*topic” você configura o tópico de comando.
Ao enviar a palavra “on” ele ligará o LED e ao enviar “off” desligará.

void mqttCallback(char *topic, byte *payload, unsigned int length) {
    Serial.print("Message received on topic: ");
    Serial.println(topic);
    Serial.print("Message:");
    String message;
    for (int i = 0; i < length; i++) {
        message += (char)payload[i];  // Convert *byte to string
    }
    // Control the LED based on the message received
    if (message == "on" && !ledState) {
        digitalWrite(LED, HIGH);  // Turn on the LED
        ledState = true;
        Serial.println("LED is turned on");
    }
    if (message == "off" && ledState) {
        digitalWrite(LED, LOW); // Turn off the LED
        ledState = false;
        Serial.println("LED is turned off");
    }
    Serial.println();
    Serial.println("-----------------------");
}

Olá a todos!

Estou com uma dúvida: suponha que eu tenha um tópico onde um dispositivo (publisher) envia dados de temperatura, pressão e nível. Como devo configurar a plataforma para que um segundo dispositivo (subscriber), como um ESP32, receba automaticamente esses dados sempre que o tópico for atualizado? Em outras palavras, meu objetivo é apenas “ler” os dados do tópico, sem necessidade de acionar ou desligar nada.

Desde já, agradeço a ajuda!

Olá!

É possível sim.
Porém é preciso criar dois devices na Plataforma.
Porque cada Device na Plataforma só pode corresponder a um único device externo.

Vamos lá:
1 - Criar 2 devices (pode ser Standalone)
2 - Criar 2 Access Keys (uma para cada um device)

Dica importante:
Para estas access keys não deixaremos fixo o device que receberá os dados, ou seja, selecione a opção para que “todos devices possam usar esta Access Key”

image

3 - Cada device externo irá conectar no seu respectivo device da Plataforma e com sua "access key* .
Agora um device será normalmente o “publicador” no tópico seu, por exemplo:
wnology/123456789abcd/state

e o segundo device, pode subscrever no mesmo tópico:
wnology/123456789abcd/state

Importante, o segundo device deverá somente “subscrever”, caso ele tente publicar no tópico State do outro device, a Plataforma irá desconectar eles.

Veja o exemplo que montei: 2 devices, 2 acces keys e 2 clientes MQTT.

Ao publicar no device da direita, o valor chega à Plataforma.
Como o device da esquerda está subscrevendo o tópico state do outro, ele vai “enxergar” o valor que subiu.