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

Node-RED中如何在执行动作前检查前置事件是否已发生?

在Node-RED中实现仅门打开后响应摄像头MQTT消息的方案

核心思路是利用Node-RED的**上下文存储(Context)**记录门的状态,收到摄像头MQTT消息时先检查该状态,再决定是否执行后续动作。以下是具体实现步骤:

1. 记录门打开的状态

你已经有生成“门已打开”消息的change节点,在它之后添加节点来持久化状态:

  • 用change节点:设置操作选择Set,目标选择flow.gateOpened(若需跨流程共享状态则选global.gateOpened),值设为true。
  • 可选:如果需要自动重置状态(比如门打开后一段时间失效),在上述change节点后接delay节点(设置延迟时长,比如300秒),再接另一个change节点将flow.gateOpened设为false。也可以在门磁发送关门信号时,用同样的change节点重置状态。

2. 过滤摄像头的MQTT消息

在摄像头的MQTT输入节点之后,添加状态检查节点:

方法一:用switch节点

  • 添加一个条件:选择flow.gateOpened,判断逻辑为is true。
  • 只有满足该条件的消息才会通过switch节点,进入后续动作流程;不满足的消息会被直接丢弃。

方法二:用function节点

复制以下代码到function节点中:

// 检查门是否曾打开过
if (flow.get("gateOpened") === true) {
    // 允许消息继续流转
    return msg;
} else {
    // 丢弃消息,终止流程
    return null;
}

3. 可选:触发后重置状态(避免重复触发)

如果希望门打开后仅响应一次摄像头消息,可在后续动作节点之后,添加change节点将flow.gateOpened设为false,确保下次需要门再次打开才会触发。

内容的提问来源于stack exchange,提问作者jjcasmar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:15:53