前言
小米的智能家庭套件可谓是物美价廉,然而它有着对于我这种强迫症非常不能接受的一个特点:非本地,所有的操作所有的智能都必须通过与小米远端的服务器进行数据交换才能够进行,这也就意味者在没有网络(路由器断了外网)或者小米服务器出故障的情况下,所有的小米设备会处于瘫痪状态;
当然,这不是最主要的问题,而是这样一来,你的设备的所有动向都会被小米收集,这是严重的个人信息的泄露活着至少说是不安全因素(所以很奇怪居然有人敢买小米的摄像头作为监控,这到底是安全还是更不安全)。
当然,这也许就是小米的目的,在后面的设置中也可以看出这一点迹象(特别是本地设备的通讯密码在高版本的米家中就不存在本地了,开玩笑呢…)。而树莓派被大量的被用于智能家庭的中枢,恰好可以作为一个本地中枢,我就想也简单地玩一下。
基本框架
期望是将米家完整的接入开源智能家居平台 homeassistant(安装在树莓派上),然后通过其自带的 homekit 支持可以完整地使用 homekit 控制。其中智能全都安装在 homeassistant 上,将每个智能都以一个开关设备的形式暴露给 homekit,通过本地苹果设备实现 homekit 的远端控制。
这样米家设备被限制在 homeassistant 的管理之下,homeassistant 在本地路由器下完整地本地运行,远程完全交给 homekit(作为唯一的出口,实现设备开关和智能条目的开关,后期可以直接禁止除了本地苹果设备 ip 之外的所有向外的数据通讯)
完整构架:米家——HA——HK——远端,其中米家是独立的设备,HK 自身不用设置(只需把不同设备在 HK 中分标签页的安排好就行:分为电器及开关,环境数值传感器,安防传感器,智能条目四个标签页即可),远端通过 homekit 自带功能也不用设置(只需将本地苹果设备联入路由器并且设为 HK 中枢),四个环节中只有 HA 要独立配置。而三个连接中,米家——HA 以及 HA——HK 都是需要配置的。
设置 HA
因为 HA 有自己的树莓派系统 hassbian,自带了管理工具 hassbian-config(hassbian 基于 raspbian 的最小镜像,所以操作也差不多,因为有自带工具,就换了系统)。
hassbian 在官网下载镜像(还有基于 docker 的 hass.io,相关安装也可以在官网找到),安装时其实推荐 中文官方文档 ,有比较简单的安装流程(包括 hass.io),中文文档其实来自墨澜,她的技术站
我选择了 hassbian,按照流程:
- 下载
- 烧录(和官方系统一样)
- 加入无线路由其配置文件-开机等待(墙内网不好,基本都要手动 ssh 安装 HA,这点 mossbian 应该好很多)
- 手动 SSH 登录(同一路由器下网址 hassbian.local),用 hassbian-config 安装 HA(失败多安装几次)
- 安装 samba
- hassbian.local:8123 就可以看到界面了
PS:这边有一个问题是一直看不到界面,使用
sudo systemctl status homeassistant
可以看到系统一直在-quiet
地加载 frontend,耐心等待就行,等到进程下面只有 hass 了就行了。
米家——HA
同样按照中文网接入配置configuration.yaml
接入网关,yeelight,其他设备即可,这里注意获取 token 的设备需要有另外的方法获取,配置用中文网的就行
获取 token
按照中文官网的方法已经不行了,遇到细节问题的话,就不能靠中国的网站了,需要在国外官网或者论坛找资料,参照这篇文章,安装某个特殊版本 5.4.49 的米家,在手机文件中就可以找到所有设备的 token,然后在没有重置的情况下就可以连上 HA 了(所以先要把所有设备就位后再获取 token,不然 token 就变了)。
PS:通过 miio 的方法可以获取一部分设备的 token,但是小米新的机制貌似会在米家连上重置的设备的设置过程中再更换一次 token(就是再重制设备一次?),反正这样一来原来获取的 token 就是失效的 token。以及通过数据库解密的方法也只有老版本米家可以,说明小米正在使获取 token 变得越来越困难(就不要想小米会开放 token 查询了…),万一以后老版本米家显示版本过低需要更新至最新版使用……
接下来所有支持的设备都可以连上了(我主要是绿米,yeelight,飞利浦和智米),但是 HA 的相关连接并不是都十分完美的,目前网关的灯就不是完美连接,所以出什么问题也有可能是本身 HA 的问题。
HA——HK
这里仍然推荐国外官网,在设置中加入相关的代码就很容易将所有设备显示在 HK 中,然而又一个问题,就是 HK 中显示的信息是不全的,这就需要通过 HA 中自己添加各种附加的设备将一些我们需要的信息暴露在 HK 中。
需要设备返回的一些传感器数值
这里可以使用template sensor根据其中所说的就可以把任何设备传给 HA 的信息以独立传感器的形式暴露给 HK(注意 HK 只接受特定类型的传感器,在前面的一个网址中有写明,所以为了暴露给 HK 有可能需要指定类型,这样会造成 HK 中的单位不对(因为 HK 对指定类型传感器的数值的单位是固定的,但为了给 HK 只能这样))
PS
全部连好米家的设备后,就可以在路由器中禁止米家设备连接外网了,如此一来就彻底与米家的控制断绝关系了,小米的服务器也就获取不到任何关于你的家庭设备的开关状态了,我们可以通过 HA 或者 HK 控制所有设备,连接部分到此结束。
暂时
第一篇就先到这里,下一篇会讲一些设计 service 调用以及智能设置。
PS:最后,注意 yaml 文件对与大小写,空格以及缩进都是敏感的,要格外小心。