MQTT 二进制传感器

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

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

像按钮、遥控器等无状态设备比二进制传感器更适合由 MQTT 设备触发器 表示。

配置

mqtt 二进制传感器平台可以选择支持 availability 主题列表,以接收来自 MQTT 设备的在线和离线消息(出生和 LWT 消息)。在正常操作期间,如果 MQTT 传感器设备离线(即,发布 payload_not_availableavailability 主题),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)

Defines a template to extract device’s availability from the topic. To determine the devices’s availability result of this template will be compared to payload_available and payload_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)

Defines a template to extract device’s availability from the availability_topic. To determine the devices’s availability result of this template will be compared to payload_available and payload_not_available.

availability_topic string (Optional)

订阅的 MQTT 主题,以接收来自 MQTT 设备的出生和 LWT 消息。如果未定义 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)

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

icon icon (Optional)

图标用于实体。

json_attributes_template template (Optional)

Defines a template to extract the JSON dictionary from messages received on the json_attributes_topic. Usage example can be found in MQTT sensor documentation.

json_attributes_topic string (Optional)

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

name string (Optional, default: MQTT 二进制传感器)

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

object_id string (Optional)

用于自动生成 entity_id 时替代 name

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)

Defines a template that returns a string to be compared to payload_on/payload_off or an empty string, in which case the MQTT message will be removed. Remove this option when payload_on and payload_off are sufficient to match your payloads (i.e no preprocessing of original message is required).

示例

在此部分,您将找到一些关于如何使用此传感器的实际示例。

带有 JSON 数据的完整配置

这是一个示例配置,其中状态从 JSON 格式的 MQTT 消息中提取。 要测试,您可以使用与 mosquitto 一起提供的命令行工具 mosquitto_pubmosquitto-clients 包来发送 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: "窗户接触传感器"
      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 单元。在“配置”下,为您的设备设置了一个名称(“单元名称:”)。存在一个用于 MQTT 的“控制器”配置,协议为“OpenHAB MQTT”,并且条目(“控制器订阅:”和“控制器发布:”)已调整以满足您的需求。在这个示例中,主题以“home”作为前缀。此外,在“设备”标签中添加一个名称为“开关”的“开关输入”,值为“按钮”。

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

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

该配置将如下所示:

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