Skip to content

Commit f6cc246

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

File tree

1 file changed

+42
-4
lines changed

1 file changed

+42
-4
lines changed

plugwise_usb/nodes/circle.py

Lines changed: 42 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_state = 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,14 +927,18 @@ 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
909940
)
941+
await self._relay_update_lock(node_info.relay_lock)
910942
if self._current_log_address is not None and (
911943
self._current_log_address > node_info.current_logaddress_pointer
912944
or self._current_log_address == 1
@@ -924,6 +956,7 @@ async def node_info_update(
924956
CACHE_CURRENT_LOG_ADDRESS, node_info.current_logaddress_pointer
925957
)
926958
await self.save_cache()
959+
927960
return self._node_info
928961

929962
async def _node_info_load_from_cache(self) -> bool:
@@ -934,6 +967,7 @@ async def _node_info_load_from_cache(self) -> bool:
934967
) is not None:
935968
self._current_log_address = int(current_log_address)
936969
return result
970+
937971
return False
938972

939973
# pylint: disable=too-many-arguments
@@ -951,8 +985,10 @@ async def update_node_details(
951985
self._relay_state = replace(
952986
self._relay_state, state=relay_state, timestamp=timestamp
953987
)
988+
954989
if logaddress_pointer is not None:
955990
self._current_log_address = logaddress_pointer
991+
956992
return await super().update_node_details(
957993
firmware,
958994
hardware,
@@ -971,8 +1007,10 @@ async def unload(self) -> None:
9711007
):
9721008
self._retrieve_energy_logs_task.cancel()
9731009
await self._retrieve_energy_logs_task
1010+
9741011
if self._cache_enabled:
9751012
await self._energy_log_records_save_to_cache()
1013+
9761014
await super().unload()
9771015

9781016
@raise_not_loaded

0 commit comments

Comments
 (0)