83 lines
2.8 KiB
YAML
83 lines
2.8 KiB
YAML
name: ddsu666
|
||||
|
|
description: CHINT DDSU666 single-phase smart meter
|
|||
|
|
function_code: 3 # holding registers (FC03) — DDSU666 has NO input registers (no FC04)
|
|||
|
|
word_order: big # high register first — ASSUMED; verify with a known voltage reading
|
|||
|
|
byte_order: big # high byte first within each register (confirmed by manual CRC example)
|
|||
|
|
|
|||
|
|
# NOTE: the manual gives no worked float-decode example, so word_order is a best-guess
|
|||
|
|
# (standard big-endian, high register first, matching sdm120). After wiring the meter,
|
|||
|
|
# read 0x2000 (voltage) — it should decode to ~230 V. If it decodes to garbage, the
|
|||
|
|
# device uses the opposite word order and this profile (and the decoder) need adjusting.
|
|||
|
|
# Byte order is confirmed big-endian from the manual (Appendix A, Table A.4: 0x1388 -> 13 88).
|
|||
|
|
|
|||
|
|
blocks:
|
|||
|
|
# Instantaneous quantities 0x2000–0x200F: voltage, current, P, Q, (rsv), PF, (rsv), Freq.
|
|||
|
|
# 16 contiguous registers — single bulk read. (DDSU666 manual Table 9.)
|
|||
|
|
- { start: 0x2000, count: 0x0010 }
|
|||
|
|
# Active energy — import (0x4000) and export (0x400A) read as two small blocks rather
|
|||
|
|
# than one span, to avoid touching the undocumented/reserved 0x4002–0x4009 gap.
|
|||
|
|
- { start: 0x4000, count: 0x0002 }
|
|||
|
|
- { start: 0x400A, count: 0x0002 }
|
|||
|
|
|
|||
|
|
metrics:
|
|||
|
|
# Addresses are the raw Modbus protocol addresses (hex) from DDSU666 manual Table 9,
|
|||
|
|
# read via FC03. Each float32 occupies two consecutive 16-bit registers.
|
|||
|
|
|
|||
|
|
- key: voltage
|
|||
|
|
address: 0x2000 # U — Voltage (V)
|
|||
|
|
type: float32
|
|||
|
|
unit: "V"
|
|||
|
|
device_class: voltage
|
|||
|
|
ha_component: sensor
|
|||
|
|
|
|||
|
|
- key: current
|
|||
|
|
address: 0x2002 # I — Current (A)
|
|||
|
|
type: float32
|
|||
|
|
unit: "A"
|
|||
|
|
device_class: current
|
|||
|
|
ha_component: sensor
|
|||
|
|
|
|||
|
|
- key: active_power
|
|||
|
|
address: 0x2004 # P — Active power. Manual unit is kW (NOT W like sdm120).
|
|||
|
|
type: float32
|
|||
|
|
unit: "kW"
|
|||
|
|
device_class: power
|
|||
|
|
ha_component: sensor
|
|||
|
|
|
|||
|
|
- key: reactive_power
|
|||
|
|
address: 0x2006 # Q — Reactive power (kvar)
|
|||
|
|
type: float32
|
|||
|
|
unit: "kvar"
|
|||
|
|
device_class: reactive_power
|
|||
|
|
ha_component: sensor
|
|||
|
|
|
|||
|
|
- key: power_factor
|
|||
|
|
address: 0x200A # PF — Power factor (dimensionless)
|
|||
|
|
type: float32
|
|||
|
|
unit: ""
|
|||
|
|
device_class: power_factor
|
|||
|
|
ha_component: sensor
|
|||
|
|
|
|||
|
|
- key: frequency
|
|||
|
|
address: 0x200E # Freq — Frequency (Hz)
|
|||
|
|
type: float32
|
|||
|
|
unit: "Hz"
|
|||
|
|
device_class: frequency
|
|||
|
|
ha_component: sensor
|
|||
|
|
|
|||
|
|
- key: import_energy
|
|||
|
|
address: 0x4000 # Ep — positive/forward active energy (kWh)
|
|||
|
|
type: float32
|
|||
|
|
unit: "kWh"
|
|||
|
|
device_class: energy
|
|||
|
|
state_class: total_increasing
|
|||
|
|
ha_component: sensor
|
|||
|
|
|
|||
|
|
- key: export_energy
|
|||
|
|
address: 0x400A # -Ep — reverse active energy (kWh)
|
|||
|
|
type: float32
|
|||
|
|
unit: "kWh"
|
|||
|
|
device_class: energy
|
|||
|
|
state_class: total_increasing
|
|||
|
|
ha_component: sensor
|