Home Assistant 介绍

官方网址:https://www.home-assistant.io/
Home Assistant 诞生于 2013 年,是一款基于 Python 开发的智能家居开源系统,他的主要功能就是可以将不同品牌的智能家居设备连接起来互联互通。
这个开源项目已经发展了已经快十年了,同时期的其他类似项目都已经雨打风吹去了,目前看 Home Assistant 更新还是很频繁的,每个月都有好几个版本发布。
之前我只有几个 WiFi 插座,厂家还不一样,用 HA 是没有必要的。现在我想将家里的所有灯开关都换成 ZigBee,部分插座也换成 ZigBee 来控制。
所以我买了 SOFFON ZigBee USB Dongle Plus (93元)作为协调器,京鱼座四件套(99元)设备,还买了涂鸦的 ZigBee 零火开关单开(60元)来进行测试。
简单说下 ZigBee,网络中有三种设备,一个协调器,多个路由器,多个终端,比如在我的这些测试设备中,USB dongle 是协调器,插座,开关这种一直通电的设备都是路由,其他电池的设备都是终端。现在支持 ZigBee 3.0 版的协议不同厂家的产品是可以互通的,所以后续我可以继续购买不同厂家的 ZigBee产品,选择的范围就大了,方便我找性价比最高的。
为什么不用 WiFi 呢,主要是 WiFi 设备多了后对路由器要求高了,而且家里有的地方可能是 WiFi 死角,而 ZigBee 是自组网,网络中还有路由,在家里基本不可能出现无法联网的设备,而且对无线路由器没有任何妨碍不用升级。最重要的是 ZigBee 设备不依赖云端,而 WiFi 产品加入 HA 时都要 localkey,现在获取越来越难了,我的涂鸦的 WiFi 插座需要在厂家开发者网站上申请 key,目前可以延期半年,我不知道半年后还能不能用,要每个月交钱就没那必要了。
所以打算组建智能家居网络的朋友,我推荐使用 ZigBee。
我在 x86 设备安装后测试了大概两个月了,也算是有了一定的了解。以下的内容都是基于上面的硬件,我在测试过程中搜索后加上自己的理解,如有错误请留言指出。

Home Assistant 安装

只建议两种安装方式:docker 和独立硬件 OS。
上篇博客提到捡了一个鸡肋 x86 设备,我就直接安装了 HAOS。非常简单,我就大概写一下:

  1. 下载 OS;
    到这来找适合硬件最新的版本:https://github.com/home-assistant/operating-system/releases/
  2. 将系统文件写入启动盘,推荐使用 Balena Etcher;
    打算用 U 盘启动就写到 U 盘;
    有内置存储就先用 WePE 启动后再写入;
  3. 设备连接网线,开机启动;
  4. 找台局域网内的电脑,打开浏览器输入:homeassistant.local:8123 或者 IP:8123
  5. 即可看到新鲜的 HAOS,登录;

不管是官方还是网络上,都有大把的安装教程:https://www.home-assistant.io/installation/,我就不细说了。

名词解释

