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': , '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': } """ #@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') 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) light.turn_on(entity_id='light.liv_room_corner_lamp',brightness='1') 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') for x in range(2): #light.turn_off(entity_id='light.liv_room_table_lamp') #task.sleep(0.5) light.turn_off(entity_id='light.liv_room_corner_lamp') 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') for x in range(2): #light.turn_on(entity_id='light.liv_room_corner_lamp',brightness='1') light.turn_off(entity_id='light.liv_room_corner_lamp') 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') 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) light.turn_off(entity_id='light.liv_room_corner_lamp') 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") for x in range(2): light.turn_on(entity_id='light.liv_room_table_lamp',brightness='1') task.sleep(0.5) light.turn_on(entity_id='light.liv_room_corner_lamp',brightness='1') task.sleep(0.5) else: log.info(f"Movie mode, turn lights OFF") for x in range(2): light.turn_off(entity_id='light.liv_room_table_lamp') task.sleep(0.5) light.turn_off(entity_id='light.liv_room_corner_lamp') task.sleep(0.5)