You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 16:12:45