在本系列关于家庭自动化的上一篇文章中,我开始深入研究 Home Assistant。我设置了 Zigbee 集成,使用 Sonoff Zigbee Bridge,并安装了一些插件,包括 Node-RED、File Editor、Mosquitto broker 和 Samba。最后,我演示了 Node-RED 的配置,我将在本系列的后续文章中大量使用它。之前的四篇文章讨论了什么是 Home Assistant,为什么您可能需要本地控制,智能家居组件的一些通信协议,以及如何在虚拟机 (VM) 中使用 libvirt 安装 Home Assistant。
在这第六篇文章中,我将介绍 YAML 配置文件。如果您只是使用用户界面 (UI) 中支持的集成,这在很大程度上是不必要的。但是,有时,特别是当您引入自定义传感器数据时,您必须亲自动手处理配置文件。
让我们开始吧。
检查配置文件
您可能需要调查几个潜在的配置文件。虽然我即将向您展示的所有内容可以在主 configuration.yaml 文件中完成,但将您的配置拆分为专用文件可能会有所帮助,尤其是在大型安装中。
下面我将介绍如何配置我的系统。对于我的自定义传感器,我使用 ESP8266 芯片组,它对创客非常友好。我主要使用 Tasmota 作为我的自定义固件,但我也运行一些 ESPHome 组件。配置固件超出了本文的范围。现在,我假设您使用一些自定义固件设置了您的设备(或者您使用 Arduino IDE 编写了自己的固件)。
/config/configuration.yaml 文件
Configuration.yaml 是 Home Assistant 读取的主文件。对于以下内容,请使用您在前一篇文章中安装的 File Editor。如果您在左侧边栏中没有看到 File Editor,请返回 Supervisor 设置并单击 File Editor 来启用它。您应该会看到这样的屏幕

(Steve Ovens, CC BY-SA 4.0)
确保 在侧边栏中显示 已切换为开启。我还总是为我经常使用的任何插件切换开启 Watchdog 设置。
完成后,启动 File Editor。在左上角的标题栏中有一个文件夹图标。这是导航图标。/config
文件夹是存储您关心的配置文件的位置。如果您单击文件夹图标,您将看到一些重要的文件

以下是默认的 configuration.yaml

(Steve Ovens, CC BY-SA 4.0)
符号 script: !include scripts.yaml
表示 Home Assistant 应该在需要脚本对象的定义时引用 scripts.yaml 的内容。您会注意到,这些文件中的每一个都与单击文件夹图标时观察到的文件相关联。
我向我的 configuration.yaml 添加了三行
input_boolean: !include input_boolean.yaml
binary_sensor: !include binary_sensor.yaml
sensor: !include sensor.yaml
顺便说一句,我在 configuration.yaml 文件中配置了我的 MQTT 设置(有关更多详细信息,请参阅 Home Assistant 的 MQTT 文档)
mqtt:
discovery: true
discovery_prefix: homeassistant
broker: 192.168.11.11
username: mqtt
password: superpassword
如果您进行了编辑,请不要忘记单击磁盘图标以保存您的工作。

(Steve Ovens, CC BY-SA 4.0)
/config/binary_sensor.yaml 文件
在 configuration.yaml 中命名您的文件后,您必须创建它。在 File Editor 中,再次单击文件夹图标。有一个小图标,上面有一张纸,中间有一个 + 号。单击它以调出此对话框

