Javascript mqtt JS文件中的多个子文件
所以,我为一个主题做了一个项目,我有一个文件(weather.js),它发布了两个变量,一个是local/temperature,另一个是local/time。我正在制作一个文件,订阅这两个文件并使用值(blinds.js)进行操作,但它混合了它们。我同时发送温度和小时,在订阅服务器中,它给温度局部变量(inside blinds.js)第一个值,然后给时间局部变量。我能做什么 这是weather.js文件Javascript mqtt JS文件中的多个子文件,javascript,mqtt,mosca,Javascript,Mqtt,Mosca,所以,我为一个主题做了一个项目,我有一个文件(weather.js),它发布了两个变量,一个是local/temperature,另一个是local/time。我正在制作一个文件,订阅这两个文件并使用值(blinds.js)进行操作,但它混合了它们。我同时发送温度和小时,在订阅服务器中,它给温度局部变量(inside blinds.js)第一个值,然后给时间局部变量。我能做什么 这是weather.js文件 //Variables var mqtt = require('mqtt') v
//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)
})
这是blinds.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;
}
//变量
var mqtt=require('mqtt')
var client=mqtt.connect('mqtt://localhost:1884')
变量主题_sub1='本地/温度'
var msg1=假;
var topic_sub2='本地/时间'
msg2=false;
var topic_post=‘电器/百叶窗’
var盲=假;
//订阅主题_sub1
client.on('connect',()=>{
client.subscribe(主题_sub1)
})
//接收临时消息
client.on('消息',(主题1,温度)=>{
如果(msg2==false){
msg1=真;
温度=温度。toString();
console.log('-----------------------');
控制台日志(温度+'ºC');
}
})
//订阅主题_sub2
client.on('connect',()=>{
client.subscribe(主题_sub2)
})
//接收时间信息
client.on('消息',(主题2,时间)=>{
如果(msg1){
msg2=真;
time=times.toString();
console.log(时间+h');
console.log('-----------------------');
盲();
}
})
//百叶窗功能
函数盲(){
如果(温度>28 |时间<9){
盲=真;
console.log(“百叶窗关闭”);
}否则如果(温度>28 |时间>19){
盲=真;
console.log(“百叶窗关闭”);
}否则{
盲=假;
控制台日志(“百叶窗打开”);
}
//发送温度值
publish(topic_post,blinds.toString());
msg2=false;
msg1=假;
}
您不能添加多个客户端。在('message')
侦听器上,只能有一个
因此,只需在回调中添加一个if
语句,检查消息到达的主题
client.on('message', (topic, message) => {
if (topic == topic_sub1) {
//handle temp
} else if ( topic == topic_sub2) {
//handle time
}
})