Несколько SUB в файле mqtt JS - PullRequest
0 голосов
/ 25 января 2020

Итак, я делаю проект для субъекта, и у меня есть файл (погода. js), в котором публикуются две переменные, одна в локальной / температура, а другая в местное / время. Я делаю файл, который подписывается на них обоих и работает со значениями (жалюзи. js), но он смешивает их. Я отправляю температуру и час одновременно, и в подписчике он дает 1-е значение локальной переменной температуры (внутри жалюзи. js), а затем локальной переменной времени. Что я могу сделать?

Вот погода. js файл.

    //Variables
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://localhost:1884')
var topic_temp = 'local/temperature'
var topic_time = 'local/time'


//Publisher (topic)
client.on('connect',() => {
    setInterval(() => {
        console.log('--------------------');
        //creating random temperatures between -5 and 5
        var temperature = Math.floor((Math.random() * 30) + 5);
        var msg1 = temperature.toString();

        //sending the temperature values
        client.publish(topic_temp,msg1);
        console.log('Temperature is ' + msg1 + 'ºC');

        //Console log sent message
        console.log('Temperature sent!');

        setTimeout(function(){
            //creating random time value 24h format
            var time = Math.floor((Math.random() * 24));
            var msg2 = time.toString();

            //sending time value
            client.publish(topic_time,msg2);
            console.log('Time is ' + msg2 + 'h');

            //Console log sent message
            console.log('Time sent!');
            console.log('--------------------');
        }, 3000);


},15000)
})

А это блайнды. js файл.

//Variables
var mqtt = require('mqtt')
var client = mqtt.connect('mqtt://localhost:1884')

var topic_sub1 = 'local/temperature'
var msg1 = false;
var topic_sub2 = 'local/time'
msg2 = false;

var topic_post = 'appliances/blinds'

var blinds = false;

//Subscribing to the topic_sub1
client.on('connect',() => {
    client.subscribe(topic_sub1)
})

//Receiving temp messages
client.on('message',(topic_sub1,temperature) => {
    if (msg2 == false) {
        msg1 = true;
        temp = temperature.toString();
        console.log('--------------------');
        console.log(temp + 'ºC');
    }
})

//Subscribing to the topic_sub2
client.on('connect',() => {
    client.subscribe(topic_sub2)
})

//Receiving time messages
client.on('message',(topic_sub2,times) => {
    if (msg1) {
        msg2 = true;
        time = times.toString();
        console.log(time + 'h');
        console.log('--------------------');
        blind();
    }
})


//blinds function
function blind()    {
    if (temp > 28 || time < 9) {
        blinds = true;
        console.log('Blinds are CLOSED');
    }else if (temp > 28 || time > 19){
        blinds = true;
        console.log('Blinds are CLOSED');
    }else{
        blinds = false;
        console.log('Blinds are OPEN');
    }

    //sending the temperature values
    client.publish(topic_post,blinds.toString());

    msg2 = false;
    msg1 = false;
}

1 Ответ

0 голосов
/ 25 января 2020

Вы не можете добавить несколько client.on('message') слушателей, может быть только один.

Так что просто добавьте оператор if в обратный вызов, чтобы проверить, какие topi c сообщение пришло.

client.on('message', (topic, message) => {
   if (topic == topic_sub1) {
     //handle temp
   } else if ( topic == topic_sub2) {
     //handle time
   }
})
...