Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,24 @@ Driver versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html

### Fixed

- **`fronius_smart_meter` 2.1.2** — `read_f32` returns nil on a failed / given-up register instead of fabricating 0; when total AC power (40098) is missing the poll emits neither meter nor meter metrics. Optional phase/energy fields omit nil rather than coercing to 0. Declares `read_only = true`.
- **`tesla_vehicle` 0.2.2** — `emit_last` sets `soc_fresh = false` so a cached SoC replay is not treated as a fresh observation by the FTW host.
- **`zuidwijk_p1` 1.1.1** — emit `p1_crc_errors` only after a valid frame (silence no longer keeps driver health alive on a CRC metric alone); skip the meter emit when both import and export power OBIS (`1.7.0` / `2.7.0`) are missing. Declares `read_only = true`; manifest `control` corrected to false.
- **`pixii` 2.1.4** — serial probe in `driver_poll` no longer gates on an unset `ok` local (the branch was permanently false, so `host.set_sn` never ran).
- **`easee_cloud` 1.3.1** — declares `config_secrets = { "password" }`; `driver_default_mode` now pauses charging and writes `dynamicChargerCurrent = 0` so FTW loss of steer stands the charger down.
- **`ferroamp` 2.1.2** — when `config.serial` is a non-empty string, call `host.set_sn`; MQTT telemetry still carries no hub serial, so identity otherwise falls back to the endpoint.

### Changed

- **Read-only hybrids / meters declare `read_only = true`:** `sonnen` 2.0.3 (plus no-op `driver_command` / `driver_default_mode`), `goodwe` 2.1.2, `growatt` 2.1.2, `sofar` 2.1.2, `kostal` 2.1.2, `sma` 2.1.2, `victron` 2.1.2, `fronius` 2.1.2, `pixii_pv` 0.3.1, `solis_string` 1.1.2, `tibber` 1.1.2 (also `http_hosts = { "api.tibber.com" }`).

### Added

- **`zaptec_cloud` 0.1.0** — Zaptec Go / Go 2 / Pro via Zaptec Cloud REST API, promoted from FTW testdata. `read_only = true` (EV commands accepted as no-op success so the planner does not mark failed): review before merge found the control path's `ev_set_current` computed the requested current from the phase count *before* applying a same-call phase change, and no live charger has exercised pause/resume/current end-to-end. Re-add control once that ordering is fixed and hardware-verified per `AGENTS.md`.
- **`tesla_wall_connector` 0.1.0** — Tesla Wall Connector Gen 3 local HTTP observation driver, promoted from FTW testdata. `read_only = true` (EV commands accepted as no-op success so the planner does not mark failed).

### Fixed

- **The channel build now carries `config_secrets` into the generated header, so a box no longer masks nothing.** `tools/ftw_repository.py` prepends a generated `DRIVER = { … }` block ahead of the source's own, and FTW core parses only the first block it finds (`extractDriverBlock`). The generated block never copied `config_secrets`, so any driver declaring it — `myuplink`, `nibe_local`, `sonnen`, `tibber` — published a catalog entry with nothing to mask: `GET /api/config` on a box running the channel build returned `myuplink`'s `client_secret` and `refresh_token` in clear text, confirmed on a live installation. The source block further down still declared the field correctly, which is exactly why nothing caught this in a source-level review. `test_config_secrets_reach_the_generated_header` holds the generated header to it. Fixes #106.
- **myuplink** 1.2.2, **nibe_local** 1.1.4, **sonnen** 2.0.2, **tibber** 1.1.1 — patch bump only. The `config_secrets` fix above changes these four drivers' published artifact bytes (the signed channel now emits their `config_secrets` list in the generated header), so the signed channel's own version rule requires a new version to publish it under. No Lua source changed.

