|
@@ -1,22 +1,52 @@
|
|
|
|
|
|
-state.persist('pyscript.ext_light_on_done','off')
|
|
|
-state.persist('pyscript.ext_light_off_done','off')
|
|
|
+state.persist('pyscript.ext_light_has_been_day','false')
|
|
|
+state.persist('pyscript.ext_light_has_been_night','false')
|
|
|
|
|
|
-@time_trigger("once(00:15:00)")
|
|
|
-def reset_ext_light_done_states():
|
|
|
- log.info(f"Reset the ext light done state variables.")
|
|
|
- pyscript.ext_light_on_done = 'off'
|
|
|
- pyscript.ext_light_off_done = 'off'
|
|
|
+# Set that it has been midnight, and that it's ok to turn the light on
|
|
|
+@time_trigger("once(00:30:00)")
|
|
|
+def ext_light_has_been_night():
|
|
|
+ pyscript.ext_light_has_been_night = 'true'
|
|
|
|
|
|
-@state_trigger( "int(sensor.lux_outside_the_garage) < 100 and int(sensor.lux_outside_the_garage.old) >= 100")
|
|
|
+# Set that it has been noon, and that it's ok to turn off the light
|
|
|
+@time_trigger("once(12:30:00)")
|
|
|
+def ext_light_has_been_day():
|
|
|
+ pyscript.ext_light_has_been_day = 'true'
|
|
|
+
|
|
|
+
|
|
|
+@state_trigger("pyscript.ext_light_has_been_day == 'true' and int(sensor.lux_outside_the_garage) < 100")
|
|
|
def automate_exterior_lights_on_in_evening():
|
|
|
- if pyscript.ext_light_on_done == 'off' and input_boolean.exterior_lights_wanted_state == 'off':
|
|
|
- input_boolean.exterior_lights_wanted_state = 'on'
|
|
|
- pyscript.ext_light_on_done = 'on'
|
|
|
+ pyscript.ext_light_has_been_day = 'false'
|
|
|
+ input_boolean.exterior_lights_wanted_state = 'on'
|
|
|
|
|
|
-@state_trigger( "int(sensor.lux_outside_the_garage) > 50 and int(sensor.lux_outside_the_garage.old) <= 50")
|
|
|
+@state_trigger("pyscript.ext_light_has_been_night == 'true' and int(sensor.lux_outside_the_garage) > 50")
|
|
|
def automate_exterior_lights_off_in_morning():
|
|
|
- if pyscript.ext_light_off_done == 'off' and input_boolean.exterior_lights_wanted_state == 'on':
|
|
|
- input_boolean.exterior_lights_wanted_state = 'off'
|
|
|
- pyscript.ext_light_off_done = 'on'
|
|
|
+ pyscript.ext_light_has_been_night = 'false'
|
|
|
+ input_boolean.exterior_lights_wanted_state = 'off'
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+@state_trigger("input_boolean.exterior_lights_wanted_state")
|
|
|
+@task_unique("control_ext_light", kill_me=True)
|
|
|
+def control_ext_light():
|
|
|
+
|
|
|
+ # Set max number of iterations
|
|
|
+ maxIterations = 5
|
|
|
+
|
|
|
+ # Loop until we have succeeded to controlling the light
|
|
|
+ while(
|
|
|
+ ( (sensor.exterior_light_status != input_boolean.exterior_lights_wanted_state) or
|
|
|
+ ( light.exterior_lights!= input_boolean.exterior_lights_wanted_state) ) and maxIterations > 0
|
|
|
+ ):
|
|
|
+
|
|
|
+ # Find out if we should turn the light on or off
|
|
|
+ action = "turn_off" if input_boolean.exterior_lights_wanted_state == 'off' else "turn_on"
|
|
|
+
|
|
|
+ service.call("light", action, entity_id="light.exterior_lights")
|
|
|
+ service.call("light", action, entity_id="light.exterior_lights_repeater")
|
|
|
+
|
|
|
+ log.info("Sleeping 60s.....")
|
|
|
+ trig_info = task.wait_until(state_trigger=["input_boolean.exterior_lights_wanted_state","sensor.exterior_light_status"], timeout=60)
|
|
|
|
|
|
+ maxIterations -= 1
|
|
|
+
|
|
|
+ log.info(f"Exit control_ext_light")
|