diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a03d75..f5bffcb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ Driver versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html - **`foxess` (H1/H3 11000-range map) — removed untested.** Every tested_devices entry said "Community driver, untested", and no hardware has ever validated the map. This is not a clean supersession: `foxess_h3_smart` covers the 1K5-HI and H3-Smart families, not the H1 / H3 / H3-PRO / AIO-H3 families the old driver claimed — those lose their only, unvalidated, listing. The removal is still right on this vendor's hardware behaviour: a Fox ESS inverter answers unknown registers with silence, so a wrong-map driver produces no error, only timeouts — a real 1K5 answered none of the 11000-range map, and the catalog offering it anyway cost that operator a full "device not supported" detour. A catalog that reports what is known must not list a map nobody has seen answer. H1-range coverage can return the way H3-Smart did: a driver written against hardware someone actually has. ### Changed +- **`foxess_h3_smart` 0.9.3** — records the verifier and the last hardware-test date beside its existing production claim, so FTW can include it in the offline recovery bundle without rejecting incomplete verification metadata. The evidence is unchanged: four days on one 1K5-HI-10-V1; H3-Smart hardware remains untested - **The channel now repeats a reviewed verification claim instead of stamping every artifact "untested".** `tools/ftw_repository.py` hardcoded `verification_status: experimental` into every published artifact — a sound default when 80 unverified community ports were imported wholesale, and wrong the moment a driver earned a hardware-validated `production` status the review accepted. The builder now carries the DRIVER block's status (and its notes) into the artifact when the declared status is `production` or `beta` — a checkable claim a reviewer gated — and keeps the conservative default for everything else, which also keeps every already-published untested driver's bytes unchanged. A published version names a set of bytes, so the nine drivers whose artifacts change get patch bumps: `ctek` 0.3.2, `ctek_v2` 0.3.2, `easee_cloud` 1.1.1, `ferroamp` 2.1.1, `foxess_h3_smart` 0.9.2, `nibe_local` 1.1.2, `sungrow` 1.5.8, `tesla_vehicle` 0.2.1, `zap` 2.0.2 - **`foxess_h3_smart` 0.9.1** — `verification_status` moves `experimental` → `production` ("verified on hardware" in the FTW UI), with `verification_notes` recording exactly what was verified and on what: telemetry, battery dispatch in all three regimes, and PV curtailment on a 1K5-HI-10-V1 over multi-day operation — and that the H3-Smart family shares the map but remains untested on H3-Smart hardware. Header and description drop the "local control build" framing that stopped being true when the channel shipped it diff --git a/SUPPORT_STATUS.md b/SUPPORT_STATUS.md index b3b68c5..475f5e6 100644 --- a/SUPPORT_STATUS.md +++ b/SUPPORT_STATUS.md @@ -50,8 +50,8 @@ Catalog source is not proof that a target can install or run a driver. | ferroamp_dc2_v2x | 2.1.0 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no | | ferroamp_modbus | 2.1.1 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no | | ferroamp_modbus | 2.1.1 | blixt-l1 | not_assessed | — | — | not_recorded | — | not_assessed | no | -| foxess_h3_smart | 0.9.2 | ftw-core | not_assessed | 0.9.2 | — | not_recorded | — | not_assessed | yes | -| foxess_h3_smart | 0.9.2 | blixt-l1 | not_assessed | 0.9.2 | — | not_recorded | — | not_assessed | yes | +| foxess_h3_smart | 0.9.3 | ftw-core | not_assessed | 0.9.3 | — | not_recorded | — | not_assessed | yes | +| foxess_h3_smart | 0.9.3 | blixt-l1 | not_assessed | 0.9.3 | — | 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_api | 1.0.2 | ftw-core | not_assessed | — | — | not_recorded | — | not_assessed | no | diff --git a/devices.yaml b/devices.yaml index 1b5c590..f1a3eb9 100644 --- a/devices.yaml +++ b/devices.yaml @@ -393,7 +393,7 @@ manufacturers: protocols: - protocol: modbus driver: "foxess_h3_smart" - version: "0.9.2" + version: "0.9.3" ders: [pv, battery, meter] control: true firmware_versions: "" @@ -404,7 +404,7 @@ manufacturers: protocols: - protocol: modbus driver: "foxess_h3_smart" - version: "0.9.2" + version: "0.9.3" ders: [pv, battery, meter] control: true firmware_versions: "" diff --git a/drivers/lua/foxess_h3_smart.lua b/drivers/lua/foxess_h3_smart.lua index 142e87d..9d0c5c8 100644 --- a/drivers/lua/foxess_h3_smart.lua +++ b/drivers/lua/foxess_h3_smart.lua @@ -131,7 +131,7 @@ DRIVER = { id = "foxess_h3_smart", name = "FoxESS H3-Smart / 1K5", manufacturer = "Fox ESS", - version = "0.9.2", + version = "0.9.3", host_api_min = 1, host_api_max = 2, protocols = { "modbus" }, @@ -140,6 +140,8 @@ DRIVER = { authors = { "Sourceful Labs AB" }, tested_models = { "1K5-HI-10-V1" }, verification_status = "production", + verified_by = { "Leitet@1K5-HI-10-V1:4d" }, + verified_at = "2026-08-06", verification_notes = "Verified on 1K5-HI-10-V1 hardware over multi-day operation: telemetry (PV per-string, battery, per-phase grid CT, energy counters), battery dispatch in charge, discharge and hold, and PV curtailment. H3-Smart family shares the register map but has not been tested on H3-Smart hardware.", read_only = false, } @@ -154,7 +156,7 @@ PROTOCOL = "modbus" -- other field here. DRIVER_MANIFEST = { name = "foxess_h3_smart", - version = "0.9.2", + version = "0.9.3", role = "inverter", requires = {}, options = {}, diff --git a/index.yaml b/index.yaml index ea76c77..df07ce5 100644 --- a/index.yaml +++ b/index.yaml @@ -214,14 +214,14 @@ drivers: size_bytes: 14450 sha256: "8be39a1d41b18b1e12fb9b669e6fe11c93775abfdb4f41338f9dc79fe66fd2d9" - name: "foxess_h3_smart" - version: "0.9.2" + version: "0.9.3" tier: community protocol: modbus connectivity: local ders: [pv, battery, meter] control: true - size_bytes: 33859 - sha256: "5a99134a748d9c244983714a7d5ded5821a75a4c6c65178e26355939637fcf45" + size_bytes: 33935 + sha256: "e7ab001ceb7e460fbe44439502e1546ee9eba3e9d8b0ba9de07cebd2400d7bfe" - name: "fronius" version: "2.1.1" tier: core diff --git a/manifests/foxess_h3_smart.yaml b/manifests/foxess_h3_smart.yaml index 867ad46..b111312 100644 --- a/manifests/foxess_h3_smart.yaml +++ b/manifests/foxess_h3_smart.yaml @@ -1,5 +1,5 @@ name: "foxess_h3_smart" -version: "0.9.2" +version: "0.9.3" tier: community author: "Sourceful Labs AB" protocol: modbus @@ -27,9 +27,9 @@ upstream_docs: kind: register_map url_stability: stable min_host_version: "1.5.0" -size_bytes: 33859 +size_bytes: 33935 dkb_id: "" -sha256: "5a99134a748d9c244983714a7d5ded5821a75a4c6c65178e26355939637fcf45" +sha256: "e7ab001ceb7e460fbe44439502e1546ee9eba3e9d8b0ba9de07cebd2400d7bfe" signature: "" bytecode_sha256: "" bytecode_signature: "" diff --git a/packages/v1/foxess_h3_smart/package-source.json b/packages/v1/foxess_h3_smart/package-source.json index 6066a26..2aae57a 100644 --- a/packages/v1/foxess_h3_smart/package-source.json +++ b/packages/v1/foxess_h3_smart/package-source.json @@ -1,7 +1,7 @@ { "schema_version": "sourceful.driver-package-source/v1", "package_id": "com.sourceful.driver.foxess-h3-smart", - "version": "0.9.2", + "version": "0.9.3", "channel": "beta", "display_name": "FoxESS H3-Smart / 1K5", "identity": { diff --git a/support-status.json b/support-status.json index 4cd2c00..1ed628c 100644 --- a/support-status.json +++ b/support-status.json @@ -646,12 +646,12 @@ }, { "catalog_source": true, - "catalog_version": "0.9.2", + "catalog_version": "0.9.3", "driver_id": "foxess_h3_smart", "package_id": "com.sourceful.driver.foxess-h3-smart", "targets": { "blixt-l1": { - "candidate_package_version": "0.9.2", + "candidate_package_version": "0.9.3", "control_enabled": true, "hil": "not_recorded", "historical_signed_beta_version": null, @@ -661,7 +661,7 @@ "target_conformance": "not_assessed" }, "ftw-core": { - "candidate_package_version": "0.9.2", + "candidate_package_version": "0.9.3", "control_enabled": true, "hil": "not_recorded", "historical_signed_beta_version": null,