Home Assistant 接入 CHNT DDSU666 电表实战

前情提要

最近发现家庭电费一直高居不下,需要搞清楚电能在各房间、各路设备之间的流向分布,于是决定把电表数据拉进 Home Assistant 做可视化与自动化。前一篇文章已经讲过如何完成 CHNT DDSU666 的初始化协议切换,本文继续沿着这条线,聚焦在网关与 Home Assistant 侧的实际配置。

网关准备与串口对齐

使用 485 转 WiFi 网关时,务必让串口和链路参数与电表保持一致,避免在透明传输过程中出现丢帧:

  • 串口参数设为 9600 / 8 / 1 / NONE
  • 报文打包间隔设为 0 ms
  • 报文打包长度设为 1460,避免被提前拆包
  • Modbus 网关模式保持 OFF,确保所有请求透明透传
  • 离线缓存置为 ON,断链时暂存请求防止报文撞车
  • 轮询开关保持 ON,超时设为 200 ms
  • 同步波特率(RFC2217)开启,便于主站按需动态调节

修改完成后重启网关,再次对照电表当前工作状态确认串口指标无误,随后即可开始写入测试报文。

Home Assistant 中启用 Modbus 集成

  1. 确认 Home Assistant 版本已启用 modbus 官方集成(无需额外安装)。
  2. 在配置目录的 configuration.yaml 或其分离文件中添加 modbus 配置,完成后重启 Home Assistant。
  3. 通过开发者工具的“状态”页面确认相关传感器实体已经创建。

建议先使用 Modbus Poll、mbtget 等工具做一次连通性验证,确保从网关读取数据没有 CRC 或超时问题,再让 Home Assistant 接管。

Modbus 配置清单

以下 YAML 片段可直接放入 Home Assistant 的配置文件中,确保缩进与格式保持一致:

modbus:
  - name: entry_em
    type: rtuovertcp
    host: 10.9.11.54
    port: 502
    delay: 1
    message_wait_milliseconds: 1000
    sensors:
      - name: Entry Electricity Voltage
        unique_id: entry_em_voltage
        device_class: voltage
        unit_of_measurement: V
        slave: 1
        scan_interval: 5
        address: 0x2000
        input_type: holding
        data_type: float32
        precision: 1

      - name: Entry Electricity Current
        unique_id: entry_em_current
        device_class: current
        unit_of_measurement: A
        slave: 1
        scan_interval: 5
        address: 0x2002
        input_type: holding
        data_type: float32
        precision: 3

      - name: Entry Electricity Power
        unique_id: entry_em_power
        device_class: power
        unit_of_measurement: W
        slave: 1
        scan_interval: 5
        address: 0x2004
        input_type: holding
        data_type: float32

      - name: Entry Electricity Reactive Power
        unique_id: entry_em_reactive_power
        device_class: reactive_power
        unit_of_measurement: W
        slave: 1
        scan_interval: 5
        address: 0x2006
        input_type: holding
        data_type: float32

      - name: Entry Electricity Power Factor
        unique_id: entry_em_power_factor
        device_class: power_factor
        unit_of_measurement: "%"
        slave: 1
        scan_interval: 5
        address: 0x200A
        input_type: holding
        data_type: float32
        scale: 100
        precision: 1

      - name: Entry Electricity Frequency
        unique_id: entry_em_frequency
        device_class: frequency
        unit_of_measurement: Hz
        slave: 1
        scan_interval: 5
        address: 0x200E
        input_type: holding
        data_type: float32
        precision: 3

      - name: Entry Electricity Energy
        unique_id: entry_em_energy
        device_class: energy
        state_class: total_increasing
        unit_of_measurement: kWh
        slave: 1
        scan_interval: 5
        address: 0x4000
        input_type: holding
        data_type: float32
        precision: 3

group:
  entry_electricity_system:
    name: Entry Electricity System
    icon: mdi:meter-electric
    entities:
      - sensor.entry_electricity_voltage
      - sensor.entry_electricity_current
      - sensor.entry_electricity_power
      - sensor.entry_electricity_reactive_power
      - sensor.entry_electricity_power_factor
      - sensor.entry_electricity_frequency
      - sensor.entry_electricity_energy

配置能源追踪

  1. 在 Home Assistant 前端进入“设置 → 设备与服务 → 能源”。
  2. 在“电网使用”模块中新增实体,选择 sensor.entry_electricity_energy 作为电网消耗源。
  3. 根据需要设置成本计算方式,可按固定单价或时间段费率;也可以补充自动化,根据电价时段写入 input_number 供能源面板读取。
  4. 如果希望统计不同房间或回路的支路能耗,可在能源面板中新增子表,或在 Home Assistant 中各自创建模数测量实体再继续填充。

完成后,能源仪表板会开始滚动采集电表上报的累计电量,配合电压、电流与功率等传感器即可实现实时监控和历史趋势分析。

效果截图

2025-11-21T10:45:03.png

后续思路

  • 持续观察 Modbus 日志,确保无超时重连,必要时调整 message_wait_milliseconds
  • 结合家中其他大功率设备(空调、热水器)布点,扩展更多 DDSU666 或其它子表,实现更细颗粒度的用电分摊。
  • 利用 Home Assistant 的自动化功能,在功率因数异常或电流突变时推送提醒,及时定位异常负载。