• V
 

当数据流停止发送时发送占位符消息

问题

您有一个传感器以固定间隔发送消息的数据流。如果传感器停止发送消息,您希望以相同的速率发送占位符消息。

例如,传感器数据可能正在为仪表板图表提供数据。如果传感器停止发送,图表将停止更新。因此,需要占位符消息,以便图表以 0 值更新,以突出显示传感器已停止工作。

解决方案

使用 Trigger 节点检测消息在定义的时间间隔后是否未到达,并使用第二个 Trigger 节点以固定间隔发送占位符消息。

示例

[{"id":"9ccdf268.c96ff","type":"inject","z":"ac14500e.2c57d","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":100,"y":1660,"wires":[["38950a5.28d15f6","2c532f67.0330e"]]},{"id":"38950a5.28d15f6","type":"debug","z":"ac14500e.2c57d","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":610,"y":1660,"wires":[]},{"id":"2c532f67.0330e","type":"trigger","z":"ac14500e.2c57d","op1":"reset","op2":"true","op1type":"str","op2type":"bool","duration":"2","extend":true,"units":"s","reset":"","bytopic":"all","name":"","x":260,"y":1700,"wires":[["e4e42b96.97a338"]]},{"id":"e4e42b96.97a338","type":"trigger","z":"ac14500e.2c57d","op1":"0","op2":"0","op1type":"num","op2type":"str","duration":"-2","extend":false,"units":"s","reset":"reset","bytopic":"all","name":"","x":420,"y":1700,"wires":[["38950a5.28d15f6"]]}]

讨论

在示例流程中,顶部分支表示消息的正常流程,从 Inject 节点到 Debug 节点。

消息也被传递到流程的第二个分支上的第一个 Trigger 节点。该节点配置为首先发送一个 "reset" 的有效载荷,然后等待 2 秒钟再发送超时消息。还选择了在收到新消息时延长延迟的选项。这意味着只要消息继续到达,节点就不会做任何事情。在最后一条消息到达 2 秒后,它将发送超时消息。

超时消息输入到第二个 Trigger 节点。此节点配置为每两秒发送 0 并反馈到顶部分支。该节点还配置为在收到 msg.payload"reset" 时停止发送。由于这是第一个 Trigger 节点在收到传感器消息时发送的初始消息,这将导致第二个 Trigger 节点在传感器恢复发送自己的消息时重置。