MQTT 二进制传感器

mqtt 二进制传感器平台使用接收到的 MQTT 消息将二进制传感器的状态设置为 onoffunknown

状态仅在 state_topic 上发布的新消息与 payload_onpayload_offNone 匹配后更新。如果这些消息以 retain 标志发布,二进制传感器将在订阅后立即接收状态更新,并且 Home Assistant 在启动时将显示正确的状态。否则,Home Assistant 中显示的初始状态将为 unknown

无状态设备(如按钮、遥控器等)更适合使用 MQTT 设备触发器 而不是二进制传感器。

配置

mqtt 二进制传感器平台可选支持一个 availability 主题列表,用于接收来自 MQTT 设备的在线和离线消息(出生和 LWT 消息)。在正常操作期间,如果 MQTT 传感器设备离线(即向 availability 主题发布 payload_not_available),Home Assistant 将显示二进制传感器为 unavailable。如果这些消息以 retain 标志发布,二进制传感器将在订阅后立即接收更新,并且 Home Assistant 在启动时将显示二进制传感器的正确可用状态。如果未设置 retain 标志,Home Assistant 在启动时将显示二进制传感器为 unavailable。如果未定义 availability 主题,Home Assistant 将认为 MQTT 设备为 available 并显示其状态。

要在您的安装中使用 MQTT 二进制传感器,请将以下内容添加到您的 configuration.yamlconfiguration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 文件中:

# 示例 configuration.yaml 条目
mqtt:
  - binary_sensor:
      state_topic: "home-assistant/window/contact"

Configuration Variables

availability list (Optional)

一个订阅以接收可用性(在线/离线)更新的 MQTT 主题列表。不得与 availability_topic 一起使用。

payload_available string (Optional, default: online)

表示可用状态的有效负载。

payload_not_available string (Optional, default: offline)

表示不可用状态的有效负载。

topic string Required

订阅以接收可用性(在线/离线)更新的 MQTT 主题。

value_template template (Optional)

定义一个 模板 以从 topic 中提取设备的可用性。要确定设备的可用性,此模板的结果将与 payload_availablepayload_not_available 进行比较。

availability_mode string (Optional, default: latest)

当配置了 availability 时,此选项控制将实体设置为 available 所需的条件。有效条目为 allanylatest。如果设置为 all,则必须在所有配置的可用性主题上接收到 payload_available,实体才会被标记为在线。如果设置为 any,则必须在至少一个配置的可用性主题上接收到 payload_available,实体才会被标记为在线。如果设置为 latest,则在任何配置的可用性主题上接收到的最后一个 payload_availablepayload_not_available 控制可用性。

availability_template template (Optional)

定义一个 模板 以从 availability_topic 中提取设备的可用性。要确定设备的可用性,此模板的结果将与 payload_availablepayload_not_available 进行比较。

availability_topic string (Optional)

订阅以接收来自 MQTT 设备的出生和 LWT 消息的 MQTT 主题。如果未定义 availability,二进制传感器将始终被视为 available,其状态将为 onoffunknown。如果定义了 availability,二进制传感器将默认被视为 unavailable,传感器的初始状态将为 unavailable。不得与 availability 一起使用。

device map (Optional)

有关此二进制传感器所属设备的信息,以将其绑定到 设备注册表。仅在设置了 unique_id 时有效。必须至少存在标识符或连接之一以标识设备。

configuration_url string (Optional)

一个链接到可以管理此设备配置的网页。可以是 http://https:// 或内部 homeassistant:// URL。

connections list (Optional)

设备与外界连接的列表,作为元组 [connection_type, connection_identifier] 的列表。例如网络接口的 MAC 地址:"connections": [["mac", "02:5b:26:a8:dc:12"]]

hw_version string (Optional)

设备的硬件版本。

identifiers list | string (Optional)

唯一标识设备的 ID 列表。例如序列号。

manufacturer string (Optional)

设备的制造商。

model string (Optional)

设备的型号。

model_id string (Optional)

设备的型号标识符。

name string (Optional)

设备的名称。

serial_number string (Optional)

设备的序列号。

suggested_area string (Optional)

如果设备尚未在某个区域中,建议一个区域。

sw_version string (Optional)

设备的固件版本。

via_device string (Optional)

在此设备和 Home Assistant 之间路由消息的设备的标识符。此类设备的示例包括集线器或子设备的父设备。这用于在 Home Assistant 中显示设备拓扑。

device_class string (Optional)

设置 设备的类别,更改前端显示的设备状态和图标。device_class 可以为 null

enabled_by_default boolean (Optional, default: true)

定义实体在首次添加时是否应启用的标志。

encoding string (Optional, default: utf-8)

接收到的有效负载的编码。设置为 "" 以禁用传入有效负载的解码。

entity_category string (Optional)

实体的 类别。设置时,实体类别必须为传感器的 diagnostic

entity_picture string (Optional)

实体的图片 URL。

expire_after integer (Optional)

