最近研究home-assistant(以下简称HASS)上了瘾,将小米全家桶基本都实现接入了。家里刚装了土豆SUPER新风机,很优秀的产品,但毕竟是小众设备,还没有爱好者制作HASS的插件。查阅了github和HASS官网很多文章后,发现自制插件也不是那么容易的,需要改miio库,然后才能对应开发插件。笔者也不会任何编程语言,研究了一下决定放弃这条路。
后来发现了NODE-RED这个神器,与HASS配合相当完美,把自动化控制的能力水平提升了一个等级。在成功将SONY电视和功放机接入系统并能统一用小爱同学控制后,一次偶然的机会读到了瀚思彼岸论坛上一个大神用NODE-RED接入使用米家标准通信协议的小米空调,这提供了个新的曲线救国思路,笔者决定按这个路子动手试试。经过一个礼拜的探索调试,终于成功!当然此方案不止能接入大土豆新风机,也能接入其他采用米家标准协议的小众产品。
IOS Homekit
NODE-RED这货是IBM出品的开源物联网可视化编程工具,通过拖拖拽拽就能实现各种联动设置,其有强大的开源社区和插件库,本身也可以接入各种智能设备。但由于其支持的插件和用户群体不如HASS多,所以我们一般还是以HASS作为智能家庭中枢,NODE-RED通过插件接入HASS专门负责自动化控制。
NODE-RED界面
大体的思路就是用Node-Red通过MQTT接入HASS再接入homekit。
第一部分:用群晖docker分别搭建HASS+Node-Red+MQTT broker三个容器。
笔者是在群晖的docker上搭建的,这样比较简单,基本都图形化操作,当然其他方式也都是可以的,这三个玩意儿都提供了各种系统下的版本。
1. 首先是搭建好HASS环境.
1.1 在Docker注册表里搜索home-assistant,选择这个,双击选择latest下载。差不多有1G,这里在网络高峰期下载可能会断线,一直失败的小伙伴可以尝试换个时间段再试。下好了后群晖会有通知,然后会出现在“映像”标签里。
双击下载这个官方版本的homeassistant
1.2 下好之后双击映像创建容器,名字随便起,选高级设置,添加映射config文件夹
设置config文件夹
1.3 设置网络选择与docker host相同的网络即可,这样可以少一道NAT转换,响应速度能更快。
网络选择与docker host相同的网络
1.4 设置时区,在环境里设置一下时区TZ为Asia/Shanghai
在环境里设置一下时区TZ为Asia/Shanghai
1.5 然后就可以启动容器了,用浏览器访问后台即群晖的内网ip+端口号访问HASS了,即http://群晖的ip地址:8123/
看到这个界面就是安装好了,自行设置账户密码即可
2.然后我们来装Node-RED
2.1 搜索下载Node-RED官方映像。
搜索下载官方映像
2.2 .选择卷,选添加文件夹映射一下data目录
2.3 网络选择与docker host相同的网络
2.4 在环境里设置一下时区TZ为Asia/Shanghai
2.5 在File Station中找到第二步新建的 docker/node-red 文件夹,并对该文件夹增加 Everyone 的完全控制权限
2.6 .设置完后就可以手动启动容器了。过一会启动完成就可以通过http://群晖的ip地址:1880/,即群晖的内网ip+端口号访问Node-RED了。
注意事项:
添加环境变量TZ可防止Nod-RED输出时间不正确的问题
若不进行第5步的权限分配,Node-RED启动会报错,提示权限不足
配置文件位于新建的文件夹内(本文为docker/ node-red )
3.以下是安装MQTT broker。依然以群晖docker中安装mqtt容器的方式来实现。
3.1 搜索下载这个MQTT映像。
3.2 下载完成后创建容器时仍然选高级设置,
3.3 网络和前面一样勾选与Docker host相同的网络,
3.4 时区也如前述添加TZ为Asia/Shanghai的环境变量。
3.5 其他都不用设置,直接启动容器即可。
至此,三个容器都安装完毕启动,我们开始进行配置。
三个容器都正常启动
第二部分:配置
4. 配置HASS
4.1访问http://192.168.31.2:8123/(替换成你自己群晖的局域网ip),设置自己的用户名密码。
4.2 进去选左侧的配置,然后选集成。
4.3点右下角的+号设置新集成,输入mqtt,选这个
4.4 设置MQTT broker信息,服务器为localhost,端口不用动,用户名密码为空,勾选启用发现,然后选提交。这样就可以把我们刚刚配置的MQTT服务器接入到HASS中了。
5. 配置Node-RED
5.1 访问http://192.168.31.2:1880/,进入Node-RED,选择右上角的三个横线,选择节点管理。然后选择安装标签,搜索mqtt,安装第一个。
5.2 装完后再搜索mi-miio,安装mi-miio插件
5.3 装好后中间会有弹出的几个框提示安装成功,然后看最左侧,会发现网络里面多了mqtt-in和out,往下还能看到mi-miio插件,我们要用到最下面这个自定义设备。这里注意,安装以上两个插件可能等的时间比较长,也可能由于网络问题会失败,可以多等等或者换个时间试试,或自己想办法。
出现这些节点就是安装好了
5.4 点右上角三个杠图标,选导入,导入本文末尾笔者提供下载的flow.json文件,提取码cxfd
5.5 导入后可以看到土豆SUPER的标签页。在这里可以双击设置土豆SUPER节点和MQTT相关节点。如果你和笔者一样把MQTT和其他两个容器搭在一起且都使用了与host相同的网络,那么这里可以不用再设置了。
5.6 双击土豆SUPER节点,设置你的土豆新风机IP地址和token。如何获取token的方法有很多,可在下面查看HASS官方推荐的几种方法。笔者是找的v5.4.49的米家安装文件,用网易mumu安卓模拟器安装,登陆米家账号后操作下大土豆新风机,然后在smarthome/logs文件夹下有一堆文件,挨个找找搜索一下关键词token,就能找到32位长的一串数,新风机ip地址在此也能看到(最好在路由器dhcp服务器里把新风机ip地址固定下来,避免重启路由后由于ip地址变化而无法连接)。用mumu安卓模拟器的好处是他有个共享文件夹,可以直接与windows互相共享文件,比较方便操作。以下为原文描述:
If using an Android device to retrieve the Access Token only v5.4.49 of Mi Home is confirmed working (December 2019). Use v5.4.49 of Mi Home locate a text file under the Smarthome/logs folder where the 32 character token is stored. There will likely be several text files in this directory, search all of them for the word ‘token’ and you should find it there. Be advised that the latest version of Mi Home does not store the token in clear text.
https://www.home-assistant.io/integrations/vacuum.xiaomi_miio/#retrieving-the-access-token
改成你自己新风机的IP地址和Token。下面这些属性内容都不要动。
5.7 保存回到Node-RED主界面,点击右上角红色按钮“部署”。注意以后每修改一点都需要部署后才能生效。
5.8 部署后可以看到MQTT相关节点上都会显示出已连接。
显示已连接则说明与MQTT通信正常
5.9 此时回到HASS,选择配置,实体注册表,应该已经可以看到大土豆新风机啦。
点开后点右上角的调节按钮,可以打开操控标签页,在此已经可以控制大土豆SUPER新风机了。
已知问题:由于这是用小米电风扇的模组改的,所以还不能完美适配。小米电风扇是3档,大土豆是5档,所以在选了4档和5档的时候,指令可以正常发出,新风机也能换档,但下面speed状态那里显示不出来。123档时候都可以正常显示。
6. 设置Homekit支持
6.1 HASS现在已经对homekit原生支持了,配置非常简单,还是选配置-集成-右下角的+号,然后搜索Homekit,选择homekit桥接器。在要包含的域里面可以根据实际情况勾选,但至少要把Fan选上。对,咱是把大土豆在homekit里注册成电风扇的。
6.2 设置好后,点开HASS左侧边栏下面的通知,就能看到homekit的信息啦,打开iphone的家庭APP,添加进去就OK了。
可自行设置名称,Siri控制,和其他homekit组件联动,都没问题。
后记:HASS是个强大的开源智能家居中心,通过这种方法,可以把很多小米设备以及其他第三方设备都整合到HASS平台上。在这里所有设备联动都是本地局域网执行的,而不像米家很多联动是需要互联网的。
此外,新风机真是个好东西,自从装完大土豆就没有开过窗户,屋里pm2.5基本都是个位数,二氧化碳含量也基本只有500-600,估计以后装新风的家庭会越来越多啦!
分享的Node-RED配置文件flow.json和5.4.49版本的米家
链接
提取码:cxfd