如何周期性地生成一个随机值并使用MQTT协议发布?
How to generate a random values periodically and publish it using MQTT protocol?
我想每 1 秒完全生成不同的随机值并将其发布到 MQTT 协议。
该代码正在运行,但它一直在发送最后一个值如何让它每 1 秒发送一个不同的值?
var mqtt = require('mqtt')
var Broker_URL = 'mqtt://localhost';
var client = mqtt.connect(Broker_URL);
var MIN_PER_RANK =75
var MAX_PER_RANK =100
client.on('connect', function () {
console.log("MQTT connected "+ client.connected);
})
class virtualsensor {
sendStateUpdate (newdata) {
client.publish("testtopic", newdata)
}
}
let vs = new virtualsensor()
let newdata = '';
for (var i=0; i<5; i++){
newdata= String(Math.floor(Math.random() * (MAX_PER_RANK - MIN_PER_RANK + 1) + MIN_PER_RANK));
vs.sendStateUpdate(newdata)
}
var interval = setInterval(function(){vs.sendStateUpdate(newdata)},1000);
输出:
testtopic 81
testtopic 76
testtopic 89
testtopic 100
testtopic 96
testtopic 96
testtopic 96
testtopic 96
testtopic 96
testtopic 96
testtopic 96
testtopic 96
testtopic 96
提前致谢。
for 循环仅生成 5 个值,然后 setInterval()
再次重用该循环中的最后一个值。
for 循环在这里并没有真正做任何有用的事情,它会在一秒钟内发布 5 个“随机”值(这不是您要求的)然后 setInterval()
只是重复发送一遍又一遍的最后一个值。
删除for循环并将随机值生成器移动到传递给setInterval()
的函数
var interval = setInterval(function(){
newdata= String(Math.floor(Math.random() * (MAX_PER_RANK - MIN_PER_RANK + 1) + MIN_PER_RANK));
vs.sendStateUpdate(newdata)
},1000);
我想每 1 秒完全生成不同的随机值并将其发布到 MQTT 协议。 该代码正在运行,但它一直在发送最后一个值如何让它每 1 秒发送一个不同的值?
var mqtt = require('mqtt')
var Broker_URL = 'mqtt://localhost';
var client = mqtt.connect(Broker_URL);
var MIN_PER_RANK =75
var MAX_PER_RANK =100
client.on('connect', function () {
console.log("MQTT connected "+ client.connected);
})
class virtualsensor {
sendStateUpdate (newdata) {
client.publish("testtopic", newdata)
}
}
let vs = new virtualsensor()
let newdata = '';
for (var i=0; i<5; i++){
newdata= String(Math.floor(Math.random() * (MAX_PER_RANK - MIN_PER_RANK + 1) + MIN_PER_RANK));
vs.sendStateUpdate(newdata)
}
var interval = setInterval(function(){vs.sendStateUpdate(newdata)},1000);
输出:
testtopic 81
testtopic 76
testtopic 89
testtopic 100
testtopic 96
testtopic 96
testtopic 96
testtopic 96
testtopic 96
testtopic 96
testtopic 96
testtopic 96
testtopic 96
提前致谢。
for 循环仅生成 5 个值,然后 setInterval()
再次重用该循环中的最后一个值。
for 循环在这里并没有真正做任何有用的事情,它会在一秒钟内发布 5 个“随机”值(这不是您要求的)然后 setInterval()
只是重复发送一遍又一遍的最后一个值。
删除for循环并将随机值生成器移动到传递给setInterval()
var interval = setInterval(function(){
newdata= String(Math.floor(Math.random() * (MAX_PER_RANK - MIN_PER_RANK + 1) + MIN_PER_RANK));
vs.sendStateUpdate(newdata)
},1000);