From 4c7e17865fb15629d1754683e86a0830bdb1c66b Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Tue, 15 Oct 2024 09:48:02 +0000 Subject: [PATCH 01/18] feat: add config and status for BLU TRV --- aioshelly/rpc_device/device.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index 64759ec8..e62367c4 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -280,6 +280,7 @@ async def poll(self) -> None: self._status = results[0] if has_dynamic: self._parse_dynamic_components(results[1]) + await self._retrieve_blutrv_components(results[1]) async def _init_calls(self) -> None: """Make calls needed to initialize the device.""" @@ -309,7 +310,9 @@ async def _init_calls(self) -> None: if fetch_status: self._status = results.pop(0) if fetch_dynamic: - self._parse_dynamic_components(results.pop(0)) + components = results.pop(0) + self._parse_dynamic_components(components) + await self._retrieve_blutrv_components(components) async def script_list(self) -> list[ShellyScript]: """Get a list of scripts from 'Script.List'.""" @@ -509,6 +512,7 @@ async def get_dynamic_components(self) -> None: return components = await self.call_rpc("Shelly.GetComponents", {"dynamic_only": True}) self._parse_dynamic_components(components) + await self._retrieve_blutrv_components(components) def _supports_dynamic_components(self) -> bool: """Return True if device supports dynamic components.""" @@ -538,3 +542,26 @@ def _parse_dynamic_components(self, components: dict[str, Any]) -> None: for item in self._dynamic_components } ) + + async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: + """Retrieve BLU TRV components.""" + if TYPE_CHECKING: + assert self._config + assert self._status + + for component in components.get("components", []): + _key = component["key"].split(":") + if _key[0] == "blutrv": + calls = [ + ( + "BluTRV.Call", + {"id": _key[1], "method": "Trv.GetConfig", "params": {"id": 0}}, + ), + ( + "BluTRV.Call", + {"id": _key[1], "method": "Trv.GetStatus", "params": {"id": 0}}, + ), + ] + results = await self.call_rpc_multiple(calls) + self._config.update({component["key"]: results[0]}) + self._status.update({component["key"]: results[1]}) From 3d36be73d773aa42e850817207f013dd35e0b71f Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Mon, 16 Dec 2024 19:05:30 +0000 Subject: [PATCH 02/18] switch to cached replies --- aioshelly/rpc_device/device.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index e62367c4..7412e895 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -553,14 +553,8 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: _key = component["key"].split(":") if _key[0] == "blutrv": calls = [ - ( - "BluTRV.Call", - {"id": _key[1], "method": "Trv.GetConfig", "params": {"id": 0}}, - ), - ( - "BluTRV.Call", - {"id": _key[1], "method": "Trv.GetStatus", "params": {"id": 0}}, - ), + ("BluTrv.GetRemoteConfig", {"id": _key[1]}), + ("BluTrv.GetRemoteStatus", {"id": _key[1]}), ] results = await self.call_rpc_multiple(calls) self._config.update({component["key"]: results[0]}) From b16f4cedc8e77bf7bc7ac2fdfd5bd35e19aed106 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Tue, 17 Dec 2024 13:19:44 +0000 Subject: [PATCH 03/18] align config and status to new rpc calls return value --- aioshelly/rpc_device/device.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index 7412e895..509db08f 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -557,5 +557,5 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: ("BluTrv.GetRemoteStatus", {"id": _key[1]}), ] results = await self.call_rpc_multiple(calls) - self._config.update({component["key"]: results[0]}) - self._status.update({component["key"]: results[1]}) + self._config.update({component["key"]: results[0]["config"]["trv:0"]}) + self._status.update({component["key"]: results[1]["status"]["trv:0"]}) From ed115f49dfd4963d86c3be29f21af86c45ca40a2 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Tue, 17 Dec 2024 15:07:00 +0000 Subject: [PATCH 04/18] merge missing data --- aioshelly/rpc_device/device.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index 509db08f..8cae2bb2 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -557,5 +557,11 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: ("BluTrv.GetRemoteStatus", {"id": _key[1]}), ] results = await self.call_rpc_multiple(calls) - self._config.update({component["key"]: results[0]["config"]["trv:0"]}) + + cfg: dict[str, Any] = results[0]["config"]["trv:0"] + # addr and name must be added from Shelly.GetComponents call + # model_id can't be retrieved, remote device call (TRV.GetConfig) needed + cfg.update({"addr": component["config"]["addr"]}) + cfg.update({"name": component["config"]["name"]}) + self._config.update({component["key"]: cfg}) self._status.update({component["key"]: results[1]["status"]["trv:0"]}) From 13501dc881bb63e48fc08af03e59eb1ceab290b7 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Tue, 17 Dec 2024 15:14:57 +0000 Subject: [PATCH 05/18] call blutrv only for gw gen3 --- aioshelly/const.py | 2 ++ aioshelly/rpc_device/device.py | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/aioshelly/const.py b/aioshelly/const.py index d7aa8298..2858f77e 100644 --- a/aioshelly/const.py +++ b/aioshelly/const.py @@ -929,6 +929,8 @@ class ShellyDevice: MODEL_VINTAGE_V2, } +BLU_TRV_IDENTIFIER = "blutrv" + class UndefinedType(Enum): """Singleton type for use with not set sentinel values.""" diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index 8cae2bb2..ae49fcf2 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -18,11 +18,13 @@ process_ip_or_options, ) from ..const import ( + BLU_TRV_IDENTIFIER, CONNECT_ERRORS, DEVICE_INIT_TIMEOUT, DEVICE_IO_TIMEOUT, DEVICE_POLL_TIMEOUT, FIRMWARE_PATTERN, + MODEL_BLU_GATEWAY_GEN3, NOTIFY_WS_CLOSED, VIRTUAL_COMPONENTS, VIRTUAL_COMPONENTS_MIN_FIRMWARE, @@ -545,13 +547,16 @@ def _parse_dynamic_components(self, components: dict[str, Any]) -> None: async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: """Retrieve BLU TRV components.""" + if self.model != MODEL_BLU_GATEWAY_GEN3: + return + if TYPE_CHECKING: assert self._config assert self._status for component in components.get("components", []): _key = component["key"].split(":") - if _key[0] == "blutrv": + if _key[0] == BLU_TRV_IDENTIFIER: calls = [ ("BluTrv.GetRemoteConfig", {"id": _key[1]}), ("BluTrv.GetRemoteStatus", {"id": _key[1]}), From 85714628cfa8468df5175a214f99a0251f6d8e27 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Tue, 17 Dec 2024 15:36:42 +0000 Subject: [PATCH 06/18] raise --- aioshelly/rpc_device/device.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index ae49fcf2..95f96395 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -550,9 +550,8 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: if self.model != MODEL_BLU_GATEWAY_GEN3: return - if TYPE_CHECKING: - assert self._config - assert self._status + if not self._config or not self._status: + raise ConnectionError for component in components.get("components", []): _key = component["key"].split(":") From 479204b48eb3e476b3ec099e579ca1d1d579a67e Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Tue, 17 Dec 2024 17:12:15 +0000 Subject: [PATCH 07/18] model_id --- aioshelly/rpc_device/device.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index 95f96395..f11d72c5 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -563,9 +563,9 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: results = await self.call_rpc_multiple(calls) cfg: dict[str, Any] = results[0]["config"]["trv:0"] - # addr and name must be added from Shelly.GetComponents call - # model_id can't be retrieved, remote device call (TRV.GetConfig) needed + # addr, name and model_id must be added from Shelly.GetComponents call cfg.update({"addr": component["config"]["addr"]}) cfg.update({"name": component["config"]["name"]}) + cfg.update({"model_id": component["attrs"].get("model_id")}) self._config.update({component["key"]: cfg}) self._status.update({component["key"]: results[1]["status"]["trv:0"]}) From df777b4fa41ac3585f99a0e1be627e79265abd9f Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Tue, 17 Dec 2024 18:22:40 +0000 Subject: [PATCH 08/18] apply review comment --- aioshelly/rpc_device/device.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index f11d72c5..6a0df46f 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -551,7 +551,7 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: return if not self._config or not self._status: - raise ConnectionError + raise NotInitialized for component in components.get("components", []): _key = component["key"].split(":") From db51a093cba6aad31650fcc743209acb55d0aa80 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Tue, 17 Dec 2024 19:30:33 +0000 Subject: [PATCH 09/18] add model by ID --- aioshelly/const.py | 1 + aioshelly/rpc_device/device.py | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/aioshelly/const.py b/aioshelly/const.py index 2858f77e..29b48819 100644 --- a/aioshelly/const.py +++ b/aioshelly/const.py @@ -930,6 +930,7 @@ class ShellyDevice: } BLU_TRV_IDENTIFIER = "blutrv" +BLU_TRV_MODEL_ID = {8: "SBTR-001AEU"} class UndefinedType(Enum): diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index 6a0df46f..93fc9903 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -19,6 +19,7 @@ ) from ..const import ( BLU_TRV_IDENTIFIER, + BLU_TRV_MODEL_ID, CONNECT_ERRORS, DEVICE_INIT_TIMEOUT, DEVICE_IO_TIMEOUT, @@ -566,6 +567,12 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: # addr, name and model_id must be added from Shelly.GetComponents call cfg.update({"addr": component["config"]["addr"]}) cfg.update({"name": component["config"]["name"]}) - cfg.update({"model_id": component["attrs"].get("model_id")}) + cfg.update( + { + "model_id": BLU_TRV_MODEL_ID.get( + component["attrs"].get("model_id") + ) + } + ) self._config.update({component["key"]: cfg}) self._status.update({component["key"]: results[1]["status"]["trv:0"]}) From 2c99523dcc51cd076f39a04010d5b387df951849 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Wed, 18 Dec 2024 08:02:32 +0000 Subject: [PATCH 10/18] attrs not always available --- aioshelly/rpc_device/device.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index 93fc9903..a172033c 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -565,13 +565,14 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: cfg: dict[str, Any] = results[0]["config"]["trv:0"] # addr, name and model_id must be added from Shelly.GetComponents call + _attrs = component.get("attrs") cfg.update({"addr": component["config"]["addr"]}) cfg.update({"name": component["config"]["name"]}) cfg.update( { - "model_id": BLU_TRV_MODEL_ID.get( - component["attrs"].get("model_id") - ) + "model_id": BLU_TRV_MODEL_ID.get(_attrs.get("model_id")) + if _attrs + else None } ) self._config.update({component["key"]: cfg}) From 3106d66ce8dfe20b798b01ea4f6bdd9d1a2c5d9c Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Wed, 18 Dec 2024 08:16:27 +0000 Subject: [PATCH 11/18] less identation --- aioshelly/rpc_device/device.py | 45 ++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index a172033c..300810be 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -556,24 +556,27 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: for component in components.get("components", []): _key = component["key"].split(":") - if _key[0] == BLU_TRV_IDENTIFIER: - calls = [ - ("BluTrv.GetRemoteConfig", {"id": _key[1]}), - ("BluTrv.GetRemoteStatus", {"id": _key[1]}), - ] - results = await self.call_rpc_multiple(calls) - - cfg: dict[str, Any] = results[0]["config"]["trv:0"] - # addr, name and model_id must be added from Shelly.GetComponents call - _attrs = component.get("attrs") - cfg.update({"addr": component["config"]["addr"]}) - cfg.update({"name": component["config"]["name"]}) - cfg.update( - { - "model_id": BLU_TRV_MODEL_ID.get(_attrs.get("model_id")) - if _attrs - else None - } - ) - self._config.update({component["key"]: cfg}) - self._status.update({component["key"]: results[1]["status"]["trv:0"]}) + + if _key[0] != BLU_TRV_IDENTIFIER: + continue + + calls = [ + ("BluTrv.GetRemoteConfig", {"id": _key[1]}), + ("BluTrv.GetRemoteStatus", {"id": _key[1]}), + ] + results = await self.call_rpc_multiple(calls) + + cfg: dict[str, Any] = results[0]["config"]["trv:0"] + # addr, name and model_id must be added from Shelly.GetComponents call + _attrs = component.get("attrs") + cfg.update({"addr": component["config"]["addr"]}) + cfg.update({"name": component["config"]["name"]}) + cfg.update( + { + "model_id": BLU_TRV_MODEL_ID.get(_attrs.get("model_id")) + if _attrs + else None + } + ) + self._config.update({component["key"]: cfg}) + self._status.update({component["key"]: results[1]["status"]["trv:0"]}) From d0991e8df28c76630da6101bdcca45ada2a5d85a Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Thu, 19 Dec 2024 16:58:27 +0000 Subject: [PATCH 12/18] optimize based on latest firmware --- aioshelly/const.py | 7 +++++-- aioshelly/rpc_device/device.py | 7 +------ 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/aioshelly/const.py b/aioshelly/const.py index 29b48819..8f86f3ca 100644 --- a/aioshelly/const.py +++ b/aioshelly/const.py @@ -144,10 +144,13 @@ # Firmware 1.0.99 release date GEN3_MIN_FIRMWARE_DATE = 20231102 +# Firmware 1.5.x release date +# Temporary use beat release to allow BluTrv support +GEN3_GATEWAY_MIN_FIRMWARE_DATE = 20241219 + # Firmware 1.4.x release date GEN4_MIN_FIRMWARE_DATE = 20240902 - # Fallback for unknown devices MIN_FIRMWARE_DATES = { GEN1: GEN1_MIN_FIRMWARE_DATE, @@ -473,7 +476,7 @@ class ShellyDevice: MODEL_BLU_GATEWAY_GEN3: ShellyDevice( model="S3GW-1DBT001", name="Shelly BLU Gateway Gen3", - min_fw_date=GEN3_MIN_FIRMWARE_DATE, + min_fw_date=GEN3_GATEWAY_MIN_FIRMWARE_DATE, gen=GEN3, supported=True, ), diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index 300810be..688a3be9 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -568,15 +568,10 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: cfg: dict[str, Any] = results[0]["config"]["trv:0"] # addr, name and model_id must be added from Shelly.GetComponents call - _attrs = component.get("attrs") cfg.update({"addr": component["config"]["addr"]}) cfg.update({"name": component["config"]["name"]}) cfg.update( - { - "model_id": BLU_TRV_MODEL_ID.get(_attrs.get("model_id")) - if _attrs - else None - } + {"model_id": BLU_TRV_MODEL_ID.get(component["attrs"]["model_id"])} ) self._config.update({component["key"]: cfg}) self._status.update({component["key"]: results[1]["status"]["trv:0"]}) From 9dabf7160e6177715fbb1b2947010fcebb4595d4 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Thu, 19 Dec 2024 18:09:42 +0100 Subject: [PATCH 13/18] typo --- aioshelly/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aioshelly/const.py b/aioshelly/const.py index 8f86f3ca..ef2892ec 100644 --- a/aioshelly/const.py +++ b/aioshelly/const.py @@ -145,7 +145,7 @@ GEN3_MIN_FIRMWARE_DATE = 20231102 # Firmware 1.5.x release date -# Temporary use beat release to allow BluTrv support +# Temporary use beta release to allow BluTrv support GEN3_GATEWAY_MIN_FIRMWARE_DATE = 20241219 # Firmware 1.4.x release date From 6d4e1b72ecbf43e57b890729efd968e114b5e88a Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Fri, 20 Dec 2024 08:54:20 +0000 Subject: [PATCH 14/18] align data to content --- aioshelly/rpc_device/device.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index 688a3be9..711fe9ae 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -571,7 +571,7 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: cfg.update({"addr": component["config"]["addr"]}) cfg.update({"name": component["config"]["name"]}) cfg.update( - {"model_id": BLU_TRV_MODEL_ID.get(component["attrs"]["model_id"])} + {"local_name": BLU_TRV_MODEL_ID.get(component["attrs"]["model_id"])} ) self._config.update({component["key"]: cfg}) self._status.update({component["key"]: results[1]["status"]["trv:0"]}) From fee7b34ac62c56ea7582a88375008d2b8b8d1c42 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Fri, 20 Dec 2024 11:17:29 +0000 Subject: [PATCH 15/18] restore attrs not always available --- aioshelly/rpc_device/device.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index 711fe9ae..0507eae9 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -568,10 +568,15 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: cfg: dict[str, Any] = results[0]["config"]["trv:0"] # addr, name and model_id must be added from Shelly.GetComponents call + _attrs = component.get("attrs") cfg.update({"addr": component["config"]["addr"]}) cfg.update({"name": component["config"]["name"]}) cfg.update( - {"local_name": BLU_TRV_MODEL_ID.get(component["attrs"]["model_id"])} + { + "local_name": BLU_TRV_MODEL_ID.get(_attrs.get("model_id")) + if _attrs + else None + } ) self._config.update({component["key"]: cfg}) self._status.update({component["key"]: results[1]["status"]["trv:0"]}) From ba555525e0bb743cb4e20ebad9a3e1c37bb0968f Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Fri, 20 Dec 2024 14:26:33 +0000 Subject: [PATCH 16/18] apply review comment --- aioshelly/rpc_device/device.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/aioshelly/rpc_device/device.py b/aioshelly/rpc_device/device.py index 0507eae9..c5c0aea4 100644 --- a/aioshelly/rpc_device/device.py +++ b/aioshelly/rpc_device/device.py @@ -568,15 +568,9 @@ async def _retrieve_blutrv_components(self, components: dict[str, Any]) -> None: cfg: dict[str, Any] = results[0]["config"]["trv:0"] # addr, name and model_id must be added from Shelly.GetComponents call - _attrs = component.get("attrs") + _attrs = component.get("attrs", {}) cfg.update({"addr": component["config"]["addr"]}) cfg.update({"name": component["config"]["name"]}) - cfg.update( - { - "local_name": BLU_TRV_MODEL_ID.get(_attrs.get("model_id")) - if _attrs - else None - } - ) + cfg.update({"local_name": BLU_TRV_MODEL_ID.get(_attrs.get("model_id"))}) self._config.update({component["key"]: cfg}) self._status.update({component["key"]: results[1]["status"]["trv:0"]}) From 0323577a120c9b464beb6acc2e00203ea214ab2b Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Fri, 20 Dec 2024 14:45:26 +0000 Subject: [PATCH 17/18] add model name --- aioshelly/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/aioshelly/const.py b/aioshelly/const.py index ef2892ec..362916cf 100644 --- a/aioshelly/const.py +++ b/aioshelly/const.py @@ -934,6 +934,7 @@ class ShellyDevice: BLU_TRV_IDENTIFIER = "blutrv" BLU_TRV_MODEL_ID = {8: "SBTR-001AEU"} +BLU_TRV_MODEL_NAME = {"SBTR-001AEU": "Shelly BLU TRV"} class UndefinedType(Enum): From 24bcbe65b3dc54adc970cc0d02a3b305ecc606b7 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Thu, 9 Jan 2025 16:00:47 +0000 Subject: [PATCH 18/18] update release date for gw gen2 fw --- aioshelly/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aioshelly/const.py b/aioshelly/const.py index 362916cf..539317dc 100644 --- a/aioshelly/const.py +++ b/aioshelly/const.py @@ -146,7 +146,7 @@ # Firmware 1.5.x release date # Temporary use beta release to allow BluTrv support -GEN3_GATEWAY_MIN_FIRMWARE_DATE = 20241219 +GEN3_GATEWAY_MIN_FIRMWARE_DATE = 20250109 # Firmware 1.4.x release date GEN4_MIN_FIRMWARE_DATE = 20240902