编辑 | blame | 历史 | 原始文档

HomeAssistant自动化配置

注意: 本文档使用HomeAssistant 2024.x 及以上版本的新YAML格式。主要变化包括:
- triggertriggers
- conditionconditions
- actionactions
- serviceaction
- platform: statetrigger: state
- platform: time_patterntrigger: time_pattern

配置方法

方法1: 通过HomeAssistant Web界面配置(推荐)

  1. 登录HomeAssistant Web界面
  2. 进入 "配置" → "自动化和场景" → "自动化"
  3. 点击右下角 "+" 按钮创建新自动化
  4. 点击右上角 "⋮" → "编辑为YAML"
  5. 粘贴以下配置:
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
  1. 点击右上角"保存"
  2. 确认自动化已启用

方法2: 通过配置文件(高级用户)

编辑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或重新加载自动化配置。

配置验证

1. 检查MQTT配置

确认HomeAssistant的MQTT集成已配置且正常工作:

  1. 进入 "配置" → "集成"
  2. 找到MQTT集成,确认状态正常
  3. 检查MQTT broker地址:192.168.50.83:1883

如果MQTT集成未配置,请添加:

# configuration.yaml
mqtt:
  broker: 192.168.50.83
  port: 1883
  username: dtuser
  password: Dtuse1r
  discovery: true

2. 验证传感器实体

  1. 进入 "开发者工具" → "状态"
  2. 搜索实体ID:sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1
  3. 确认:
  • 实体存在且状态不是 unavailable
  • 状态值是有效的温度数字
  • 最后更新时间是最近的

3. 测试自动化

  1. 进入 "配置" → "自动化和场景" → "自动化"
  2. 找到创建的自动化规则
  3. 点击右侧的 "▶" 按钮手动执行
  4. 或者等待传感器状态自然变化

4. 验证MQTT发布

使用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

故障排除

自动化未触发

  1. 检查实体ID: 确认传感器实体ID完全正确
  2. 检查条件: 确认传感器状态满足条件(不是unavailable/unknown)
  3. 查看日志: 在HomeAssistant的"配置" → "日志"中查看错误信息
  4. 手动测试: 使用自动化的手动执行功能测试

MQTT发布失败

  1. 检查MQTT集成: 确认MQTT broker连接正常
  2. 验证权限: 确认MQTT用户有发布权限
  3. 网络连接: 检查HomeAssistant到MQTT broker的网络连接
  4. Topic权限: 确认topic没有发布限制

传感器数据异常

  1. 米家插件状态: 检查米家插件是否正常工作
  2. 蓝牙连接: 确认传感器与HomeAssistant的蓝牙连接
  3. 设备电量: 检查传感器电池电量
  4. 设备距离: 确认设备在蓝牙通信范围内

高级配置选项

调整定时发布间隔

当前配置为每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服务器