如何在 Home Assistant 中设置自定义传感器

在本家庭自动化系列的第六篇文章中,深入研究 YAML 文件以设置自定义传感器。
106 位读者喜欢这篇文章。
Computer screen with files or windows open

Opensource.com

在本系列关于家庭自动化的上一篇文章中,我开始深入研究 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 来启用它。您应该会看到这样的屏幕

确保 在侧边栏中显示 已切换为开启。我还总是为我经常使用的任何插件切换开启 Watchdog 设置。

完成后,启动 File Editor。在左上角的标题栏中有一个文件夹图标。这是导航图标。/config 文件夹是存储您关心的配置文件的位置。如果您单击文件夹图标,您将看到一些重要的文件

Configuration split files

以下是默认的 configuration.yaml

符号 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

如果您进行了编辑,请不要忘记单击磁盘图标以保存您的工作。

/config/binary_sensor.yaml 文件

在 configuration.yaml 中命名您的文件后,您必须创建它。在 File Editor 中,再次单击文件夹图标。有一个小图标,上面有一张纸,中间有一个 + 号。单击它以调出此对话框

我有三种主要的 二进制传感器:门、运动和电源。二进制传感器只有两种状态:开或关。我所有的二进制传感器都将其数据发送到 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 界面中的此卡片所示

  • qos,是服务质量的缩写,指的是 MQTT 客户端在发布到主题时如何与代理通信。
  • payload_onpayload_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 中拥有的每个页面的顶部

这些可用于确定我是否在家,是否有客人入住我的房子等等。单击其中一个徽章允许我切换布尔值,自动化可以读取此对象,以确定“智能设备”如何对人的存在做出反应(如果需要)。当我更详细地检查 Node-RED 时,我将在以后的文章中重新审视布尔值。

总结

在本文中,我查看了 YAML 配置文件并将一些自定义传感器添加到其中。您已经朝着使用 Home Assistant 和 Node-RED 获得一些功能自动化的方向前进。在下一篇文章中,我将深入研究一些基本的 Node-RED 流并介绍一些基本的自动化。

请继续关注;我还有很多内容要介绍,与往常一样,如果您希望我检查某些特定内容,请在下面发表评论。如果可以,我一定会将您的问题的答案纳入未来的文章中。

接下来阅读什么
User profile image.
Steve 是一位敬业的 IT 专业人士和 Linux 倡导者。在加入 Red Hat 之前,他曾在金融、汽车和电影行业工作多年。 Steve 目前在 Red Hat 担任解决方案和技术实践领域的架构师。他拥有从 RHCA(DevOps 领域)到 Ansible,再到容器化应用程序等各种认证。

2 条评论

这对我来说不容易。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.