Home Assistant中MQTT JSON转实体问题求助(Deebot机器人配置)
解决Home Assistant中Deebot机器人MQTT传感器显示Unknown的问题
你遇到的核心问题是MQTT主题vacuum/sensors下发的是多条独立的JSON消息,每条消息仅包含一个type字段和对应的数据,而非所有传感器数据打包在单个JSON对象里。原有配置未针对消息类型做过滤,导致大部分时候模板无法匹配有效数据,最终显示unknown。
解决方案
针对每个传感器添加消息类型过滤,修正模板逻辑,确保仅在对应类型的消息到来时提取数据:
mqtt: sensor: - name: "filter_left" state_topic: "vacuum/sensors" unit_of_measurement: "h" value_template: > {% if value_json.type == "LifeSpan" %} {{ value_json.value.filter | round(2) }} {% else %} {{ states('sensor.filter_left') }} {% endif %} - name: "main_brush_left" state_topic: "vacuum/sensors" unit_of_measurement: "h" value_template: > {% if value_json.type == "LifeSpan" %} {{ value_json.value.main_brush | round(2) }} {% else %} {{ states('sensor.main_brush_left') }} {% endif %} - name: "side_brush_left" state_topic: "vacuum/sensors" unit_of_measurement: "h" value_template: > {% if value_json.type == "LifeSpan" %} {{ value_json.value.side_brush | round(2) }} {% else %} {{ states('sensor.side_brush_left') }} {% endif %} - name: "vacuum_battery" state_topic: "vacuum/sensors" unit_of_measurement: "%" value_template: > {% if value_json.type == "BatteryInfo" %} {{ value_json.value }} {% else %} {{ states('sensor.vacuum_battery') }} {% endif %}
配置要点说明
- 用
{% if %}判断当前MQTT消息的type是否匹配传感器目标类型,仅匹配时更新值 - 不匹配时返回传感器当前状态,避免数据被重置为
unknown - 用
| round(2)对寿命值做小数位数处理,优化显示效果 - 电池传感器直接提取
value_json.value,因为BatteryInfo的value就是百分比数值
额外优化建议
如果可修改Node-RED配置,建议将不同type的消息转发到独立MQTT子主题(比如vacuum/sensors/lifespan、vacuum/sensors/battery),这样Home Assistant的传感器配置无需条件判断,逻辑会更简洁。
内容的提问来源于stack exchange,提问作者Nicolò C.
相关产品推荐
相关产品推荐

