baofeidyz
baofeidyz'blog

Follow

baofeidyz'blog

Follow
小米电风扇接入homekit

小米电风扇接入homekit

baofeidyz's photo
baofeidyz
·Oct 25, 2020·

2 min read

小米电风扇通过WiFi支持米家app联动。 可以借助于home assistant来将米家WiFi和homekit打通。

安装home assistant

我尝试过很多方案, 最后还是决定使用docker的方案来安装, 可以避免一些python依赖版本不一致或者gcc等导致无法启动的问题。

非常感谢home-assistant.cc提供了大量的中文资料。

vmbox安装centos8虚拟机

这次是在windows上通过Oracle VirtualBox安装了一台centos8的虚拟机, 然后再安装docker环境的, 如果觉得麻烦 可以直接在windows上安装docker。 我是习惯了在linux环境下使用docker, 相关的命令感觉用得更顺手一下。

这部分就不记录了, 网络使用桥接windows宿主机的网卡即可

centos安装docker环境

这个就是傻瓜式安装, 建议是直接参考官网链接:docs.docker.com/engine/install/centos

运行home assistant镜像

这个是docker官方镜像仓库dockerhub提供的地址, hub.docker.com/r/homeassistant/home-assistant 常规来说, 我们直接使用

docker pull homeassistant/home-assistant

即可将镜像拉取到本地。

但如果你发现拉取速度奇慢, 就算是走了全局代理还是拉不下来的话, 建议你增加一个dockerhub的镜像源,用于加速。 dockerhub镜像源这部分,原来的话是有很多的,但是不知道为啥大量的镜像仓库关闭了。我找到了这个地址,建议按照这个方法修改一下,然后再拉取就可以了。gist.github.com/y0ngb1n/7e8f16af3242c7815e7..

拉取完镜像咱们还得启动。 和大多数的镜像一样,都需要我们挂载一个持久卷,home assistant也不例外。

借助一下home-assistant.cc/installation/docker 提供的脚本

docker run -d --name="home-assistant" -v /你的/config/路径:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant

上面的脚本是home-assitant.cc提供的脚本。我个人习惯于安装到home下,修改后

docker run -d --name="home-assistant" -v /home/homeassitant:/config -v /etc/localtime:/etc/localtime:ro --net=host homeassistant/home-assistant

启动以后, 通过访问该centos获取到的IP地址, 加上home assitant默认的端口即可通过浏览器访问home assitant服务。

http://你的centos虚拟机获取到的IP地址:8123/

安装小米风扇插件

安装HACS

上一步中, 我们已经可以方案home assistant了, 根据它页面的引导我们创建了用户名和密码。 但是默认下, home assistant没有直接支持小米电风扇, 所以你在“集成”中搜索不到小米电风扇的支持。

github.com/syssi/xiaomi_fan 这个GitHub repo才是支持小米电风扇的“插件”。 但是你想要安装这个插件之前, 你得先安装这个repo指定的插件商店,也就是我标题中写的HACS

hacs.xyz 这个是HACS的官网, 在官网中有一个很明显的安装引导。

HACS的安装方法就建议根据其官网给出的方案进行即可。

安装HACS其实本身并不复杂, HACS也是依赖于home assistant的特性做的一个插件。home assitant支持在其配置文件同级目下创建custom_components文件夹,然后你将hacs的文件夹放到这个创建好的custom_components下,home assitant便可以识别了。

如果你按照我上面docker运行的shell来做的,那么安装hacs的路径就是这个样子

/home/homeassitant/custom_components/hacs/这里就是hacs的一些文件了

放好以后, 我们还需要重启home assitant。

因为我是用的docker安装的,所以我直接使用

docker restart 容器ID

即可实现重启的效果。

重启好了以后, 可以在home assitant左侧导航栏中看到HACS的选项

剩下的就是根据HACS的引导去设置你的GitHub账号的token,用以HACS往后去下载GitHub上的repo。

这一步我没有失败, 因为整个过程中我都是全局代理。 我在windows宿主机上科学上网并开启了局域网共享,所以我在centos8中跑了一行命令用于全局代理

export all_proxy=socks5://ip:port

如果你的没有socks5的方案, http和https的脚本依次是

export http_proxy=http://ip:port
export https_proxy=https://ip:port

安装好了以后, 就可以正常使用HACS了

安装xiaomi_fan

github.com/syssi/xiaomi_fan

