Add GoodWe ET field candidate#13
Conversation
|
Coordination note for #12: draft PR #14 changes only the FTW release workflow, tools/ftw_repository.py and its tests. It has no direct file overlap with this GoodWe branch at head 2a93cfb and does not alter this branch. If #13 lands first, #14 will refresh from main and rerun make check before it leaves draft. No driver channel, tag or release was changed. |
2a93cfb to
d7af356
Compare
Signed-off-by: Fredrik Ahlgren <fredrik@sourceful-labs.com>
d7af356 to
9a94802
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9a94802dbb
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| local l1_v = meter_voltage[1] * 0.1 | ||
| local l2_v = meter_voltage[7] * 0.1 | ||
| local l3_v = meter_voltage[13] * 0.1 | ||
| local pv_w = nonnegative_i16(ac_total[1], 35138) |
There was a problem hiding this comment.
Treat GoodWe idle PV sentinels as zero
The GW8KN profile is explicitly derived from the upstream field profile, which documents register 35138 as wrapping to -1/-2 when idle (https://raw.githubusercontent.com/srcfl/hugin-drivers/3125960a80b5237e3a5ac609963ddb1302367938/drivers/goodwe_et.lua). With this check, a normal night/idle sample throws before any emits, so the driver suppresses otherwise-valid meter and battery telemetry and will appear offline until PV output is positive. Treat the known idle sentinel values as zero instead of failing the whole poll.
Useful? React with 👍 / 👎.
Summary
Add the read-only GoodWe 1.0.2 field candidate for FTW.
community-v1, with the same 22 Modbus FC03 holding-register reads and global unit ID default 1 as 1.0.1.gw8kn-et-hk3000profile from the attributed Hugin input. The profile uses eight batched reads instead of the input driver's 13 reads without a detected battery or 15 with one.read_only=true, permission onlymodbus.read, no commands, no writes, and no register 47040 change.Locked sources
02b72e4e3125960a3985c82bThe input source has an MIT notice and attribution in
THIRD_PARTY_NOTICES.md. The canonical repository remains Apache-2.0.Register-map boundary
The two source maps conflict at addresses that cannot be detected by checking whether a value looks plausible:
community-v1gw8kn-et-hk3000An empty old config selects only
community-v1. An unknown explicit profile fails init. The new GW8KN map requires bothconfig.profile: gw8kn-et-hk3000and an explicit host Modbus unit ID. Lua cannot inspect the host capability's unit ID.Transactions per successful poll
community-v1The legacy profile has no new batching or gap reads. It keeps the exact 1.0.1 address/count order. The GW8KN profile reads:
All gaps stay uninterpreted. The new wide reads still need the field pilot.
Failure and data rules
0xffff, fails the whole poll before emit.LastSuccess.Checks
make test-driver ID=goodwe: 63 passed, 6 skipped.make package-driver ID=goodwe TARGET=ftw-core: pass.make check: 62 manifests, 62 sandbox checks; 2606 passed, 491 skipped.LastSuccessmove;0xffffsentinel returns a poll error with noLastSuccessmove.117f7cb0273b2be6d7b4f2d01b798272e41817626a8b9e4365ae9517a5dbcc92.Field and release gate
This draft makes no GoodWe hardware claim.
tested_modelsand manifesttested_devicesstay empty. The package match describes the pilot target only.Release order:
The pilot in
packages/v1/goodwe/PILOT.mdrequires raw fixtures, sign checks, an energy comparison, a network outage, three hard FTW-controller reboots while the inverter and dongle stay powered, and a 24-hour run. The merge and automatic drivers-beta publish are test inputs; neither is HIL or stable proof.srcfl/ftw#522 remains open. Keepalive and backoff do not prove recovery from the dongle's ghost session. Stable stays blocked until the site passes 3/3 controller reboots without a dongle power cycle, has no false zero/green snapshot, and supplies the masked fixtures and logs. Merging this PR is expected to start the automatic signed/versioned GoodWe 1.0.2 drivers-beta flow. That beta is a test candidate, not HIL or stable proof. Do not move drivers-stable manually or touch Core #632 from this PR.