SDB:Home-Assistant

跳转到:导航搜索
本文介绍使用树莓派和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 的默认版本具有更高的版本号时,这以后可能会是更高的版本。

Icon-warning.png
警告:请注意以下事项

在专门用于此服务的服务器中,这可能是一种解决方案,但是它会向该系统的所有用户授予功能。因此,最好将 /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