安装系统是很简单的,使用起来还是很麻烦的,首先要理解系统里和各种教程里的一些名词,虽然我列的不是很多,但入门应该是可以了:
Core(核心)、Container(容器)、Supervised(监管)、OS(操作系统)
这四个词应该最先碰到,我觉得理不理解都无所谓,反正都是系统安装相关的。
选择容器的方式 ,可以在 NAS 或者 openwrt 等系统上 Docker 安装。
选择全新的独立硬件设备,那就直接下载 HAOS img 文件写到硬盘启动就完了,这个最简单,推荐。
Intergrations 集成
还有一个词叫 Component 组件,集成和组件其实就是一回事,应该是不同时期的叫法。官方有一千多个集成,靠这些集成来支持不同智能家居厂家的设备,实现各种功能;
Custom Component 定制组件,一些高手自己开发的,用来实现官方不支持的功能或设备;
这些集成都是基于 Python 开发,Core,集成,配置文件这三者组成了一个完整的 HAOS;
Device 设备
Device,就是指我们智能家居里面物联网的物理设备;
Entity 实体
Entity,这个很难理解。我觉得实体不就应该是设备吗?实际上不是,一个设备可以有多个实体,比如说开关,off 是一个实体,on 是一个实体,电量还有一个实体。而且,只有软件功能的集成也可以是一个实体。所以我觉得实体应该是指系统实现一个功能的最小单元。
每个实体均有 Unique ID,该ID不能被用户更改,否则造成数据不一致情况。
Area 区域
Area,就是指卧室,厨房,客厅等。
Scene 场景
Scene,好理解,就是使用的场景,很多智能家居都有这个,比如家庭影院的场景,执行时会自动拉上窗帘,关闭顶灯,打开投影,音箱等。
Scripts 脚本
Scripts,我的理解是自行创建一个实体,这个实体可以关联几个设备,做不同的操作,可以加上延迟等待或条件判断等。这个实体可以加到自动化里用。
Automations 自动化
Automations,就是一个 if 语句,通过设置各种条件,满足后执行动作。这个和脚本还是有差异的。
HA 的自动化相当强大,应该说是智能家居的灵魂。
blueprint 蓝图
blueprint,可重复使用的自动化,可以共享,直接从社区获取了使用,据说也是一个鸡肋功能。
Add-on 加载项
也有的叫插件,从英文名 Plug-in 来说有差异,但对用户来讲,不就是个插件吗?还有插件商店。
实际上,官方为什么叫加载项,我想可能是因为运行机制不一样吧。加载项是通过 Docker 容器的方式运行来实现各种功能的。
Lovelace
前端界面,可以理解为主题。
Mosquitto broker
一个加载项,实现 MQTT 协议的开源代理工具。主要是配合 Zigbee2MQTT 来使用。
Samba share
加载项,将 Home Assistant 的配置文件通过 SMB 共享在局域网内,直接在系统里新建或修改 config 文件。
Terminal & SSh
加载项,主要功能就是 web 界面终端。
Zigbee2MQTT
加载项,简称 Z2M。它是将 ZigBee 协议转化成 MQTT 的桥接工具,硬件设备可以作为网关来控制所有的 ZigBee 智能家居产品。
推荐设备:
基于 TI CC2652 芯片的一些 USB dongle,我买的是 SONOFF ZigBee 3.0 Dongle Plus;
闲鱼上也有一些其他类似的 USB Coordinator;
动手能力强的话可以直接购买 ebyte 的 CC2652 模块自己画板焊接,网上有公开的教程;
官方支持设备列表:https://www.zigbee2mqtt.io/guide/adapters/#recommended
ZHA
即 Zigbee Home Automation。ZHA 是 Home Assistant 自带的 Zigbee 集成,它与 Zigbee2MQTT 一样,将 Zigbee 设备作为网关来控制所有 ZigBee 智能家居的设备。
和 Zigbee2MQTT 相比,ZHA 是自带组件,不用安装什么软件,插上硬件就会弹出硬件选择项,即可食用;但 ZHA 对 ZigBee 设备支持的没有 Z2M 丰富。
推荐设备:
一样是基于 TI CC2652 芯片的一些 USB dongle;
官方支持设备列表:https://www.home-assistant.io/integrations/zha/
ESPHome
ESP8266/ESP32 的 WiFi 模块连接到 HA 来控制设备。
Node-RED
Node-RED 是一种编程工具,用于以新颖有趣的方式将硬件设备、API 和在线服务连接在一起。本质上也是一个执行自动化的工具,但是据说入门比较困难,我就不参与了。
HomeBridge
HA 与 HB 是两个完全独立的系统,各自可以独立运行。HB 的主要目的是通过模拟 iOS HomeKit API,架设一个桥梁,使得不支持 HomkeKit 的智能设备接入 HomeKit。桥接完成后我们可以通过 iOS 家庭进行管理,或者接入 HA 自动化管理。
现在可以直接安装 HomeKit 的集成,我没有 iPhone,也没有相关的家居设备,所以就不能测试了。
HACS(Home Assistant Community Store)
一个非官方的定制组件商店,有主题界面的也有支持设备的组件。
安装对网络要求比较高,只要能穿越互联网,按照官方步骤做就没问题:
hacs.xyz/docs/configuration/basic

一些参考网站:
如何玩转智能家居1:https://deepzz.com/post/homeassistant-concept.html
如何玩转智能家居2:https://deepzz.com/post/homeassistant-introduce.html
Hassbian 论坛:https://bbs.hassbian.com/

Home Assistant 常用加载项安装

推荐安装的加载项:
Samba share
Terminal & SSh
Mosquitto broker
Zigbee2MQTT
前两个就不用说了,直接在加载项商城点击安装就完了。
Samba share 安装后可以 SMB 访问 HA 文件,比如 config 文件夹,就是用来存放所有配置文件的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
├── automations.yaml                       # 自动化
├── blueprints # 蓝图
│ └── automation
│ └── homeassistant
│ ├── motion_light.yaml
│ └── notify_leaving_zone.yaml
├── configuration.yaml # 主配置文件
├── deps # 相关依赖
├── groups.yaml # 分组
├── home-assistant_v2.db # sqlite3数据库
├── scenes.yaml # 场景
├── scripts.yaml # 脚本
├── secrets.yaml # 密钥
└── tts # 文字转语音记录

着重说一下后两个。
Mosquitto broker 安装:

  1. 配置->加载项,点击进入;
  2. 加载商店;
  3. 找到 Mosquitto broker 点击安装;
  4. 信息:自启动,守护,自动更新都选上;
  5. 安装和设置说明;
  6. 配置;
  7. 也可以直接以 YAML 编辑;
  8. 我的配置;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    logins:
    - username: mqtt #设置用户名和密码
    password: mqtt
    require_certificate: false
    certfile: fullchain.pem
    keyfile: privkey.pem
    customize:
    active: false
    folder: mosquitto
    anonymous: false
  9. 配置完成后返回 配置 ->集成,即可看到 Mosquitto broker;
    MQTT 服务其实系统自带了一个组件,可以直接搜索安装,但是建议采用加载项的方式安装,我觉得灵活度更大,而且是基于容器运行,不会影响其他组件。

Zigbee2MQTT 安装
我为什么用 Zigbee2MQTT 不用自带的 ZHA 呢,因为 ZHA 对京鱼座的几个设备支持不太好,而我又不会改代码,换成 Zigbee2MQTT 就好用了。

  1. 同样是到加载项商店,添加仓库;
  2. 输入:https://github.com/zigbee2mqtt/hassio-zigbee2mqtt 添加;
  3. 搜索 Zigbee2MQTT 安装,还有一个 Zigbee2MQTT Edge 属于开发尝鲜版,看自己需要了;
  4. 安装后的信息;
  5. 配置;
  6. 同样可以 YAML 编辑,我的配置;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    data_path: /config/zigbee2mqtt
    socat:
    enabled: false
    master: pty,raw,echo=0,link=/tmp/ttyZ2M,mode=777
    slave: tcp-listen:8485,keepalive,nodelay,reuseaddr,keepidle=1,keepintvl=1,keepcnt=5
    options: "-d -d"
    log: false
    mqtt:
    base_topic: zigbee2mqtt
    server: mqtt://192.168.10.103:1883 #实际 MQTT 的 IP 地址和 MQTT 的端口
    user: mqtt #上面 Mosquitto broker 里设置的用户名和密码
    password: mqtt
    serial:
    port: /dev/ttyUSB0 #这个要根据实际插入的 USB 设备设置,可在终端里面 cd /dev 查看
    permit_join: true
    frontend: true
    advanced:
    transmit_power: 20 #设置 ZigBee 无线发射功率,默认 5,CC2652P 最大可以设置 20 dBm
    至于如何添加 ZigBee 设备且看下回分解。

个人感想

我做电子硬件十几年,对软件也算还有点研究,但没想到 HomeAssistant 发展了快十年易用性还是这么差,搜索了很久才慢慢入门。
系统安装是很简单,但作为一个智能家居的管理软件,打开后第一步不就应该是添加设备吗?而我的第一感觉是不知所措。各种名词太多太混乱,比如实体和设备我就搞不清楚为什么要分开,对开发者来说不一样,但对用户来讲,我只关心设备,我只控制设备,其他你就不要放到前端来。
各大智能家居厂家的协议无法互通这是没法改变的事实,HomeAssistant 支持各大厂家的集成基本都有,但有些添加还是比较麻烦的,当然这和那些厂家故意制造的壁垒也有一定关系。可能开源软件就是这样吧,差一个好的产品经理,如果国内有个公司能做个本地化就好用了。
目前看 HomeAssistant 还是少数人的玩具,想入坑的朋友需要一定的毅力。