From 2924bc18b6bc5ee85477e2e2deb8ab64c4c24477 Mon Sep 17 00:00:00 2001 From: Marc Dirix Date: Fri, 5 Sep 2025 12:28:29 +0200 Subject: [PATCH 1/6] improve node_info_update/node_detail_update logic --- plugwise_usb/nodes/circle.py | 39 +++++++++++++++++------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/plugwise_usb/nodes/circle.py b/plugwise_usb/nodes/circle.py index 98e93fdc9..b05e3f646 100644 --- a/plugwise_usb/nodes/circle.py +++ b/plugwise_usb/nodes/circle.py @@ -1033,23 +1033,6 @@ async def node_info_update( return None await super().node_info_update(node_info) - await self._relay_update_state( - node_info.relay_state, timestamp=node_info.timestamp - ) - if self._current_log_address is not None and ( - self._current_log_address > node_info.current_logaddress_pointer - or self._current_log_address == 1 - ): - # Rollover of log address - _LOGGER.debug( - "Rollover log address from %s into %s for node %s", - self._current_log_address, - node_info.current_logaddress_pointer, - self._mac_in_str, - ) - - if self._current_log_address != node_info.current_logaddress_pointer: - self._current_log_address = node_info.current_logaddress_pointer return self._node_info @@ -1059,10 +1042,24 @@ async def update_node_details( ) -> bool: """Process new node info and return true if all fields are updated.""" if node_info.relay_state is not None: - self._relay_state = replace( - self._relay_state, - state=node_info.relay_state, - timestamp=node_info.timestamp, + await self._relay_update_state( + node_info.relay_state, timestamp=node_info.timestamp + ) + + if ( + node_info.current_logaddress_pointer is not None + and self._current_log_address is not None + and ( + self._current_log_address > node_info.current_logaddress_pointer + or self._current_log_address == 1 + ) + ): + # Rollover of log address + _LOGGER.debug( + "Rollover log address from %s into %s for node %s", + self._current_log_address, + node_info.current_logaddress_pointer, + self._mac_in_str, ) if node_info.current_logaddress_pointer is not None: From 9c0b4a6740f726755786507b8e9bd7ff2fb99c21 Mon Sep 17 00:00:00 2001 From: Marc Dirix Date: Fri, 5 Sep 2025 13:22:15 +0200 Subject: [PATCH 2/6] CR: fix language --- plugwise_usb/nodes/circle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise_usb/nodes/circle.py b/plugwise_usb/nodes/circle.py index b05e3f646..c6b95a0e6 100644 --- a/plugwise_usb/nodes/circle.py +++ b/plugwise_usb/nodes/circle.py @@ -1056,7 +1056,7 @@ async def update_node_details( ): # Rollover of log address _LOGGER.debug( - "Rollover log address from %s into %s for node %s", + "Rollover log address from %s to %s for node %s", self._current_log_address, node_info.current_logaddress_pointer, self._mac_in_str, From e9772f525eecf9ee8f6398eae63c0008e4a42a3a Mon Sep 17 00:00:00 2001 From: Marc Dirix Date: Fri, 5 Sep 2025 14:01:43 +0200 Subject: [PATCH 3/6] CR: recommendations implemented --- plugwise_usb/nodes/circle.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugwise_usb/nodes/circle.py b/plugwise_usb/nodes/circle.py index c6b95a0e6..4c113a510 100644 --- a/plugwise_usb/nodes/circle.py +++ b/plugwise_usb/nodes/circle.py @@ -1049,10 +1049,7 @@ async def update_node_details( if ( node_info.current_logaddress_pointer is not None and self._current_log_address is not None - and ( - self._current_log_address > node_info.current_logaddress_pointer - or self._current_log_address == 1 - ) + and self._current_log_address > node_info.current_logaddress_pointer ): # Rollover of log address _LOGGER.debug( @@ -1062,7 +1059,10 @@ async def update_node_details( self._mac_in_str, ) - if node_info.current_logaddress_pointer is not None: + if ( + node_info.current_logaddress_pointer is not None + and node_info.current_logaddress_pointer != self._current_log_address + ): self._current_log_address = node_info.current_logaddress_pointer return await super().update_node_details(node_info) From 38c7a049fb8c964b992bef0bcc617038dc5e8691 Mon Sep 17 00:00:00 2001 From: Marc Dirix Date: Fri, 5 Sep 2025 14:06:19 +0200 Subject: [PATCH 4/6] return None if node_info is None --- plugwise_usb/nodes/circle.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugwise_usb/nodes/circle.py b/plugwise_usb/nodes/circle.py index 4c113a510..6190ee89e 100644 --- a/plugwise_usb/nodes/circle.py +++ b/plugwise_usb/nodes/circle.py @@ -1041,6 +1041,9 @@ async def update_node_details( self, node_info: NodeInfoResponse | None = None ) -> bool: """Process new node info and return true if all fields are updated.""" + if node_info is None: + return False + if node_info.relay_state is not None: await self._relay_update_state( node_info.relay_state, timestamp=node_info.timestamp From 0c145a15b0ead9ac4c97dd83fac6c91dcf44bddb Mon Sep 17 00:00:00 2001 From: Marc Dirix Date: Sat, 6 Sep 2025 08:56:16 +0200 Subject: [PATCH 5/6] accept NodeInfoMessage for update_node_details --- plugwise_usb/nodes/circle.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugwise_usb/nodes/circle.py b/plugwise_usb/nodes/circle.py index 6190ee89e..b06f6c8e9 100644 --- a/plugwise_usb/nodes/circle.py +++ b/plugwise_usb/nodes/circle.py @@ -1038,7 +1038,7 @@ async def node_info_update( # pylint: disable=too-many-arguments async def update_node_details( - self, node_info: NodeInfoResponse | None = None + self, node_info: NodeInfoResponse | NodeInfoMessage | None = None ) -> bool: """Process new node info and return true if all fields are updated.""" if node_info is None: From 1d23f0bc9d7e0804c535427ea418a877cb36bb50 Mon Sep 17 00:00:00 2001 From: Marc Dirix Date: Sat, 6 Sep 2025 16:06:11 +0200 Subject: [PATCH 6/6] update CHANGELOG --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c659a9d1..e820d1894 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## ongoing + +- PR [333](https://github.com/plugwise/python-plugwise-usb/pull/333): Improve node_info_update and update_node_details logic + ## 0.45.0 - 2025-09-03 - PR [330](https://github.com/plugwise/python-plugwise-usb/pull/330): Add sense hysteresis based switch action