From 54babda8ea180aaffea4502ed699feedacfcdbf3 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 10 Feb 2025 20:20:26 +0100 Subject: [PATCH 01/18] Provide decoded version-number too --- plugwise_usb/helpers/util.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plugwise_usb/helpers/util.py b/plugwise_usb/helpers/util.py index c8529d65c..13c7a9fd4 100644 --- a/plugwise_usb/helpers/util.py +++ b/plugwise_usb/helpers/util.py @@ -27,12 +27,14 @@ def version_to_model(version: str | None) -> str: return "Unknown" model = HW_MODELS.get(version) if model is None: - model = HW_MODELS.get(version[4:10]) + version = version[4:10] + model = HW_MODELS.get(version) if model is None: # Try again with reversed order - model = HW_MODELS.get(version[-2:] + version[-4:-2] + version[-6:-4]) + version = version[-2:] + version[-4:-2] + version[-6:-4] + model = HW_MODELS.get(version) - return model if model is not None else "Unknown" + return (version, model) if model is not None else (None, "Unknown") # octals (and hex) type as int according to From 0ad8fed26e297a1d3eb4e93d7d6c7eaae62646bd Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 10 Feb 2025 20:30:21 +0100 Subject: [PATCH 02/18] Provide decode version-number as hardware/version --- plugwise_usb/nodes/node.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugwise_usb/nodes/node.py b/plugwise_usb/nodes/node.py index 75ec5dd64..982f64bfa 100644 --- a/plugwise_usb/nodes/node.py +++ b/plugwise_usb/nodes/node.py @@ -499,15 +499,15 @@ async def update_node_details( complete = False else: if self._node_info.version != hardware: - self._node_info.version = hardware # Generate modelname based on hardware version - model_info = version_to_model(hardware).split(" ") + hardware, model_info = version_to_model(hardware).split(" ") self._node_info.model = model_info[0] + self._node_info.version = hardware if self._node_info.model == "Unknown": _LOGGER.warning( "Failed to detect hardware model for %s based on '%s'", self.mac, - hardware, + version, ) if len(model_info) > 1: self._node_info.model_type = " ".join(model_info[1:]) From b638b31e92fea86d8b46eceadc453a3dfc8f9069 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Mon, 10 Feb 2025 20:33:48 +0100 Subject: [PATCH 03/18] Improve --- plugwise_usb/nodes/node.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/plugwise_usb/nodes/node.py b/plugwise_usb/nodes/node.py index 982f64bfa..d75177991 100644 --- a/plugwise_usb/nodes/node.py +++ b/plugwise_usb/nodes/node.py @@ -500,14 +500,15 @@ async def update_node_details( else: if self._node_info.version != hardware: # Generate modelname based on hardware version - hardware, model_info = version_to_model(hardware).split(" ") + hardware, model_info = version_to_model(hardware) + model_info = model_info.split(" ") self._node_info.model = model_info[0] self._node_info.version = hardware if self._node_info.model == "Unknown": _LOGGER.warning( "Failed to detect hardware model for %s based on '%s'", self.mac, - version, + hardware, ) if len(model_info) > 1: self._node_info.model_type = " ".join(model_info[1:]) From 9d81b763937d882b8949c159aff3c11981e4e5df Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 11 Feb 2025 07:57:58 +0100 Subject: [PATCH 04/18] Fix Scan hardware version --- tests/stick_test_data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/stick_test_data.py b/tests/stick_test_data.py index ac32b151a..7726f1b6a 100644 --- a/tests/stick_test_data.py +++ b/tests/stick_test_data.py @@ -654,7 +654,7 @@ + b"00000000" # log address + b"00" # relay + b"01" # hz - + b"000000070008" # hw_ver + + b"000000080007" # hw_ver + b"4E084590" # fw_ver + b"06", # node_type (Scan) ), From 28daa08cef09af00c11f243693d0a587d9654956 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 11 Feb 2025 08:08:20 +0100 Subject: [PATCH 05/18] Correct hardware id's --- tests/stick_test_data.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/stick_test_data.py b/tests/stick_test_data.py index 7726f1b6a..2d98689c4 100644 --- a/tests/stick_test_data.py +++ b/tests/stick_test_data.py @@ -47,7 +47,7 @@ + b"00044280" # log address 20 + b"01" # relay + b"01" # hz - + b"000000730007" # hw_ver + + b"000073000700" # hw_ver + b"4E0843A9" # fw_ver + b"01", # node_type (Circle+) ), @@ -445,7 +445,7 @@ + b"000442C0" # log address 44000 + b"01" # relay + b"01" # hz - + b"000000070140" # hw_ver + + b"000007014000" # hw_ver + b"4E0844C2" # fw_ver + b"02", # node_type (Circle) ), @@ -458,7 +458,7 @@ + b"00044300" # log address + b"01" # relay + b"01" # hz - + b"000000090011" # hw_ver + + b"000009001100" # hw_ver + b"4EB28FD5" # fw_ver + b"09", # node_type (Stealth - Legrand) ), @@ -495,7 +495,7 @@ + b"00044340" # log address + b"01" # relay + b"01" # hz - + b"000000070073" # hw_ver + + b"000007007300" # hw_ver + b"4DCCDB7B" # fw_ver + b"02", # node_type (Circle) ), @@ -508,7 +508,7 @@ + b"000443C0" # log address + b"01" # relay + b"01" # hz - + b"000000070073" # hw_ver + + b"000007007300" # hw_ver + b"4E0844C2" # fw_ver + b"02", # node_type (Circle) ), @@ -654,7 +654,7 @@ + b"00000000" # log address + b"00" # relay + b"01" # hz - + b"000000080007" # hw_ver + + b"000008000700" # hw_ver + b"4E084590" # fw_ver + b"06", # node_type (Scan) ), From f0fc1881f7a39cc4571f534ab02089f94bfa5e09 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 11 Feb 2025 17:28:36 +0100 Subject: [PATCH 06/18] Fix version asserts --- tests/test_usb.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_usb.py b/tests/test_usb.py index 17002b9d1..acef8a0d8 100644 --- a/tests/test_usb.py +++ b/tests/test_usb.py @@ -586,7 +586,7 @@ async def test_stick_node_discovered_subscription( assert stick.nodes["5555555555555555"].node_info.firmware == dt( 2011, 6, 27, 8, 55, 44, tzinfo=UTC ) - assert stick.nodes["5555555555555555"].node_info.version == "000000070008" + assert stick.nodes["5555555555555555"].node_info.version == "080007" assert stick.nodes["5555555555555555"].node_info.model == "Scan" assert stick.nodes["5555555555555555"].node_info.model_type == "" assert stick.nodes["5555555555555555"].available @@ -2397,7 +2397,7 @@ async def test_node_discovery_and_load( assert stick.nodes["0098765432101234"].node_info.firmware == dt( 2011, 6, 27, 8, 47, 37, tzinfo=UTC ) - assert stick.nodes["0098765432101234"].node_info.version == "000000730007" + assert stick.nodes["0098765432101234"].node_info.version == "070073" assert stick.nodes["0098765432101234"].node_info.model == "Circle+" assert stick.nodes["0098765432101234"].node_info.model_type == "type F" assert stick.nodes["0098765432101234"].node_info.name == "Circle+ 01234" @@ -2482,7 +2482,7 @@ async def test_node_discovery_and_load( ) == get_state_timestamp ) - assert state[pw_api.NodeFeature.INFO].version == "000000730007" + assert state[pw_api.NodeFeature.INFO].version == "070073" assert state[pw_api.NodeFeature.RELAY].state @@ -2495,7 +2495,7 @@ async def test_node_discovery_and_load( assert state[pw_api.NodeFeature.INFO].mac == "1111111111111111" assert state[pw_api.NodeFeature.INFO].zigbee_address == 0 assert not state[pw_api.NodeFeature.INFO].is_battery_powered - assert state[pw_api.NodeFeature.INFO].version == "000000070140" + assert state[pw_api.NodeFeature.INFO].version == "070140" assert state[pw_api.NodeFeature.INFO].node_type == pw_api.NodeType.CIRCLE assert ( state[pw_api.NodeFeature.INFO].timestamp.replace( @@ -2529,7 +2529,7 @@ async def test_node_discovery_and_load( assert stick.nodes["5555555555555555"].node_info.firmware == dt( 2011, 6, 27, 8, 55, 44, tzinfo=UTC ) - assert stick.nodes["5555555555555555"].node_info.version == "000000070008" + assert stick.nodes["5555555555555555"].node_info.version == "080007" assert stick.nodes["5555555555555555"].node_info.model == "Scan" assert stick.nodes["5555555555555555"].node_info.model_type == "" assert stick.nodes["5555555555555555"].available @@ -2594,7 +2594,7 @@ async def test_node_discovery_and_load( assert stick.nodes["8888888888888888"].node_info.firmware == dt( 2011, 6, 27, 9, 4, 10, tzinfo=UTC ) - assert stick.nodes["8888888888888888"].node_info.version == "000007005100" + assert stick.nodes["8888888888888888"].node_info.version == "070051" assert stick.nodes["8888888888888888"].node_info.model == "Switch" assert stick.nodes["8888888888888888"].node_info.model_type == "" assert stick.nodes["8888888888888888"].available From a52d60735f319d5e055c8d14d10301745a501804 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 11 Feb 2025 17:43:43 +0100 Subject: [PATCH 07/18] Keep input version intact --- plugwise_usb/helpers/util.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/plugwise_usb/helpers/util.py b/plugwise_usb/helpers/util.py index 13c7a9fd4..342438359 100644 --- a/plugwise_usb/helpers/util.py +++ b/plugwise_usb/helpers/util.py @@ -24,17 +24,18 @@ def validate_mac(mac: str) -> bool: def version_to_model(version: str | None) -> str: """Translate hardware_version to device type.""" if version is None: - return "Unknown" - model = HW_MODELS.get(version) + return (None, "Unknown") + local_version = version + model = HW_MODELS.get(local_version) if model is None: - version = version[4:10] - model = HW_MODELS.get(version) + local_version = version[4:10] + model = HW_MODELS.get(local_version) if model is None: # Try again with reversed order - version = version[-2:] + version[-4:-2] + version[-6:-4] - model = HW_MODELS.get(version) + local_version = version[-2:] + version[-4:-2] + version[-6:-4] + model = HW_MODELS.get(local_version) - return (version, model) if model is not None else (None, "Unknown") + return (local_version, model) if model is not None else (None, "Unknown") # octals (and hex) type as int according to From 289896f1d5e3430c218cbea7d8bb6c346ba2cabb Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 11 Feb 2025 17:51:00 +0100 Subject: [PATCH 08/18] Fix typing --- plugwise_usb/helpers/util.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugwise_usb/helpers/util.py b/plugwise_usb/helpers/util.py index 342438359..8e85878fc 100644 --- a/plugwise_usb/helpers/util.py +++ b/plugwise_usb/helpers/util.py @@ -21,12 +21,12 @@ def validate_mac(mac: str) -> bool: return True -def version_to_model(version: str | None) -> str: +def version_to_model(version: str | None) -> tuple[str|None, str]: """Translate hardware_version to device type.""" if version is None: return (None, "Unknown") local_version = version - model = HW_MODELS.get(local_version) + model = HW_MODELS.get(version) if model is None: local_version = version[4:10] model = HW_MODELS.get(local_version) From b560cb9553df8a6718de5011af9cafbb91c910d0 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 11 Feb 2025 20:17:39 +0100 Subject: [PATCH 09/18] Fix Circle+ hardware id --- tests/stick_test_data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/stick_test_data.py b/tests/stick_test_data.py index 2d98689c4..be98c323c 100644 --- a/tests/stick_test_data.py +++ b/tests/stick_test_data.py @@ -47,7 +47,7 @@ + b"00044280" # log address 20 + b"01" # relay + b"01" # hz - + b"000073000700" # hw_ver + + b"000000730007" # hw_ver + b"4E0843A9" # fw_ver + b"01", # node_type (Circle+) ), From 9ba7808a757b3b4b272b24531e7b56739b0b4abb Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Wed, 12 Feb 2025 11:50:37 +0100 Subject: [PATCH 10/18] Model_type should be None when not existing --- plugwise_usb/nodes/node.py | 3 +-- tests/test_usb.py | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/plugwise_usb/nodes/node.py b/plugwise_usb/nodes/node.py index d75177991..dfeb0fe31 100644 --- a/plugwise_usb/nodes/node.py +++ b/plugwise_usb/nodes/node.py @@ -510,10 +510,9 @@ async def update_node_details( self.mac, hardware, ) + self._node_info.model_type = None if len(model_info) > 1: self._node_info.model_type = " ".join(model_info[1:]) - else: - self._node_info.model_type = "" if self._node_info.model is not None: self._node_info.name = f"{model_info[0]} {self._node_info.mac[-5:]}" self._set_cache(CACHE_HARDWARE, hardware) diff --git a/tests/test_usb.py b/tests/test_usb.py index acef8a0d8..7a10c3e87 100644 --- a/tests/test_usb.py +++ b/tests/test_usb.py @@ -588,7 +588,7 @@ async def test_stick_node_discovered_subscription( ) assert stick.nodes["5555555555555555"].node_info.version == "080007" assert stick.nodes["5555555555555555"].node_info.model == "Scan" - assert stick.nodes["5555555555555555"].node_info.model_type == "" + assert stick.nodes["5555555555555555"].node_info.model_type == None assert stick.nodes["5555555555555555"].available assert stick.nodes["5555555555555555"].node_info.is_battery_powered assert sorted(stick.nodes["5555555555555555"].features) == sorted( @@ -2531,7 +2531,7 @@ async def test_node_discovery_and_load( ) assert stick.nodes["5555555555555555"].node_info.version == "080007" assert stick.nodes["5555555555555555"].node_info.model == "Scan" - assert stick.nodes["5555555555555555"].node_info.model_type == "" + assert stick.nodes["5555555555555555"].node_info.model_type == None assert stick.nodes["5555555555555555"].available assert stick.nodes["5555555555555555"].node_info.is_battery_powered assert sorted(stick.nodes["5555555555555555"].features) == sorted( @@ -2596,7 +2596,7 @@ async def test_node_discovery_and_load( ) assert stick.nodes["8888888888888888"].node_info.version == "070051" assert stick.nodes["8888888888888888"].node_info.model == "Switch" - assert stick.nodes["8888888888888888"].node_info.model_type == "" + assert stick.nodes["8888888888888888"].node_info.model_type == None assert stick.nodes["8888888888888888"].available assert stick.nodes["8888888888888888"].node_info.is_battery_powered assert sorted(stick.nodes["8888888888888888"].features) == sorted( From 19d2a60c5697e29bdd27c7a5774c88220ed40389 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Wed, 12 Feb 2025 13:35:15 +0100 Subject: [PATCH 11/18] Reorder hardware devices in constants --- plugwise_usb/constants.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugwise_usb/constants.py b/plugwise_usb/constants.py index 47aab62e4..9068abc4d 100644 --- a/plugwise_usb/constants.py +++ b/plugwise_usb/constants.py @@ -65,8 +65,12 @@ "090088": "Circle+ type E", "070073": "Circle+ type F", "090048": "Circle+ type G", - "120049": "Stealth M+", + "090011": "Stealth", + "001200": "Stealth", "090188": "Stealth+", + "120048": "Stealth M", + "120049": "Stealth M+", + "120029": "Stealth Legrand", "120040": "Circle Legrand type E", "120001": "Circle Legrand type F", "090079": "Circle type B", @@ -74,10 +78,6 @@ "070140": "Circle type F", "090093": "Circle type G", "100025": "Circle", - "120048": "Stealth M", - "120029": "Stealth Legrand", - "090011": "Stealth", - "001200": "Stealth", "080007": "Scan", "110028": "Scan Legrand", "070030": "Sense", From faa1aae00c2f5e0917e812ed7797e6f666c3e492 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Wed, 12 Feb 2025 13:41:52 +0100 Subject: [PATCH 12/18] Handle Stealth M+ model correctly --- plugwise_usb/nodes/node.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugwise_usb/nodes/node.py b/plugwise_usb/nodes/node.py index dfeb0fe31..2f3517ae1 100644 --- a/plugwise_usb/nodes/node.py +++ b/plugwise_usb/nodes/node.py @@ -503,6 +503,12 @@ async def update_node_details( hardware, model_info = version_to_model(hardware) model_info = model_info.split(" ") self._node_info.model = model_info[0] + # Handle Stealth M+ correctly + if model_info[1] == "M+": + self._node_info.model = model_info[0:1] + model_info[0] = model_info[0:1] + model_info.pop[1] + self._node_info.version = hardware if self._node_info.model == "Unknown": _LOGGER.warning( From 48d875a7183c251bfc39bc5313c5ce9aa415ed34 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Wed, 12 Feb 2025 13:52:16 +0100 Subject: [PATCH 13/18] Add + with space --- plugwise_usb/constants.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/plugwise_usb/constants.py b/plugwise_usb/constants.py index 9068abc4d..df8442103 100644 --- a/plugwise_usb/constants.py +++ b/plugwise_usb/constants.py @@ -58,26 +58,26 @@ "038500": "Stick", "070085": "Stick", "120002": "Stick Legrand", - "120041": "Circle+ Legrand type E", - "120000": "Circle+ Legrand type F", - "090000": "Circle+ type B", - "090007": "Circle+ type B", - "090088": "Circle+ type E", - "070073": "Circle+ type F", - "090048": "Circle+ type G", - "090011": "Stealth", - "001200": "Stealth", - "090188": "Stealth+", - "120048": "Stealth M", + "120041": "Circle + Legrand type E", + "120000": "Circle + Legrand type F", + "090000": "Circle + type B", + "090007": "Circle + type B", + "090088": "Circle + type E", + "070073": "Circle + type F", + "090048": "Circle + type G", + "090188": "Stealth +", "120049": "Stealth M+", "120029": "Stealth Legrand", + "100025": "Circle", "120040": "Circle Legrand type E", "120001": "Circle Legrand type F", "090079": "Circle type B", "090087": "Circle type E", "070140": "Circle type F", "090093": "Circle type G", - "100025": "Circle", + "090011": "Stealth", + "001200": "Stealth", + "120048": "Stealth M", "080007": "Scan", "110028": "Scan Legrand", "070030": "Sense", From e45fd227079458ddd0040f224b395f1a4d9bc23a Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Wed, 12 Feb 2025 13:54:48 +0100 Subject: [PATCH 14/18] Handle all + models correctly --- plugwise_usb/nodes/node.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plugwise_usb/nodes/node.py b/plugwise_usb/nodes/node.py index 2f3517ae1..a512a101d 100644 --- a/plugwise_usb/nodes/node.py +++ b/plugwise_usb/nodes/node.py @@ -503,10 +503,9 @@ async def update_node_details( hardware, model_info = version_to_model(hardware) model_info = model_info.split(" ") self._node_info.model = model_info[0] - # Handle Stealth M+ correctly - if model_info[1] == "M+": - self._node_info.model = model_info[0:1] - model_info[0] = model_info[0:1] + # Handle + devices + if "+" in model_info[1]: + self._node_info.model = model_info[0] = model_info[0:1] model_info.pop[1] self._node_info.version = hardware From 5ebd8c5d7fdcaa41dc059dac8e24ab30661fc1f1 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Wed, 12 Feb 2025 13:56:19 +0100 Subject: [PATCH 15/18] Adapt test-asserts --- tests/test_usb.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_usb.py b/tests/test_usb.py index 7a10c3e87..bfd4ec430 100644 --- a/tests/test_usb.py +++ b/tests/test_usb.py @@ -1466,7 +1466,7 @@ async def test_creating_request_messages(self) -> None: @pytest.mark.asyncio async def test_stick_network_down(self, monkeypatch: pytest.MonkeyPatch) -> None: - """Testing timeout circle+ discovery.""" + """Testing timeout Circle + discovery.""" mock_serial = MockSerial( { b"\x05\x05\x03\x03000AB43C\r\n": ( @@ -2393,14 +2393,14 @@ async def test_node_discovery_and_load( assert len(stick.nodes) == 6 assert stick.nodes["0098765432101234"].is_loaded - assert stick.nodes["0098765432101234"].name == "Circle+ 01234" + assert stick.nodes["0098765432101234"].name == "Circle + 01234" assert stick.nodes["0098765432101234"].node_info.firmware == dt( 2011, 6, 27, 8, 47, 37, tzinfo=UTC ) assert stick.nodes["0098765432101234"].node_info.version == "070073" - assert stick.nodes["0098765432101234"].node_info.model == "Circle+" + assert stick.nodes["0098765432101234"].node_info.model == "Circle +" assert stick.nodes["0098765432101234"].node_info.model_type == "type F" - assert stick.nodes["0098765432101234"].node_info.name == "Circle+ 01234" + assert stick.nodes["0098765432101234"].node_info.name == "Circle + 01234" assert stick.nodes["0098765432101234"].available assert not stick.nodes["0098765432101234"].node_info.is_battery_powered assert not stick.nodes["0098765432101234"].is_battery_powered @@ -2472,8 +2472,8 @@ async def test_node_discovery_and_load( assert state[pw_api.NodeFeature.INFO].firmware == dt( 2011, 6, 27, 8, 47, 37, tzinfo=UTC ) - assert state[pw_api.NodeFeature.INFO].name == "Circle+ 01234" - assert state[pw_api.NodeFeature.INFO].model == "Circle+" + assert state[pw_api.NodeFeature.INFO].name == "Circle + 01234" + assert state[pw_api.NodeFeature.INFO].model == "Circle +" assert state[pw_api.NodeFeature.INFO].model_type == "type F" assert state[pw_api.NodeFeature.INFO].node_type == pw_api.NodeType.CIRCLE_PLUS assert ( From 105cadecbf1f9a4afaf044918793ba93a7fba92f Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Wed, 12 Feb 2025 13:59:56 +0100 Subject: [PATCH 16/18] Fix --- plugwise_usb/nodes/node.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise_usb/nodes/node.py b/plugwise_usb/nodes/node.py index a512a101d..0d554662a 100644 --- a/plugwise_usb/nodes/node.py +++ b/plugwise_usb/nodes/node.py @@ -506,7 +506,7 @@ async def update_node_details( # Handle + devices if "+" in model_info[1]: self._node_info.model = model_info[0] = model_info[0:1] - model_info.pop[1] + model_info.pop(1) self._node_info.version = hardware if self._node_info.model == "Unknown": From 63627b7962ec33e3e8393ca9a21c1aa5539a383d Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Wed, 12 Feb 2025 14:06:34 +0100 Subject: [PATCH 17/18] Improve guarding --- plugwise_usb/nodes/node.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise_usb/nodes/node.py b/plugwise_usb/nodes/node.py index 0d554662a..b2430f77b 100644 --- a/plugwise_usb/nodes/node.py +++ b/plugwise_usb/nodes/node.py @@ -504,7 +504,7 @@ async def update_node_details( model_info = model_info.split(" ") self._node_info.model = model_info[0] # Handle + devices - if "+" in model_info[1]: + if len(model_info) > 1 and "+" in model_info[1]: self._node_info.model = model_info[0] = model_info[0:1] model_info.pop(1) From d56f2fe62c3e84b055eac38a0490476ff71f868f Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Wed, 12 Feb 2025 14:14:00 +0100 Subject: [PATCH 18/18] Fix combining two list items --- plugwise_usb/nodes/node.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugwise_usb/nodes/node.py b/plugwise_usb/nodes/node.py index b2430f77b..1f937b99c 100644 --- a/plugwise_usb/nodes/node.py +++ b/plugwise_usb/nodes/node.py @@ -505,7 +505,8 @@ async def update_node_details( self._node_info.model = model_info[0] # Handle + devices if len(model_info) > 1 and "+" in model_info[1]: - self._node_info.model = model_info[0] = model_info[0:1] + self._node_info.model = model_info[0] + " " + model_info[1] + model_info[0] = self._node_info.model model_info.pop(1) self._node_info.version = hardware