如果设置,则定义传感器状态过期的秒数,如果未更新。在过期后,传感器的状态变为 unavailable。默认情况下,传感器状态永不过期。

force_update boolean (Optional, default: false)

发送更新事件(导致更新 状态对象last_changed),即使传感器的状态未更改。如果您希望在历史记录中有有意义的值图或希望创建一个在 每个 传入状态消息时触发的自动化(不仅仅是当传感器的新状态与当前状态不同时),这很有用。

icon icon (Optional)

实体的 图标

json_attributes_template template (Optional)

定义一个 模板 以从 json_attributes_topic 上接收到的消息中提取 JSON 字典。使用示例可以在 MQTT 传感器 文档中找到。

json_attributes_topic string (Optional)

订阅以接收 JSON 字典有效负载并将其设置为传感器属性的 MQTT 主题。使用示例可以在 MQTT 传感器 文档中找到。

name string (Optional, default: MQTT binary sensor)

二进制传感器的名称。如果只有设备名称相关,可以设置为 null

object_id string (Optional)

用于自动生成 entity_idname 替代项

off_delay integer (Optional)

对于仅发送 on 状态更新的传感器(如 PIR),此变量设置传感器状态更新回 off 的延迟时间(以秒为单位)。

payload_available string (Optional, default: online)

表示 online 状态的字符串。

payload_not_available string (Optional, default: offline)

表示 offline 状态的字符串。

payload_off string (Optional, default: OFF)

表示 off 状态的字符串。它将与 state_topic 中的消息进行比较(请参阅 value_template 了解详细信息)

payload_on string (Optional, default: ON)

表示 on 状态的字符串。它将与 state_topic 中的消息进行比较(请参阅 value_template 了解详细信息)

platform string Required

必须为 binary_sensor。仅在 MQTT 自动发现设备消息 中允许和必需。

qos integer (Optional, default: 0)

接收和发布消息时使用的最大 QoS 级别。

state_topic string Required

订阅以接收传感器状态的 MQTT 主题。有效状态为 OFFON。可以使用 payload_offpayload_on 配置选项设置自定义的 OFFON 值。

unique_id string (Optional)

唯一标识此传感器的 ID。如果两个传感器具有相同的唯一 ID,Home Assistant 将引发异常。与基于设备的发现一起使用时必需。

value_template template (Optional)

定义一个 模板,返回一个字符串以与 payload_on/payload_off 进行比较,或返回一个空字符串,在这种情况下,MQTT 消息将被删除。当 payload_onpayload_off 足以匹配您的有效负载时(即不需要对原始消息进行预处理),请删除此选项。

示例

在本节中,您将找到一些如何使用此传感器的实际示例。

使用 JSON 数据的完整配置

这是一个从 JSON 格式的 MQTT 消息中提取状态的配置示例。 要测试,您可以使用 mosquittomosquitto-clients 包附带的命令行工具 mosquitto_pub 发送 MQTT 消息。

要手动设置二进制传感器的状态:

mosquitto_pub -h 127.0.0.1 -t home-assistant/window/availability -m "online"
mosquitto_pub -h 127.0.0.1 -t home-assistant/window/contact -m '{"state":"ON"}'
mosquitto_pub -h 127.0.0.1 -t home-assistant/window/contact -m '{"state":"OFF"}'

下面的示例显示了二进制传感器的完整配置:

# 示例 configuration.yaml 条目
mqtt:
  - binary_sensor:
      name: "Window Contact Sensor"
      state_topic: "home-assistant/window/contact"
      payload_on: "ON"
      availability:
        - topic: "home-assistant/window/availability"
          payload_available: "online"
          payload_not_available: "offline"
      qos: 0
      device_class: opening
      value_template: "{{ value_json.state }}"

每次在 state_topic 上接收到消息时切换二进制传感器

# 示例 configuration.yaml 条目
mqtt:
  - binary_sensor:
      state_topic: "lab_button/cmnd/POWER"
      value_template: "{%if is_state(entity_id,\"on\")-%}OFF{%-else-%}ON{%-endif%}"

使用 ESPEasy 获取设备状态

假设您已使用 ESPEasy 刷新了您的 ESP8266 单元。在“配置”下,为您的设备设置了一个名称(“单元名称:”)(此处为“bathroom”)。存在一个用于 MQTT 的“控制器”配置,协议为“OpenHAB MQTT”,并且条目(“控制器订阅:”和“控制器发布:”)已调整以满足您的需求。在此示例中,主题以“home”作为前缀。此外,在“设备”选项卡中添加一个“开关输入”,名称为“switch”,值为“button”。

一旦单元上线,您将获得附加按钮的状态。

home/bathroom/status Connected
...
home/bathroom/switch/button 1

配置如下所示:

# 示例 configuration.yaml 条目
mqtt:
  - binary_sensor:
      name: Bathroom
      state_topic: "home/bathroom/switch/button"
      payload_on: "1"
      payload_off: "0"