From df02262bb6c9b198c7502b82cd852c2ddac5c5fc Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 16 Sep 2025 15:32:08 +0200 Subject: [PATCH 1/7] Don't store Circle_Plus in nodetypes cache --- plugwise_usb/network/cache.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise_usb/network/cache.py b/plugwise_usb/network/cache.py index 06e672ccb..0b963ad55 100644 --- a/plugwise_usb/network/cache.py +++ b/plugwise_usb/network/cache.py @@ -27,7 +27,7 @@ def nodetypes(self) -> dict[str, NodeType]: async def save_cache(self) -> None: """Save the node information to file.""" cache_data_to_save: dict[str, str] = { - mac: node_type.name for mac, node_type in self._nodetypes.items() + mac: node_type.name for mac, node_type in self._nodetypes.items() if node_type.value > 1 } _LOGGER.debug("Save NodeTypes for %s Nodes", len(cache_data_to_save)) await self.write_cache( From 0ce3abeb51d0f29106f5c947c191d8ec8e9f0bd7 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 16 Sep 2025 15:41:04 +0200 Subject: [PATCH 2/7] Adapt testing --- tests/test_usb.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/test_usb.py b/tests/test_usb.py index fae43238c..df5d8e78f 100644 --- a/tests/test_usb.py +++ b/tests/test_usb.py @@ -1704,7 +1704,7 @@ async def makedirs(cache_dir: str, exist_ok: bool) -> None: await pw_nw_cache.initialize_cache() # test with invalid data mock_read_data = [ - "0123456789ABCDEF;NodeType.CIRCLE_PLUS", + "0123456789ABCDEF;NodeType.CIRCLE", "FEDCBA9876543210;None", ] file_chunks_iter = iter(mock_read_data) @@ -1712,13 +1712,13 @@ async def makedirs(cache_dir: str, exist_ok: bool) -> None: with patch("aiofiles.threadpool.sync_open", return_value=mock_file_stream): await pw_nw_cache.restore_cache() assert pw_nw_cache.nodetypes == { - "0123456789ABCDEF": pw_api.NodeType.CIRCLE_PLUS, + "0123456789ABCDEF": pw_api.NodeType.CIRCLE, } # test with valid data mock_read_data = [ - "0123456789ABCDEF;CIRCLE_PLUS", - "FEDCBA9876543210;NodeType.CIRCLE", + "0123456789ABCDEF;NodeType.CIRCLE", + "FEDCBA9876543210;CIRCLE", "1298347650AFBECD;6", ] file_chunks_iter = iter(mock_read_data) @@ -1726,7 +1726,7 @@ async def makedirs(cache_dir: str, exist_ok: bool) -> None: with patch("aiofiles.threadpool.sync_open", return_value=mock_file_stream): await pw_nw_cache.restore_cache() assert pw_nw_cache.nodetypes == { - "0123456789ABCDEF": pw_api.NodeType.CIRCLE_PLUS, + "0123456789ABCDEF": pw_api.NodeType.CIRCLE, "FEDCBA9876543210": pw_api.NodeType.CIRCLE, "1298347650AFBECD": pw_api.NodeType.SCAN, } @@ -1738,14 +1738,14 @@ async def makedirs(cache_dir: str, exist_ok: bool) -> None: ) mock_file_stream.writelines.assert_called_with( [ - "0123456789ABCDEF;CIRCLE_PLUS\n", + "0123456789ABCDEF;CIRCLE\n", "FEDCBA9876543210;CIRCLE\n", "1298347650AFBECD;SCAN\n", "1234ABCD4321FEDC;STEALTH\n", ] ) assert pw_nw_cache.nodetypes == { - "0123456789ABCDEF": pw_api.NodeType.CIRCLE_PLUS, + "0123456789ABCDEF": pw_api.NodeType.CIRCLE, "FEDCBA9876543210": pw_api.NodeType.CIRCLE, "1298347650AFBECD": pw_api.NodeType.SCAN, "1234ABCD4321FEDC": pw_api.NodeType.STEALTH, From 4692c6a1bb67560e944183a178d47b009837d5dd Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 16 Sep 2025 15:53:37 +0200 Subject: [PATCH 3/7] Break long line --- plugwise_usb/network/cache.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugwise_usb/network/cache.py b/plugwise_usb/network/cache.py index 0b963ad55..a5fcecff2 100644 --- a/plugwise_usb/network/cache.py +++ b/plugwise_usb/network/cache.py @@ -27,7 +27,9 @@ def nodetypes(self) -> dict[str, NodeType]: async def save_cache(self) -> None: """Save the node information to file.""" cache_data_to_save: dict[str, str] = { - mac: node_type.name for mac, node_type in self._nodetypes.items() if node_type.value > 1 + mac: node_type.name + for mac, node_type in self._nodetypes.items() + if node_type.value > 1 } _LOGGER.debug("Save NodeTypes for %s Nodes", len(cache_data_to_save)) await self.write_cache( From ab945ec5c1f4060bc458785e6cb07f1a761e6527 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 16 Sep 2025 16:01:59 +0200 Subject: [PATCH 4/7] Update CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 68744d125..04a8aa729 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - PR [337](https://github.com/plugwise/python-plugwise-usb/pull/337): Improve node removal, remove and reset the node as executed by Source, and remove the cache-file. - PR [342](https://github.com/plugwise/python-plugwise-usb/pull/342): Improve node_type chaching. - PR [343](https://github.com/plugwise/python-plugwise-usb/pull/343): Improve writing of cache-files. +- PR [344](https://github.com/plugwise/python-plugwise-usb/pull/344): Don't store plus-device in nodetypes cache ## 0.46.0 - 2025-09-12 From af6cd0eb744da8ae5418dd806b257354bdf0c5ff Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 16 Sep 2025 16:03:11 +0200 Subject: [PATCH 5/7] Revert "Adapt testing" This reverts commit 0ce3abeb51d0f29106f5c947c191d8ec8e9f0bd7. --- tests/test_usb.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/test_usb.py b/tests/test_usb.py index df5d8e78f..fae43238c 100644 --- a/tests/test_usb.py +++ b/tests/test_usb.py @@ -1704,7 +1704,7 @@ async def makedirs(cache_dir: str, exist_ok: bool) -> None: await pw_nw_cache.initialize_cache() # test with invalid data mock_read_data = [ - "0123456789ABCDEF;NodeType.CIRCLE", + "0123456789ABCDEF;NodeType.CIRCLE_PLUS", "FEDCBA9876543210;None", ] file_chunks_iter = iter(mock_read_data) @@ -1712,13 +1712,13 @@ async def makedirs(cache_dir: str, exist_ok: bool) -> None: with patch("aiofiles.threadpool.sync_open", return_value=mock_file_stream): await pw_nw_cache.restore_cache() assert pw_nw_cache.nodetypes == { - "0123456789ABCDEF": pw_api.NodeType.CIRCLE, + "0123456789ABCDEF": pw_api.NodeType.CIRCLE_PLUS, } # test with valid data mock_read_data = [ - "0123456789ABCDEF;NodeType.CIRCLE", - "FEDCBA9876543210;CIRCLE", + "0123456789ABCDEF;CIRCLE_PLUS", + "FEDCBA9876543210;NodeType.CIRCLE", "1298347650AFBECD;6", ] file_chunks_iter = iter(mock_read_data) @@ -1726,7 +1726,7 @@ async def makedirs(cache_dir: str, exist_ok: bool) -> None: with patch("aiofiles.threadpool.sync_open", return_value=mock_file_stream): await pw_nw_cache.restore_cache() assert pw_nw_cache.nodetypes == { - "0123456789ABCDEF": pw_api.NodeType.CIRCLE, + "0123456789ABCDEF": pw_api.NodeType.CIRCLE_PLUS, "FEDCBA9876543210": pw_api.NodeType.CIRCLE, "1298347650AFBECD": pw_api.NodeType.SCAN, } @@ -1738,14 +1738,14 @@ async def makedirs(cache_dir: str, exist_ok: bool) -> None: ) mock_file_stream.writelines.assert_called_with( [ - "0123456789ABCDEF;CIRCLE\n", + "0123456789ABCDEF;CIRCLE_PLUS\n", "FEDCBA9876543210;CIRCLE\n", "1298347650AFBECD;SCAN\n", "1234ABCD4321FEDC;STEALTH\n", ] ) assert pw_nw_cache.nodetypes == { - "0123456789ABCDEF": pw_api.NodeType.CIRCLE, + "0123456789ABCDEF": pw_api.NodeType.CIRCLE_PLUS, "FEDCBA9876543210": pw_api.NodeType.CIRCLE, "1298347650AFBECD": pw_api.NodeType.SCAN, "1234ABCD4321FEDC": pw_api.NodeType.STEALTH, From aad2fb98922d8fe126ff9bdc26ec67d0d2ef0f01 Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 16 Sep 2025 16:04:55 +0200 Subject: [PATCH 6/7] Better test adaptation --- tests/test_usb.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/tests/test_usb.py b/tests/test_usb.py index fae43238c..59ce895f3 100644 --- a/tests/test_usb.py +++ b/tests/test_usb.py @@ -1711,9 +1711,7 @@ async def makedirs(cache_dir: str, exist_ok: bool) -> None: mock_file_stream = MagicMock(readlines=lambda *args, **kwargs: file_chunks_iter) with patch("aiofiles.threadpool.sync_open", return_value=mock_file_stream): await pw_nw_cache.restore_cache() - assert pw_nw_cache.nodetypes == { - "0123456789ABCDEF": pw_api.NodeType.CIRCLE_PLUS, - } + assert pw_nw_cache.nodetypes == {} # test with valid data mock_read_data = [ @@ -1726,7 +1724,6 @@ async def makedirs(cache_dir: str, exist_ok: bool) -> None: with patch("aiofiles.threadpool.sync_open", return_value=mock_file_stream): await pw_nw_cache.restore_cache() assert pw_nw_cache.nodetypes == { - "0123456789ABCDEF": pw_api.NodeType.CIRCLE_PLUS, "FEDCBA9876543210": pw_api.NodeType.CIRCLE, "1298347650AFBECD": pw_api.NodeType.SCAN, } @@ -1738,14 +1735,12 @@ async def makedirs(cache_dir: str, exist_ok: bool) -> None: ) mock_file_stream.writelines.assert_called_with( [ - "0123456789ABCDEF;CIRCLE_PLUS\n", "FEDCBA9876543210;CIRCLE\n", "1298347650AFBECD;SCAN\n", "1234ABCD4321FEDC;STEALTH\n", ] ) assert pw_nw_cache.nodetypes == { - "0123456789ABCDEF": pw_api.NodeType.CIRCLE_PLUS, "FEDCBA9876543210": pw_api.NodeType.CIRCLE, "1298347650AFBECD": pw_api.NodeType.SCAN, "1234ABCD4321FEDC": pw_api.NodeType.STEALTH, From f86812c5cd18cd50e615bb2a1633dc29f39828bb Mon Sep 17 00:00:00 2001 From: Bouwe Westerdijk Date: Tue, 16 Sep 2025 16:12:05 +0200 Subject: [PATCH 7/7] Also block plus-device when reading from cache --- plugwise_usb/network/cache.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise_usb/network/cache.py b/plugwise_usb/network/cache.py index a5fcecff2..ade46b712 100644 --- a/plugwise_usb/network/cache.py +++ b/plugwise_usb/network/cache.py @@ -57,7 +57,7 @@ async def restore_cache(self) -> None: except ValueError: node_type = None - if node_type is None: + if node_type in (None, NodeType.CIRCLE_PLUS): _LOGGER.warning( "Invalid NodeType in cache for mac %s: %s", mac, node_value )