🎉 文章更新日志
2025/01/08 AInice 电子围栏传感器相关。
2024/12/22 米家离家判断。
2024/11/20 修改展示案例。
2024/11/05 补充替换一些表达不清晰的配图。
2024/11/05 全文推倒重写。
2024/10/25 补充一些小技巧、重写案例部分的内容。
2024/03/03 补充米家与小米手机联动部分的内容。
2023/11/10 补充极客版虚拟事件、更新案例内容、替换配图。
2023/02/09 初始化文章,更换主图、配图。
一、简介
极客版依托于中枢网关,相较于米家,它提供了更自由、更强大的功能。
可以预见,米家在智能化方面已经事实上放弃了 Zigbee 路线,新品主要采用 WIFI 协议和蓝牙 MESH 协议。在此背景下,米家推出了小米智能中枢网关,官方宣称该网关可同时连接 200 个蓝牙 Mesh 设备和 100 个蓝牙设备,并且部分自动化功能可以在本地运行,即使在外网缺失时也能正常运行。
与米家客户端相比,极客版展示了智能家居的所有预设属性、方法和事件,并且支持查询、判断、逻辑运算等流程处理能力,能够实现许多在米家 APP 中不便实现的功能。例如,在典型的 if-else 流程中,米家 APP 需要将判断拆分成两条自动化规则,而极客版则可以直接处理。
极客版以卡片为主,主要分为事件节点和状态节点两类。通过在不同卡片间连接输入和输出节点,用户可以设计完整的自动化流程。尽管名为极客版,但总体上手难度较低。最后需要强调的是,极客版是对米家自动化场景的补充和增强,不能完全替代米家自动化场景。两者结合使用,效果会更佳。
二、卡片
2.1 卡片类型
✨ 下面简单介绍几个需要特别注意的卡片类型。
循环卡片
循环卡片可以按照设定的时间间隔循环发出信号,并支持停止循环操作。一个使用场景是通过循环查询来间接实现无法作为触发的智能设备的触发功能。例如,对于米家的饮水机,我希望它能在水箱没水时提醒我,但饮水机无法直接作为触发设备,这时可以通过循环查询来实现这一功能。
由于目前极客版没有类似任务管理器的功能,使用循环卡片时需要谨慎。原则上应尽量避免使用秒级循环。此外,还可以在满足一定条件下减缓循环的频率。一个模拟示例是:当循环连续触发三次后,停止循环运行,并在 30 秒后重新启动循环。
延时卡片
在使用延时卡片时,我曾想到一个问题:如果某个自动化流程很长,执行一次所需的时间也很久,那么当该自动化流程第二次触发时,如果上一次流程还没有完全执行完毕,第二次触发会放弃上一次流程中的未完成节点并直接重新开始吗?
正确答案是:延时会立即重置。由于延时没有停止的概念,只能重置或结束。因此,当第一个延时被重置但还未到达第二个延时时,第二个延时会继续保留上一次的执行状态,这可能会导致听到两次滴滴声的情况。
我们不推荐使用长期延时卡片,如果条件允许,请尽量使用状态维持卡片。
自定义状态卡片
自定义状态卡片可以视为一个布尔类型的变量,相较于事件,它更常用于表示状态,可以记录和存储一个值。作为状态使用时,如果没有初始化,默认值为假。如下图所示,音响会播放“哒哒”声。
状态维持卡片
状态维持了一段时间:输入状态和限定时间,输出状态或事件。核心在于状态的保持。作为事件时,它有点类似于延时和判断卡片的结合体,也可以用于减少误判,延缓事件的立即执行。
变量卡片
变量分为文本和数值两类。在进行数值运算时,需要特别注意精度问题,可以使用函数将值四舍五入以确保准确性。
2.2 使用小技巧
减少循环卡片的触发
上面的循环卡片自动化实现了白天最多三次的水箱缺水提醒,尽管这种循环设计不够优雅。如果再加入一个存在传感器,效果会更好:
亦或者,添加更多的限制:
动态卡片的状态维持
循环卡片首次触发时会立即产生一次输出事件,例如音响发出“滴滴”声。循环卡片不会重置循环状态,即首次触发后,二次触发不会重置循环时间:开启台灯后,音响不会同时发出“滴滴”和“哒哒”声。延迟卡片则会被重置状态,每次被触发时,延时都会重新开始,因此音响永远不会发出“呱呱”声。
以状态卡片替代查询
中枢网关需要处理不同物理设备之间的通信,这些通信需要考虑到现实中的时间因素。提前将状态值记录到中枢网关中,比在触发前再进行查询速度更快。
状态与满足全部条件
在需要进行多个状态功能协同判断的场景时,推荐将‘事件发生或状态更新’、‘满足全部条件’和‘状态维持了一段时间’卡片结合使用。
操控未被支持的设备
由于极客版和米家是独立的,如果想操控不被支持的设备,可以尝试使用米家音响类设备,通过【智能音响-执行文本指令】静默执行相关命令。典型场景包括第三方配件和小爱音箱创建的红外控制卡片。总之,任何能被小爱执行的命令都可以使用执行文本指令来触发。
目前,极客版已经支持蓝牙网关发出和接收虚拟事件,并且可以在米家自动化中接收和触发这些事件。
米家事件转中枢变量
将设备所有相关的触发、查询和执行转换为中枢的全局变量或规则变量,这样在未来更换设备时,只需要更改变量赋值处的卡片,而无需更换逻辑处理位置的卡片。
然而,极客版缺乏变量搜索功能,如果管理不善,可能会带来负面影响。
外网访问米家极客版
这个比较简单,虽然聊胜于无:
- 映射任意端口到中枢网关地址的 80 端口;
- 映射 8082 端口到中枢网关地址的 8082 端口。
提示:8082 端口使用 ws 协议进行心跳检测,因此无法使用 https 协议,这在外网环境下可能会带来安全隐患。
米家中枢极客版助手
显示设备与规则的关系,方便查看规则与设备的对应关系,支持快捷键折叠/展开,关闭,适应画布布局,设备高亮,日志高亮,自动适应画布、设置规则列表布局样式等功能。
三、案例
双无线开关的按键模拟
在双无线开关中,希望实现一个按键启用极速模式,另一个按键启用标准模式,并且支持单击、双击、三击或更多点击操作。虽然无法在米家中直接这样设置,但可以在极速模式下对其中一个按键进行模拟,以实现此效果。请注意:由于上报时间的限制,从按下按键到执行所需的时间为 n-1 秒 (n>2)。
自动化开关灯的动态延时
存在这样一种场景:灯设置为无人自动关灯,但由于人频繁出入这个房间,间隔时间可能大于1分钟,这导致灯频繁地在开启和关闭之间切换。因此,需要适当延长或缩短自动化关灯的时间,从而实现动态的关灯时间控制。
主要思路如下:由于在循环和延时卡片中无法使用变量,我们需要先计算出数据,然后逐一判断并执行。所以,我们先记录自动化行为导致的开关灯时间,接着比较这个时间差,根据实际需求将差值转换成延时(惩罚)系数,最后对这个系数进行判断,进而决定具体的延时关灯时间。
水暖毯睡眠模式模拟
水暖毯是 Wi-Fi 设备,不支持在极客版中进行自动化触发。同时,睡眠模式的执行情况也无法传递给极客版。我们在极客版中模拟实现了这一效果,设定入睡和开机作为睡眠模式的启动条件。详细规则可在下图中查看。
基于人体距离开关灯
存在这样一种场景:偶尔路过时,不希望立即自动开灯。仅当距离足够近、环境亮度匹配且维持时间符合要求时,才进行开灯。
摄像机状态修正
针对云台版摄像机,在启用人形追踪功能后,摄像机应当在追踪结束后自动回到初始位置。然而,在日常使用中发现,摄像机有时未能完全回到初始监控位置。额外发现一个 Bug:在卡片执行操作中的 摄像机控制-录制模式 里,无论修改任何项目,都会关闭存储卡的存储开关。
四、离家状态联控
在这里,我们将判断分为两大类:基于传感器的推测和基于设备的触发。推测是对室内所有传感器数据进行综合判断,推断出人的到家或离家状态(侧重点在于由状态触发事件)。这种方式无法精确追踪和实时响应,主要用于辅助判断,作为备选方案;触发则是由人的主动行为产生的事件(侧重点在于只能由人主动触发),例如个人设备的在线、离线状态,或按键的按下等。这种方式能精准追踪个人,事件来源准确可靠。
基于设备的触发
基于设备的无人判断是通过个人携带的设备(如手机、手表)来实现的,主要有以下几种方案:
- 地理围栏传感器:通过蓝牙和 Wi-Fi 检测设备的在线状态,但需要额外购买额外的设备。
- 米家事件联动:通过连接或断开指定名称的 Wi-Fi 来触发事件,但要求使用小米手机并登录相同账户。
- 小米路由器联动:通过小米路由器检测设备的 MAC 地址上下线情况,但需要使用小米路由器。
米家事件/小米路由器方案
将原始事件转换成网关虚拟函数,既将其应用于到家和离家状态的追踪。所有人离家视为全局离家状态,任意一人到家则视为全局离家状态的结束。通过状态维持卡片来过滤可能的误触发或突发性变动,最终调用具体的事件卡片触发执行。
地理围栏方案
AInice 电子围栏传感器是一款基于蓝牙+WiFi 技术方案,实现对手机等随身携带设备的蓝牙及 WiFi 实时追踪,从而判断家人是否处于家庭范围内的电子围栏产品。
基于传感器的推测
推测无人
综合所有传感器的信息,结合实际情况进行综合判断,以推测无人存在。
推测有人
补充判断:如果在满足相应条件后,全局变量的离家状态记录值不正确,主动进行矫正。
总的来说,人体传感器的数据是无法及时可信的,需要筛选过滤后才能采用。
五、入睡状态联控
不同的家庭、设备和环境对智能化的需求各不相同,这里只是抛砖引玉,供大家参考。
总体设备配置如下:邻普人在传感器,小米单火开关,蓝牙 MESH 协议的智能灯,门窗传感器,米家夜灯,米家灯泡。大致布局位置请参考上图。
入睡状态判断
小米最新的手表支持将睡眠状态同步到米家,但让家中所有人都佩戴小米手表入睡并不现实。因此,我们考虑使用一个更通用的场景来判断入睡状态的触发,即当卧室关门、关灯且昏暗时,视为入睡状态开始。同样地,入睡状态的结束一定会发生在卧室门开启之后,再依次根据家庭的实际情况判断入睡结束。
入睡开始判断
- 入睡状态开始设定 (
对应图片:主卧@入睡开始判断 )- 主卧关灯 15s 后 + 主卧关门状态
- 涉及到主卧相关的所有传感器的共同判断
- 中枢网关虚拟事件主动调用
入睡结束判断
- 入睡状态结束设定 (
对应图片:主卧@入睡结束判断 )- 主卧开门维持 5 分钟 + 日出状态
- 主卧无人大于 10分钟 + 主卧开门状态
- 客厅灯开启时 + 走廊灯处于夜灯模式开启状态 + 主卧开门状态
灯光自动化
客厅自动化开关灯
环境暗 + 人出现和人存在 + 环境变暗的双触发
这个场景对应于人出现在昏暗的环境中,或人在环境中一直存在而环境光逐渐变暗。
有物理开关用于开启自动化
当极客版不方便访问时,可以使用其他方法持久性地关闭自动化开关灯行为。
只有自动化开启的灯,才进行自动关灯
主动开启的灯只在无人状态下设置最大时间关灯限制。主动开启的灯,只检测最大无人时间。
走廊灯开启时,不进行客厅灯自动化开启
对应的场景是,在客厅观看投影时,可能会开启走廊灯以提供柔和照明,在这种情况下无需自动开启客厅灯。
主动关灯后立即被自动开启的灯,询问是否临时关闭自动化
双重触发条件在夜间可能导致有人时灯无法关闭。增加功能,让小爱音响主动询问是否临时关闭自动化开灯。
自动化关灯行为的区别
客厅灯只有在检测到客厅、走廊和过道都无人时才关闭,而走廊灯则在走廊、过道无人十分钟后关闭。
自动化开灯的短期抑制
对应主动询问的具体实现,可以在短期内(如半小时内)临时关闭自动化开灯。
短期抑制行为的主动解除
设置短期抑制后,允许手动解除抑制。
主卧自动化开关灯
主卧开灯状态修正 (
对应图片:主卧@晚开灯状态修正 )主卧灯通过单火开关接入米家系统。第一次开启时,仅有 LED 灯珠亮(光线较暗),第二次开启时灯泡才会亮。因此,需要模拟直接达到第二次开灯时的状态。
主卧自动开灯限制 (
对应图片:主卧@自动化开关灯 )主卧较为特殊,入睡后要避免被自动开灯,故要求如下:
- 传感器感应到人进入
- 非入睡状态
- 客厅灯开启
- 主卧门开启
- 主卧昏暗
入睡联控
在入睡状态触发后,立即关闭所有其他房间的灯(如客厅灯、走廊灯、厨房灯和台灯)。同时,当卧室门开启或关闭时,镜像同步开启或关闭摄像机。
- 入睡状态下客厅开灯行为
在入睡状态触发后,如果客厅中感应到有人,客厅灯将不会自动开启,而是以夜灯模式开启走廊灯。同时,在入睡状态触发时,会对客厅自动化开灯进行抑制,短期内(3 分钟)暂停客厅自动化开灯行为。
- 入睡状态下主卧开灯行为
在入睡状态触发后,主卧将不再进行自动化开灯,而是依靠夜灯传感器进行判断。当夜灯感应到有人且主卧环境光线较暗时,以低亮度模式开启床头灯。
- 入睡状态下次卧开灯行为
在入睡状态触发后,如果次卧灯被主动关闭(非自动化行为导致的关灯),次卧的自动化开灯功能将暂停。直到入睡状态结束或离家状态触发时,以及在日出状态下主动开灯的行为,次卧自动化开灯才会恢复。
次卧目前并未住人,所以不参与全局睡眠状态的判断中,仅做个补充处理。
流程展示
客厅@自动化开关灯
主卧@开灯状态修正
主卧@自动化开关灯
主卧@入睡开始判断
主卧@入睡结束判断
六、辅助流程示例
四、五环境有一些辅助用自动化,于此展示。