Skip to content

Commit b991685

Browse files
committed
Add relay_lock to cache-handling, formatting
1 parent 7982a3e commit b991685

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
)
@@ -665,20 +667,26 @@ async def set_relay(self, state: bool) -> bool:
665667
)
666668

667669
async def _relay_load_from_cache(self) -> bool:
668-
"""Load relay state from cache."""
670+
"""Load relay state and lock from cache."""
669671
if (cached_relay_data := self._get_cache(CACHE_RELAY)) is not None:
670-
_LOGGER.debug("Restore relay state cache for node %s", self._mac_in_str)
671-
relay_state = False
672+
cached_relay_lock = self._get_cache(CACHE_RELAY_LOCK)
673+
_LOGGER.debug("Restore relay state and lock cache for node %s", self._mac_in_str)
674+
relay_state = relay_lock = False
672675
if cached_relay_data == "True":
673676
relay_state = True
677+
if cached_relay_lock == "True":
678+
relay_lock = True
674679
await self._relay_update_state(relay_state)
680+
await self._relay_update_lock(relay_lock)
675681
return True
682+
676683
_LOGGER.debug(
677684
"Failed to restore relay state from cache for node %s, try to request node info...",
678685
self._mac_in_str,
679686
)
680687
if await self.node_info_update() is None:
681688
return False
689+
682690
return True
683691

684692
async def _relay_update_state(
@@ -690,17 +698,37 @@ async def _relay_update_state(
690698
self._set_cache(CACHE_RELAY, "True")
691699
if self._relay_state.state is None or not self._relay_state.state:
692700
state_update = True
693-
if not state:
701+
else:
694702
self._set_cache(CACHE_RELAY, "False")
695703
if self._relay_state.state is None or self._relay_state.state:
696704
state_update = True
705+
697706
self._relay_state = replace(self._relay_state, state=state, timestamp=timestamp)
698707
if state_update:
699708
await self.publish_feature_update_to_subscribers(
700709
NodeFeature.RELAY, self._relay_state
701710
)
702711
await self.save_cache()
703712

713+
async def _relay_update_lock(self, lock: bool) -> None:
714+
"""Process relay lock update."""
715+
state_update = False
716+
if lock:
717+
self._set_cache(CACHE_RELAY_LOCK, "True")
718+
if not self._relay_lock:
719+
state_update = True
720+
else:
721+
self._set_cache(CACHE_RELAY_LOCK, "False")
722+
if self._relay_lock:
723+
state_update = True
724+
725+
self._relay_lock = lock
726+
if state_update:
727+
await self.publish_feature_update_to_subscribers(
728+
NodeFeature.RELAY_LOCK, self._relay_lock
729+
)
730+
await self.save_cache()
731+
704732
async def clock_synchronize(self) -> bool:
705733
"""Synchronize clock. Returns true if successful."""
706734
get_clock_request = CircleClockGetRequest(self._send, self._mac_in_bytes)
@@ -884,10 +912,13 @@ async def node_info_update(
884912
if node_info is None:
885913
if self.skip_update(self._node_info, 30):
886914
return self._node_info
915+
887916
node_request = NodeInfoRequest(self._send, self._mac_in_bytes)
888917
node_info = await node_request.send()
918+
889919
if node_info is None:
890920
return None
921+
891922
await super().node_info_update(node_info)
892923
await self._relay_update_state(
893924
node_info.relay_state, timestamp=node_info.timestamp
@@ -909,6 +940,7 @@ async def node_info_update(
909940
CACHE_CURRENT_LOG_ADDRESS, node_info.current_logaddress_pointer
910941
)
911942
await self.save_cache()
943+
912944
return self._node_info
913945

914946
async def _node_info_load_from_cache(self) -> bool:
@@ -919,6 +951,7 @@ async def _node_info_load_from_cache(self) -> bool:
919951
) is not None:
920952
self._current_log_address = int(current_log_address)
921953
return result
954+
922955
return False
923956

924957
# pylint: disable=too-many-arguments
@@ -936,8 +969,10 @@ async def update_node_details(
936969
self._relay_state = replace(
937970
self._relay_state, state=relay_state, timestamp=timestamp
938971
)
972+
939973
if logaddress_pointer is not None:
940974
self._current_log_address = logaddress_pointer
975+
941976
return await super().update_node_details(
942977
firmware,
943978
hardware,
@@ -956,8 +991,10 @@ async def unload(self) -> None:
956991
):
957992
self._retrieve_energy_logs_task.cancel()
958993
await self._retrieve_energy_logs_task
994+
959995
if self._cache_enabled:
960996
await self._energy_log_records_save_to_cache()
997+
961998
await super().unload()
962999

9631000
@raise_not_loaded

0 commit comments

Comments
 (0)