|
@@ -0,0 +1,52 @@
|
|
|
+
|
|
|
+state.persist('pyscript.ext_light_has_been_day','false')
|
|
|
+state.persist('pyscript.ext_light_has_been_night','false')
|
|
|
+
|
|
|
+# 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'
|
|
|
+
|
|
|
+# 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():
|
|
|
+ pyscript.ext_light_has_been_day = 'false'
|
|
|
+ input_boolean.exterior_lights_wanted_state = 'on'
|
|
|
+
|
|
|
+@state_trigger("pyscript.ext_light_has_been_night == 'true' and int(sensor.lux_outside_the_garage) > 50")
|
|
|
+def automate_exterior_lights_off_in_morning():
|
|
|
+ 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")
|