# 香橙派安装Home Assistant Supervised

- Link: https://duetg.com/2022/11/install-home-assistant-supervised-on-orange-pi/
- Published: 2022-11-07T19:50:15+08:00
- Author: DuetG

> [Home Assistant](https://en.wikipedia.org/wiki/Home_Assistant)
>  一款用于智能家居的自由开源软件，旨在成为智能家居设备的中央控制系统，专注于本地
> 控制和隐私。通过使用Android和iOS的配套应用程序，或使用支持的虚拟助手（如Google
> Assistant或Amazon Alexa）通过语音命令，可以访问基于Web的用户界面。

> [香橙派](http://www.orangepi.cn/html/aboutUs/index.html)
>  香橙派（Orange Pi）是深圳市迅龙软件有限公司旗下开源产品品牌，迅龙软件成立于2005
> 年，是全球领先的开源硬件和开源软件服务商，致力于让极客、创客、电子爱好者享用到
> 来自中国的优质、低价的科技产品，通过大规模的社会化协作去创建一个更加美好的信息
> 化人类文明。

自从买了[HomePod mini](https://www.apple.com/homepod-mini/)，在还没收到货的时候就
开始盘算着怎么让HomePod能和家里的小米设备联动起来，实现通过Siri来控制小米设备。一
开始在网上找的了一种通过米家App生成Siri快捷指令从而控制小米设备的方法。仔细研究了
一下，发现这个方式并不合适自己：不但需要对每一个设备的每一种操作逐一生成快捷指令
并录音，更麻烦的是即便设置完成，使用的时候还需要手机和所有设备同处一个局域网下才可以。
这已经和“独立通过HomePod来控制设备”这个初衷背道而驰了。细想一下，这个方案合适的人群
应该是单身并且小米设备较少的用户，通过简单的添加就可以零成本实现联动。满足这样条件
的可以自行搜索一下，这里就不多做介绍了。

在Goolge以及微信上搜索“HomeKit 小米”关键字，最后发现[少数派](https://sspai.com/)
上介绍智能家居的文章实在不少，后来又在知乎上看到了篇文章，并在文章下面的评论里找到
了另一篇用Android手机安装Home Assistant的[指南](https://juejin.cn/post/7070532447787548680)。
又在文章里找到了这篇《[香橙派安装HomeAssistant-supervised](https://juejin.cn/post/7122831824497164325/)》，
总算是确定了使用Home Assistant Supervised作为中控的方案。

由于Home Assistant在不断迭代更新（Core更新的速度很快），虽然当时照着上篇教程搭配
少数派里的文章最终实现了联动，但体验较差，并且在使用两个月后突然就失效了。于是又
做了研究，最终完美实现，促成了写这篇blog的动机。鉴于前面提到的那篇教程有些过时了，
这里我就从头再写一遍吧。

> 硬件要求
>  * 香橙派 3 LTS + 电源（可在[香橙派官网](http://www.orangepi.cn/)页脚给出的官方
>    销售链接里购买）
>  * 闪迪64G TF卡（感觉买64G比32G划算，实际32G也可以）
>  * TF卡USB读卡器（写卡用）
>  * 香橙派 3 LTS 保护壳（不一定要买散热套装，官方旗舰店的透明黑壳也是没问题的，
>    可以加一对散热片）

**1. 为香橙派烧录 Debian 11 系统**

> [点击下载官方镜像](https://pan.baidu.com/s/18BE03Zq01EuyBgF07oOz1g)，提取码：9d7v（
> 百度云盘）

如果可以访问Google Drive的话，也可以去英文官网给出的[链接下载](https://drive.google.com/drive/folders/1ctuKgHNN9r517tiAv9GGGaR7UYQgZiXP?usp=sharing)，
不用注册且速度很好。

根据[Home Assistant Supervised官方安装指南](https://github.com/home-assistant/architecture/blob/master/adr/0014-home-assistant-supervised.md)，
~只能安装在Debian 11 Bullseye上 (Ubuntu也不行)~ 目前要求安装在Debian 12 Bookworm
上，但香橙派官方只给香橙派3 LTS做了Debian 11系统，我们后面会有相应的解决方案。所以
我们要下载的文件是：

    ```language-shell
    Orangepi3-lts_3.0.8_debian_bullseye_server_linux5.16.17.7z
    ```

Windows平台上的烧录方法参见香橙派 3 LTS 用户手册中的（推荐使用balenaEtcher）

> 2.4. 基于 Windows PC 将 Linux 镜像烧写到 TF 卡的方法

> [点击下载官方用户手册](https://pan.baidu.com/s/16kMcxo_uUO0yCPSpVibjWQ)，提取码：
> g4xe （百度云盘）

**2. 通过 SSH 连接香橙派**

 1. Windows用户可以在Microsoft Store里安装[Windows Terminal](https://www.microsoft.com/store/productId/9N0DX20HK701)，
    或者使用[PuTTY](https://putty.org/)。
 2. 烧录好系统的TF卡插回香橙派，用网线连接路由器和香橙派，并通电启动香橙派。
 3. 在路由器中查看香橙派的IP地址。
 4. 在终端里输入
    `ssh root@香橙派IP地址``香橙派IP地址`请换成实际地址
 5. 输入密码 `orangepi`

**3. 修改系统 CGroup 至 v1**

这是和上面那篇教程完全不同的地方，那篇并没有提及修改系统cgroup版本。之前参考着安装
的时候，虽然在安装程序上会提及cgroup版本变更失败，但在使用过程中并没有弹出任何错误。
不过这次重装完成后进入Home Assistant后台会立刻受到关于cgroup版本不支持的通知。所以
还是在安装Home Assistant前先把系统搞好再说下一步吧。

> [CGroup](https://zh.wikipedia.org/zh-cn/Cgroups)
>  **cgroups**，其名称源自**控制组群**（英语：control groups）的简写，是Linux内核
> 的一个功能，用来限制、控制与分离一个进程组的资源（如CPU、内存、磁盘输入输出等）。

从 [cgroup v2](https://github.com/opencontainers/runc/blob/main/docs/cgroup-v2.md)
文档可以查到，自Debian 11 bullseye起，Debian的cgroup默认就是v2了。试着刷了一下Debian
10 buster查了查，果然还是v1。然而根据[Home Assistant官网的信息](https://www.home-assistant.io/more-info/unsupported/cgroup_version)，
Home Assistant Supervised只能安装在cgroup v1的系统上，且只能是Debian 11 bullseye。
这就意味着，无论如何都要将bullseye系统默认的v2修改成v1（我曾试过将buster升级到bullseye，
cgroup妥妥自动从v1升级成了v2）。

虽然在后续安装Home Assistant Supervised的环节，安装包会用自动脚本让cgroup从v2切回
v1，但这个操作仅限于非arm版的Debian。因为普通的Debian使用的bootloader是GRUB，这个
脚本也是针对GRUB设计的，并没有考虑其他bootloader。而香橙派运行的是arm版的Debian，
bootloader是U-Boot。这导致安装包的自动脚本会报错，无法把cgroup切回v1，我们只能手工
修改香橙派上的cgroup。

首先在命令行运行下面命令来确定系统的cgroup版本

    ```language-shell
    stat -fc %T /sys/fs/cgroup/
    ```

如果是cgroup v2，返回 `cgroup2fs`
如果是cgroup v1，则返回 `tmpfs`

接下来修改cgroup到v1：

 1.  输入 `cd /boot` ，进入` /boot` 目录
 2.  输入 `cp boot.cmd boot.cmd.bak` ，备份 `boot.cmd`
 3.  输入 `vi boot.cmd` ，进入到编辑界面
 4.  无视最上面的“DO NOT EDIT THIS FILE”
 5.  找到第38行：
     `if test "${docker_optimizations}" = "on"; then setenv bootargs "
     ${bootargs} cgroup_enable=memory swapaccount=1"; fi`
 6.  按 i 键键入insert编辑状态，在`swapaccount=1`后面加上空格并输入：
     `systemd.unified_cgroup_hierarchy
     =0`修改后的第38行如下：`if test "${docker_optimizations}" = "on"; then setenv 
     bootargs "${bootargs} cgroup_enable=memory swapaccount=1 systemd.unified_cgroup_hierarchy
     =0"; fi`
 7.  按 esc 键退出insert编辑状态，输入 `:wq` 回车完成保存并退出（对 vi 操作不熟悉的
     可以在网上查一下教程）
 8.  在命令行输入以下指令并回车，生成新的 `boot.scr`
     `mkimage -C none -A arm -T script-
     d /boot/boot.cmd /boot/boot.scr`
 9.  输入 `reboot` ，重启香橙派

重启完成后用SSH连接进入命令行，再次使用下方命令查看cgroup版本

    ```language-shell
    stat -fc %T /sys/fs/cgroup/
    ```

不意外的话应该返回 `tmpfs`，cgroup版本修改完成。

**4. 更新系统现有软件**

输入 `apt update`，更新软件源
再输入 `apt full-upgrade`，更新现有软件

**5. 使用以下代码安装依赖**

接下来的步骤基本上就是[Home Assistant官方的安装步骤](https://github.com/home-assistant/supervised-installer)
了。安装过程中会提示部分软件已经安装过了，可忽略相关提示。

Update：2024.01.15

感谢网友提醒，文章已随官方步骤做修改。如后续官方程序再次有变动，请以上方链接的官方
步骤为准。

    ```language-shell
    apt install \
    apparmor \
    cifs-utils \
    curl \
    dbus \
    jq \
    libglib2.0-bin \
    lsb-release \
    network-manager \
    nfs-common \
    systemd-journal-remote \
    systemd-resolved \
    udisks2 \
    wget -y
    ```

**6. 使用以下代码安装Docker-CE**

    ```language-shell
    $ curl -fsSL https://get.docker.com -o get-docker.sh
    $ sh get-docker.sh --mirror Aliyun
    ```

**7. 安装OS-Agent**

先在这里查询最新的OS Agent版本：
[https://github.com/home-assistant/os-agent/releases/latest](https://github.com/home-assistant/os-agent/releases/latest)

接下来用 wget 命令下载我们需要的安装包，注意选择正确的架构，香橙派应当选择 aarch64，
如os-agent_1.6.0_linux_aarch64.deb

右键复制安装包的下载地址，粘贴至终端，完成下载使用命令如下：

    ```language-shell
    $ wget https://github.com/home-assistant/os-agent/releases/download/1.6.0/os-agent_1.6.0_linux_aarch64.deb
    ```

注意将地址替换成最新的版本，完成下载后再用以下命令安装：

    ```language-shell
    $ dpkg -i os-agent_1.6.0_linux_aarch64.deb
    ```

**8. 安装Home Assistant Supervised**

之前教程里相关的其他操作目前都被集成到了新版的安装包脚本里，所以只需要下载最新的
安装包就可以了。

Update 2024.01.15
**注意**：由于最新的 `homeassistant-supervised.deb` 要求的Debian
系统已经升级到12 Bookworm了，在Debian 11上安装的过程中检查依赖会报错缺少 `systemd-
resolved` 这个包，而这个包是Debian 12上才有的，我们需要在安装命令中使用 `--ignore-
depends=systemd-resolved` 来忽略掉这个报错。

命令如下：

    ```language-shell
    $ wget -O homeassistant-supervised.deb https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb
    $ dpkg -i --ignore-depends=systemd-resolved homeassistant-supervised.deb
    ```

安装过程中会看到切换cgroup版本的脚本执行失败的提示，不用管它。

紧接着会自动进入蓝色选择机器类型的界面，注意选择机器类型 `qemuarm-64`

如果选错了类型可以执行 `dpkg -P homeassistant-supervised`，卸载后再重新安装。

默认的 `$DATA_SHARE` 文件夹位置在 `/usr/share/hassio`，所有Home Assistant相关的文件
都在这个文件夹里。

如果想更换位置需要在安装的时候指定，安装命令如下：

    ```language-shell
    $ DATA_SHARE=/想要指定的homeassistant文件夹位置 dpkg -i --ignore-depends=systemd-resolved homeassistant-supervised.deb
    ```

**9. 确认安装**

执行 `docker ps` 来查看容器的状态，一般来说需要20分钟左右会完成所有镜像的拉取和执行。
如果很长时间都没有任何容器在运行，很可能是 `ghcr.io` 这个网址不通。需要执行 `ping
ghcr.io` 来是否确认连通。

> 如果不通需要查询 `ghcr.io` 的IP地址，并修改主机的 `hosts` 文件。具体方法请自行
> 搜索，不再赘述。

**10. 使用Home Assistant**

浏览器地址栏输入 `http://香橙派IP:8123`，即可访问Home Assistant的管理后台，如果显示
需要等待，就再多等一会儿。安装彻底完成后会显示注册用户的界面。关于Home Assistant
的用法可以在少数派里搜到很多，这里不再多说，主要提一下Home Assistant社区市场（HACS）
的安装方法，和小米设备集成的推荐。

 * [HACS](https://hacs.xyz/)相当于为Home Assistant提供了更多的功能扩展，官方称之
   为集成，而非加载项。
   安装方法：1. 前往[加载项商店](https://my.home-assistant.io/redirect/supervisor_store/)（
   第一次打开My Home Assistant页面需要配置一下，在框内输入 `http://香橙派IP:8123`，
   并保存，之后可以自动跳转）2. 搜索 `SSH`，安装社区版的 `SSH & Web Terminal`（如果
   搜索 `SSH` 没有任何结果，需要在你的用户资料下开启高级模式）3. 在 `SSH & Web Terminal`
   的配置页面，选项一栏中找到 `password: ""` 一行，在引号中设置一个SSH密码（密码
   随便）。在网络一栏中设置一个SSH端口（数字随便）4. 在信息页面开启在侧边栏显示，
   并点击下方的启动5. 刷新页面后在左侧侧边栏找到 `Terminal`，点击并开启终端6. 在
   终端内执行 HACS 下载脚本`wget -O - https://get.hacs.xyz | bash -`7. 完成下载后
   通过添加集成，搜索HACS，跟着步骤便可完成安装和配置。
 * 关于小米设备集成主要介绍一下好用的HACS小米集成。
   之前查看少数派的文章，都在推荐”
   Xiaomi MIoT“这款集成，GitHub仓库地址是：`https://github.com/ha0y/xiaomi_miot_raw`
   但实际使用体验感觉一般，代码目前最后一次更新是4月10号，也有7个月没更新过了。这次
   重装之后尝试了”Xiaomi Miot Auto“这款，仓库地址是：`https://github.com/al-one/
   hass-xiaomi-miot`目前最后一次更新是18天前，实际用下来感觉非常不错，是目前我主力
   使用的小米集成。

全文完

Last Update: 2024.01.15
