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 传感器设备离线(即,发布 payload_not_available
到 availability
主题),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
控制可用性。
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
.
订阅的 MQTT 主题,以接收来自 MQTT 设备的出生和 LWT 消息。如果未定义 availability
,则二进制传感器将始终被视为 available
,其状态将为 on
、off
或 unknown
。如果定义了 availability
,则二进制传感器默认将被视为 unavailable
,传感器的初始状态将为 unavailable
。必须与 availability
一起使用。
设备与外界的连接列表,以 [connection_type, connection_identifier]
的元组形式列出。例如,网络接口的 MAC 地址:"connections": [["mac", "02:5b:26:a8:dc:12"]]
。
设置 设备类,更改设备状态和前端显示的图标。device_class
可以是 null
。
实体的 类别。设置时,实体类别必须为传感器的 diagnostic
。
发送更新事件(导致 状态对象’s last_changed
更新),即使传感器的状态未更改。如果想在历史记录中拥有有意义的值图表,或者希望创建在每个传入状态消息上触发的自动化(不仅是在传感器的新状态与当前状态不同的情况)时,这很有用。
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.
订阅的 MQTT 主题,以接收 JSON 字典负载并将其设置为传感器属性。使用示例可在 MQTT 传感器 文档中找到。
表示 off
状态的字符串。它将与 state_topic
中的消息进行比较(有关详细信息,请参见 value_template
)
表示 on
状态的字符串。它将与 state_topic
中的消息进行比较(有关详细信息,请参见 value_template
)
必须为 binary_sensor
。仅在 MQTT 自动发现设备消息 中允许且必需。
订阅的 MQTT 主题,以接收传感器的状态。有效状态为 OFF
和 ON
。可以通过 payload_off
和 payload_on
配置选项设置自定义 OFF
和 ON
值。
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_pub
或 mosquitto-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
一旦单元在线,您将获得附加按钮的状态。
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"