4

一种基于小米中枢网关米家自动化极客版的室内恒温控制系统

 4 months ago
source link: https://phuker.github.io/posts/xiaomi-central-gateway-thermostat.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

概述

洒家在开着空调睡觉时,老是会冻醒或者热醒,所以想在室内实现恒温。之前基于米家 APP 已经成功搞了一套恒温系统(具体方案以后再写),后来看到小米新出的小米中枢网关有一个米家自动化极客版的功能,可以基于图形化编程实现更丰富的自动化。洒家好奇图形化编程的表现力和效果如何,于是就买了一台玩了一下。这篇文章主要介绍洒家搞出来的这套实现室内恒温的方案,基于小米中枢网关的米家自动化极客版功能,编程读取米家智能温湿度计 3 的温度数据,负反馈控制空调、暖风机的开关与设置,从而自动化控制室内温度。同时讨论一下米家自动化极客版存在的产品设计问题。

设备

可能由于功耗、续航、可移动性、减少发热对温度测量结果的影响等原因,目前小米所有的智能温湿度计,包括小米电子温湿度计小米米家电子温湿度计 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
米家 APP 截图

米家 APP 创建手动控制

创建 4 个自动化,用于在点击查询自动控温状态后接收查询结果。

操作步骤:点击智能 - 右上角加号 - 自动化,开始创建自动化。点击添加触发条件 - 设备 - Xiaomi 中枢网关 - 虚拟事件发生,输入虚拟事件代码,点击右上角对勾确认;点击添加执行动作 - 通知,输入通知内容。点击创建保存,输入自动化的名称。

4 个自动化的虚拟事件代码,通知内容和名称如下:

  • status_auto_cooling_enabled自动制冷已开启查询自动制冷状态为开启
  • status_auto_cooling_disabled自动制冷已关闭查询自动制冷状态为关闭
  • status_auto_heating_enabled自动制热已开启查询自动制热状态为开启
  • status_auto_heating_disabled自动制热已关闭查询自动制热状态为关闭
米家 APP 截图

米家 APP 创建自动化

设置完毕后,米家 APP 的首页和智能页看起来是这样的:

米家 APP 截图

米家 APP 首页

米家 APP 截图

米家 APP 智能页

操作方法和效果

平时只需要在手机上操作,不需要在电脑上打开米家自动化极客版的网页。在米家 APP 的首页房间页点击之前创建的 4 个手动控制,在夏天点击开启自动制冷,冬天点击开启自动制热,需要关闭时点击关闭自动控温即可。喜欢语音控制的读者也可以通过小爱语音控制。

开启自动控温后,可以成功实现室内恒温,温湿度计的温度统计曲线基本上是一条横线。洒家实验了几个晚上,配置好参数后,实际体验效果不错,开着空调睡觉时再也不会冻醒或者热醒了。

一些实践经验:

  • 最好不要让空调直接对着人和温湿度计吹。
  • 温湿度计要放到人的旁边,例如如果想要在床上睡觉时恒温,就要把温湿度计放到床边。

点击查询自动控温状态时,可以在手机通知或者米家 APP 右上角的日志中看到查询结果:

米家 APP 截图

米家 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 个分支同时执行的情况。

总之,只有用开放的思维,帮助社区用户充分发挥无穷的创造力,让用户之间充分交流,形成“大神”带动“小白”的局面,才更有希望把用户生态搞活,提高商业价值,实现用户和厂商的双赢。如果小米或者其他公司看到了这篇文章获得了启发,真的把洒家的设想实现了,简单致谢一下就行了。

Footnotes
  1. 目前:2024 年 1 月,小米中枢网关的固件版本为 3.1.0_0051,米家自动化极客版的版本为 v1.4.0


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK