如何玩转HomeAssistant - HA接触

接上篇文章:如何玩转HomeAssistant - HA介绍

如何安装 HA,上篇文章说到了一些,本篇文章实战安装 HA,并介绍 HA 内部概念。通过两种方式安装:

  • 镜像安装
  • Docker安装

如果大家有更多需求,可以到官方站点查看:Installation

镜像运行

镜像安装,相当于安装一个操作系统,我们需要提前准备好虚拟机或者一个小型的设备(如树莓派或NUC等等)。

我这里准备的是 VirtualBox Linux 环境来进行安装 HassOS,镜像下载地址在 Github 上:home-assistant/operating-system

1. Create a new virtual machine
2. Select “Other Linux (64Bit)
3. Select “Use an existing virtual hard disk file”, select the VDI file from above
4. Edit the “Settings” of the VM and go “System” then Motherboard and Enable EFI
5. Then “Network” “Adapter 1” Bridged and your adapter.

virtualbox-install-ha

Docker运行

容器运行对于了解过的人应该是比较喜欢的一种方式。我们这是使用 docker 做演示。

首先,我们得有一个安装 docker 环境的机器:docker安装,选择一个合适的 HA 镜像版本。运行方式很简单:

docker run --init -d \
  --name homeassistant \
  --restart=unless-stopped \
  -e TZ=Asia/Shanghai \
  -v /PATH_TO_YOUR_CONFIG:/config \
  --network=host \
  homeassistant/home-assistant:stable

替换 PATH_TO_YOUR_CONFIG 为本地配置路径,容器运行起来之后会监听 :8123 端口,启动过程可能会耗点时间。通过访问 http://<host>:8123 即可。

HA 内在

HA 初次接触是一个新鲜事物,它的内部有很多概念,如集成、设备、服务和实体等。提前理解这些概念有助于我们快速上手,玩转 HA。

设备和服务

集成是 HA 中重要的概念,串联着整个系统。那么什么是集成?

集成可以说集成设备,集成服务,或者说设备和服务是集成的一种抽象体现。而实体(Entity)是通过集成(如 lightswitch 等)进行标准化的(如小米灯通过 light集成 集成了 Entity)。标准化实体附加了用于控制的服务。

实体将 HA 的内部工作抽象化。作为集成商,不必担心服务或状态机的工作方式。相反,可以扩展实体类并为要集成的设备类型实现必要的属性和方法。

integrating-devices-services

  1. Device Integration(ie. hue)将使用此配置来建立与设备/服务的连接。它将转发 Config Entry(传统使用发现助手)以在其各自的集成(lightswitch)中设置实体。device Integration 还可以为未标准化的事物注册自己的 Services。这些服务在集成的域下发布 hue.activate_scene

  2. Entity Integration(i.e. light)负责定义抽象实体类和服务来控制实体。

  3. Entity Component 帮助程序负责将配置分发到平台,转发发现并收集用于服务调用的实体以。

  4. Entity Platform 帮助程序管理该平台的所有实体,并在必要时轮询它们以获取更新。添加实体时,entity platform 负责将实体注册到设备和实体注册表中。

  5. Integration Platform(i.e. hue.light)使用配置来查询外部设备/服务,并创建要添加的实体。integration platform 还可以注册实体服务。这些服务将在设备集成的所有实体上进行实体集成(即所有 Hue light 实体)。这些服务在设备集成域下发布。

1、实体与 HA Core 交互

从实体基类集成的集成实体类负责获取数据并处理服务调用。如果禁用了轮询,则它还负责告知 HA 数据何时可用。

entity-core-interaction

实体基类(由实体集成定义)负责格式化数据并将其写入状态机。

实体注册表将为 unavailable 当前未由实体对象支持的任何注册实体写入状态。

2、实体数据层次

entity-data-hierarchy

删除,禁用或重新启用任何对象,下面的所有对象都将进行相应调整。

什么是实体

什么是实体,实体注册表(Entity Registry)?我认为是 HA 中智能设备所能划分的最小单元,也可以理解为控制单元,如空气净化器中的温度传感器上报视作一个实体。

每个实体均有 Unique ID,该ID不能被用户更改,否则造成数据不一致情况。如果一个设备只有一个ID,但提供多个实体,我们可以这样标识 {unique_id}-{sensor_type}

切记 Unique ID 必须全局唯一,且不可变,一般用 MAC 地址。

什么是设备

什么是设备,设备注册表(Device Registry)?HA 中的设备代表具有自己的控制单元的物理设备,它位于一个特定的地理区域,通常由一个或多个实体表示。举个例子,一台空气净化器是一台设备,它所包含的温度、湿度和PM2.5传感器(控制单元)所暴露的我们可以认为是实体。

但是一个实体(如温度传感器)如果拆解出来,也可以是一个独立的设备,这里更多的其实就是一个从属关系的划分(设备可以视作实体,实体可以视作设备),具体的实体或设备的划分自行考虑。配置实体、实体、设备之间的关系如下图:

ha-device-entity

Config Entry 配置了指定的 Entry,该 Entry 可能关联着某个 Device。一个设备通常有如下属性:

属性 描述
id HA 生成的唯一ID
name 设备的名称
connections connetion_type, connection_identifier的集合
identifiers 标识符集合,外界的设备识别号,如序列号
manufacturer 设备制造商
model 设备模型
suggested_area 建议设备区域
config_entries 联接该设备的实体
sw_version 设备防火墙版本
via_device 设备与 HA 之间路由消息的设备标识符
area_id 区域ID
entry_type 实体类型,None 或者 “service”

通过设备注册表来进行管理。

什么是区域

什么是区域,区域注册表(Area Registry)?区域应该是最好理解的,它用来定义区域,如客厅,卧室A,厨房等,代表了一个具体的物理位置,它可以帮助我们归集和标记设备的具体区域。

通过区域注册表来进行管理。

什么是Blueprint

蓝图,是可重复使用的自动化,可以轻松共享。您可以从 Github 和社区论坛导入其他用户的 Blueprint。

什么是自动化

其描述很清晰,为智能家居指定自动化规则。即在什么情况下想要使得智能家居做出什么样的反应。

什么是场景

定格一组设备的状态,日后即可一键恢复。也就是说在实际使用过程中,你可能有一个固定的场景或者模式,比如家庭影院。

什么是脚本

执行一系列动作,相当于指定流水线。可以自行考虑考虑

什么是lovelace

相当于是一个主题,你可以在这个主题上做自己的定制。

HA 初识

当 HA 运行起来之后,你可以通过 <ip>:8123 进行访问,默认会根据浏览器进行对应语言的显示(如中文),通过一些简单的配置就可以开启我们的智能家居之旅了。

首先,需要我们初始化一个账户,也就是管理员账户,《创建账户》。

然后,设置 HA 的名称,选择时区和单位等,至于定位可能不准需要自己选择,《下一步》。

然后,HA 会自动发现你网路中的相关设备和服务,如果现在不是很清楚可以直接跳过,《完成》。

现在,我们进入 HA 首页,你的折腾开始了:

ha-home

  • 概览,也就是仪表盘,我们后续会将我们的智能设备通过卡片的形式添加到这里。可以在这里直接控制设备和查看设备状态。
  • 地图,能够显示相关位置信息,如人员、家的定位等
  • 日志,记录 HA 中发生相关事件
  • 历史,查看历史的事件信息
  • 媒体浏览器,查看一些硬件设备上的媒体
  • 开发者工具,可以帮助我们做一些调试动作
  • 配置,我们使用最多的,如集成、自动化等,和配置文件关系密切
  • 通知,一些通知,告警等
  • 人员,个人设置,如密码修改,主题等

配置文件

HA 的运行离不开配置,现在有两种配置方式,一是通过 HA 网页 UI 进行配置(需要相应的集成适配),二是通过 HA 配置文件进行配置。这里我们直接介绍配置文件:

├── 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                                    # 文字转语音记录

默认情况下 HA 会自动创建上面的配置文件。具体的使用方式在后续的实践过程我们一一熟悉。

但想要玩转 HA 我们还会接触到更多的配置,如用来保存第三方开发组件的 custom_components 文件夹等(HA 会默认加载)。当然为了方便管理,我们也可以自己组织文件夹的组成。然后在 configuration.yaml 进行启用:

# Configure a default setup of Home Assistant (frontend, api, etc)
default_config:

# Text to speech
tts:
  - platform: google_translate

group: !include groups.yaml
automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml

!include 用来指定该字段内容的外部文件,而 !include_dir_merge_named 则用来指定文件夹。

之后的文章,我们通过一个个实战来熟悉 HA 的配置和使用,玩转 HA。

本文链接:参与评论 »

--EOF--

Comments