这是【智能家居】系列折腾实录的第一篇,整个系列大概会分成4~5期,不会太深入,只是记录下我做智能家居折腾的过程,留个档方便日后查看。如果时间不充裕就不出视频了,感兴趣的观众可以先去看看现有的教程,或是较为详细的官方文档。
2023.1.31 更新:
!!!文章实效性警告!!!
由于Home Assistant Supervised 安装脚本自1.4.0版本(Dec 11, 2022)起,阻止非原生Debian 11系统(
Debian Linux Debian 11 aka Bullseye (no derivatives)
)安装HA Supervised,因此本文章对于1.4.0或更新的版本不可用。用户仍可在非HA支持的发行版上安装较早的(1.3.1及以前)HA Supervised,并升级至最新版本,仍可使用基本的备份、插件功能。
HA Supervised 安装脚本 Release:https://github.com/home-assistant/supervised-installer/releases
HA Supervised 安装系统要求:https://github.com/home-assistant/architecture/blob/master/adr/0014-home-assistant-supervised.md
环境介绍
系统环境为桌面端Linux:Deepin 20.4 x86_64,基于 Debian。
neofetch
OS: Deepin 20.4 x86_64
Host: 2320JVC ThinkPad X230
Kernel: 5.10.83-amd64-desktop
Uptime: 59 mins
Packages: 1990 (dpkg)
Shell: zsh 5.7.1
Terminal: /dev/pts/0
CPU: Intel i5-3230M (4) @ 3.200GHz
GPU: Intel 3rd Gen Core processor Graphics Controller
Memory: 1625MiB / 3615MiB
由于是x86的的Linux,所以本文档采用了HomeAssistant Supervised,不同的安装方法所支持的功能不同,具体可见官方文档1:
采用 Docker 安装 Home Assistant 与 Supervisor,为的是能备份和装插件,而且通过Docker安装方便管理。
Docker镜像安装
去GitHub 下载supervisor
和其依赖os-agent
的.deb
安装包。
HomeAssistant-supervisied:
https://github.com/home-assistant/supervised-installer/releases/
OS-Agent:(linux_x86_64版本)
https://github.com/home-assistant/os-agent/releases/
⚠️注意!!
安装前请仔细阅读HA Supervised的系统要求:
https://github.com/home-assistant/architecture/blob/master/adr/0014-home-assistant-supervised.md
受支持的HA Supervised系统有诸多要求,如:
- 必须安装在原生Debian Linux Debian 11 aka Bullseye (no derivatives) 上
- 除hass外无其他软件包等
在非受支持的系统中安装Home Assistant Supervised,会有启动警告,但仍可使用插件安装、系统备份等原有功能。
supervised-installer 自1.4.0 版本起阻止了不受支持系统的安装。用户若在非HA支持的发行版(即非原生Debian 11,如Deepin、Ubuntu或Raspberry Pi OS 等)上安装Home Assistant Supervised时,请选择supervised-installer的1.3.1或更早的版本,系统升级不受限制。
⚠️Alerts!!
然后使用dpkg
安装:
sudo dpkg -i os-agent_1.2.2_linux_x86_64.deb
sudo dpkg -i homeassistant-supervised.deb
安装后会自动执行脚本拉取docker镜像并启动容器。
HomeAssistant Supervised 安装完成后,可以查看运行的docker容器:
sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
251f6781fc2a ghcr.io/home-assistant/qemux86-64-homeassistant:2021.12.10 "/init" 46 minutes ago Up 13 minutes homeassistant
5b4c3c02c584 ghcr.io/home-assistant/amd64-hassio-multicast:2021.04.0 "/init" 47 minutes ago Up 47 minutes hassio_multicast
c31e5db3fc23 ghcr.io/home-assistant/amd64-hassio-audio:2021.07.0 "/init" 47 minutes ago Up 47 minutes hassio_audio
714d9b3c18d9 ghcr.io/home-assistant/amd64-hassio-dns:2021.06.0 "/init" 47 minutes ago Up 47 minutes hassio_dns
91d9e8bf52cc ghcr.io/home-assistant/amd64-hassio-cli:2021.09.0 "/init /bin/bash -c …" 47 minutes ago Up 47 minutes hassio_cli
47a11a170c17 ghcr.io/home-assistant/amd64-hassio-observer:2021.10.0 "/init" About an hour ago Up 48 minutes 0.0.0.0:4357->80/tcp, :::4357->80/tcp hassio_observer
8a6a1b496de3 homeassistant/amd64-hassio-supervisor "/init" About an hour ago Up 48 minutes hassio_supervisor
每个组件都运行在不同的容器中,如果通过Supervisor安装插件,也会相应拉取对应镜像并在容器运行。
镜像源为:ghcr.io/home-assistant/qemux86-64-homeassistant:2021.12.10
的 HomeAssistant本体镜像会随后拉取并运行。
如果HomeAssistant容器并未开启,请检查是否之前有自建的HomeAssistant容器和镜像,尝试删除后重启docker服务。
自动安装脚本会自动链接supervisor,并创建HomeAssistant容器,自建的容器如若没有配置过链接不会出现Supervisor配置面板。
查看容器配置
进入HomeAssistant容器配置目录,比如我的在$HOME/docker/containers/<容器ID>
,默认可能在/var
下。
找到 config.v2.json
复制备份打开后,格式化JSON,找到其中MountPoints的部分:
"MountPoints": {
"/config": {
"Source": "/usr/share/hassio/homeassistant",
"Destination": "/config",
"RW": true,
"Name": "",
"Driver": "",
"Type": "bind",
"Relabel": "rw",
"Propagation": "rprivate",
"Spec": {
"Type": "bind",
"Source": "/usr/share/hassio/homeassistant",
"Target": "/config"
},
"SkipMountpointCreation": false
},
可见容器里/config
被挂载到宿主机的/usr/share/hassio/homeassistant
。
为配置方便,可以把config
文件夹软连接至家目录:
sudo ln -s /usr/share/hassio/homeassistant $HOME/homeassistant_config
这样可以更方便地更改HomeAssistant的配置文件。如果服务器不可达,可以尝试安装Samba服务器插件。不过我本身主机配置过samba,就不通过SMB插件管理配置文件了。
整个HASS系统在/usr/share/hassio
,通过Supervisor备份配置时,便会打包/usr/share/hassio
。需要系统迁移时,可以将/usr/share/hassio
拷贝至目的主机,然后使用HomeAssistant Supervised的安装脚本安装。
安装HACS
Home Assistant Community Store 为社区建设的HomeAssistant商店,可以安装第三方集成、主题、表盘以及自动化等。
其GitHub页面为:https://github.com/hacs
宿主机使用命令安装
安装有Home Assistant Supervised的宿主机可以直接在宿主机通过命令安装:
sudo su
wget -O - https://get.hacs.xyz | bash -
拷贝文件安装
命令脚本安装需要能访问GitHub,若无法通过命令安装,可以尝试通过直接拷贝文件安装。
在GitHub下载HACS Realease文件:
https://github.com/hacs/integration/releases/download/1.21.0/hacs.zip
解压后复制到/config
文件夹下。
sudo mkdir ~/homeassistant_config/custom_components/
sudo cp -rf ~/share/hacs ~/homeassistant_config/custom_components/
安装完成之后,在HomeAssistant 配置面板检查完整性,然后重启HomeAssistant服务。
重启后在添加集成可以搜索到HACS。
HA附加配置
利用HACS 安装第三方集成
在HACS的第三方集成中,搜索集成安装即可。若网络不可达,可以去第三方集成的GitHub页面,git clone
然后拷贝至config/custom_components
中。
我目前安装的第三方集成有:
- Miot Auto:将米家的设备接入HA,且可以接入蓝牙网关下的设备,能自动判断设备是本地还是远程连接(除了支持Wi-Fi的,都是远程)
- BLE Monitor:在不使用Miot集成的情况下,直接将蓝牙Mesh设备通过BLE直连至服务器。(但是板载蓝牙的距离和数据取回时间都很糟糕)
安装 add-on
在 配置 > 加载项 中添加新的加载项
官方提示2:add-on支持的系统
Add-ons are only available if you've used the Home Assistant Operating System or Home Assistant Supervised installation method. If you installed Home Assistant using any other method then you cannot use add-ons. Often you can achieve the same manually, refer to the documentation by the vendor of the application you'd like to install.
安装官方插件
官方插件库GitHub:https://github.com/home-assistant/addons
如果未如同上文中将HomeAssistant Docker容器的配置文件链接到家目录,可以安装官方插件库的 Samba Share 插件:
添加官方社区插件仓库:
访问 配置 > 加载项 > 加载项商店,在右上角的拓展菜单中选择仓库(Repo) ,并粘贴社区源的URL:
https://github.com/hassio-addons/repository
添加完成后,检查更新,在插件商店选取插件安装即可。
为了不便于修改配置文件,我安装了VSCode网页端的插件。
目前我的HomeAssistant主页Lovelace长这样,后续可能会再美化吧。
配置HTTPS
- 配置证书:使用路由器插件 Let's Encryped 插件,使用DNSPod API申请的免费证书。
- Nginx 反代
采用系统中安装的Nginx,当然也可以使用HA的插件
server {
listen 11237;
listen 11238 ssl http2;
server_name ha.xxxxxx.cn;
ssl_certificate /root/cert/cert.pem;
ssl_certificate_key /root/cert/key.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
location / {
proxy_pass http://127.0.0.1:8123;
proxy_redirect http://$host/ http://$http_host/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
HA还需要配置 configuration.yaml
,否则会返回400 Bad Request
https://www.home-assistant.io/integrations/http/#reverse-proxies
Reverse proxies
When using a reverse proxy, you will need to enable the
use_x_forwarded_for
andtrusted_proxies
options. Requests from reverse proxies will be blocked if these options are not set.http: use_x_forwarded_for: true trusted_proxies: - 10.0.0.200 # Add the IP address of the proxy server - 172.30.33.0/24 # You may also provide the subnet mask
下一期介绍米家设备接入HA。
停止HA Supervised
sudo systemctl stop hassio-supervisor.service
sudo systemctl stop hassio-apparmor.service
sudo systemctl stop haos-agent.service
sudo systemctl disable hassio-supervisor.service
sudo systemctl disable hassio-apparmor.service
sudo systemctl disable haos-agent.service
sudo docker stop homeassistant hassio_multicast hassio_observer hassio_audio hassio_dns hassio_cli hassio_supervisor
sudo docker stop addon_core_configurator addon_core_mosquitto addon_a0d7b954_vscode