介绍
在网上看到树莓派 + Home Assistant + HomeKit 从零开始打造个人智能家居系统【
https://post.smzdm.com/p/594460/ 】,自己也一直想做个能用Siri控制智能硬件的作品【不需要购买】,由于 HomeKit 授权的问题,目前接入设备较少,主要为国外品牌,价格较贵。网上有相关教程,喜大普奔。
了解一通后,大致原理采用的是一个开源智能家居平台Home Assistant 。所有设备首先接入 Home Assistant,通过
Home Assistant中的Homebridge 插件实现接入苹果的HomeKit,整套系统部署在树莓派上。结构如下:
在树莓派上安装 Home Assistant
安装方法有很多,对于极客可以直接使用命令行安装。对于小白就需要人性化的方式,通过下载适用于树莓派的Home Assistant镜像,放入SD卡,联网自动安装,就是这么简单。
- 准备树莓派3开发板、5V 2A电源适配器、一张大于等于8G的TF存储卡;
- 下载Home Assistant镜像,根据您手头上的树莓派选择对应的镜像,下载地址:https://www.home-assistant.io/hassio/installation/
- 将镜像文件烧入至TF存储卡,烧入工具根据系统选择,下载地址:https://etcher.io/
注意:树莓派电源适配器必须5V 2A以上,否则可能电源不足无法正常使用。
初始化时,系统会更新到最新的版本,Home Assistant没有国内服务器,所以不要相信20分钟的提示,不要切断电源,当出现上面页面表示已经再开始安装了,接下来的就是耐心等待。这与树莓派电源,网络环境有很大关系,建议用好一点的网络环境,几十分钟到几个小时不等的时间过后,安装成功后,初始界面如下图。这里看到Home Assistant还支持小米的设备。
Home Assistant 插件(Add-ons)安装
这里推荐几个必装的 Add-ons:
- Mosquitto MQTT broker:物联网通信协议,必装的一个插件,智能硬件和服务器通信靠这个协议。
- Samba:服务,必装的一个插件,Hass.io 通过它与局域网内的其他设备进行文件共享,是之后编辑 Hass.io 配置文件的前提。
- Homebridge:是前苹果员工的作品,基于 NodeJS,模拟 iOS HomeKit API。作为“桥”来连接 iOS 设备,使得本不支持 HomeKit 的设备能够接入。
- SSH Server: SSH 服务,推荐安装,方便远程命令行调试。
在Hass.io中的ADD-ON STORE里面可以看到很多插件,包括我们上面讲到的3个,如果没有耐心等待一下,可能网络环境不好,没加载进来。
➢ 安装MQTT
点击Mosquitto broker插件,进入点击INSTALL安装,需要等待一会,网络好安装就快,安装好后点击START启动插件。
➢ 安装 Samba 插件
在插件商店找到 Smaba Share,点击进入安装界面,点击 INSTALL 进行安装。 安装结束后(耐心等待)进入 Info 及 Options 界面,打开自动更新,点击 START,Smaba服务就启动了。
{ /*配置说明*/
"workgroup":"WORKGROUP", /*用户组(可选),默认值 WORKGROUP。*/
"name":"hassio", /*用户名(可选),默认值 hassio。*/
"guest": true, /*(可选)是否允许客人用户(无用户名无密码)默认值 true。*/
"map": { /*开放文件夹(可选),可选有 config,addons,share,backup,ssl。*/
"config": true,
"addons": true,
"ssl": false,
"share": true,
"backup": true
},
"username": "",/*登录用户名(可选)。*/
"password": "",/*登录密码(可选)*/
"interface":"eth0" /*开放接口(可选),有线网连接使用 eth0,无线网连接使用 wlan0。*/
}
如果添加用户名和密码请记住,重启服务后需要密码登陆。
➢ 安装 SSH server 插件「可选」
{ /*配置说明*/
"authorized_keys": [], # 公钥,与下一个选项二选一,两种登陆方式
"password": "1234567" # 填入SSH登陆密码
}
通过 SSH 登录的用户名是 root。
➢ 安装Homebridge插件
添加OK之后,就可以看到Homebridge插件了,进入点击 INSTALL 进行安装,安装方式一样。
安装完成点击START开始,到底端点击REFRESH刷新,可以看到验证码,这个验证码就是苹果HomeKit设备授权码,请记好,若不记得可以RESTART重启刷新再次查询。
Home Assistant 配置框架
配置框架,用来添加智能硬件设备,比如我们这里添加一盏灯。确认您的Samba share已经开启。这样才能访问树莓派里的文件。
在 Windows 或 macOS 的网络共享中找到并打开 hassio,(如果在 Windows 网络中不显示,在资源管理器中输入“ HASSIO” 回车后进入)macOS下已客人身份连接即可。
连接成功即可看到相关文件。config 文件夹内的 configuration.yaml,是我们配置的主文件,通过编辑此文件来设置 Hass.io、添加组件、个性化配置系统。
需要添加1.智能硬件mqtt通信协议 2.控制设备灯 3. 定制实体,如下设置:
在sensor下添加mqtt通信协议和light(灯)设备。
sensor:
- platform: yr
mqtt:
broker: 192.168.10.152
port: 1883
client_id: home-assistant
username: ylb
password: microduino
discovery: true
light:
- platform: mqtt_json
name: ylblight
state_topic: "home/light1"
command_topic: "home/light1/set"
brightness: true
rgb: true
optimistic: false
qos: 0
broker是您树莓派网络地址,您可以通过进入路由器后台查看,或者在Homebridge的日志中查看到。如果没有就重启下Homebridge再刷新LOG应该就有了。
然后在customize修改个性化设置
customize:
light.mCookieLED:
icon: mdi:lamp
friendly_name: 小台灯
homebridge_name: 小台灯
添加完成后需要重启服务。重启前可以先检查一下修改的配置是否有效。在配置->通用里可以找到配置检查。
配置有效后就可以在底下服务管理中重启服务了。
重启服务后,稍等一会,耐心等待,输入Samba share中设置的密码。进入后您就可以看见添加的设备了。
接下来要修改Homebridge配置文件,打开config.josn文件。
将default_visibility默认可见度由隐藏修改为visible,不然iphone的家庭App里面无法添加设备。
"default_visibility": "visible",
修改完成保存后重启Homebridge服务即可。
家庭中添加设备
打开你的 iPhone 的“家庭”,添加配件。相机扫描不太好用,选择没有代码或无法扫描。
就能发现附近的设备,点击进入。
如果无法发现设备,将homebridge里的文件夹accessories和persist删除,再重启homebridge,一般就可以了。可能您开始添加了配件导致配件不识别了。
输入homebridge日志中的验证码。
进入后可以发现两个设备了,如果没有则检查将default_visibility可见度是不是visible,上文已经讲了。可以修改设备名字。
添加成功后就可以在主页看到设备了,这时候手机端添加完毕了。
智能硬件调试
苹果的家庭已经与Home Assistant连接好了,现在需要将智能硬件连接到Home Assistant,这样就能通过Home Assistant间接控制智能硬件了。
➢ 材料
这里需要用到wifi模块让智能硬件联网,因为使用的是mqtt通信,所以wifi模块必须支持mqtt。
将彩灯接到Hub的A0/A1接口,其他模块无顺序叠加。
另外您可以将彩灯藏起来,我这放在一个灯罩里面。
➢ 硬件编程
1.填写你wifi模块需要连接网络的名字和密码。
#define SSID "xxx"
#define PASSWORD "xxx"
2. client_id修改成configuration.yaml文件定制设备的名字,我这里是mCookieLED。
customize:
light.mCookieLED:
3. mqtt_server对应configuration.yaml文件的broker,用户名和密码对应。
mqtt:
broker: 192.168.10.152
port: 1883
client_id: home-assistant
username: ylb
password: microduino
4. state_topic和set_topic与configuration.yaml文件一致。
light:
- platform: mqtt_json
name: ylblight
state_topic: "home/light1"
command_topic: "home/light1/set"
修改完成后上传程序,打开串口监视器可以看到log消息,如果出现下面信息表示wifi模块联网成功,否则检查wifi模块。
同时wifi模块连接成功后彩灯会绿颜色亮1秒,也可以通过这个判断是否连上网络。
boolean wifista = wifimCottonbegin(SSID, PASSWORD, mqtt_server, client_id,mqtt_username, mqtt_password, light_set_topic);
strip.setAllLED(COLOR_GREEN);
strip.show();
delay(1000);
strip.setAllLED(COLOR_NONE);
strip.show();
当你通过Siri或App控制时,可以看到数据消息。
目前支持开关和亮度调节控制,可以直接通过Siri来控制。
立即注册