Skip to content

Commit ce278ff

Browse files
committed
ensure now is set each time in trigger task loop; see #149
1 parent 362f4db commit ce278ff

File tree

2 files changed

+292
-248
lines changed

2 files changed

+292
-248
lines changed

custom_components/pyscript/trigger.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -667,7 +667,7 @@ def timer_active_check(cls, time_spec, now, startup_time):
667667
results["+"].append(this_match)
668668

669669
# An empty spec, or only neg specs, is True
670-
result = any(results["+"]) if results["+"] else True and all(results["-"])
670+
result = (any(results["+"]) if results["+"] else True) and all(results["-"])
671671

672672
return result
673673

@@ -927,6 +927,9 @@ async def trigger_watch(self):
927927
state_trig_timeout = False
928928
notify_info = None
929929
notify_type = None
930+
now = dt_now()
931+
if startup_time is None:
932+
startup_time = now
930933
if self.run_on_startup:
931934
#
932935
# first time only - skip waiting for other triggers
@@ -947,9 +950,6 @@ async def trigger_watch(self):
947950
check_state_expr_on_start = False
948951
else:
949952
if self.time_trigger:
950-
now = dt_now()
951-
if startup_time is None:
952-
startup_time = now
953953
time_next = TrigTime.timer_trigger_next(self.time_trigger, now, startup_time)
954954
_LOGGER.debug(
955955
"trigger %s time_next = %s, now = %s", self.name, time_next, now,
@@ -969,15 +969,19 @@ async def trigger_watch(self):
969969
self.notify_q.get(), timeout=timeout
970970
)
971971
state_trig_timeout = False
972+
now = dt_now()
972973
except asyncio.TimeoutError:
974+
now += dt.timedelta(seconds=timeout)
973975
if not state_trig_timeout:
976+
notify_type = "time"
974977
notify_info = {
975978
"trigger_type": "time",
976979
"trigger_time": time_next,
977980
}
978981
elif self.have_trigger:
979982
_LOGGER.debug("trigger %s waiting for state change or event", self.name)
980983
notify_type, notify_info = await self.notify_q.get()
984+
now = dt_now()
981985
else:
982986
_LOGGER.debug("trigger %s finished", self.name)
983987
return
@@ -1094,10 +1098,6 @@ async def trigger_watch(self):
10941098
self.active_expr.get_logger().error(exc)
10951099
trig_ok = False
10961100
if trig_ok and self.time_active:
1097-
if now is None:
1098-
now = dt_now()
1099-
if startup_time is None:
1100-
startup_time = now
11011101
trig_ok = TrigTime.timer_active_check(self.time_active, now, startup_time)
11021102

11031103
if not trig_ok:

0 commit comments

Comments
 (0)