Skip to content

Commit 23fd29b

Browse files
committed
Add relay_lock to cache-handling, formatting
1 parent cdb5ff8 commit 23fd29b

File tree

1 file changed

+41
-4
lines changed

1 file changed

+41
-4
lines changed

plugwise_usb/nodes/circle.py

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
CACHE_ENERGY_COLLECTION = "energy_collection"
5454
CACHE_RELAY = "relay"
5555
CACHE_RELAY_INIT = "relay_init"
56+
CACHE_RELAY_LOCK = "relay_lock"
5657

5758
FuncT = TypeVar("FuncT", bound=Callable[..., Any])
5859
_LOGGER = logging.getLogger(__name__)
@@ -184,6 +185,7 @@ def relay_lock(self) -> bool:
184185
async def set_relay_lock(self, state: bool) -> None:
185186
"""Set the state of the relay-lock."""
186187
self._relay_lock = state
188+
await self._relay_update_lock(state)
187189
await self.publish_feature_update_to_subscribers(
188190
NodeFeature.RELAY_LOCK, state
189191
)
@@ -680,20 +682,26 @@ async def set_relay(self, state: bool) -> bool:
680682
)
681683

682684
async def _relay_load_from_cache(self) -> bool:
683-
"""Load relay state from cache."""
685+
"""Load relay state and lock from cache."""
684686
if (cached_relay_data := self._get_cache(CACHE_RELAY)) is not None:
685-
_LOGGER.debug("Restore relay state cache for node %s", self._mac_in_str)
686-
relay_state = False
687+
cached_relay_lock = self._get_cache(CACHE_RELAY_LOCK)
688+
_LOGGER.debug("Restore relay state and lock cache for node %s", self._mac_in_str)
689+
relay_state = relay_lock = False
687690
if cached_relay_data == "True":
688691
relay_state = True
692+
if cached_relay_lock == "True":
693+
relay_lock = True
689694
await self._relay_update_state(relay_state)
695+
await self._relay_update_lock(relay_lock)
690696
return True
697+
691698
_LOGGER.debug(
692699
"Failed to restore relay state from cache for node %s, try to request node info...",
693700
self._mac_in_str,
694701
)
695702
if await self.node_info_update() is None:
696703
return False
704+
697705
return True
698706

699707
async def _relay_update_state(
@@ -705,17 +713,37 @@ async def _relay_update_state(
705713
self._set_cache(CACHE_RELAY, "True")
706714
if self._relay_state.state is None or not self._relay_state.state:
707715
state_update = True
708-
if not state:
716+
else:
709717
self._set_cache(CACHE_RELAY, "False")
710718
if self._relay_state.state is None or self._relay_state.state:
711719
state_update = True
720+
712721
self._relay_state = replace(self._relay_state, state=state, timestamp=timestamp)
713722
if state_update:
714723
await self.publish_feature_update_to_subscribers(
715724
NodeFeature.RELAY, self._relay_state
716725
)
717726
await self.save_cache()
718727

728+
async def _relay_update_lock(self, lock: bool) -> None:
729+
"""Process relay lock update."""
730+
state_update = False
731+
if lock:
732+
self._set_cache(CACHE_RELAY_LOCK, "True")
733+
if not self._relay_lock:
734+
state_update = True
735+
else:
736+
self._set_cache(CACHE_RELAY_LOCK, "False")
737+
if self._relay_lock:
738+
state_update = True
739+
740+
self._relay_lock = replace(self._relay_lock, state=lock)
741+
if state_update:
742+
await self.publish_feature_update_to_subscribers(
743+
NodeFeature.RELAY_LOCK, self._relay_lock
744+
)
745+
await self.save_cache()
746+
719747
async def clock_synchronize(self) -> bool:
720748
"""Synchronize clock. Returns true if successful."""
721749
get_clock_request = CircleClockGetRequest(self._send, self._mac_in_bytes)
@@ -899,10 +927,13 @@ async def node_info_update(
899927
if node_info is None:
900928
if self.skip_update(self._node_info, 30):
901929
return self._node_info
930+
902931
node_request = NodeInfoRequest(self._send, self._mac_in_bytes)
903932
node_info = await node_request.send()
933+
904934
if node_info is None:
905935
return None
936+
906937
await super().node_info_update(node_info)
907938
await self._relay_update_state(
908939
node_info.relay_state, timestamp=node_info.timestamp
@@ -924,6 +955,7 @@ async def node_info_update(
924955
CACHE_CURRENT_LOG_ADDRESS, node_info.current_logaddress_pointer
925956
)
926957
await self.save_cache()
958+
927959
return self._node_info
928960

929961
async def _node_info_load_from_cache(self) -> bool:
@@ -934,6 +966,7 @@ async def _node_info_load_from_cache(self) -> bool:
934966
) is not None:
935967
self._current_log_address = int(current_log_address)
936968
return result
969+
937970
return False
938971

939972
# pylint: disable=too-many-arguments
@@ -951,8 +984,10 @@ async def update_node_details(
951984
self._relay_state = replace(
952985
self._relay_state, state=relay_state, timestamp=timestamp
953986
)
987+
954988
if logaddress_pointer is not None:
955989
self._current_log_address = logaddress_pointer
990+
956991
return await super().update_node_details(
957992
firmware,
958993
hardware,
@@ -971,8 +1006,10 @@ async def unload(self) -> None:
9711006
):
9721007
self._retrieve_energy_logs_task.cancel()
9731008
await self._retrieve_energy_logs_task
1009+
9741010
if self._cache_enabled:
9751011
await self._energy_log_records_save_to_cache()
1012+
9761013
await super().unload()
9771014

9781015
@raise_not_loaded

0 commit comments

Comments
 (0)