1. 什么是Home Assistant
Home Assistant 使用 Python3 开发的,是一个完整的 UI 管理的家庭自动化生态系统,它运行 Home Assistant Core、Home Assistant Supervisor 和附加组件。它预装在 Home Assistant OS 上,当然也可以安装在任何 Linux 系统上。它利用由 Home Assistant Supervisor 管理的 Docker,以及在 Home Assistant 环境中本地运行的数十个附加组件。
官网:https://www.home-assistant.io/
2. Home Assistant 安装方式
下面网址是官网介绍怎么安装 Home Assistant 的:
https://www.home-assistant.io/installation/
其中,Home Assistant 一共提供了4种安装方式:
-
Home Assistant Operating System:直接在你的硬件中烧录 Home Assistant 做好的系统镜像,比如官网就有基于树莓派硬件定制的 Home Assistant OS。但前提必须是官方的镜像是支持你的硬件设备的,比如官方做的树莓派的 Home Assistant 镜像,就支持树莓派的硬件。
-
Home Assistant Container:这是基于 Docker (容器)的一种安装方式。
-
Home Assistant Supervised:手动安装 Supervisor 。这种方式的优势就是可以在所有常规的 Linux 系统上运行。但是相对繁琐和困难。
-
Home Assistant Core : 使用 Python 虚拟环境手动安装。
其中,官方推荐的是前面两种方式进行安装,特别是基于官方做好的镜像安装,功能最全面,但是前提是他做好的镜像要支持你的硬件才行。比如官方就做好了树莓派的镜像,如果你的硬件使用的是树莓派,可以直接烧录人家做好的镜像就行。
下面是这4种安装方式所拥有的功能对比图:
可以看到基于 OS 方式安装,功能最全面。
我在自己的Linux开发板上面安装,选择的是 Home Assistant Core 这种方式,也就是使用 Python 虚拟环境手动安装。
3. 安装环境介绍
我安装 Home Assistant 的软硬件环境如下:
硬件:STM32MP157,使用的是野火出的开发板。
软件:Debian ARM 架构制作的 Linux 发行版,版本信息如下:
-
Linux发行版本:Debian GNU/Linux 10
-
内核版本:4.19.94
-
Python3版本
安装Home Assistant 需要 Python3.8 以上的版本,我所使用的版本是:Python 3.10.9
4. 安装过程
在安装之前,请先确保自己的 Python3 版本在 3.8 及以上版本。不过官网又说要求要到 3.10 及以上版本,为了保险起见,大家还是安装 3.10 及以上的 Python 版本吧。
由于我的 Linux 系统使用 apt-get 命令安装时,只能安装到 3.7.3 版本,所以我是自己下载了 Python3.10 版本的源码到开发板上,然后编译安装的。这里我不多介绍,网上也有很多方法。
安装过程其实可以参考官网的安装介绍:
https://www.home-assistant.io/installation/linux
这个网址的安装介绍,是专门针对常规 Linux 系统进行安装的。
4.1 切换pip源
在/etc目录下,新建pip.conf文件(如果/etc目录存在这个文件,则可以不用新建),然后使用vi编辑器打开,输入一下内容:
[global]
timeout=100
index-url=https://pypi.tuna.tsinghua.edu.cn/simple/
extra-index-url=https://www.piwheels.org/simple
[install]
trusted-host=
pypi.tuna.tsinghua.edu.cn
mirrors.aliyun.com
上面这个 pip 源是我看到一篇文章,说必须使用官方的 pip 源,说是使用这个源可以解决在安装 Home Assistant 过程中出现的 ERROR:Failed building wheel for cryptigraphy 这个保存。但是我试过了依然解决不了(下面再讲安装遇到的这个问题)。不过后面我还是保持使用了这个源。
也有写文章说,使用下面的阿里云源:
[global]
index-url=https://mirrors.aliyun.com/pypi/simple/
extra-index-url=https://www.piwheels.org/simple
上面这两个 pip 源大家可以选择试试。
4.2 安装依赖
1.首先更新 apt-get :
sudo apt-get update
sudo apt-get upgrade -y
2.安装依赖项:
sudo apt-get install -y python3 python3-dev python3-venv python3-pip bluez libffi-dev libssl-dev libjpeg-dev zlib1g-dev autoconf build-essential libopenjp2-7 libtiff5 libturbojpeg0-dev tzdata
4.3 创建 Home Assistant 运行的虚拟环境
1)添加一个名为homeassistant的用户
为 Home Assistant Core 添加一个名为 的帐户homeassistant
。由于此帐户仅用于运行 Home Assistant Core,因此添加了额外的参数-rm
以创建系统帐户并创建主目录。
sudo useradd -rm homeassistant
2)创建homeassistant目录,并更改该文件夹所有者为homeassistant账户
sudo mkdir /srv/homeassistant
sudo chown homeassistant:homeassistant /srv/homeassistant
3)为 Home Assistant Core 创建和更改虚拟环境。
# 切换用户
sudo -u homeassistant -H -s
# 切换目录,并创建虚拟环境
cd /srv/homeassistant
python3 -m venv .
source bin/activate
4.4 在虚拟环境下更新pip
pip install --upgrade pip
4.5 安装 wheel
python3 -m pip install wheel
4.6 安装 Home Assistant
到了最后一步,就是安装 homeassistant 了:
pip3 install homeassistant
安装开始过程中,打印信息如下:
5. 遇到问题和尝试解决
5.1 Building wheel for bcrypt(pyproject.toml) … error
遇到错误截图如下:
对于这个问题,我更新了 pip 源,然后再安装 pep517 之后就再也没有这个错误了。
1.更新pip工具
# 更新 pip
pip3 install -U pip
# 安装 pep517
pip3 install pep517
5.2 安装rust 1.56版本以上编译器
在安装过程中报错,说没有找到 rust 的编译器,而且还要求 rust 的编译器版本必须是 1.56 以上版本,于是我只能安装 rust 的编译器了。可以在网上找到安装 rust 编译器相关的文章。
最终安装完成 rust 编译器截图如下:
然后我们可以在终端输入:
rust --version
查看编译器版本信息。
5.3 Building wheel for cryptography (pyproject.toml) … error
问题如下:
该问题,对照着网上的解决办法,都试了一遍,最终还是解决不了,试了n多次,每次都是卡在这里。试过的解决办法有:
1)sudo apt-get install libffi-dev libssl-dev 安装这两个库
2)升级 pip 工具版本。我的已经是 23 版本了
3)pip3 install cryptography 使用该命令直接安装 cryptography ,也是没用,报同样的错误。
4)安装 pep517 。pip3 install pep517 。
5)更换 pip3 源。一开始我使用国内的阿里云源,但是又看到网上的一篇文章说,不能使用国内的源,只能使用官方的源。说是因为 pip 官方的源 piwheels.org 含有armv7 的 whl 文件,可以免编译直接安装。然后我更换为官方的源了,最后还是不行。
反正,上面的方法试了一个遍,最后还是解决不了,卡在这里了。这里记录下遇到的这个问题,希望有小伙伴看到有解决办法告知一下。
其实,Home Assistant 论坛也有人遇到这个问题:
https://community.home-assistant.io/t/error-failed-building-wheel-for-cryptography/352020/27
我看了官网一些人的回复,跟着试了一些方法,最后也还是不行。
下图是运行 pip3 install homeassistant 这个命令,最终打印的错误信息:
一直是卡在了这第三个问题上了,目前暂时找不到解决办法。