• 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 并反馈到顶部分支。如果它接收到 "reset"msg.payload,则该节点也配置为停止发送。由于这是第一个 Trigger 节点在接收到传感器消息时发送的初始消息,这将导致第二个 Trigger 节点在传感器恢复发送其消息时被重置。