• v1.4.0 3e04b15656

    v1.4.0 — DDSU666 Modbus meter support
    frontend / frontend (push) Successful in 2m21s
    pytest / test (push) Successful in 9m50s
    docker-image / build-and-push (push) Successful in 4m24s
    Stable

    tliu93 released this 2026-06-30 17:20:55 +02:00 | 7 commits to main since this release

    v1.4.0 — DDSU666 Modbus meter support

    Adds support for the CHINT DDSU666 single-phase smart meter alongside the
    existing Eastron SDM120, and generalizes the Modbus read driver so the read
    function code is chosen per device profile instead of being hardcoded.
    Validated end-to-end against real DDSU666 hardware.

    Highlights

    • 🆕 DDSU666 support — a second supported energy meter model.
    • 🔧 Per-profile read function code — the driver now selects FC03 (holding) vs FC04 (input) registers based on the device profile.
    • Hardware-validated — confirmed on a live DDSU666 (big-endian word order, FC03 reads, energy accumulation).

    Added

    • DDSU666 device profile (ddsu666.yaml): reads via FC03 holding registers — voltage, current, active power (kW), reactive power (kvar), power factor, frequency, import/export active energy. Big-endian word and byte order.
    • DDSU666 Modbus protocol reference (docs/references/DDSU666-Modbus-Protocol.md), extracted from the official CHINT manual: register map, frame format, function codes, CRC/exception handling, an SDM120 comparison table, and field notes from real-hardware validation.

    Changed

    • driver.read_blocks now selects the read function code per profile (function_code: 4 = FC04 input registers — default, SDM120; 3 = FC03 holding registers — DDSU666), validated before connecting. Previously the read path was hardcoded to FC04 and the profile's function_code field was declared but never honored.
    • function_code is now threaded through every read path: the modbus_cli read command, the background poller, and the device /test endpoint. The CLI read output additionally prints the active function code.

    Compatibility

    • SDM120 behavior is unchanged (still FC04).
    • No API or OpenAPI schema changes.
    • Read-only — no meter configuration registers are ever written.

    Verification

    • Full test suite green (1037 passed), ruff clean, OpenAPI unchanged; multi-stage Docker image builds, migrates, and boots cleanly.
    • Confirmed on a live DDSU666: big-endian word order correct, FC03 reads decode to sensible values, cumulative energy (kWh) accumulates correctly.
    • Note: at load currents below the meter's measuring range (Imin ≈ 0.25 A), the instantaneous active power and power factor read 0 while energy still accumulates — expected meter behavior at very low current, not a decoding issue.

    Docs

    • Roadmap updated to queue Authentication next-steps (sliding session renewal + long-lived token targets).
    Downloads