MQTT 二进制传感器
mqtt
二进制传感器平台使用接收到的 MQTT 消息将二进制传感器的状态设置为 on
、off
或 unknown
。
状态仅在 state_topic
上发布的新消息与 payload_on
、payload_off
或 None
匹配后更新。如果这些消息以 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.yaml
configuration.yaml 文件是 Home Assistant 的主要配置文件。它列出了要加载的集成及其特定配置。在某些情况下,需要直接在 configuration.yaml 文件中手动编辑配置。大多数集成可以在 UI 中配置。 [Learn more] 文件中:
# 示例 configuration.yaml 条目
mqtt:
- binary_sensor:
state_topic: "home-assistant/window/contact"
Configuration Variables
一个订阅以接收可用性(在线/离线)更新的 MQTT 主题列表。不得与 availability_topic
一起使用。
当配置了 availability
时,此选项控制将实体设置为 available
所需的条件。有效条目为 all
、any
和 latest
。如果设置为 all
,则必须在所有配置的可用性主题上接收到 payload_available
,实体才会被标记为在线。如果设置为 any
,则必须在至少一个配置的可用性主题上接收到 payload_available
,实体才会被标记为在线。如果设置为 latest
,则在任何配置的可用性主题上接收到的最后一个 payload_available
或 payload_not_available
控制可用性。
定义一个 模板 以从 availability_topic
中提取设备的可用性。要确定设备的可用性,此模板的结果将与 payload_available
和 payload_not_available
进行比较。
订阅以接收来自 MQTT 设备的出生和 LWT 消息的 MQTT 主题。如果未定义 availability
,二进制传感器将始终被视为 available
,其状态将为 on
、off
或 unknown
。如果定义了 availability
,二进制传感器将默认被视为 unavailable
,传感器的初始状态将为 unavailable
。不得与 availability
一起使用。
一个链接到可以管理此设备配置的网页。可以是 http://
、https://
或内部 homeassistant://
URL。
设备与外界连接的列表,作为元组 [connection_type, connection_identifier]
的列表。例如网络接口的 MAC 地址:"connections": [["mac", "02:5b:26:a8:dc:12"]]
。
设置 设备的类别,更改前端显示的设备状态和图标。device_class
可以为 null
。
实体的 类别。设置时,实体类别必须为传感器的 diagnostic
。
发送更新事件(导致更新 状态对象 的 last_changed
),即使传感器的状态未更改。如果您希望在历史记录中有有意义的值图或希望创建一个在 每个 传入状态消息时触发的自动化(不仅仅是当传感器的新状态与当前状态不同时),这很有用。
订阅以接收 JSON 字典有效负载并将其设置为传感器属性的 MQTT 主题。使用示例可以在 MQTT 传感器 文档中找到。
表示 off
状态的字符串。它将与 state_topic
中的消息进行比较(请参阅 value_template
了解详细信息)
表示 on
状态的字符串。它将与 state_topic
中的消息进行比较(请参阅 value_template
了解详细信息)
必须为 binary_sensor
。仅在 MQTT 自动发现设备消息 中允许和必需。
订阅以接收传感器状态的 MQTT 主题。有效状态为 OFF
和 ON
。可以使用 payload_off
和 payload_on
配置选项设置自定义的 OFF
和 ON
值。
示例
在本节中,您将找到一些如何使用此传感器的实际示例。
使用 JSON 数据的完整配置
这是一个从 JSON 格式的 MQTT 消息中提取状态的配置示例。
要测试,您可以使用 mosquitto
或 mosquitto-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
一旦单元上线,您将获得附加按钮的状态。
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"