概述¶
洒家在开着空调睡觉时,老是会冻醒或者热醒,所以想在室内实现恒温。之前基于米家 APP 已经成功搞了一套恒温系统(具体方案以后再写),后来看到小米新出的小米中枢网关有一个米家自动化极客版的功能,可以基于图形化编程实现更丰富的自动化。洒家好奇图形化编程的表现力和效果如何,于是就买了一台玩了一下。这篇文章主要介绍洒家搞出来的这套实现室内恒温的方案,基于小米中枢网关的米家自动化极客版功能,编程读取米家智能温湿度计 3 的温度数据,负反馈控制空调、暖风机的开关与设置,从而自动化控制室内温度。同时讨论一下米家自动化极客版存在的产品设计问题。
按照洒家博客的惯例,本文不详细介绍基本操作、图形化编程概念等别人写过的最基础的东西。如果不熟悉这些基础知识,请先查阅小米官方和其他用户写的教程:
- 小米社区,2022-11-07:自动化极客版使用教程
- 什么值得买,西红柿培养者,2022-12-07:小米中枢网关 2.0 来啦,增加极客模式,支持更多 WiFi 设备本地化执行
- 什么值得买,楽佳,2023-01-23:米家自动化极客版 篇一:入门 极客版 VS 米家 APP
- 什么值得买,楽佳,2023-01-24:米家自动化极客版 篇二:入门极客版 设备卡片篇
设备¶
- 小米中枢网关(ZSWG01CM)
- 杂牌非智能单冷型空调
- 米家空调伴侣 Pro 万能遥控版(KTBL04LM),自带蓝牙网关,已经停产(可替换为不带蓝牙网关的普通的空调伴侣智能插座)
- 米家石墨烯暖风机(LSNFJ04ZM),支持 2.4 GHz Wi-Fi 联网接入米家
- 米家智能温湿度计 3(MJWSD05MMC)
可能由于功耗、续航、可移动性、减少发热对温度测量结果的影响等原因,目前小米所有的智能温湿度计,包括小米电子温湿度计、小米米家电子温湿度计 Pro、小米米家蓝牙温湿度计 2、米家智能温湿度计 3,都是纽扣电池供电的,并且只支持通过蓝牙网关联网,不支持通过 Wi-Fi 联网。如果想要联网实现自动化,就需要一台能提供蓝牙网关的设备。本文介绍的方案中,小米中枢网关已经自带了蓝牙网关,因此米家空调伴侣 Pro 万能遥控版自带的蓝牙网关是重复的,可以替换为不带蓝牙网关的普通版空调伴侣智能插座。
如果空调是智能空调,可以直接接入米家,则不需要空调伴侣智能插座。如果空调是冷暖型的,则不需要额外购买制热的设备。洒家住的公寓只有一台单冷型空调,因此又额外购买了一台米家石墨烯暖风机用于制热。
程序和设置¶
米家自动化极客版部分¶
洒家的程序针对的是上文所述的单冷空调和暖风机两台设备,如果只有一台冷暖型的空调,对子函数部分稍加修改就可以正常工作。
编程和配置时需要注意:
- 为避免出现竞争条件,开启/关闭设备和开启/关闭自动化的先后顺序应该是:
- 开启时,先开启设备,再开启自动化。
- 关闭时,先关闭自动化,再关闭设备。
- 为防止设备频繁发出提示音,在开关和设置设备时,应该先检查该项目是否已经到达目标状态,如果已经到达目标状态就不做操作;或者直接禁用设备提示音。
- 如果制热和制冷不是同一台设备,开启其中一台设备时,要关闭另一台设备。
- 为防止频繁开启和关闭设备,目标温度需要设置成一个范围,温度上限和下限之间的间隔要合理设置,不能太小。
- 目标温度范围是个性化的设置,对于不同的人和房间,合理的温度范围都有可能不同,需要多试一试,根据实际感受进行调整。
米家 APP 部分¶
创建 4 个手动控制
,用于手动产生虚拟事件,从而控制自动化。
操作步骤:点击智能
- 右上角加号 - 手动控制
,输入手动控制名称,点击添加执行动作
- 设备
- Xiaomi 中枢网关
- 产生虚拟事件
,输入虚拟事件代码,点击右上角对勾确认,点击创建
保存。点击刚刚创建的手动控制
- 更多设置
,根据需要设置显示在房间页
、通过小爱语音控制
以及添加到桌面快捷操作
。
4 个手动控制
的名称和虚拟事件代码如下:
开启自动制热
:event_enable_auto_heating
开启自动制冷
:event_enable_auto_cooling
关闭自动控温
:event_disable_auto_temperature
查询自动控温状态
:event_query_auto_temperature_status
创建 4 个自动化
,在点击查询自动控温状态
后,响应小米中枢网关产生的虚拟事件,产生通知和日志,从而接收查询结果。
操作步骤:点击智能
- 右上角加号 - 自动化
,开始创建自动化
。点击添加触发条件
- 设备
- Xiaomi 中枢网关
- 虚拟事件发生
,输入虚拟事件代码,点击右上角对勾确认;点击添加执行动作
- 通知
,输入通知内容。点击创建
,保存时输入自动化
的名称。
4 个自动化
的虚拟事件代码,通知内容和名称如下:
status_auto_cooling_enabled
,自动制冷已开启
,查询自动制冷状态为开启
status_auto_cooling_disabled
,自动制冷已关闭
,查询自动制冷状态为关闭
status_auto_heating_enabled
,自动制热已开启
,查询自动制热状态为开启
status_auto_heating_disabled
,自动制热已关闭
,查询自动制热状态为关闭
设置完毕后,米家 APP 的首页和智能页看起来是这样的:
操作方法和效果¶
平时只需要在手机上操作,不需要在电脑上打开米家自动化极客版的网页。在米家 APP 的首页房间页点击之前创建的 4 个手动控制,在夏天点击开启自动制冷
,冬天点击开启自动制热
,需要关闭时点击关闭自动控温
即可。喜欢语音控制的读者也可以通过小爱语音控制。
开启自动控温后,可以成功实现室内恒温,温湿度计的温度统计曲线基本上是一条横线。洒家实验了几个晚上,配置好参数后,实际体验效果不错,开着空调睡觉时再也不会冻醒或者热醒了。
一些实践经验:
- 最好不要让空调直接对着人和温湿度计吹。
- 温湿度计要放到人的旁边,例如如果想要在床上睡觉时恒温,就要把温湿度计放到床边。
- 温湿度计旁边不能有热源,例如手机充电器。
点击查询自动控温状态
时,可以在手机通知或者米家 APP 右上角的日志中看到查询结果:
米家自动化极客版的产品设计问题¶
目前1米家自动化极客版这一套图形化编程方案有很多问题,不知道小米是出于什么原因选择了这一套方案。洒家认为,小米首先应该搞一个易用的社区自动化程序分享平台;其次应该把图形化编程改成表现力更强的代码编程,并提供在代码中声明参数、设备等配置项的 API,自动生成配套的图形化设置界面。具体分析如下:
编程本身就是有门槛,且令普通人望而却步的事。虽然图形化编程看起来简单一点,但是也是有学习成本的,个人估算图形化编程并不能显著增加用户量。假设总用户量为 10000 人,可能只有 100 人会用图形编程,10 人会用代码编程,100 人相对总数 10000 人仍然是一个很小的比例。洒家认为,与其用图形化编程降低编程门槛,不如搞一个类似 Greasy Fork、Steam 创意工坊的社区程序分享平台。再简单的编程也比不上不用编程,如果“小白”用户可以在社区里搜索自己的使用场景,一键下载“大神”(包括小米员工)发布的自动化程序,简单改几个参数,自动化就能运行起来了,这样才足够简单,才能把用户量搞上去。
在“大神”带动“小白”的局面下,为了让“大神”(包括小米员工)编程编得舒服,应该把图形化编程改成表现力更强的代码编程。对比代码编程,图形化编程有很多问题:
- 目前的图形化编程的表现力和代码差距太大,也就比米家 APP 的功能强大一点,但是高不成低不就,也许就适合懂一点编程思维,但是不会写代码的人。主要表现如下:
- 很多简单的功能,例如数值运算、一些逻辑比较和判断,在正规的编程语言里就是一些简单的运算符的组合,但是在米家自动化极客版里,官方没有提供卡片,就无法实现。
- 没有变量/常量的概念。一些配置参数(自动开启和关闭时间、目标温度)散落在各处不容易集中管理,程序复杂起来就会出现重复,修改时也容易遗漏。这个问题就和 CSS 变量想要解决的问题类似。
- 没有函数、子程序,重复的组合操作不太方便抽象出来,程序容易变得复杂和冗余。目前似乎只能用虚拟事件模拟没有参数和返回值的函数调用。
- 图形化的程序无法复制,不易分享和交流。这篇文章本身就是一个例子,竟然在用截图分享程序。而代码天然支持复制和粘贴。即使没有官方社区程序分享平台,尽可能支持开放自由地交流也可以促进整个社区的繁荣。
- 不方便查看日志,日志也是在原图形化界面上逐步显示的,复杂一点的程序调试起来很困难,眼睛都快看瞎了。
- 卡片信息密度太低,即使右键点击“简化卡片”后,复杂一点的程序一个屏幕都显示不完。另外,为了整洁美观,方便查看,洒家把很多时间浪费在调整卡片的对齐和布局上了。
- 从厂商的角度,这种复杂的功能在实现上也容易出现 bug,且不容易测试,人力成本太高。洒家发现很多 bug 都是很容易复现的,但是不知道是没有测试出来还是没有来得及修复就上线了。再加上这个功能本身比较小众,用的人太少,投入的人力就不会太多,解决 bug 的速度也会很慢,这就会造成恶性循环。如果改成代码编程,能大幅降低开发难度,降低成本;用户量上去之后还能争取更多资源投入,形成良性循环。洒家目前遇到的具体 bug 包括但不限于:
- 有时候会有自动化失效的问题,需要在网页上把出问题的自动化关掉再打开,或者拔插小米中枢网关的电源解决。
- 目前
事件发生或状态更新
卡片获取米家智能温湿度计 3 的温度有 Bug,经常产生不了事件,导致自动化失效。似乎可以用循环
加上查询当前状态
替代。 - 日志显示,一些浮点数有精度问题,例如获取米家智能温湿度计 3 的温度可能得到
25.200001
的结果,洒家没有仔细研究,猜测可能会导致一些逻辑判断的 bug。 - 使用
查询当前状态
查询米家空调伴侣 Pro 万能遥控版的空调 - 设定温度
,条件设置为介于
,会出现满足条件
和否则
2 个分支同时执行的情况。
总之,只有用开放的思维,帮助社区用户充分发挥无穷的创造力,让用户之间充分交流,形成“大神”带动“小白”的局面,才更有希望把用户生态搞活,提高商业价值,实现用户和厂商的双赢。如果小米或者其他公司看到了这篇文章获得了启发,真的把洒家的设想实现了,简单致谢一下就行了。
-
目前:2024 年 1 月,小米中枢网关的固件版本为
3.1.0_0051
,米家自动化极客版的版本为v1.4.0
。↩