这是【智能家居】系列折腾实录的第一篇,整个系列大概会分成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

不同HA系统的功能支持

采用 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

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服务。

重启HomeAssistant

重启后在添加集成可以搜索到HACS。

添加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 插件:

截屏2022-02-21 01.03.02

添加官方社区插件仓库:

截屏2022-02-21 00.40.21

访问 配置 > 加载项 > 加载项商店,在右上角的拓展菜单中选择仓库(Repo) ,并粘贴社区源的URL:

https://github.com/hassio-addons/repository

添加完成后,检查更新,在插件商店选取插件安装即可。

为了不便于修改配置文件,我安装了VSCode网页端的插件。

目前我的HomeAssistant主页Lovelace长这样,后续可能会再美化吧。

s

截屏2022-02-23 22.53.27

配置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 and trusted_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
 

参考资料