注意: 本文档使用HomeAssistant 2024.x 及以上版本的新YAML格式。主要变化包括:
-trigger→triggers
-condition→conditions
-action→actions
-service→action
-platform: state→trigger: state
-platform: time_pattern→trigger: time_pattern
alias: 发布环境温度传感器状态到MQTT
description: 当米家温度传感器状态变化或每30秒定时时,自动发布到MQTT供Node-RED使用
triggers:
- entity_id: sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1
trigger: state
- seconds: /30
trigger: time_pattern
conditions:
- condition: template
value_template: >-
{{ states('sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1')
not in ['unavailable', 'unknown', 'None'] and
states('sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1') |
float(-999) != -999 }}
actions:
- data:
topic: >-
homeassistant/sensor/sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1/state
payload: >-
{{
states('sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1')
}}
retain: false
qos: 0
action: mqtt.publish
mode: single
编辑HomeAssistant的 automations.yaml 文件,添加:
- id: publish_temperature_to_mqtt
alias: 发布环境温度传感器状态到MQTT
description: 当米家温度传感器状态变化或每30秒定时时,自动发布到MQTT供Node-RED使用
triggers:
- entity_id: sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1
trigger: state
- seconds: /30
trigger: time_pattern
conditions:
- condition: template
value_template: >-
{{ states('sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1')
not in ['unavailable', 'unknown', 'None'] and
states('sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1') |
float(-999) != -999 }}
actions:
- data:
topic: >-
homeassistant/sensor/sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1/state
payload: >-
{{
states('sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1')
}}
retain: false
qos: 0
action: mqtt.publish
mode: single
然后重启HomeAssistant或重新加载自动化配置。
确认HomeAssistant的MQTT集成已配置且正常工作:
如果MQTT集成未配置,请添加:
# configuration.yaml
mqtt:
broker: 192.168.50.83
port: 1883
username: dtuser
password: Dtuse1r
discovery: true
sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1unavailable使用MQTT客户端工具验证数据发布:
# 订阅HomeAssistant发布的温度数据
mosquitto_sub -h 192.168.50.83 -p 1883 -u dtuser -P Dtuse1r -t "homeassistant/sensor/sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1/state"
应该能看到类似这样的输出: 23.5 24.1 23.8
当前配置为每30秒发布一次,您可以根据需要调整间隔:
triggers:
- entity_id: sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1
trigger: state
- seconds: /60 # 每60秒(1分钟)发布一次
trigger: time_pattern
# 或者
- minutes: /5 # 每5分钟发布一次
trigger: time_pattern
# 或者
- hours: /1 # 每小时发布一次
trigger: time_pattern
如果需要在日志中区分是状态变化触发还是定时触发,可以添加调试信息:
actions:
- data:
message: >-
发布温度数据到MQTT: {{ states('sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1') }}°C
(触发类型: {% if trigger.trigger == 'state' %}状态变化{% else %}定时{% endif %})
level: info
action: system_log.write
- data:
topic: >-
homeassistant/sensor/sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1/state
payload: >-
{{ states('sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1') }}
action: mqtt.publish
如果需要过滤异常数据,可以修改条件:
conditions:
- condition: template
value_template: >-
{{ trigger.to_state.state not in ['unavailable', 'unknown', 'None'] and
trigger.to_state.state | float(-999) != -999 and
trigger.to_state.state | float > -50 and
trigger.to_state.state | float < 100 }}
避免过于频繁的发布:
triggers:
- entity_id: sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1
trigger: state
for:
seconds: 10 # 状态持续10秒后才触发
actions:
- data:
message: "发布温度数据到MQTT: {{ trigger.to_state.state }}°C"
level: info
action: system_log.write
- data:
topic: >-
homeassistant/sensor/sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1/state
payload: "{{ trigger.to_state.state }}"
action: mqtt.publish
米家温度传感器 → HomeAssistant → MQTT Broker → Node-RED → 公司MQTT服务器
配置完成后,数据流程将变为:
1. 米家传感器通过蓝牙发送数据到HomeAssistant
2. HomeAssistant接收数据并更新传感器状态
3. 自动化规则触发,将状态发布到MQTT
4. Node-RED订阅MQTT接收数据
5. Node-RED处理并转发到公司MQTT服务器