From 8135cdc7acf8d16df56301171f3d7fd4e59120d4 Mon Sep 17 00:00:00 2001 From: Fredrik Ahlgren Date: Fri, 25 Sep 2026 09:47:36 +0200 Subject: [PATCH] Put esphome_dsmr's host API fields on their own lines FTW reads DRIVER fields line by line. With host_api_min and host_api_max on the "DRIVER = {" line, FTW's bundled copy of esphome_dsmr 1.0.4 could not state its host API and FTW's publication check refused it. Each field is now on its own line, as in every other driver. No behaviour change. The artifact check now asks that every host API statement agrees: the channel header and the driver's own table both state the range, as for every other driver with a DRIVER table. Signed-off-by: Fredrik Ahlgren --- CHANGELOG.md | 4 ++++ SUPPORT_STATUS.md | 4 ++-- devices.yaml | 2 +- drivers/lua/esphome_dsmr.lua | 6 ++++-- drivers/tests/lua_harness/test_esphome_dsmr_aliases.lua | 2 +- index.yaml | 6 +++--- manifests/esphome_dsmr.yaml | 6 +++--- support-status.json | 2 +- tests/test_ftw_repository.py | 6 ++++-- 9 files changed, 23 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19f1953..90e22d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## esphome_dsmr 1.0.5 + +Each field of the `DRIVER` table is on its own line, `host_api_min` and `host_api_max` included. FTW reads these fields line by line, so with both on the `DRIVER = {` line its bundled copy could not state its host API. No behaviour change. + ## ctek 0.3.3 The `DRIVER` table's id is now `ctek`, the catalog id, instead of `ctek-chargestorm`. FTW compares the id of its bundled copy with the signed channel's to decide which file runs; the old spelling kept them from matching. No behaviour change. diff --git a/SUPPORT_STATUS.md b/SUPPORT_STATUS.md index c6ab9b1..780b7f4 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. | easee_cloud | 1.3.4 | blixt-l1 | not_assessed | — | not_recorded | not_assessed | | esphome-dsmr | 1.0.3 | ftw-core | not_assessed | — | not_recorded | not_assessed | | esphome-dsmr | 1.0.3 | blixt-l1 | not_assessed | — | not_recorded | not_assessed | -| esphome_dsmr | 1.0.4 | ftw-core | not_assessed | — | not_recorded | not_assessed | -| esphome_dsmr | 1.0.4 | blixt-l1 | not_assessed | — | not_recorded | not_assessed | +| esphome_dsmr | 1.0.5 | ftw-core | not_assessed | — | not_recorded | not_assessed | +| esphome_dsmr | 1.0.5 | blixt-l1 | not_assessed | — | not_recorded | not_assessed | | etrel | 1.0.3 | ftw-core | not_assessed | — | not_recorded | not_assessed | | etrel | 1.0.3 | blixt-l1 | not_assessed | — | not_recorded | not_assessed | | ferroamp | 2.1.2 | ftw-core | not_assessed | — | not_recorded | not_assessed | diff --git a/devices.yaml b/devices.yaml index 624f96d..821da48 100644 --- a/devices.yaml +++ b/devices.yaml @@ -319,7 +319,7 @@ manufacturers: control: false - protocol: http driver: "esphome_dsmr" - version: "1.0.4" + version: "1.0.5" ders: [meter] control: false firmware_versions: "DSMR 2022.10.1 on SlimmeLezer+; Sourceful Zap open firmware" diff --git a/drivers/lua/esphome_dsmr.lua b/drivers/lua/esphome_dsmr.lua index e0f4aea..f7bd39c 100644 --- a/drivers/lua/esphome_dsmr.lua +++ b/drivers/lua/esphome_dsmr.lua @@ -58,11 +58,13 @@ -- just re-reads the same numbers — default 5 s keeps the meter fresh -- without hammering the ESP32's tiny TCP stack. -DRIVER = { host_api_min = 1, host_api_max = 1, +DRIVER = { id = "esphome_dsmr", name = "ESPHome DSMR (P1)", manufacturer = "ESPHome", - version = "1.0.4", + version = "1.0.5", + host_api_min = 1, + host_api_max = 1, protocols = { "http" }, capabilities = { "meter" }, description = "Smart meter via ESPHome web_server v3 + dsmr component (Sourceful Zap on open firmware, DIY ESP32+P1, etc.).", diff --git a/drivers/tests/lua_harness/test_esphome_dsmr_aliases.lua b/drivers/tests/lua_harness/test_esphome_dsmr_aliases.lua index bf7e4d2..00624b4 100644 --- a/drivers/tests/lua_harness/test_esphome_dsmr_aliases.lua +++ b/drivers/tests/lua_harness/test_esphome_dsmr_aliases.lua @@ -28,7 +28,7 @@ end dofile("drivers/lua/esphome_dsmr.lua") -if type(DRIVER) ~= "table" or DRIVER.id ~= "esphome_dsmr" or DRIVER.version ~= "1.0.4" then +if type(DRIVER) ~= "table" or DRIVER.id ~= "esphome_dsmr" or DRIVER.version ~= "1.0.5" then error("ESPHome DSMR identity metadata is wrong") end if DRIVER.host_api_min ~= 1 or DRIVER.host_api_max ~= 1 or DRIVER.read_only ~= true then diff --git a/index.yaml b/index.yaml index 43341ad..38895ac 100644 --- a/index.yaml +++ b/index.yaml @@ -213,15 +213,15 @@ drivers: size_bytes: 16772 sha256: "f91e7c1769c239020b94aa75555dcaf830449d60d2bbbe54d09a969d2a423382" - name: "esphome_dsmr" - version: "1.0.4" + version: "1.0.5" tier: core protocol: http connectivity: local setup: [bridge] ders: [meter] control: false - size_bytes: 16772 - sha256: "4c51414c0eaa02d5d6e1319337e0355e4ea8af5ada3390604544ea152156b400" + size_bytes: 16776 + sha256: "cae8f72ad3ddf56e8c5be28fcbfa7218801f87bfe7552c4f04394a60ef55bb3f" - name: "etrel" version: "1.0.3" tier: community diff --git a/manifests/esphome_dsmr.yaml b/manifests/esphome_dsmr.yaml index 6e537e2..b098aad 100644 --- a/manifests/esphome_dsmr.yaml +++ b/manifests/esphome_dsmr.yaml @@ -1,5 +1,5 @@ name: "esphome_dsmr" -version: "1.0.4" +version: "1.0.5" tier: core author: "Sourceful Labs AB" protocol: http @@ -16,9 +16,9 @@ tested_devices: notes: "Name-derived phase object_ids live-validated on SlimmeLezer+; explicit Sourceful aliases retained." min_driver_version: "1.0.1" min_host_version: "2.0.0" -size_bytes: 16772 +size_bytes: 16776 dkb_id: "esphome_dsmr" -sha256: "4c51414c0eaa02d5d6e1319337e0355e4ea8af5ada3390604544ea152156b400" +sha256: "cae8f72ad3ddf56e8c5be28fcbfa7218801f87bfe7552c4f04394a60ef55bb3f" signature: "" bytecode_sha256: "" diff --git a/support-status.json b/support-status.json index 09fa830..a2be65d 100644 --- a/support-status.json +++ b/support-status.json @@ -485,7 +485,7 @@ }, { "catalog_source": true, - "catalog_version": "1.0.4", + "catalog_version": "1.0.5", "driver_id": "esphome_dsmr", "targets": { "blixt-l1": { diff --git a/tests/test_ftw_repository.py b/tests/test_ftw_repository.py index 2ddf42b..0bd1fe3 100644 --- a/tests/test_ftw_repository.py +++ b/tests/test_ftw_repository.py @@ -210,8 +210,10 @@ def test_esphome_dsmr_artifact_declares_one_ftw_host_api_range( artifact = output / Path(driver["url"]).name source = artifact.read_text(encoding="utf-8") - assert re.findall(r"(?m)^\s*host_api_min\s*=\s*([0-9]+)", source) == ["1"] - assert re.findall(r"(?m)^\s*host_api_max\s*=\s*([0-9]+)", source) == ["1"] + # The channel's header and the driver's own table may both state the + # range; every statement must agree. + assert set(re.findall(r"(?m)^\s*host_api_min\s*=\s*([0-9]+)", source)) == {"1"} + assert set(re.findall(r"(?m)^\s*host_api_max\s*=\s*([0-9]+)", source)) == {"1"} def test_publication_is_deterministic(