首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定期生成随机值并通过MQTT协议发布?

如何定期生成随机值并通过MQTT协议发布?
EN

Stack Overflow用户
提问于 2020-12-31 18:38:30
回答 1查看 114关注 0票数 0

我希望每隔1秒重复生成不同的随机值,并将其发布到MQTT协议。代码正在工作,但它一直在发送最后一个值,如何让它每隔1秒发送一个不同的值?

代码语言:javascript
复制
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);

输出:

代码语言:javascript
复制
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

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-31 18:52:12

for循环只生成5个值,然后setInterval()再次重用该循环中的最后一个值。

for循环在这里并没有做任何有用的事情,它将在一秒内发布5个“随机”值(这不是您所要求的),然后setInterval()只是一遍又一遍地重复发送最后一个值。

删除for循环,并将随机值生成器移动到传递给setInterval()的函数

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65519740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档