Node.js - MQTT ESP8266

 
Vista:
sin imagen de perfil
Val: 3
Ha disminuido 1 puesto en Node.js (en relación al último mes)
Gráfica de Node.js

MQTT ESP8266

Publicado por leandro (3 intervenciones) el 11/04/2020 00:45:30
En el archivo del servidor index3.js tengo el siguiente código.
Lo que hace es recibir el mensaje que viene de mi celular por un chat de Telegram, ejecutar la funcion interior() que envía el mensaje al NODEMCU, y luego ejecuta la funcion Telegram.

1
2
3
4
5
6
7
8
const bot=new TelgramBot('885934361:AAHZRyCY6KK7ReI6oA5PV5lrx1LTA5zCgVs',{polling:true});
var variable;
bot.on('message',(msg)=>{
console.log(msg); //el mensaje msg es un .json]\
variable=msg.text;
interior(variable);
telegram.telegram(io,ip,variable,msg.chat.id,bot)
});

La funcion telegram  se encuentra en el archivo telegram.js.
Esta funcion se suscribe por metodo mqtt al topic2 y envia el mensaje que recibe al chat de Telegram.
El mensaje que recibe es enviado por el Nodemcu una vez que se cambio el estado de un Led.
Ejemplo:
1
2
3
4
5
    if (payload[2] == 48){ //48 es el0 en codigo ascii
        digitalWrite(5, LOW); // Turn the LED off by making the voltage HIGH
        Serial.println("led D1 apagado");
        client.publish("casa/despacho/estado", "010",MQTTpubQos); //publica mensaje 010 en topic "casa/despacho/estado"
    }

a funcion telegram del archivo telegram.js es la siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module.exports.telegram=function(io,ip,vector,cliente,bot){
var y;
var mqtt = require('mqtt');
var client = mqtt.connect(ip,{clientId:"ESP_60B4E8",clean:true});
console.log("el vector es",vector);
console.log("prueba de io");
client.on('connect',function(){
client.subscribe(topic2,options2,function(){
client.on('message',function(topic2, message){ //abre el cliente de mqtt(ver libreria)
client.setMaxListeners(0); //para establecer limite infinito de mensajes que llegan
x=message.toString(); //Transforma el mensaje obtenido en string
bot.sendMessage(cliente,"dato enviado:"+x); //envia el dato x al chat de Telegram
client.end();
});
})
});
El problema que ocurre es que el mensaje que recibe el client.on es el mensaje anterior.
Es decir si envío la orden de encender LED D2 y luego Led D1. Cuando envío la orden de encender led D1 llega el mensaje que el Led D2 se encendio.
Estuve probando cambiar las opciones, tanto de retencion del mensaje, como de calidad o de limpieza y no logré solucionarlo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder