4、场景引擎设计:条件触发、动作执行、场景嵌套的逻辑设计
场景引擎,说白了就是全屋智能的「大脑」。
我做了这么多年智能家居项目,见过太多「伪智能」——灯能自动亮,但关不掉;空调能远程开,但不知道你出门了。真正好用的智能,靠的就是场景引擎里那套严谨的逻辑。
今天咱们就聊聊,怎么设计一个靠谱的场景引擎。
4.1 条件触发:让设备「知道」该干活了
条件触发,就是场景启动的「开关」。我习惯把它分成三类:
- 设备状态触发:比如门磁打开、人体传感器检测到有人、温湿度传感器数值超标。
- 时间触发:比如每天下午6点、日落时分、或者倒计时30分钟后。
- 复合触发:多个条件同时满足才触发,比如「有人经过 + 光照低于50lux」才开灯。
核心原则:条件触发要「准」不要「多」。一个场景里条件超过3个,用户就记不住了。
我在项目中遇到过一个问题:用户设置了「晚上回家自动开灯」,结果白天回家灯也亮了。原因就是没加光照条件。嗯,这里要注意——条件之间默认是「与」关系,但有些场景需要「或」关系,比如「门磁打开 或 人体传感器检测到人」都算有人进入。
4.2 动作执行:设备「该做什么」
条件触发了,设备就得动起来。动作执行我一般分这几类:
| 动作类型 | 示例 | 说明 |
|---|---|---|
| 开关控制 | 打开客厅灯、关闭窗帘 | 最基础的动作 |
| 参数调节 | 空调设为26℃、灯光亮度80% | 需要指定具体数值 |
| 延时执行 | 关灯后5分钟关闭空调 | 时间精度建议到秒 |
| 联动触发 | 执行完本场景后触发另一个场景 | 这就是场景嵌套的入口 |
你想想看,动作执行最怕什么?冲突。比如一个场景说「开灯」,另一个场景说「关灯」,同时触发就打架了。我建议给每个动作加一个优先级,数值越小优先级越高。我曾经遇到一个别墅项目,就是因为没做优先级,半夜灯自己乱闪,业主差点投诉到315。
小技巧:动作执行建议支持「延迟执行」和「条件等待」。比如「开窗帘后,等光照传感器数值大于500lux再关灯」,这样更智能。
4.3 场景嵌套:让场景「会思考」
场景嵌套,就是在一个场景执行过程中,触发另一个场景。听起来复杂,其实很常见:
- 「离家模式」执行时,先关空调,再关灯,最后启动安防——这就是嵌套了三个子场景。
- 「观影模式」执行时,先关窗帘,再调暗灯光,最后打开投影仪——每个动作都可以是一个独立场景。
我个人习惯把场景嵌套设计成树形结构:
离家模式(根场景)
├── 关闭所有灯光(子场景1)
│ ├── 关闭客厅灯
│ ├── 关闭卧室灯
│ └── 关闭厨房灯
├── 关闭空调(子场景2)
│ ├── 关闭客厅空调
│ └── 关闭卧室空调
└── 启动安防(子场景3)
├── 布防门磁
└── 启动摄像头
这里有个坑——循环嵌套。比如场景A触发场景B,场景B又触发场景A,那就死循环了。我早期一个项目就踩过这个坑,设备疯狂开关,最后只能断电重启。所以设计时一定要加嵌套深度限制,我一般限制最多5层,超过就报错。
警告:场景嵌套一定要做「防抖」处理。同一个条件在短时间内(比如3秒内)重复触发,只执行一次。否则人体传感器稍微晃一下,灯就闪个不停。
4.4 核心逻辑流程图
下面这张图,是我自己项目里用的场景引擎核心逻辑。你看一眼就明白了:
这张图我用了好几年,每次给团队讲场景引擎,直接画一遍就清楚了。核心就三步:检查条件 → 执行动作 → 判断嵌套。别搞复杂了。
4.5 避坑指南
最后,分享几个我踩过的坑:
- 条件重复触发:同一个传感器在1秒内上报多次状态,场景就反复执行。解决办法是加「去重窗口」,比如3秒内相同条件只触发一次。
- 动作执行超时:有些设备响应慢(比如窗帘电机),场景引擎要设置超时时间,我一般设10秒,超时后报错并跳过该动作。
- 嵌套死循环:前面说了,加深度限制。另外建议在日志里记录每次嵌套的路径,方便排查问题。
- 用户手动干预:用户手动操作了某个设备,场景引擎应该暂停对该设备的自动控制一段时间(比如5分钟),否则用户会觉得很烦。
我的习惯:每次上线新场景,先跑一周的「模拟模式」——只记录日志,不实际控制设备。确认逻辑没问题了,再切换到正式模式。这招帮我避免了好几次线上事故。
好了,场景引擎的核心逻辑就这些。说白了就是「如果…那么…否则…」的升级版,但加上嵌套和防抖,就能做出很聪明的全屋智能。你动手试试,从最简单的「人来灯亮」开始,慢慢加条件、加嵌套,很快就能搭出自己的场景引擎。
可可精品资料库