农场环境看板一打开,就出现温度或湿度数值,看起来像是设备刚发来数据。但在使用MQTT的系统中,这个数值也可能是服务器保存的保留消息。界面有内容,和传感器此刻仍在正常采样,是两件需要分别核实的事。

HiveMQ的MQTT说明指出,服务器对每个主题保存最近一条带保留标记的消息,新订阅者订阅匹配主题后可以收到它。它表达的是该主题最近一次保留的状态,不一定是最新一次实际变化。[1] 这一机制适合让新连接的界面先获得上下文,却不能单独证明消息对应的现场情况仍未改变。

以一个明确虚构的演示为例:九点记录了一条棚内温度消息,九点二十打开看板时收到保留值。如果界面只显示“接收于九点二十”,读者容易以为传感器也是九点二十测量的。较清楚的呈现是把采样时间与接收时间分开;如果消息没有提供可信的采样时间,就显示未提供,不把界面收到消息的时间填到采样栏。

开发联调时,可以为展示用数据附上设备标识、采样时间、单位及递增序号等字段,再根据项目实际协议验证。这里的字段是本文提出的演示设计,不是MQTT自动为任意业务载荷生成的内容,也不说明任何传感器已有这些能力。缺字段时应如实暴露缺口,而不是用默认值把页面填满。

一种只针对测试环境的观察方法是:先记录一次已知消息,再让新的只读客户端订阅,检查它收到的状态与时间标记;随后观察新的实际消息到达时界面怎样更新。测试记录说明使用的协议版本、主题与演示数据,避免把开发环境的表现当成生产设备已经验收。本文不涉及改变灌溉、施肥或温控设备的动作。

看板还可以把“收到数据”和“数据是否足够新”分别显示。前者有明确的接收证据,后者需要项目根据业务要求确定规则。不能随意给所有作物、所有监测项目规定同一个过期时长,更不能只因页面保持绿色,就直接触发现场操作。

保留消息解决的是新订阅者缺少先前状态的问题。对于农业物联网展示,真正有用的界面还应让使用者看见这个数值从哪里来、什么时候采样、哪些信息尚未确认。这样既保留了打开即有内容的便利,也减少把历史状态误读为实时观测的机会。

信息来源

本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。