Home Assistant:开源智能家居系统

Home Assistant(简称 HA)是一个开源的智能家居平台,可以运行在树莓派或者服务器上。目前已经能够接入许多品牌的智能设备,包括米家和 Yeelight。同时,还支持 Apple HomeKit、Google Assistant 和 Amazon Alexa 等智能家居控制平台。通过 Home Assistant,不需要米家网关,也能方便地使用 Siri 控制米家的智能设备。

准备

软件方面,目前 HA 有多种安装方式(如下),这里选用的 Raspbian 安装方式)。

  • Hass.io,它基于 Docker 和 HassOS,只支持树莓派,通过树莓派镜像的方式直接安装。安装简单,但断电兼容性不好,一次断电就会导致服务挂掉。
  • 在 Raspbian 上安装。安装步骤较多,安装完成后没有 hassio add-on 功能,但稳定。

硬件方面,考虑到不需要太多 GPIO 的功能,我选用了树莓派 Zero W,自带 WiFi 和蓝牙。但是其性能可怕,跑 apt 和 pip 时 CPU 会直接 100%。

安装

Hass.io 安装

去官网下载对应硬件的 Hass.io 镜像,刻录到 SD 卡。

网络配置参考 HassOS howto 文档,按照文档描述,需要外接 U 盘。这里提供一种不需要 USB 外接设备的配置方式。

刻录好的树莓派镜像 SD 卡上有四个 ext 分区(Mac 不支持 ext 分区格式,需要安装软件或在 Ubuntu 上操作),在名称为 hassos-overlay 的分区中,新建目录:

sudo mkdir -p etc/NetworkManager/system-connections

创建 my-network 文件,按照参考文档写入配置:

sudo vi my-network
[connection]
id=my-wireless
uuid=82b0ccd9-f0a0-4ca8-aa73-6a595d847a58
type=802-11-wireless

[802-11-wireless]
mode=infrastructure
ssid=YOUR-SSID
# Uncomment below if your SSID is not broadcasted
#hidden=true

[802-11-wireless-security]
auth-alg=open
key-mgmt=wpa-psk
psk=YOUR-PASSWORD

[ipv4]
method=auto

[ipv6]
addr-gen-mode=stable-privacy
method=auto

需要注意的是:

  1. id 任意取,uuid 用 Python3 的 uuid.uuid4 生成;
  2. 设置无线网络时,key-mgmt 无线网加密类型,对于 “WPA-PSK”、“WPA2-PSK” 和 “mixed WPA/WPA2 PSK” 类型,这个值都是 wpa-psk

最后,修改文件权限为 600。

sudo chmod 600 my-network

unmount SD 卡,插入树莓派启动即可。启动后,在路由器上能看到设备连接,但要等一段时间才能访问 web 界面 http://hassio.local:8123(如果路由器不支持 mDNS 就通过 ip 访问,下同)。

在 Raspbian 上安装

首先去树莓派官网下载最新的 Raspbian Lite 系统镜像,刻录后并进行必要的设置。

安装必要包

sudo apt update && sudo apt upgrade
sudo apt install build-essential libssl-dev libffi-dev 
sudo apt install python3 python3-dev python3-pip python3-venv

(optional)将当前用户添加到 dialoutgpio 用户组中,第一个用户组用于访问 Z-Wave 和 Zigbee 控制器,第二个用户组用户访问 GPIO。

sudo usermod -aG dialout,gpio pi

创建虚拟环境

cd ~
mkdir homeassistant
cd homeassistant
python3 -m venv .

激活虚拟环境并安装 Home Assistant

source bin/activate
python3 -m pip install wheel
pip3 install homeassistant

在虚拟环境中启动 Home Assistant

hass

首次启动后,将会在 ~/.homeassistant 目录中创建配置文件,并下载安装必要库和依赖项,可能需要 5~10分钟。完成后即可通过 8123 端口访问 web 界面。

配置

主要包括

  • (仅支持 Hass.io)添加两个 add-on:Configurator 和 SSH server;
  • 配置时区;

添加 add-on 在 web 界面 [Hass.io] - [ADD-ON STORE] 中。

Configurator add-on

这个扩展提供了一个 web 编辑器,从而能够在 web 界面编辑 Home Assistant 的配置。

打开上述菜单安装该 add-on,安装完成后,进行以下配置:

  • 设置用户名和密码;
  • 调整 allowed_networks;

单击保存,并启用加载项。默认访问地址为 http://hassio.local:3218

打开后,编辑 /config/configuration.yaml,添加以下内容

panel_iframe:
  configurator:
    title: Configurator
    icon: mdi:wrench
    url: http://hassio.local:3218

panel_iframe 能够把 Configurator 集成到 8123 端口的 web 界面中。编辑完成后,在 8123 端口的 web 界面中,选择 配置 - 通用 - 服务管理,选择重启服务使配置生效。

SSH server add-on

这个扩展提供通过 SSH 访问 hass.io。

打开上述菜单安装该 add-on,安装完成后:

  • 添加公钥,密码留空;
  • 修改默认端口到 3154;

单击保存,并启用加载项,稍等片刻后,即可通过 SSH 访问。

修改时区

在 configuration.yaml 文件中修改 homeassistant 的配置,修改 time_zoneAsia/Shanghai。修改完成后重启 HASS。

其他配置如经纬度、海拔高度等用来推测日出日落时间,以下是武汉市的配置。

homeassistant:
  # Name of the location where Home Assistant is running
  name: Home
  # Location required to calculate the time the sun rises and sets
  latitude: 30.583333
  longitude: 114.316667
  # Impacts weather/sunrise data (altitude above sea level in meters)
  elevation: 121
  # metric for Metric, imperial for Imperial
  unit_system: metric
  # Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
  time_zone: Asia/Shanghai

注意:要使 add-on 也使用该时区,需要重启 add-on。

连接 HomeKit

连接 HomeKit 后,HA 作为网桥联通 HomeKit 和智能硬件。HA 已经内置了对 HomeKit 的支持,只需要在 configuration.yaml 中增加记录,然后重启 HASS。

homekit:
    include_domains:
      - light

重启完成后,在概览中会出现 HomeKit 卡片,显示用于连接的代码。在家庭 App 中输入代码添加配件即可。

连接智能设备

注意事项:

  • 使用 Zigbee 网络智能设备需要树莓派外接 Zigbee 收发器;
  • 使用 WiFi 控制的智能设备建议在路由器中为设备设置静态 IP;

Yeelight Bulb

Yeelight 灯具使用 WiFi 控制,连接 HA 前需要在 Yeelight App 中打开灯具的局域网控制功能(参考局域网控制 Yeelight)。

打开该功能并且灯具成功接入 WiFi 后,在 configuration.yaml 文件中添加配置,name 更多详细参数可以参考官方文档。

light:
  - platform: yeelight
    devices:
      192.168.1.25:
        name: Living Room

添加配置后重启 HASS,灯具将会在概览中出现。如果在上一步中配置好了 HomeKit,那么在家庭 App 中已经出现了该灯具,可以使用 Siri 控制。

参考链接

目录