一、触发条件基础:触发条件的定义、类型与生命周期

大家好,我是这次课程的主讲工程师。做智能场景联动这么多年,我见过太多「场景不生效」的翻车现场。排查到最后,十有八九是触发条件没搞明白。今天咱们就把这块地基打牢。

1.1 触发条件到底是什么?

说白了,触发条件就是「场景启动的开关」。你设定了一个场景——比如「回家模式」——系统怎么知道该执行了?靠的就是触发条件。

我习惯把触发条件比作门卫。门卫看到特定的人(设备状态变化)、在特定的时间(定时)、或者收到特定的通知(事件),才会开门放行。场景联动也一样,触发条件满足了,动作才会被执行。

核心定义:触发条件是指引起场景联动开始执行的信号或状态变化。没有触发条件,场景就是一堆死规则。

嗯,这里要注意:触发条件和执行条件不是一回事。触发条件是「什么时候开始干活」,执行条件是「干活前再检查一遍」。很多新手把两者混了,结果场景要么乱执行,要么死活不执行。

1.2 触发条件的三种类型

我在实际项目中归纳过,触发条件就三大类。你想想看,是不是所有场景都逃不出这个框架?

1.2.1 设备触发

这是最常见的一种。设备的状态发生变化,触发场景执行。

  • 属性变化触发:比如温度传感器从25℃变成30℃
  • 状态变化触发:比如门窗传感器从「关闭」变成「打开」
  • 数值阈值触发:比如PM2.5超过100μg/m³

我曾经做过一个项目,用户反映「开窗时空调不关」。排查后发现,触发条件写的是「门窗传感器状态=打开」,但传感器上报有2秒延迟,空调已经先启动了。后来加了0.5秒的防抖延迟才解决。

我的经验:设备触发尽量用「变化后」而不是「等于」。比如「温度>30℃」比「温度=30℃」更可靠,因为传感器可能跳变,直接等于容易漏触发。

1.2.2 时间触发

按时间点或时间周期来触发场景。这类触发不依赖设备状态,纯粹看时间。

子类型 说明 示例
固定时间 每天/每周固定时刻触发 每天7:00开启窗帘
相对时间 相对于某个事件的时间偏移 日落前30分钟开灯
周期定时 按固定间隔重复触发 每2小时提醒喝水
倒计时 设定时长后触发一次 离家后10分钟关闭所有电器

我个人习惯把时间触发分成「硬时间」和「软时间」。硬时间是固定时刻,比如早上7点;软时间是相对时间,比如日出日落。软时间需要配合地理位置计算,精度要求高的话,建议用专业气象服务的数据。

1.2.3 事件触发

事件触发比较特殊,它不是设备状态变化,而是系统内部或外部发生的「消息」。比如安防报警、设备离线、固件升级完成等。

  • 系统事件:网关重启、网络断开/恢复、设备上下线
  • 告警事件:烟雾报警、燃气泄漏、非法入侵
  • 用户自定义事件:比如通过API推送的「离家模式已激活」

注意:事件触发通常是一次性的,不像设备触发可以持续监测。事件发完就没了,如果场景没来得及响应,事件就丢失了。我曾经遇到过网关重启后,所有告警事件都丢了,导致安防场景没触发。后来加了事件持久化才解决。

1.3 触发条件的生命周期

搞清楚了类型,还得知道触发条件是怎么「活」的。我画了一张图,帮你理解触发条件从创建到销毁的全过程。

触发条件生命周期 ① 创建 用户配置触发规则 ② 注册 系统注册监听器 ③ 监听 等待条件满足 ④ 触发 执行场景动作 各阶段详解: ① 创建阶段:用户在App或后台配置触发条件。比如选择「门窗传感器」→「状态变为打开」。 ② 注册阶段:系统将触发条件注册到对应的监听服务。设备触发注册到设备管理服务,时间触发注册到定时服务,事件触发注册到事件总线。 ③ 监听阶段:系统持续监听条件是否满足。这是最长的阶段,可能持续几秒、几天甚至几个月。监听期间系统会消耗资源,所以不建议创建大量无效触发条件。 ④ 触发阶段:条件满足,系统执行场景动作。触发后,根据配置决定是否继续监听(一次性触发还是重复触发)。 ⑤ 销毁阶段(可选):用户删除场景、场景过期、或系统资源回收时,触发条件被销毁,释放监听资源。 注:一次性触发在触发后自动进入销毁阶段;重复触发则回到监听阶段继续等待。

这张图我画了好几次才满意。你看,触发条件不是「配完就完了」,它有一个完整的生命周期。我见过不少开发者只关注「创建」和「触发」,忽略了「注册」和「监听」阶段的资源管理,结果系统里堆了几百个僵尸监听,网关内存爆了。

1.4 触发条件的核心特性

理解了生命周期,咱们再聊聊触发条件的几个关键特性。这些特性决定了场景的稳定性和可靠性。

  • 唯一性:同一个触发条件不能重复注册。我遇到过用户同一个场景配了两次「温度>30℃」,结果每次触发执行两次动作。
  • 幂等性:条件满足一次,只触发一次。有些设备状态变化快,比如人体传感器频繁触发,需要做防抖处理。
  • 时效性:触发条件有生效时间窗口。比如「只在晚上生效」的触发条件,白天即使条件满足也不触发。
  • 优先级:多个触发条件同时满足时,按优先级决定执行顺序。这个在复杂场景里特别重要。

避坑指南:我曾经做过一个全屋智能项目,用户配了50多个场景。结果网关每天凌晨3点准时卡死。排查发现,有20多个场景用了「每5分钟触发一次」的时间触发,凌晨3点正好是系统定时任务高峰期,所有触发条件同时检查,把网关跑崩了。后来改成错峰触发,问题解决。

1.5 触发条件与执行条件的区别

最后,我必须强调一下这个容易混淆的点。很多新手把触发条件和执行条件混为一谈,结果场景逻辑一团糟。

对比项 触发条件 执行条件
作用 决定「什么时候开始」 决定「能不能执行」
检查时机 持续监听 触发时检查一次
示例 门窗传感器打开 当前时间在18:00-06:00之间
关系 先满足触发条件 再检查执行条件

你想想看,如果「门窗传感器打开」既是触发条件又是执行条件,那场景会变成什么样?每次开门都触发,但执行条件检查时发现「门窗传感器已经打开了」,条件满足,执行。然后再次触发...死循环了。所以设计场景时,一定要把触发和执行分开考虑。

好了,触发条件的基础就讲到这里。记住:触发条件是场景的「启动钥匙」,选对类型、管好生命周期、分清触发和执行,你的场景联动就成功了一半。

核心总结:

  • 触发条件 = 场景启动的开关
  • 三种类型:设备触发、时间触发、事件触发
  • 生命周期:创建 → 注册 → 监听 → 触发 → 销毁
  • 触发条件 ≠ 执行条件,两者要分开设计
可可精品资料库