如何使Function 1仅在mode:0注入时触发且每日仅执行一次?
如何在Node-RED中实现每日特定时间仅触发一次函数计算
我有一个持续变化的BMS SOC数值,可选择在每次变化时(高频)或每5秒注入新值,但希望每24小时仅使用一次当前数值,让function 1仅在mode:0注入时触发,避免每次BMS SOC数值注入时重复执行。
我的使用场景是:每天晚上22:15需要计算电池在次日早晨充满所需的充电电流。试过Delay节点,但它只能限制参数注入频率,没法让消息在特定时间传递。
可行解决方案:
定时触发+最新值存储组合
- 添加一个Inject节点,设置为「重复」->「每天」,时间固定为22:15,消息内容设为
{"mode":0},这个节点作为function 1的唯一触发源。 - 在
BMS SOC的数值输出节点后接一个Trigger节点,配置为「保持状态」,这样会始终保留最新的BMS SOC数值。 - 当定时Inject节点触发时,让
function 1读取Trigger节点存储的最新数值,完成充电电流计算。
- 添加一个Inject节点,设置为「重复」->「每天」,时间固定为22:15,消息内容设为
用Switch节点过滤触发条件
在function 1前添加Switch节点,设置规则为仅当消息中包含mode:0时才允许通过,直接屏蔽BMS SOC数值变化产生的触发请求,只响应每日定时的mode:0消息。上下文存储替代方案
如果Trigger节点不够灵活,可在BMS SOC数值更新时用Function节点把值存入全局上下文:global.set("latestSOC", msg.payload); return msg;然后在定时Inject节点后加一个Function节点,取出最新值传入
function 1:msg.payload = global.get("latestSOC"); return msg;
内容的提问来源于stack exchange,提问作者Jan Ossowski
相关产品推荐
相关产品推荐