在这个Add Costom repository URL中直接复制粘贴https://github.com/syssi/xiaomi_fan即可, 右侧的目录, 建议选择Integration, 最后直接点击ADD按钮即可。

我在这里卡了很久,每次等了很久以后,就只等到一个闪退。幸好home assitant的日志不难读。 使用docker logs查看日志

docker logs -f 容器ID

我得到的错误信息是网络请求raw.githubusercontent.com出现ssl验证错误。这种问题遇得多了,无非就是时间差,IP获取失败,代理挂了。我最先检查得就是代理,因为我用得是windows开得局域网共享代理,直接查看相关日志,没有问题,IP请求都是OK的。第二是检查centos时间,因为我安装centos8这个虚拟机已经很久没用了,date一看,时间戳确实不对。再仔细检查时区是美国,改成了上海。第三检查了一下IP,因为raw.githubusercontent.com这个域名应该被dns污染,我自己常用的macOS中都是自建了一个dnsproxy服务,我没有直接进入容器,直接在centos上ping了一下这个域名,发现解析出来的结果居然是127.0.0.1,我也懒得去查真正的原因是啥了,在网上找了一个在线dns解析的服务,拿到了真正的IP,修改centos hosts文件,重启docker容器完事。

配置xiaomi_fan

配置xiaomi_fan这个插件其实很简单, 就是去修改home assitant提供的配置文件, 使用的yaml这种格式, 所以修改的时候只要注意格式别弄错了就好了。

麻烦的是需要去拿小米电风扇的一个token。

再次感谢home-assistant.cc/component/xiaomi/wifi (虽然home assitant官网也有相关的教程,但是没有home-assitant.cc提供的接地气)

获取xiaomi_fan所需的token

这个方法理论上是适用于所有的WiFi接入的米家设备。

我手里只有一台没电的小米4是安卓机了,所以我首先考虑的方案就是安装安卓模拟器,事实证明,这种方案真的是省事不少。yeshen.com 我用的是夜神,安装简单,就不描述了

装好夜神模拟器以后, 需要安装5.0.19版本的米家, 这个也是home-assistant.cc/component/xiaomi/wifi提供的。

安装好米家app以后, 需要登录小米账号, 并且操作一下小米电风扇(因为这个时候米家app才会真正的去连接风扇,我们才能拿到我们想要的token)

操作一次以后,我们可以在夜神模拟器上安装ES文件浏览器。 注意, 如果你这个时候全部照着home-assistant.cc/component/xiaomi/wifi操作的话,会出问题,因为/data/data下没有数据了。这个可能是因为安卓模拟器提供的Android操作系统版本导致的差别,但是ES文件浏览器有提供搜索功能,所以我们只需要搜索miio2.db也是可以找到这个文件的然后再使用aSQLiteManager去读取miio2.db这个数据库文件即可。

补充一点, 因为数据库里面有很多token,所以你最好是根据IP去筛选,home-assitant.cc也是这样建议的,并且还直接写好了sql语句。 但是判断IP还是多多少少有些麻烦,如果你的路由器设备页面中,你无法根据主机名去判断的话,我建议你可以先拔掉风扇的电源,截图,然后插电连上WiFi,再比较就可以找到IP地址了。

修改home assitant配置文件

这一步建议直接参考github.com/syssi/xiaomi_fan 提供的readme.md

确认home assitant可以直接操作风扇

尝试一下,没别的问题这里就可以直接操作你的小米电风扇了。

打通homekit

配置homekit支持

这个是home assitant自带的。 入口是配置->集成->右下角的加号 创建桥接器,然后选择设备类型,因为我目前只有一个风扇,所以我去掉了默认的选项,只勾选上了一个fan 点击提交,选择一个区域,比如我就选择客厅了 点击完成,一个homekit桥接器就创建好了。

这个时候就是激动到搓手手的时候了。

使用IOS 家庭App连接homekit

手机上的操作就非常简单了,打开家庭app,有一个扫码的入口,完了以后,找到home assitant左侧这个通知,点它就可以拿到你想要的二维码了

不得不说, 这个二维码入口有点隐藏了,最开始的时候, 我不知道, 一直在那个homekit桥接点点点。。。

这个二维码扫描一次以后 就会消失了。如果下次还想绑定的话 就直接删掉homeit桥接重新新建吧

还有一个问题没有解决,就是homekit桥接器过一会儿就会无响应,但是日志里面没有什么明显的操作,在网上查了小半天没找到解决方案,后续找到了再更新。

到此END!

 
Share this