hass 设备发现规则
举例说明
hass关于设备发现的测试:地址:https://gitee.com/norep/hass_manager
homeassist MQTT订阅信息
说明 | 主题 |
---|---|
设备发现主题前缀 | homeassistant |
出生消息/遗嘱消息主题 | homeassistant/status |
出生消息载荷 | online |
遗嘱消息载荷 | offline |
设备发现主题需要按照如下规则组合
<discovery_prefix>//[<node_id>/]<object_id>/config |
---|
discovery_prefix: 主题前缀,默认为homeassistant,可在hass MQTT集成中修改 |
component: 支持mqtt的组件,例如:binary_sensor/button/switch,原文中有所有支持的设备列表 |
[node_id]: 可选配置,非必须,节点ID,仅用于构成订阅主题,hass并不适用此字段 |
object_id: 设备ID,每个设备自己的ID。仅可使用 数字、字母、下划线、连字符。 |
设备发现的有效载荷
- 载荷必须为一个序列化的JSON字典,未配置的键值将会使用默认值。
- 收到新的载荷数据将会更新原始的数据,如果新的载荷为空,将会清除hass中记录的旧的数据。
- 可以使用"~“设置一个base topic,在以”_topic"结尾的变量中,"~"如果出现在值的开头或结尾,将为使用base topic代替。
在内存受限的嵌入式设备中,可使用简化的配置变量名称,如:
'stat_t': 'state_topic',
'tit': 'title',
't': 'topic',
其他配置字段参考原文。
一个MQTT设备通过向Discovery topic发布自身的配置信息,即可被hass系统自动发现这个MQTT设备
举例
布尔型传感器
hass关于布尔型传感器的说明 MQTT Binary Sensor
Discovery topic(设备自发现):homeassistant/binary_sensor/garden/config
State topic(传感器状态):homeassistant/binary_sensor/garden/state
Configuration payload(子发现发布配置信息):
{
"name":"garden",
"device_class":"motion",
"state_topic":"homeassistant/binary_sensor/garden/state",
"unique_id":"motion01ad",
"device":{
"identifiers":[
"01ad"
],
"name":"Garden"
}
}
name:传感器名称, hass中显示为实体名称
device_class:设备类型,可为空,影响设备在hass中显示的图标与状态
state_topic:hass订阅的主题,用于接收传感器状态
unique_id:传感器的唯一标识符,如果有两个传感器具有相同的unique_id,hass将发生异常。如果不设置此字段,hass将无法管理此实体
device:只有在使用了"unique_id"时才有效,表示这个传感器的设备信息。
发布配置信息需要勾选"Retain",否则当hass重启后,将无法发现设备。
配置信息中各个键值的意义可参考 MQTT Binary Sensor 说明,
最小配置项为
{
"name":"garden",
"state_topic":"homeassistant/binary_sensor/garden/state",
"unique_id":"motion01ad"
}
向主题发布传感器数据:
homeassistant/binary_sensor/garden/state
ON:触发传感器
OFF: 未触发传感器
从hass取消注册这个设备
向自发现主题发布一条空信息
homeassistant/binary_sensor/garden/config
具有多个测量值的传感器
hass关于具有多个测量值传感器的说明 MQTT Sensor
设置具有多个测量值的传感器需要配置多个主题。
使用同一个主题发布传感器值
state topic: homeassistant/sensor/sensorBedroom/state
Config No.1:
config topic: homeassistant/sensor/sensorBedroomT/config
payload:
{
"device_class":"temperature",
"name":"Temperature",
"state_topic":"homeassistant/sensor/sensorBedroom/state",
"unit_of_measurement":"C",
"value_template":"{{ value_json.temperature}}",
"unique_id":"temp01ae",
"device":{
"identifiers":[
"bedroom01ae"
],
"name":"Bedroom"
}
}
Config No.2:
config topic: homeassistant/sensor/sensorBedroomH/config
payload:
{
"device_class":"humidity",
"name":"Humidity",
"state_topic":"homeassistant/sensor/sensorBedroom/state",
"unit_of_measurement":"%",
"value_template":"{{ value_json.humidity}}",
"unique_id":"hum01ae",
"device":{
"identifiers":[
"bedroom01ae"
],
"name":"Bedroom"
}
}
unit_of_measurement:定义了传感器的单位,可以为空
value_template:定义一个模板来提取传感器值。
发布传感器数据:
state topic: homeassistant/sensor/sensorBedroom/state
{ “temperature”: 23.20, “humidity”: 43.70 }