hass 设备发现规则

hass关于Discovery原文地址

举例说明

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。仅可使用 数字、字母、下划线、连字符。

设备发现的有效载荷

  1. 载荷必须为一个序列化的JSON字典,未配置的键值将会使用默认值。
  2. 收到新的载荷数据将会更新原始的数据,如果新的载荷为空,将会清除hass中记录的旧的数据。
  3. 可以使用"~“设置一个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 }

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