123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- from homeassistant.const import EVENT_STATE_CHANGED, EVENT_CALL_SERVICE
- from datetime import datetime, time
- """
- When receiving a scene activation event (Service call)
- got EVENT_STATE_CHANGED with kwargs=
- {'trigger_type': 'event',
- 'event_type': 'call_service',
- 'context': <homeassistant.core.Context object at 0x7ff02cde4800>,
- 'domain': 'scene',
- 'service': 'turn_on',
- 'service_data': {'entity_id': 'scene.test_scene_a'}
- }
- """
- """
- monitor_the_light_mode_selector() kwargs=
- {'trigger_type': 'state',
- 'var_name': 'input_select.light_mode',
- 'value': 'Morning',
- 'old_value': 'No action',
- 'context': <homeassistant.core.Context object at 0x7f3b26bff640>}
- """
- #@state_trigger("input_boolean.christmas")
- #def a_test_for_monitor_the_light_mode_selector(value=None, old_value=None):
- #def a_test_for_monitor_the_light_mode_selector(**kwargs):
- #log.info(f"a_test_for_monitor_the_light_mode_selector() kwargs={kwargs}")
- #log.info(f"a_test_for_monitor_the_light_mode_selector() {value} {old_value}")
- #log.info(f"Value:{input_boolean.christmas} Type:" + str( type(input_boolean.christmas) ))
- #if( input_boolean.christmas == 'on' ): log.info("ON")
- #if( input_boolean.christmas == 'off' ): log.info("OFF")
- #isChristmas = True if input_boolean.christmas == 'on' else False
- #log.info("BooL: " + str(x))
- """
- Also, please don't set a state variable inside a function that is trigged by EVENT_STATE_CHANGED,
- or make a service call that is triggered by EVENT_CALL_SERVICE, unless the trigger condition is False
- in those cases. Otherwise bad things will happen...
- """
- #@event_trigger(EVENT_CALL_SERVICE, "domain == 'scene' and service == 'turn_on'")
- #def monitor_scene_service_events(domain=None, service=None, service_data=None):
- # log.info(f"Scene activated: >{service_data['entity_id']}<")
- # if( service_data['entity_id'] == 'scene.test_scene_a'):
- # log.info("Yes. It's A")
- # elif( service_data['entity_id'] == 'scene.test_scene_b'):
- # log.info("Yes. It's B")
- @state_trigger("input_select.light_mode")
- def monitor_light_mode_selector(value=None, old_value=None):
- if not value is None:
- log.info(f"Light state change to: {value}, old value: {old_value}")
- if value == 'All on':
- log.info("Go to All on")
- pyscript.state_goto_all_on()
- elif value == 'All off':
- log.info("Go to All off")
- pyscript.state_goto_all_off()
- elif value == 'Morning':
- log.info("Go to Morning")
- pyscript.state_goto_morning()
- elif value == 'Windows':
- log.info("Go to Windows")
- pyscript.state_goto_window()
- elif value == 'Re-trigger':
- log.info("Re-trigger to be done here")
- # Set mode the the previous mode
- input_select.light_mode = old_value
- else:
- log.info("Light state was None")
- @service
- def handleWallButtonPressed():
- log.info(f"The wall button has been pressed. Curr state: {input_select.light_mode}")
- currHour = datetime.now().time().hour
-
- if( input_select.light_mode == 'All on' ):
- input_select.light_mode = 'All off'
- elif( input_select.light_mode == 'Morning' ):
- input_select.light_mode = 'All off'
- elif( input_select.light_mode == 'All off' ):
-
- log.info(f'Is All off. Hour is: {currHour}')
- if( currHour == 5 or currHour == 6 ):
- input_select.light_mode = 'Morning'
- else:
- input_select.light_mode = 'All on'
-
- elif( input_select.light_mode == 'Windows' ):
- input_select.light_mode = 'All on'
- @service
- def state_goto_all_on():
- task.unique('state_goto_py')
- isChristmas = True if input_boolean.christmas == 'on' else False
- log.info(f"********* ALL ON *********** State:{input_select.light_mode} Jul:{isChristmas}")
- light.turn_on(entity_id='light.tradfri_bulb') # Stora flyglampan
- light.turn_on(entity_id='light.hall_inner', brightness=38, color_temp_kelvin=3800)
- light.turn_on(entity_id='light.hall_door', brightness=38, color_temp_kelvin=3800)
- light.turn_on(entity_id='light.rislampa')
- switch.turn_on(entity_id='switch.matsal_altandorr')
- switch.turn_on(entity_id='switch.matsal_piano')
- switch.turn_on(entity_id='switch.koksfonster')
- switch.turn_on(entity_id='switch.sovrum')
- light.turn_on(entity_id='light.shellydimmer1',brightness_pct=15)
-
- for x in range(2):
- #light.turn_on(entity_id='light.liv_room_table_lamp',brightness='1') # Temp disable when high energy prices
- #task.sleep(0.5)
-
- task.sleep(0.5)
- if( isChristmas ):
- light.turn_on(entity_id=' light.main_button_4') # Christmas lights
- task.sleep(0.5)
- pyscript.kitchen_worklights_button_trigger()
- #pyscript.handle_bedroom_light() # Temp disable when high energy prices
- @service
- def state_goto_window():
- task.unique('state_goto_py')
- isChristmas = True if input_boolean.christmas == 'on' else False
- log.info(f"********* WINDOW *********** State:{input_select.light_mode} Jul:{isChristmas}")
- light.turn_off(entity_id='light.tradfri_bulb')
- switch.turn_on(entity_id='switch.koksfonster')
- if( isChristmas ):
- switch.turn_on(entity_id='switch.matsal_altandorr')
- else:
- switch.turn_off(entity_id='switch.matsal_altandorr')
- switch.turn_off(entity_id='switch.matsal_piano')
- light.turn_off(entity_id='light.hall_inner')
- light.turn_off(entity_id='light.hall_door')
- light.turn_off(entity_id='light.rislampa')
- switch.turn_off(entity_id='switch.sovrum')
- light.turn_off(entity_id='light.shellydimmer1')
- for x in range(2):
- #light.turn_off(entity_id='light.liv_room_table_lamp')
- #task.sleep(0.5)
- task.sleep(0.5)
- if( isChristmas ):
- light.turn_on(entity_id=' light.main_button_4') # Christmas lights
- task.sleep(0.5)
-
- pyscript.kitchen_worklights_button_trigger()
- #pyscript.handle_bedroom_light()
- @service
- def state_goto_morning():
- task.unique('state_goto_py')
- isChristmas = True if input_boolean.christmas == 'on' else False
- log.info(f"********* MORNING *********** State:{input_select.light_mode} Jul:{isChristmas}")
- light.turn_off(entity_id='light.tradfri_bulb')
- switch.turn_on(entity_id='switch.matsal_altandorr')
- switch.turn_off(entity_id='switch.matsal_piano')
- if( isChristmas ):
- switch.turn_on(entity_id='switch.koksfonster')
- else:
- switch.turn_off(entity_id='switch.koksfonster')
- light.turn_off(entity_id='light.hall_inner')
- light.turn_on(entity_id='light.hall_door', brightness=25, color_temp_kelvin=2570)
- light.turn_off(entity_id='light.rislampa')
- switch.turn_off(entity_id='switch.sovrum')
- light.turn_off(entity_id='light.shellydimmer1')
- for x in range(2):
- task.sleep(0.5)
- if( isChristmas ):
- light.turn_off(entity_id=' light.main_button_4') # Christmas lights
- task.sleep(0.5)
-
- pyscript.kitchen_worklights_button_trigger()
- #pyscript.handle_bedroom_light()
- @service
- def state_goto_all_off():
- task.unique('state_goto_py')
- isChristmas = True if input_boolean.christmas == 'on' else False
- log.info(f"********* ALL OFF *********** State:{input_select.light_mode} Jul:{isChristmas}")
- light.turn_off(entity_id='light.tradfri_bulb')
- light.turn_off(entity_id='light.hall_inner')
- light.turn_off(entity_id='light.hall_door')
- light.turn_off(entity_id='light.rislampa')
- switch.turn_off(entity_id='switch.koksfonster')
- switch.turn_off(entity_id='switch.matsal_altandorr')
- switch.turn_off(entity_id='switch.matsal_piano')
- switch.turn_off(entity_id='switch.sovrum')
- light.turn_off(entity_id='light.shellydimmer1')
- for x in range(2):
- #light.turn_off(entity_id='light.liv_room_table_lamp') # Temp disable when high energy prices
- #task.sleep(0.5)
-
- task.sleep(0.5)
- if( isChristmas ):
- light.turn_off(entity_id=' light.main_button_4') # Christmas lights
- task.sleep(0.5)
-
- input_boolean.movie_mode = 'off'
- pyscript.kitchen_worklights_button_trigger()
- @state_trigger("input_boolean.movie_mode")
- def movie_mode_button_trigger():
- log.info(f"********* MOVIE MODE *********** To:" + input_boolean.movie_mode + " State: " + input_select.light_mode )
- if input_boolean.movie_mode == 'off' and input_select.light_mode == 'All on':
- log.info(f"Movie mode, turn lights ON")
- light.turn_on(entity_id='light.shellydimmer1',brightness_pct=15)
- for x in range(2):
- light.turn_on(entity_id='light.liv_room_table_lamp',brightness='1')
- task.sleep(0.5)
-
- else:
- log.info(f"Movie mode, turn lights OFF")
- light.turn_off(entity_id='light.shellydimmer1')
- for x in range(2):
- light.turn_off(entity_id='light.liv_room_table_lamp')
- task.sleep(0.5)
|