SDB:Home-Assistant
Home Assistant 的架构
与大多数应用程序不同,Home Assistant 并非以常规软件包的形式提供,无法使用安装管理器进行安装。该系统是用 Python3 编写的,并在 Python 虚拟环境中运行。这意味着它首先需要一个已建立的虚拟环境,并使用 Python pip 来安装服务器。安装 Home-Assistant 有 3 种方法。这里使用方法 3,Home Assistant Core。
使用 Tumbleweed 或 Leap 准备树莓派
执行以下操作
- 将 Tumbleweed 或 Leap 的 JeOS 镜像安装到 micro-SD 卡或 USB 设备上。请参阅 如何在树莓派上安装 openSUSE。
- 将 micro-SD 卡插入或连接 USB 设备到树莓派并启动它。
- 找到 RPi 的 IP 地址。
- 从另一个系统启动 SSH 连接,使用ssh root@<IP_address>
- 输入密码 linux
- 执行其他配置工作,例如更改密码、分配永久 IP 地址和正确的 hostname 等。
准备 Python 虚拟环境并安装 Home Assistant
执行以下操作
- zypper in bluez python3 python3-devel python3-pip autoconf libffi-devel libjpeg8-devel libturbojpeg0 liblapacke3 libpcap1 gcc-c++
- useradd -rm -c "Home Assistant 用户" hass
- passwd hass
- su - hass
- python3 -m venv hassvenv
用户的 Python 虚拟环境已在~/hassvenv.
- source hassvenv/bin/activate
- pip install --upgrade pip
- pip install wheel aiohttp_fast_zlib zlib_ng isal
- pip install homeassistant home-assistant-frontend
您可以使用以下命令启动 home-assistant
hass &
返回到命令行提示符。将创建一个日志文件,您可以使用
tail -f .homeassistant/home-assistant.log
来检查服务启动的进度。
您可能在日志文件中找到有关缺少功能的消息。在这种情况下,您需要使用以下命令
setcap 'cap_net_admin,cap_net_raw+eip' /usr/bin/python3.13
文件/usr/bin/python3.13必须是一个真实的文件,而不是一个链接,这就是为什么文件名中存在版本 13。显然,当 Python 的默认版本具有更高的版本号时,这以后可能会是更高的版本。
在专门用于此服务的服务器中,这可能是一种解决方案,但是它会向该系统的所有用户授予功能。因此,最好将 /home/hass/hassvenv/bin/python3 的逻辑链接替换为该文件夹中的该文件的物理副本,并保护该文件只能由用户 hass 使用。以下命令,从root开始,将执行此操作
su - hass rm hassvenv/bin/python3 cp /usr/bin/python3.13 hassvenv/bin/python3 chmod 700 hassvenv/bin/python3 sudo setcap 'cap_net_admin,cap_net_raw+eip' hassvenv/bin/python3
如果您之前将功能分配给/usr/bin/python3.13,您可以作为 root 使用以下命令删除这些功能:
setcap -r /usr/bin/python3.13
控制 Home Assistant 服务
与其使用以下命令启动上述服务hass &,您可以启动服务使用以下命令
- systemctl start home-assistant.service
并要在 (重新)启动后自动启动它
- systemctl enable home-asisstant.service
为此,您需要以下文件/home/hass/bin/hass.sh,和/usr/lib/systemd/system/home-assistant.service:
/home/hass/bin/hass.sh
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
function activate_venv() {
# Activate Python virtual environment
VENV="$1"
if [ ! -f "$VENV/bin/activate" ]
then
return 1
fi
. $VENV/bin/activate
return 0
}
function start_hass() {
cd /home/hass/
activate_venv /home/hass/hassvenv
hass
}
start_hass
/usr/lib/systemd/system/home-assistant.service
[Unit] Description=Home Assistant After=network.target mysql.service mariadb.service [Service] Type=simple User=hass ExecStart=/home/hass/bin/hass.sh SendSIGKILL=no RestartForceExitStatus=100 # avoid hass amok runs MemoryHigh=1024M MemoryMax=2048M [Install] WantedBy=multi-user.target
在 SELinux 环境中运行
在 SELinux 环境中,Leap 16.0 和最新的 Tumbleweed 的默认设置,启动 home-assistant 服务需要以下操作
zypper install policycoreutils-python-utils semanage fcontext -a -t bin_t /home/hass/bin/hass.sh
尽管如此,由于缺少 SELinux 策略,home-assistant.service 可能无法启动。在这种情况下,您需要检查日志文件/var/log/audit/audit.log,并查找拒绝访问。显然,您可以通过将 SELinux 运行在 permissive 模式下解决此问题。但是,您也可以通过运行以下命令解决此问题
ausearch -c 'hass' --raw | audit2allow -M myhass semodule -i myhass.pp
Home Assistant 的配置和使用
Home Assistant 的配置和使用是通过网页完成的。访问网页的地址是
http://<IP_address>:8123