(Steve Ovens, CC BY-SA 4.0)
我有三种主要的 二进制传感器:门、运动和电源。二进制传感器只有两种状态:开或关。我所有的二进制传感器都将其数据发送到 MQTT。有关 MQTT 的更多信息,请参阅我的文章 云控制与本地控制。
我的 binary_sensor.yaml 文件如下所示
- platform: mqtt
state_topic: "BRMotion/state/PIR1"
name: "BRMotion"
qos: 1
payload_on: "ON"
payload_off: "OFF"
device_class: motion
- platform: mqtt
state_topic: "IRBlaster/state/PROJECTOR"
name: "ProjectorStatus"
qos: 1
payload_on: "ON"
payload_off: "OFF"
device_class: power
- platform: mqtt
state_topic: "MainHallway/state/DOOR"
name: "FrontDoor"
qos: 1
payload_on: "open"
payload_off: "closed"
device_class: door
看看这些定义。由于 platform
是不言自明的,所以从 state_topic
开始。
state_topic
,顾名思义,是发布设备状态的主题。这意味着任何订阅该主题的人都会在状态发生任何变化时收到通知。此路径是完全任意的,因此您可以随意命名它。我倾向于使用约定location/state/object
,因为这对我来说有意义。我希望能够引用某个位置的所有设备,对我来说,这种布局最容易记住。按设备类型分组也是一种有效的组织布局。name
是用于在 Home Assistant 内部引用设备的字符串。它通常由type.name
引用,如 Home Assistant Lovelace 界面中的此卡片所示
(Steve Ovens, CC BY-SA 4.0)
qos
,是服务质量的缩写,指的是 MQTT 客户端在发布到主题时如何与代理通信。payload_on
和payload_off
由固件确定。这些部分告诉 Home Assistant 设备将发送什么文本来指示其当前状态。device_class:
设备类有多种可能性。有关更多信息以及可用类型的描述,请参阅 Home Assistant 文档。
/config/sensor.yaml 文件
此文件与 binary_sensor.yaml 的不同之处在于一个非常重要的方面:此配置文件中的传感器可以在其有效负载中包含截然不同的数据。看看一个比较棘手的传感器数据,温度。
这是我的 DHT 温度传感器的定义
- platform: mqtt
state_topic: "Steve_Desk_Sensor/tele/SENSOR"
name: "Steve Desk Temperature"
value_template: '{{ value_json.DHT11.Temperature }}'
- platform: mqtt
state_topic: "Steve_Desk_Sensor/tele/SENSOR"
name: "Steve Desk Humidity"
value_template: '{{ value_json.DHT11.Humidity }}'
您会立即注意到两件事。首先,对于同一个 state_topic
有两个定义。这是因为此传感器发布三个不同的统计信息。
其次,有一个新的 value_template
定义。大多数传感器,无论是自定义的还是非自定义的,都将其数据发送到 JSON 有效负载中。该模板告诉 Home Assistant 重要信息在 JSON 文件中的位置。以下显示了来自我自制传感器的原始 JSON。(我使用程序 jq
使 JSON 更易于阅读。)
{
"Time": "2020-12-23T16:59:11",
"DHT11": {
"Temperature": 24.8,
"Humidity": 32.4,
"DewPoint": 7.1
},
"BH1750": {
"Illuminance": 24
},
"TempUnit": "C"
}
这里有几件事需要注意。首先,由于传感器数据存储在基于时间的数据存储中,因此每个读数都有一个 Time
条目。其次,此输出连接了两个不同的传感器。这是因为我将 DHT11 温度传感器和 BH1750 光传感器连接到同一个 ESP8266 芯片。最后,我的温度以摄氏度报告。
希望 Home Assistant 定义现在更有意义了。value_json
只是 Home Assistant 摄取的任何 JSON 对象的标准名称。value_template
的格式为 value_json.<component>.<data point>
。
例如,要检索露点
value_template: '{{ value_json.DHT11.DewPoint}}'
虽然您可以从 Home Assistant 中将此信息转储到文件中,但我使用 Tasmota 的 Console
来查看它正在发布的数据。(如果您希望我写一篇关于 Tasmota 的文章,请在下面的评论中告诉我。)
顺便说一句,我还密切关注我本地 Home Assistant 的资源使用情况。为此,我将其放入我的 sensor.yaml 文件中
- platform: systemmonitor
resources:
- type: disk_use_percent
arg: /
- type: memory_free
- type: memory_use
- type: processor_use
虽然这在技术上不是传感器,但我将其放在这里,因为我认为它是一个数据传感器。有关更多信息,请参阅 Home Assistant 的 系统监控 文档。
/config/input_boolean 文件
最后一部分很容易设置,我将其用于各种应用程序。输入布尔值用于跟踪事物的状态。它可以是开或关,在家或离开等等。我在我的自动化中广泛使用这些。
我的定义是
steve_home:
name: steve
steve_in_bed:
name: 'steve in bed'
guest_home:
kitchen_override:
name: kitchen
kitchen_fan_override:
name: kitchen_fan
laundryroom_override:
name: laundryroom
bathroom_override:
name: bathroom
hallway_override:
name: hallway
livingroom_override:
name: livingroom
ensuite_bathroom_override:
name: ensuite_bathroom
steve_desk_light_override:
name: steve_desk_light
projector_led_override:
name: projector_led
project_power_status:
name: 'Projector Power Status'
tv_power_status:
name: 'TV Power Status'
bed_time:
name: "It's Bedtime"
我直接在 Lovelace UI 中使用其中的一些。我创建了一些小徽章,我将它们放在我在 UI 中拥有的每个页面的顶部

(Steve Ovens, CC BY-SA 4.0)
这些可用于确定我是否在家,是否有客人入住我的房子等等。单击其中一个徽章允许我切换布尔值,自动化可以读取此对象,以确定“智能设备”如何对人的存在做出反应(如果需要)。当我更详细地检查 Node-RED 时,我将在以后的文章中重新审视布尔值。
总结
在本文中,我查看了 YAML 配置文件并将一些自定义传感器添加到其中。您已经朝着使用 Home Assistant 和 Node-RED 获得一些功能自动化的方向前进。在下一篇文章中,我将深入研究一些基本的 Node-RED 流并介绍一些基本的自动化。
请继续关注;我还有很多内容要介绍,与往常一样,如果您希望我检查某些特定内容,请在下面发表评论。如果可以,我一定会将您的问题的答案纳入未来的文章中。
2 条评论