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'} } """ """ 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_service_calls(value=None): if not value is None: log.info(f"Light state change to: {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() 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') log.info(f"********* ALL ON *********** State: " + input_select.light_mode ) 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) 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') log.info(f"********* WINDOW *********** State: " + input_select.light_mode ) light.turn_off(entity_id='light.tradfri_bulb') switch.turn_on(entity_id='switch.koksfonster') 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) pyscript.kitchen_worklights_button_trigger() #pyscript.handle_bedroom_light() @service def state_goto_morning(): task.unique('state_goto_py') log.info(f"********* MORNING *********** State: " + str(input_select.light_mode) ) light.turn_off(entity_id='light.tradfri_bulb') switch.turn_on(entity_id='switch.matsal_altandorr') switch.turn_off(entity_id='switch.matsal_piano') 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) pyscript.kitchen_worklights_button_trigger() #pyscript.handle_bedroom_light() @service def state_goto_all_off(): task.unique('state_goto_py') log.info(f"********* ALL OFF *********** State: " + input_select.light_mode ) 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) 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)