Skip to content

Commit

Permalink
Better fix for settle time calculation. Now also support manual relay…
Browse files Browse the repository at this point in the history
… shutdown. #900 #898
  • Loading branch information
theyosh committed Mar 7, 2024
1 parent 3b56f11 commit e97f7ee
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions terrariumArea.py
Original file line number Diff line number Diff line change
Expand Up @@ -874,7 +874,6 @@ def update(self, read_only=False):
and not self.state[period].get("timer_on", False)
):
self.relays_toggle(period, False)
self.state[period]["last_powered_on"] = int(datetime.datetime.now().timestamp())

self.state[period]["powered"] = self.relays_state(period)

Expand Down Expand Up @@ -923,6 +922,8 @@ def current_value(self, sensors):
return sensor_values

def relays_state(self, part, state=True):
old_state = self.state[part]["powered"]

relay_states = []
for relay in self.setup[part]["relays"]:
if relay not in self.enclosure.relays:
Expand All @@ -933,7 +934,12 @@ def relays_state(self, part, state=True):
else:
relay_states.append(self.enclosure.relays[relay].is_off())

return all(relay_states)
new_state = all(relay_states)
if old_state is True and new_state is False:
# Somewhere the power is turned off. Store the time for settle calculation
self.state[part]["last_powered_on"] = int(datetime.datetime.now().timestamp())

return new_state

def relays_toggle(self, part, on):
logger.info(f'Toggle the relays for area {self} part {part} to state {("on" if on else "off")}.')
Expand All @@ -949,9 +955,8 @@ def relays_toggle(self, part, on):
relay = self.enclosure.relays[relay]
self._relay_action(part, relay, on)

if on:
if not on:
self.state[part]["last_powered_on"] = int(datetime.datetime.now().timestamp())
else:
self.state[part]["timer_on"] = False

self.state[part]["powered"] = on
Expand Down

0 comments on commit e97f7ee

Please sign in to comment.