分为三个部分
- 发现设备:设备向
homeassistant/<类型>/<ID>/config发布保留的 JSON 配置,HA 监听该前缀,自动注册实体; - 接收信息:设备将状态数据(如温度)发布到配置中声明的
state_topic,HA 订阅该主题并用value_template解析具体字段; - 控制设备:HA 向配置中声明的
command_topic发送指令(如"ON"),设备订阅该主题接收命令,执行后可回传状态到state_topic以同步界面。
1. MQTT 发现机制:设备发布配置,HA 自动创建实体
设备向 homeassistant/sensor/bedroom_env/config(保留消息)发布:
{
// 实体在 Home Assistant UI 中显示的名称
"name": "Bedroom Temperature",
// 传感器类型,决定默认单位、图标和行为(如 temperature → °C,motion → 布尔)
"device_class": "temperature",
// HA 将订阅此主题以接收状态数据;由设备后续上报
"state_topic": "sensors/bedroom/state",
// 从 state_topic 的 payload(字符串)中提取实际值;
// value_json 自动解析 JSON,.temperature 表示取 JSON 中的 "temperature" 字段
"value_template": "{{ value_json.temperature }}",
// 显示单位(可省略,device_class 会自动填充)
"unit_of_measurement": "°C",
// 全局唯一 ID,用于 HA 重启后识别同一实体、支持重命名
"unique_id": "bedroom_temp_01",
// 声明所属设备,实现多实体归组到一个设备卡片
"device": {
// 设备唯一标识(数组),所有使用相同 identifiers 的实体归为一组
"identifiers": ["bedroom_sensor_01"],
// 设备在 UI 中显示的名称
"name": "Bedroom Environment Sensor"
}
}
→ HA 监听 homeassistant/#,收到后自动创建传感器实体。
2. 传感器上报数据:设备发布状态
设备向 sensors/bedroom/state(即上述 state_topic)发布:
{
// 温度值,对应 discovery 中 value_template 提取的字段
"temperature": 23.5,
// 湿度值,另一个传感器实体用 "{{ value_json.humidity }}" 提取
"humidity": 48.2
}
→ HA 同时监听此主题,两个传感器分别用各自的 value_template 解析出温度和湿度。
3. 被控设备:通过发现声明控制接口
设备向 homeassistant/switch/pump/config(保留消息)发布:
{
// 开关在 UI 中的名称
"name": "Garden Pump",
// HA 发送控制指令的目标主题;设备必须订阅此主题
"command_topic": "actuators/pump/set",
// 设备上报当前状态的主题;HA 订阅此主题以同步 UI
"state_topic": "actuators/pump/state",
// HA 发送“开”时使用的字符串(可自定义为 "1"、"true" 等)
"payload_on": "ON",
// HA 发送“关”时使用的字符串
"payload_off": "OFF",
// 设备回传“开”状态时应使用的字符串(需与设备实际发送一致)
"state_on": "ON",
// 设备回传“关”状态时应使用的字符串
"state_off": "OFF",
// 唯一 ID,用于实体持久化
"unique_id": "pump_01",
// 所属设备信息(可选)
"device": {
"identifiers": ["garden_actuator_01"],
"name": "Garden Actuator"
}
}
控制流程:
- 用户点击开关 → HA 向
actuators/pump/set发"ON" - 设备收到后执行,并向
actuators/pump/state发"ON" - HA 收到状态更新 UI
参考文章:
1、深入理解Home Assistant MQTT:配置、自动化、发布等 - MQTT中文站
2、Home Assistant中使用MQTT窗帘/卷帘的示例配置 - MQTT中文站






Comments | 2 条评论
支持!!!

@Denvo 大佬常来~😆