开源智能家居控制系统Home-Assistant
一直喜欢科技感,想打造一套属于自己的智能家居系统
一、什么是Home Assistant?
二、安装Home Assistant
(一)docker安装
- 命令行拉取镜像
1 | #拉取hass的最新版镜像(注意:根据自己需求选择对应版本,并不是越新越好) |
(二)docker-compose一键安装
docker-compose.yaml:
1 | version: '3' |
运行:
1 | sudo docker-compose up -d |
进入HA
http://ip:8123
第一次进入要设置用户名密码
三、安装插件、商店HACS
HA插件是以安装配置config目录内的custom_components
目录内,我是用openwrt的docker安装的,在:/overlay/Configs/HomeAssistant/custom_components
目录结构类似:
1 | root@iStoreOS:/overlay/Configs/HomeAssistant/custom_components# tree -L 2 |
ha_file_explorer在线编辑器
https://github.com/shaonianzhentan/ha_file_explorer
手动安装插件
将插件包解压到 custom_components 目录内,重启HA。
四、接入设备
HA 设备的接入方式并非一键连接,需要在树莓派目录 \usr\share\hassio\homeassistant 下修改配置文件 configuration.yaml 。
1.
进入 HA 管理界面,点击侧边栏 Supervisor 中的 Add-on store ,安装并启动 File editor 插件便可在网页对 configuration.yaml 文件进行直接编
Broadlink 博联全系列
博联接入 HA 最为省心。以博联智能开关为例,
1 | # 「switch:」只需填写一次 |
配置远程唤醒设备
安装好wakeonlan插件
在configuration.yaml 加入:
1 | switch: |
远程关闭电脑
摘自:https://bbs.hassbian.com/thread-15940-1-1.html
不需要增加任何硬件成本,但是电脑必须支持WOL(远程唤醒)
原理自析:被控制端电脑运行一个休眠和关机监听服务,基于python3,这个服务占用资源少,再在HA内对监听端口访问,发出指令进行操作。
windows
1、安装 python3,并安装 jsonrpclib-pelix 库
1 | pip3 install jsonrpclib-pelix |
2、按win+R键输入: shell:startup 会打开一个文件夹,在此文件夹新建一个后缀名为.pyw文件,然后右键打开方式 设置为 python 复制粘贴以下内容:
1 | import subprocess |
Linux系统
1、安装 python3,并安装 jsonrpclib-pelix 库
1 | pip3 install jsonrpclib-pelix |
2、新建pyw文件,如guanji.pyw
1 | import subprocess |
让此文件随系统启动运行,方式多样,自行百度。
- 做好以上步骤,下面就是HA的配置了:
编辑Homeassistant 配置文件在 switch下添加:在switch 分支下加入块:1
vi configuration.yaml
1
2
3
4
5
6
7
8
9
10- platform: command_line
switches:
poweroff_mycomputer:
friendly_name: 台式机关机
command_on: >
curl -X POST -d '{"id": "123", "method": "poweroff", "params": ["sleep"], "jsonrpc": "2.0"}' "http://192.168.1.123:1234"
command_off: >
curl -X POST -d '{"id": "123", "method": "poweroff", "params": ["off"], "jsonrpc": "2.0"}' "http://192.168.1.123:1234"
unique_id: poweroff_mycomputer
value_template: '{{ value_json.result=="ON"}}'
其实有很多种玩法,根据需要改一下文件和调用就行。
HA远程关闭linux(win)的另一种方法(ssh命令法):
也就是通过ssh远程登陆主机,发送关机命令
linux关机命令:
1 | ssh usr@192.168.1.X sudo shutdown -f 1 |
windows:关机命令:
1 | ssh Administrator@192.168.1.X rundll32.exe powrProf.dll,SetSuspendState |
首先第一步Windows主机部署OpenSSH服务,Linux主机可以跳过此步
受控的Windows主机若是win10以前的版本,譬如win7,安装OpenSSH使Win主机获得SSH的支持
具体部署请参考:win7下安装openSSHhttps://blog.csdn.net/youlinhuanyan/article/details/105925666
若受控主机是win10后的版本,系统已经自带OpenSSH,但是需要启用功能和设置系统启动自动运行服务
请参考:win10自带的openssh使用教程https://www.dadighost.com/help/39658.html
第二步 进入HA的SSH生成密匙对,并将公匙放置受控主机authorized_keys里
(Tips:如果是安装在容器下的HA,宿主机SSH可以用docker exec -it 容器名称 bash命令进入到内部容器终端,容器名称可以用docker ps命令查看。也可以安装portainer容器管理器点console在网页上使用容器内部终端。使用群晖的Docker套件的话,则可以右键单击容器——详情——终端机
Docker 图形化工具 Portainerhttps://www.jianshu.com/p/e76054edabe1
)
HA的SSH下输入ssh-keygen生成密匙对
然后输入ls /root/.ssh/ -a查看目录下是否已生成id_rsa.pub公钥文件
退出容器的终端,回到宿主机的终端,输入
1 | docker cp homeassistant:/root/.ssh/id_rsa.pub /tmp/ (homeassistant为容器名称,/tmp/为宿主机临时目录) |
第三步:拷贝生成的公匙到受控主机
Win系统:使用WinSCP这个软件登录宿主机,用户名和密码与宿主机SSH登录名密码一致,把宿主机上/tmp/id_rsa.pub文件拷贝回Windows系统目录上,为了举例方便,我拷贝至C:\Users\Administrator.ssh\里,Administrator是有管理员权限的用户,.ssh目录如果不存在,请先在cmd用mkdir .ssh创建此目录,右键无法新建。然后把id_rsa.pub复制一份并改名为authorized_keys,然后再拷贝一份id_rsa.pub至C:\ProgramData\ssh目录下并改名为administrators_authorized_keys
(完成这步此时你的受控win主机C:\Users\Administrator.ssh\目录里应有authorized_keys文件、和C:\ProgramData\ssh目录里应有administrators_authorized_keys文件。若这步我表达得不够清楚,可以参照微软官方的文档,部署公匙——标准用户、管理用户,这两块都要操作 OpenSSH 密钥管理https://docs.microsoft.com/zh-cn … enssh_keymanagement)
Linux系统:受控主机输入scp HA宿主机管理用户名@HA宿主机IP:/tmp/id_rsa.pub /root/.ssh/authorized_keys把id_rsa.pub拷贝成authorized_keys放在.ssh目录下
第四步:HA测试SSH连接受控主机
回到HA的终端,输入命令ssh 受控主机用户名@受控主机IP,例如ssh root@192.168.1.110,第一次可能会提示添加密匙,键入yes回车就行了。然后看看是否会提示输入受控主机的用户名和密码,如果没有提示,则通过密匙免密登录受控机成功,然后HA就可以通过shell command来控制受控主机了!
HA的配置部分,实体为开关,yaml内容参考:
1 | switch: |
Linux:
1 | ssh: |
其中,
mac是受控主机网卡mac地址
name是在HA中生成开关实体的名字,你起个方便你自己记的
host是受控主机的ip地址,建议受控主机采用手动固定地址或者通过添加路由器DHCP固定分配地址
turn_off:
service: shell_command.suspend_win7pc 为安排开关关闭时调用哪个shell_command命令
对应的shell_command:命令可以在下方填写,rundll32.exe powrProf.dll,SetSuspendState为Windows系统进入低功耗睡眠状态,修改为shutdown.exe -s -t 00则为关机命令
Linux系统的话则可以改为shutdown或者poweroff
至此,操作完成!受控主机状态带在线检测反馈到开关上的,一键远程软开机关机搞定,测试完美~
在HA首页加入仪表盘(实体)
参考(windows 设置ssh)
1 | 安装OpenSSH |
手机访问
安装Home Assistant 手机版,界面和web版是一样的。
项目地址
https://github.com/home-assistant/android/releases
安装后设置访问地址和用户密码即可访问,可设置在家连接内部WIFI 时通过内网地址访问,在外网是通过域名访问,具体自己摸索。
推荐集成:
虽然不详细教大家安装了,但推荐几个我在用的集成。
1、直接可以安装的:
- HomeKit:这个就是用来把HomeAssistant里的设备接入HomeKit的,IOS用户必装
2、需要现在HACS下载的:
- bemfa:用于把不支持米家但能接入HomeAssistant的设备接入小爱同学或天猫精灵语音控制
- Xiaomi Miot Auto:能够把大多数米家设备直接接入HomeAssistant
- Xiaomi Miot:和刚刚的插件功能相同,是另外一位大神制作的,如果上一个插件接入不了的设备,可以试试这个,我个人觉着比Xiaomi Miot Auto略微弱一丢丢
- Midea AC LAN:可以把美的、华凌空调接入HomeAssistant
- 彩云天气:天气预报插件,可以基于天气情况实现联动
- Xiaomi Gateway 3:专门用来接入米家和Aqara的Zigbee协议设备的插件
- hacs_proxy:代理设置,https://github.com/ryanh7/hacs-proxy/tree/master
接入天猫精灵(小爱音箱)
接入易微联sonoff设备
Homeassistant安装sonoff插件
1、下载homeassistant插件:
下载地址在https://github.com/AlexxIT/SonoffLAN
解压后文件中的custom_components文件夹下。
2、配置
打开你homeassistant文件夹下的配置文件configuration.ymal然后在末尾添加如下代码:
1 | sonoff: |
配置完成后保存重启homeassistant:配置——服务控制——重新启动
重启完成后我们可以在开发者工具——状态栏,看到所有设备,然后找到新添加的sonoff设备,最后在UI前端添加显示界面即可。
HA接入博联设备
接入Yeelight
以 Yeelight 灯带为例(非原生 Homekit 设备)。HA 自动搜索无法正确配置 Yeelight 灯带,因此需要手动加入。从路由器或 App 中获取设备的 IP 地址即可无缝接入 HA。
将以下内容拷贝至 configuration.yaml 中并更改 IP 地址。(注意 yaml 格式和缩进)
1 | # 该方法不适用于已支持 Homekit 设备 |
在 配置 - 服务器控制 重新启动后便可在首页看到设备。
接入Broadlink 博联全系列
博联接入 HA 最为省心。以博联智能开关为例,
1 | # 「switch:」只需填写一次 |
接入XIAOMI 小米系列
区别于其他智能设备,小米设备不光要获取 IP 地址,还要要获取设备 API token
Token 的获取方法有很多,这里介绍最简单的一种。由 SchumyHao1 分享,下载 apk 在手机安装。在 app 通用设置 - 网络信息 中即可看到设备 token 。iOS 用户须下载安卓模拟器运行。
以小米智能开关为例,
1 | # 「switch:」只需填写一次 |
小米智能网关需用 key 连接。还是用到之前的 App ,在网关页面中点击 关于 ,多次点击 插件版本 位置打开开发者模式。打开 局域网通信协议 便可获取 key 。
1 | xiaomi_aqara: |
连接成功后,小米网关下的所有智能硬件将自动接入 HA 。
接入Homekit
设备连接 HA 后,可利用 HA 内置的 Homekit 插件将所有设备接入家庭,用 iPhone 统一控制。在 configuration.yaml 中写入:
1 | homekit: |
重启 HA ,在通知中可看到二维码和 8 位连接码,扫描或手动接入即可。原生 Homekit 设备需先在家庭 App 中移除, HA 会自动发现,输入 Homekit 设备 8 位连接码后即可接入 HA 。
更多设备的接入可在 官方整合文档 中查询。
至此,Homeassistant 的设备接入工作完成。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com