From c70239cac29f3a92f1bfa52624c2a675faeda6d4 Mon Sep 17 00:00:00 2001 From: glenn schrooyen Date: Wed, 26 Aug 2026 01:31:54 +0200 Subject: [PATCH] 0.4.0: the meter transports that fit this house TEL-04 and TEL-05 merged without a version bump, so Home Assistant would not have offered the update - the same trap DEPLOY-01 caught at 0.2.1, recurring because merging a feature does not touch the version. ha_signed reads one signed entity. homewizard_local polls the meter's own API, where every HTTP response is a genuine arrival - the property the firmware watchdog needs, and the one HA cannot provide for a repeated reading. Co-Authored-By: Claude Opus 5 --- goodwe_controller/CHANGELOG.md | 30 ++++++++++++++++++++++++++++++ goodwe_controller/config.yaml | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/goodwe_controller/CHANGELOG.md b/goodwe_controller/CHANGELOG.md index 8141987..4a26ed8 100644 --- a/goodwe_controller/CHANGELOG.md +++ b/goodwe_controller/CHANGELOG.md @@ -1,5 +1,35 @@ # Changelog +## 0.4.0 + +**TEL-04.** `meter_source: ha_signed` reads a single *signed* power entity, which +is the shape a HomeWizard P1 publishes. Both transports 0.3.0 shipped require two +unsigned registers and refuse negatives, so neither fits the meter installed here. + +**TEL-05.** `meter_source: homewizard_local` polls the meter's own local API +directly. This exists because of something the HA paths cannot do: Home Assistant +fires no state change for a repeated reading and exposes no arrival signal at +all, so `sensor.p1_sample_age_s` on those transports measures time since the +*value changed*, not since the meter *reported*. Real captured data has gaps of +42 s and 97 s between changes on a perfectly healthy meter - long enough for a +30 s staleness threshold to command 0 W for no reason. Every HTTP response to the +local API is a genuine arrival, so the age means what it says. + +Verified on the rig against a literally constant 350.0 W for 70 s - the exact +state where the HA path recorded zero samples in 45 s - with 14 arrivals and the +age never exceeding the poll cadence. + +Set `p1_host` to the meter's address and `meter_poll_s` (default 5 s, matching +the meter's own ~5 s update). Still defaults to `off`; nothing changes for an +install that does not opt in. + +Freeze detection is separate and deliberately not thresholded: a meter answering +200 OK with a stale number *is* arriving, so no arrival stamp can flag it. The +energy registers carry that as `unchanged_s`, surfaced on the status line for a +human to read rather than alarmed on - at a converged -10 W a 1 Wh register needs +about six minutes to move, so any threshold would false-trip at the target +operating point. + ## Unreleased **TEL-05.** A fourth `meter_source`, `homewizard_local`, which polls a diff --git a/goodwe_controller/config.yaml b/goodwe_controller/config.yaml index 75be509..350e3fe 100644 --- a/goodwe_controller/config.yaml +++ b/goodwe_controller/config.yaml @@ -1,5 +1,5 @@ name: GoodWe RS485 Controller -version: "0.3.0" +version: "0.4.0" slug: goodwe_controller description: >- Drives a GoodWe ES/BP battery inverter over RS485 by emulating its smart