111
111
112
112
_LOGGER = logging .getLogger (__name__ )
113
113
114
+ # Configure delay before starting to monitor state change events
115
+ STARTUP_DELAY = 70
116
+
114
117
devices = []
115
118
MODE_SCHEMA = vol .Schema (
116
119
{
@@ -181,17 +184,22 @@ async def async_setup(hass, config):
181
184
182
185
machine = Machine (
183
186
states = STATES ,
184
- initial = "idle " ,
187
+ initial = "pending " ,
185
188
# title=self.name+" State Diagram",
186
189
# show_conditions=True
187
190
# show_auto_transitions = True,
188
191
finalize_event = "finalize" ,
189
192
)
193
+ machine .add_transition (
194
+ trigger = "start_monitoring" ,
195
+ source = "pending" ,
196
+ dest = "idle" ,
197
+ )
190
198
191
199
machine .add_transition (trigger = "constrain" , source = "*" , dest = "constrained" )
192
200
machine .add_transition (
193
201
trigger = "override" ,
194
- source = ["idle" , "active_timer" , "blocked" ],
202
+ source = ["pending" , " idle" , "active_timer" , "blocked" ],
195
203
dest = "overridden" ,
196
204
)
197
205
@@ -485,6 +493,8 @@ class Model:
485
493
""" Represents the transitions state machine model """
486
494
487
495
def __init__ (self , hass , config , machine , entity ):
496
+ self .ec_startup_time = datetime .now ()
497
+
488
498
self .hass = hass # backwards reference to hass object
489
499
self .entity = entity # backwards reference to entity containing this model
490
500
@@ -531,6 +541,11 @@ def __init__(self, hass, config, machine, entity):
531
541
machine .add_model (
532
542
self
533
543
) # add here because machine generated methods are being used in methods below.
544
+
545
+ event .async_call_later (self .hass , STARTUP_DELAY , self .startup_delay_callback )
546
+
547
+ def startup_delay_callback (self , evt ):
548
+ config = self .config
534
549
self .config_static_strings (config )
535
550
self .config_control_entities (config )
536
551
self .config_state_entities (
@@ -550,6 +565,12 @@ def __init__(self, hass, config, machine, entity):
550
565
self .config_other (config )
551
566
self .prepare_service_data ()
552
567
568
+ if len (self .overrideEntities ) > 0 and self .is_override_state_on ():
569
+ self .override ()
570
+ self .update (overridden_at = str (datetime .now ()))
571
+ else :
572
+ self .start_monitoring ()
573
+
553
574
def update (self , wait = False , ** kwargs ):
554
575
""" Called from different methods to report a state attribute change """
555
576
# self.log.debug("Update called with {}".format(str(kwargs)))
0 commit comments