Expand Down
72 changes: 38 additions & 34 deletions SUPPORT_STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,36 +46,36 @@ Catalog source is not proof that a target can install or run a driver.
| deye | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| easee | 1.0.4 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| easee | 1.0.4 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| easee_cloud | 1.3.0 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| easee_cloud | 1.3.0 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| easee_cloud | 1.3.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| easee_cloud | 1.3.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| esphome-dsmr | 1.0.3 | ftw-core | not_assessed | 1.0.2 | — | not_recorded | — | not_assessed | no |
| esphome-dsmr | 1.0.3 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| esphome_dsmr | 1.0.3 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| esphome_dsmr | 1.0.3 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| etrel | 1.0.3 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| etrel | 1.0.3 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| ferroamp | 2.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| ferroamp | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| ferroamp | 2.1.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| ferroamp | 2.1.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| ferroamp_dc2_v2x | 2.1.0 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| ferroamp_dc2_v2x | 2.1.0 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| ferroamp_modbus | 2.1.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| ferroamp_modbus | 2.1.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| foxess_h3_smart | 0.9.5 | ftw-core | not_assessed | 0.9.5 | — | not_recorded | — | not_assessed | yes |
| foxess_h3_smart | 0.9.5 | blixt-l1 | not_assessed | 0.9.5 | — | not_recorded | — | not_assessed | yes |
| fronius | 2.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| fronius | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| fronius | 2.1.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| fronius | 2.1.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| fronius_api | 1.0.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| fronius_api | 1.0.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| fronius_smart_meter | 2.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| fronius_smart_meter | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| fronius_smart_meter | 2.1.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| fronius_smart_meter | 2.1.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| goe | 1.0.3 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| goe | 1.0.3 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| goe_http | 1.0.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| goe_http | 1.0.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| goodwe | 2.1.1 | ftw-core | contract_passed | — | — | gw8kn_et_hk3000_required | — | profile_selected | no |
| goodwe | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| growatt | 2.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| growatt | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| goodwe | 2.1.2 | ftw-core | contract_passed | — | — | gw8kn_et_hk3000_required | — | profile_selected | no |
| goodwe | 2.1.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| growatt | 2.1.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| growatt | 2.1.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| hardybarth | 1.0.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| hardybarth | 1.0.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| heishamon | 0.5.0 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
Expand All @@ -90,8 +90,8 @@ Catalog source is not proof that a target can install or run a driver.
| keba | 1.0.3 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| konja-261-svk | 0.3.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| konja-261-svk | 0.3.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| kostal | 2.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| kostal | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| kostal | 2.1.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| kostal | 2.1.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| kstar | 1.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| kstar | 1.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| mennekes | 1.0.3 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
Expand All @@ -114,10 +114,10 @@ Catalog source is not proof that a target can install or run a driver.
| p1_hdlc | 2.0.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| p1_meter | 2.0.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| p1_meter | 2.0.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| pixii | 2.1.3 | ftw-core | staged | 1.2.5 | — | required | — | blocked | no |
| pixii | 2.1.3 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| pixii_pv | 0.3.0 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| pixii_pv | 0.3.0 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| pixii | 2.1.4 | ftw-core | staged | 1.2.5 | — | required | — | blocked | no |
| pixii | 2.1.4 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| pixii_pv | 0.3.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| pixii_pv | 0.3.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| saj | 1.2.0 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| saj | 1.2.0 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| schneider_meter | 1.0.5 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
Expand All @@ -132,14 +132,14 @@ Catalog source is not proof that a target can install or run a driver.
| siemens_pac | 1.0.5 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sigenergy | 1.1.3 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sigenergy | 1.1.3 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sma | 2.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sma | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sma | 2.1.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sma | 2.1.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sma_pv | 1.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sma_pv | 1.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| socomec | 1.0.4 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| socomec | 1.0.4 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sofar | 2.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sofar | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sofar | 2.1.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sofar | 2.1.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| solaredge | 2.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| solaredge | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| solaredge_legacy | 0.3.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
Expand All @@ -152,20 +152,22 @@ Catalog source is not proof that a target can install or run a driver.
| solinteg | 1.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| solis | 2.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| solis | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| solis_string | 1.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| solis_string | 1.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sonnen | 2.0.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sonnen | 2.0.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| solis_string | 1.1.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| solis_string | 1.1.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sonnen | 2.0.3 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sonnen | 2.0.3 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| sungrow | 1.5.8 | ftw-core | observe_only_profile_blocked | 1.3.3 | 1.3.0 | exact_model_firmware_required | — | not_assessed | no |
| sungrow | 1.5.8 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| tesla_vehicle | 0.2.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| tesla_vehicle | 0.2.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| tibber | 1.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| tibber | 1.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| tesla_vehicle | 0.2.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| tesla_vehicle | 0.2.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| tesla_wall_connector | 0.1.0 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| tesla_wall_connector | 0.1.0 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| tibber | 1.1.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| tibber | 1.1.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| varta | 1.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| varta | 1.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| victron | 2.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| victron | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| victron | 2.1.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| victron | 2.1.2 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| victron_mqtt | 1.0.3 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| victron_mqtt | 1.0.3 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| wallbox | 1.0.3 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
Expand All @@ -174,5 +176,7 @@ Catalog source is not proof that a target can install or run a driver.
| zap | 3.1.0 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| zaptec | 1.0.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| zaptec | 1.0.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| zuidwijk_p1 | 1.1.0 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| zuidwijk_p1 | 1.1.0 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| zaptec_cloud | 0.1.0 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| zaptec_cloud | 0.1.0 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
| zuidwijk_p1 | 1.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no |
| zuidwijk_p1 | 1.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no |
Loading