如何借助MQTT仅在设备状态变化时发送数据?
仅在数据变化时发布MQTT数据的实现方案
要实现仅在数据值发生变化时发布MQTT消息,核心是记录上一次的状态值,每次获取新状态后与历史值对比,仅当两者不同时执行发布操作。
修改后的代码如下:
const client = mqtt.connect(connectUrl, options); // 存储上一次的设备状态,初始值设为null确保首次状态一定会发布 let lastDeviceState = null; client.on('connect', () => { setInterval(() => { const deviceState = getDeviceState(0, 1); // 仅当新状态与上次状态不同时才发布 if (deviceState !== lastDeviceState) { client.publish('state', deviceState); // 更新历史状态为当前状态 lastDeviceState = deviceState; } }, 1000); }); // ... function getDeviceState(min, max) { const randomInt = Math.floor(Math.random() * (max - min + 1) + min); if(randomInt === 0) { return 'off'; } return 'on'; }
关键改动说明
- 新增
lastDeviceState变量保存历史状态,初始值设为null,保证第一次获取到的状态一定会被发布。 - 在定时器逻辑中增加状态对比判断,只有当新状态与历史状态不一致时,才执行MQTT发布操作,并同步更新历史状态。
这种方式可以有效避免重复发送相同的状态数据,仅在设备状态发生变化时推送MQTT消息。
内容的提问来源于stack exchange,提问作者Dev M
相关产品推荐
相关产品推荐

