- id: toggle_3d_printer_light alias: Toggle 3D printer light initial_state: true triggers: - trigger: state entity_id: binary_sensor.3d_printer_lys from: - 'on' - 'off' to: - 'on' - 'off' actions: action: light.turn_{{ states('binary_sensor.3d_printer_lys') }} target: entity_id: light.3d_printer_enclosure_light - alias: Dehumidifier on after enclosure door closed id: 0a95a5cd-b3ea-4fa1-b392-93bc9cce5379 initial_state: true triggers: - trigger: state entity_id: binary_sensor.3d_printer_skab to: 'off' actions: - action: switch.turn_on target: entity_id: switch.filament_affugter - id: 3d_printer_set_thermostat alias: 3d Printer Set Thermostat initial_state: true mode: queued triggers: - trigger: state entity_id: - sensor.3d_printer_build_volume_temperature - binary_sensor.3d_printer_aktiv - sensor.octoprint_current_state actions: - choose: - alias: Printing conditions: - condition: template value_template: "{{\n is_state('binary_sensor.3d_printer_aktiv', 'on')\n\ \ and states('sensor.octoprint_current_state') in ['Printing', 'Pausing',\ \ 'Resuming']\n}}" sequence: - action: scene.apply data: entities: climate.3d_printer: state: cool temperature: '{{ states(''sensor.3d_printer_build_volume_temperature'') | default(25) }}' - alias: Cool down conditions: - condition: template value_template: "{{\n is_state('binary_sensor.3d_printer_aktiv', 'on')\n\ \ and states('sensor.octoprint_current_state') not in ['Printing', 'Pausing',\ \ 'Resuming']\n}}" sequence: - action: scene.apply data: entities: climate.3d_printer: state: cool temperature: 20 default: - action: climate.turn_off target: entity_id: climate.3d_printer - id: 3d_printer_ventilation_off alias: 3d Printer Ventilation Off initial_state: true triggers: - trigger: state entity_id: climate.3d_printer attribute: hvac_action to: 'off' actions: action: fan.turn_off target: entity_id: - fan.3d_printer_enclosure_ind - fan.3d_printer_enclosure_ud - id: 3d_printer_ventilation_low alias: 3d Printer Ventilation Low initial_state: true triggers: - trigger: state entity_id: climate.3d_printer attribute: hvac_action to: idle actions: - action: fan.turn_on target: entity_id: - fan.3d_printer_enclosure_ind - fan.3d_printer_enclosure_ud - action: fan.set_percentage target: entity_id: - fan.3d_printer_enclosure_ind data: percentage: 5 - action: fan.set_percentage target: entity_id: - fan.3d_printer_enclosure_ud data: percentage: 25 - id: 3d_printer_ventilation_high alias: 3d Printer Ventilation High initial_state: true triggers: - trigger: state entity_id: climate.3d_printer attribute: hvac_action to: cooling actions: - action: fan.turn_on target: entity_id: - fan.3d_printer_enclosure_ind - fan.3d_printer_enclosure_ud - action: fan.set_percentage target: entity_id: - fan.3d_printer_enclosure_ind - fan.3d_printer_enclosure_ud data: percentage: 100 - id: 3d_print_status_notification alias: 3D Print status notification initial_state: true triggers: - trigger: state entity_id: sensor.octoprint_current_state to: Printing - trigger: time_pattern minutes: /5 seconds: '0' conditions: - alias: Print active condition: state entity_id: sensor.octoprint_current_state state: Printing actions: - action: notify.mobile_app_darkphone data: title: 3D Print Progress {{ states('sensor.octoprint_print_progress') }}% - {{ states('sensor.octoprint_current_state') }} message: '{% set seconds = states(''sensor.octoprint_print_time_left'') | int %} {% set hours = seconds // 3600 %} {% set minutes = (seconds % 3600) // 60 %} {% set remaining_seconds = seconds % 60 %} Time left: {{ ''%02d:%02d:%02d'' | format(hours, minutes, remaining_seconds) }}' data: tag: 3d_print_status_notification channel: 3D Printer Status importance: low persistent: true image: /api/camera_proxy/camera.3d_printer_head - id: 3d_print_stopped_notification alias: 3D Print stopped notification initial_state: true triggers: - trigger: state entity_id: sensor.octoprint_current_state from: Printing actions: - action: notify.mobile_app_darkphone data: message: clear_notification data: tag: 3d_print_status_notification channel: 3D Printer Status - action: script.translate data: message: '{{ states(''sensor.octoprint_current_state'') }}' response_variable: output - delay: seconds: 1 - variables: message: 3D Printer {{ states('sensor.3d_printer_status') }} - action: notify.mobile_app_darkphone data: title: '{{ message }}' message: '' data: tag: 3d_print_alert_notification channel: 3D Printer Alerts importance: high image: /api/camera_proxy/camera.3d_printer - action: script.voice_broadcast data: message: '{{ message }}' - id: 3d_printer_active alias: 3D Printer Aktiv triggers: - trigger: state entity_id: binary_sensor.3d_printer_aktiv to: 'on' actions: - action: automation.turn_on target: entity_id: automation.3d_printer_swap_cameras - id: 3d_printer_auto_shutdown alias: 3d Printer Auto Shutdown triggers: - trigger: state entity_id: binary_sensor.3d_printer_aktiv to: 'off' for: minutes: 15 actions: - action: switch.turn_off target: entity_id: switch.3d_printer_afbryder - action: automation.turn_off target: entity_id: automation.3d_printer_swap_cameras - id: 3d_printer_swap_cameras alias: 3D Printer Swap Cameras triggers: - trigger: time_pattern seconds: /15 actions: - action: input_boolean.toggle target: entity_id: input_boolean.3d_printer_swap_cameras - alias: latest_motion_away id: 9a681933-f941-4df6-80cf-47b3f73a809c initial_state: true triggers: - trigger: state entity_id: person.rook not_to: home actions: action: input_select.select_option data: entity_id: input_select.latest_motion option: Away - alias: Airmee Tracking Slow id: 77061068-2db4-417c-abdb-ac4393dc20bb mode: single triggers: - trigger: time_pattern hours: '*' minutes: /15 seconds: '0' - trigger: state entity_id: binary_sensor.airmee_active to: 'on' - trigger: state entity_id: sensor.airmee_url conditions: - condition: state entity_id: binary_sensor.airmee_within_delivery_window state: 'off' - condition: state entity_id: binary_sensor.airmee_active state: 'on' actions: - action: script.get_airmee_tracking data: tracking_code: '{{ state_attr(''sensor.airmee_url'', ''params'').get(''tracking_url'', '''') }}' phone_number_hash: '{{ state_attr(''sensor.airmee_url'', ''params'').get(''phone_number_hash'', '''') }}' - alias: Airmee Tracking Fast id: 2f38d3c7-6973-480b-a33b-5299667c550c mode: single triggers: - trigger: time_pattern hours: '*' minutes: '*' seconds: '0' conditions: - condition: state entity_id: binary_sensor.airmee_within_delivery_window state: 'on' - condition: state entity_id: binary_sensor.airmee_active state: 'on' - condition: not conditions: - condition: or conditions: - condition: state entity_id: sensor.airmee_tracking state: UNASSIGNED - condition: state entity_id: sensor.airmee_tracking state: DROPOFF_CONFIRMED actions: - action: script.get_airmee_tracking data: tracking_code: '{{ state_attr(''sensor.airmee_url'', ''params'').get(''tracking_url'', '''') }}' phone_number_hash: '{{ state_attr(''sensor.airmee_url'', ''params'').get(''phone_number_hash'', '''') }}' - alias: Airmee Courier Close id: 960d4a70-4b56-4bbf-a353-d71985e28ff5 mode: single triggers: - trigger: state entity_id: binary_sensor.airmee_courier_close to: 'on' conditions: - condition: state entity_id: automation.delivery_unlock_front_door state: 'off' actions: - parallel: - action: automation.turn_on data: entity_id: automation.delivery_unlock_front_door - action: script.notify_everywhere data: message: Airmee bud nærmer sig. Automatisk gadedør-oplåsning slået til. - alias: Airmee Tracking Toggle id: 84fd41b3-89c0-4b15-9461-a88f4e0a8f53 initial_state: true mode: single triggers: - trigger: state entity_id: binary_sensor.airmee_active condition: - condition: state entity_id: binary_sensor.airmee_active state: 'on' actions: - alias: Airmee Code Present choose: - conditions: - condition: state entity_id: binary_sensor.airmee_active state: 'on' sequence: - action: automation.turn_on data: entity_id: - automation.airmee_tracking_slow - automation.airmee_courier_close default: - action: automation.turn_off data: entity_id: - automation.airmee_tracking_slow - automation.airmee_courier_close - alias: Automatic Backup id: c9d66be2-eaa9-49c6-93f1-fe9bfd98fe91 initial_state: true triggers: trigger: time at: 03:00:00 conditions: condition: time weekday: - sun - wed actions: - action: auto_backup.backup data: name: Automated Backup {{ now().strftime('%Y-%m-%d') }} keep_days: 7 exclude: folders: - media - alias: Notify Backup Started id: bb2ef893-b9db-4718-80f5-d141f0491327 triggers: trigger: event event_type: auto_backup.backup_start actions: action: persistent_notification.create data: title: Backup Started. message: 'Name: {{ trigger.event.data.name }}' - alias: Notify Backup Completed id: 74d23a64-03e5-435a-95e7-988f81dddc30 triggers: trigger: event event_type: auto_backup.backup_successful actions: - action: persistent_notification.create data: title: Backup Complete. Syncing to Dropbox message: 'Name: {{ trigger.event.data.name }} Slug: {{ trigger.event.data.slug }}' - action: hassio.addon_stdin data: addon: 719b45ef_dropback input: sync - alias: Notify Backup Sync Started id: 0aa22b1d-627e-4625-84d9-78c50e3140b3 triggers: trigger: state entity_id: sensor.dropback_sync not_to: - unknown - unavailable - '' actions: action: persistent_notification.create data: title: Backup Sync started. message: 'Name: {{ trigger.to_state.state }}' - alias: Notify Backup Sync Complete id: d768bde2-b457-49bd-87b4-ac89d96bfcbc triggers: trigger: state entity_id: sensor.dropback_sync not_from: - unknown - unavailable - '' actions: action: persistent_notification.create data: title: Backup Synced. message: 'Name: {{ trigger.from_state.state }}' - alias: Notify Backup Failure id: 75195f2a-43fd-4fee-8a66-463e1d426600 triggers: trigger: event event_type: auto_backup.backup_failed actions: action: persistent_notification.create data: title: Backup Failed. message: 'Name: {{ trigger.event.data.name }} Error: {{ trigger.event.data.error }}' - alias: Notify Backup Sync Failed id: 876cc78e-85b7-4f28-bbd8-abcd9563371c triggers: trigger: state entity_id: sensor.dropback_status to: Error actions: action: persistent_notification.create data: title: Backup Sync error. message: Dropback failed to sync backup. - alias: activate_light_profile_balcony id: cd9e9d2a-a821-4adb-b29c-8cb577077ded mode: restart initial_state: true triggers: - trigger: state entity_id: sensor.balcony_active_light_profile - trigger: event event_type: refresh_light_profile variables: profile: '{{ states(''sensor.balcony_active_light_profile'') }}' actions: - choose: - conditions: - condition: template value_template: '{{ profile == ''Bright'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.altan: state: true brightness: 255 color_temp_kelvin: 4000 - choose: - conditions: - condition: template value_template: '{{ profile == ''Default'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.altan: state: true brightness: 255 color_temp_kelvin: 2857 - choose: - conditions: - condition: template value_template: '{{ profile == ''Dimmed'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.altan: state: true brightness: 128 color_temp_kelvin: 2000 - choose: - conditions: - condition: template value_template: '{{ profile == ''Ambient'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.altan: state: true brightness: 128 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' - choose: - conditions: - condition: template value_template: '{{ profile == ''Night'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.altan: state: true brightness: 2 rgb_color: - 255 - 0 - 0 - choose: - conditions: - condition: template value_template: '{{ profile == ''Off'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.altan: state: false - alias: bathroom_door_activity_on id: e7500347-c170-40a2-a12b-9228a83bd56a initial_state: true triggers: - trigger: state entity_id: binary_sensor.badevarelse_dor to: - 'on' - 'off' not_from: - unavailable - unknown actions: - action: input_boolean.turn_on data: entity_id: input_boolean.bathroom_door_activity - alias: bathroom_door_activity_off id: 21421df7-95cf-4e18-823f-b1c9dc88d03a initial_state: true triggers: - trigger: state entity_id: input_boolean.bathroom_door_activity to: - 'on' - 'off' for: seconds: 5 actions: - action: input_boolean.turn_off data: entity_id: input_boolean.bathroom_door_activity - alias: activate_light_profile_bathroom id: 4a9ce9a3-eb04-4bc8-8732-3ab0a988cb5e mode: restart initial_state: true triggers: - trigger: state entity_id: sensor.bathroom_active_light_profile - trigger: event event_type: refresh_light_profile variables: profile: '{{ states(''sensor.bathroom_active_light_profile'') }}' actions: - choose: - conditions: - condition: template value_template: '{{ profile == ''Bright'' }}' sequence: - parallel: - action: script.difficult_light data: entity_id: light.badevaerelse_skab state: true brightness: 255 hs_color: - 29 - 15 transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.badevaerelse_loft: state: true brightness: 255 color_temp_kelvin: 4166 effect: solid light.badevaerelse_lampe: state: true brightness: 255 color_temp_kelvin: 4166 - action: light.turn_on target: entity_id: light.bathroom_tablet data: brightness: 255 - conditions: - condition: template value_template: '{{ profile == ''Default'' }}' sequence: - parallel: - action: script.difficult_light data: entity_id: light.badevaerelse_skab state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.badevaerelse_loft: state: true brightness: 255 color_temp_kelvin: 4166 effect: solid light.badevaerelse_lampe: state: true brightness: 255 color_temp_kelvin: 4166 - action: light.turn_on target: entity_id: light.bathroom_tablet data: brightness: 255 - conditions: - condition: template value_template: '{{ profile == ''Dimmed'' }}' sequence: - parallel: - action: script.difficult_light data: entity_id: light.badevaerelse_skab state: true brightness: 96 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.badevaerelse_loft: state: true brightness: 48 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_12v'') }}' effect: Solid light.badevaerelse_lampe: state: true brightness: 127 color_temp_kelvin: 2700 - action: light.turn_on target: entity_id: light.bathroom_tablet data: brightness: 127 - conditions: - condition: template value_template: '{{ profile == ''Ambient'' }}' sequence: - parallel: - action: script.difficult_light data: entity_id: light.badevaerelse_skab state: true brightness: 32 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.badevaerelse_loft: state: true brightness: 24 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_12v'') }}' effect: Lake light.badevaerelse_lampe: state: true brightness: 64 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' - action: light.turn_on target: entity_id: light.bathroom_tablet data: brightness: 64 - conditions: - condition: template value_template: '{{ profile == ''Night'' }}' sequence: - parallel: - action: script.difficult_light data: entity_id: light.badevaerelse_skab state: true brightness: 24 hs_color: - 0 - 100 transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.badevaerelse_loft: state: true brightness: 10 rgb_color: - 255 - 0 - 0 effect: Solid light.badevaerelse_lampe: state: true brightness: 2 color_temp_kelvin: 2202 - action: light.turn_on target: entity_id: light.bathroom_tablet data: brightness: 24 - conditions: - condition: template value_template: '{{ profile == ''Off'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.badevaerelse_loft: state: false light.badevaerelse_lampe: state: false light.badevaerelse_skab: state: false - delay: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) + 1 }}' - condition: '{{ is_state(''sensor.bathroom_selected_light_profile'', ''Off'') }}' - action: light.turn_off target: entity_id: light.badevaerelse_loft - delay: 00:01:00 - condition: '{{ is_state(''sensor.bathroom_selected_light_profile'', ''Off'') }}' - action: light.turn_off target: entity_id: light.badevaerelse_loft - action: light.turn_off target: entity_id: light.bathroom_tablet - alias: Set Bathroom Latest Motion id: 2d6e3e42-2e63-4466-94d9-5cc5e0167885 initial_state: true triggers: - trigger: state entity_id: - binary_sensor.badevaerelse_motion - binary_sensor.badevaerelse_bevaegelse to: 'on' conditions: - condition: state entity_id: vacuum.valetudo_roborocks5 state: docked - condition: state entity_id: person.rook state: home actions: action: input_select.select_option data: entity_id: input_select.latest_motion option: Bathroom - alias: Soveværelse Gardiner Automatisering id: 21deeaa0-0cb8-44eb-95e5-ebc3ab3223bd mode: single triggers: - trigger: state entity_id: binary_sensor.bedroom_curtains_auto_open for: minutes: 2 actions: - action: "{% set open = states('binary_sensor.bedroom_curtains_auto_open') %} {%\ \ if open == 'on' %}\n cover.open_cover\n{% elif open == 'off' %}\n cover.close_cover\n\ {% else %}\n cover.stop_cover {# if the state is unknown do a no-op #}\n{%\ \ endif %}" target: entity_id: - cover.sovevaerelse_gardin - id: bedroom_balcony_door_open_reminder alias: bedroom_balcony_door_open_reminder triggers: - trigger: state entity_id: sensor.bedroom_activity_state to: 'off' for: minutes: 15 conditions: - alias: Balcony door open condition: state entity_id: binary_sensor.sovevarelse_altandor state: 'on' - alias: Outside temp below 18 condition: numeric_state entity_id: sensor.kontor_altan_temperatur below: 18 actions: - action: script.notify_everywhere data: message: Soveværelse altandør står åben! - alias: bedroom_door_activity_on id: 2506073c-4190-4ed1-bcd8-55c4a2c9fe5e initial_state: true triggers: - trigger: state entity_id: binary_sensor.sovevarelse_dor to: 'on' actions: - action: input_boolean.turn_on data: entity_id: input_boolean.bedroom_door_activity - alias: bedroom_door_activity_off id: 53b497b2-5f12-44b9-bfae-13f17845296f initial_state: true triggers: - trigger: state entity_id: input_boolean.bedroom_door_activity to: 'on' for: seconds: 5 actions: - action: input_boolean.turn_off data: entity_id: input_boolean.bedroom_door_activity - alias: activate_light_profile_bedroom id: 5ea088bc-b2bb-41c3-b342-f8d1422a88a4 mode: restart initial_state: true triggers: - trigger: state entity_id: sensor.bedroom_active_light_profile - trigger: event event_type: refresh_light_profile variables: profile: '{{ states(''sensor.bedroom_active_light_profile'') }}' actions: - choose: - conditions: - condition: template value_template: '{{ profile == ''Bright'' }}' sequence: - parallel: - action: script.difficult_light data: entity_id: light.sovevaerelse_gulv state: true brightness: 255 hs_color: - 29 - 15 transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.seng_laeselampe: state: true brightness: 255 color_temp_kelvin: 2700 light.sovevaerelse_loft: state: true brightness: 255 color_temp_kelvin: 4000 effect: solid light.seng_spots_over: state: true brightness: 255 effect: None light.seng_spots_under: state: true brightness: 255 effect: None light.sovevaerelse_reol_spots: state: true brightness: 255 effect: None light.seng_hylder_op: state: true brightness: 255 hs_color: - 29 - 15 effect: Solid light.seng_hylder_ned: state: true brightness: 255 hs_color: - 29 - 15 effect: Solid light.blyant: state: true brightness: 255 hs_color: - 29 - 15 effect: Solid - action: light.turn_on target: entity_id: light.bedroom_tablet data: brightness: 255 - conditions: - condition: template value_template: '{{ profile == ''Default'' }}' sequence: - parallel: - action: script.difficult_light data: entity_id: light.sovevaerelse_gulv state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.seng_laeselampe: state: true brightness: 200 color_temp_kelvin: 2700 light.seng_spots_over: state: true brightness: 200 effect: None light.seng_spots_under: state: true brightness: 200 effect: None light.sovevaerelse_reol_spots: state: true brightness: 200 effect: None light.sovevaerelse_loft: state: true brightness: 200 color_temp_kelvin: 4000 effect: Solid light.seng_hylder_op: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color'') }}' effect: Solid light.seng_hylder_ned: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.blyant: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid - action: light.turn_on target: entity_id: light.bedroom_tablet data: brightness: 172 - conditions: - condition: template value_template: '{{ profile == ''Dimmed'' }}' sequence: - parallel: - action: script.difficult_light data: entity_id: light.sovevaerelse_gulv state: true brightness: 96 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.seng_laeselampe: state: true brightness: 51 color_temp_kelvin: 2173 light.seng_spots_over: state: true brightness: 12 effect: None light.seng_spots_under: state: true brightness: 24 effect: None light.sovevaerelse_reol_spots: state: true brightness: 64 effect: None light.sovevaerelse_loft: state: true brightness: 9 color_temp_kelvin: 3100 effect: Solid light.seng_hylder_op: state: true brightness: 4 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color'') }}' effect: Solid light.seng_hylder_ned: state: true brightness: 4 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.blyant: state: true brightness: 64 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid - action: light.turn_on target: entity_id: light.bedroom_tablet data: brightness: 64 - conditions: - condition: template value_template: '{{ profile == ''Ambient'' }}' sequence: - parallel: - action: number.set_value data: entity_id: number.sovevaerelse_loft_speed value: 1 - action: number.set_value data: entity_id: number.sovevaerelse_loft_intensity value: 100 - action: select.select_option data: entity_id: select.sovevaerelse_loft_color_palette option: '* Colors 1&2' - action: script.difficult_light data: entity_id: light.sovevaerelse_gulv state: true brightness: 32 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.seng_spots_over: state: false light.seng_spots_under: state: false light.sovevaerelse_loft: state: true brightness: 6 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_12v'') }}' effect: Noise2D light.sovevaerelse_reol_spots: state: true brightness: 32 effect: None select.seng_hylder_preset: state: Ambient light.seng_hylder_op: state: true brightness: 2 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color'') }}' effect: Solid Pattern light.seng_hylder_ned: state: true brightness: 2 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid Pattern light.seng_laeselampe: state: true brightness: 2 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.blyant: state: true brightness: 24 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid - action: light.turn_on target: entity_id: light.bedroom_tablet data: brightness: 32 - conditions: - condition: template value_template: '{{ profile == ''Night'' }}' sequence: - parallel: - action: number.set_value data: entity_id: number.sovevaerelse_loft_speed value: 1 - action: number.set_value data: entity_id: number.sovevaerelse_loft_intensity value: 100 - action: select.select_option data: entity_id: select.sovevaerelse_loft_color_palette option: '* Colors 1&2' - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.sovevaerelse_gulv: state: false light.seng_spots_over: state: false light.seng_spots_under: state: false light.sovevaerelse_reol_spots: state: true brightness: 8 effect: None light.seng_laeselampe: state: true brightness: 2 rgb_color: - 255 - 0 - 0 light.blyant: state: true brightness: 24 rgb_color: - 255 - 0 - 0 effect: Solid select.seng_hylder_preset: state: Night light.seng_hylder_op: state: false light.seng_hylder_ned: state: true brightness: 2 rgb_color: - 255 - 0 - 0 effect: Solid Pattern select.sovevaerelse_loft_preset: state: Night light.sovevaerelse_loft: state: true brightness: 5 rgb_color: - 255 - 0 - 0 effect: Noise2D - action: light.turn_on target: entity_id: light.bedroom_tablet data: brightness: 1 - conditions: - condition: template value_template: '{{ profile == ''Off'' }}' sequence: - action: light.turn_off data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entity_id: light.sovevaerelse_lys - choose: - conditions: - condition: state entity_id: sensor.bedroom_activity_state state: 'on' sequence: - action: light.turn_on target: entity_id: light.bedroom_tablet data: brightness: 1 - action: light.turn_on target: entity_id: light.bedroom_tablet_screensaver default: - action: light.turn_off target: entity_id: light.bedroom_tablet - alias: Soveværelse TV on id: 46491d6e-f434-4ae3-ba8d-c185127880ac initial_state: true triggers: - trigger: state entity_id: media_player.sovevaerelse_chromecast not_to: - 'off' - unavailable - unknown actions: - action: switch.turn_on data: entity_id: switch.sovevaerelse_tv - alias: Soveværelse TV off id: afbd2abd-bdb6-4df0-9b29-4317aad76b39 initial_state: true triggers: - trigger: state entity_id: media_player.sovevaerelse_chromecast to: - 'off' - idle for: minutes: 2 actions: - action: switch.turn_off data: entity_id: switch.sovevaerelse_tv - alias: bedroom_media_mute id: e809091c-9c44-4a35-b9fa-c169204c6369 initial_state: true triggers: - trigger: state entity_id: sensor.bedroom_room_state to: 'off' conditions: - condition: state entity_id: binary_sensor.sovevaerelse_video_out state: 'on' actions: - action: media_player.volume_mute data: entity_id: media_player.sovevaerelse_soundbar_songpal is_volume_muted: true - alias: bedroom_media_unmute id: c1c6e2bc-d829-4b64-8496-6acc69cbaedf initial_state: true triggers: - trigger: state entity_id: sensor.bedroom_room_state to: active conditions: - condition: state entity_id: binary_sensor.sovevaerelse_video_out state: 'on' actions: - action: media_player.volume_mute data: entity_id: media_player.sovevaerelse_soundbar_songpal is_volume_muted: false - alias: sovevaerelse_soundbar_volume_remote_up id: 641d990f-ecf5-4f08-a223-4bd0f604e190 initial_state: true triggers: - trigger: state entity_id: input_select.sovevaerelse_soundbar_volume_remote_state to: up for: milliseconds: 75 mode: single actions: - repeat: sequence: - choose: - conditions: - condition: state entity_id: media_player.sovevaerelse state: playing sequence: - action: media_player.volume_up data: entity_id: media_player.sovevaerelse default: - action: media_player.volume_up data: entity_id: media_player.sovevaerelse_soundbar_songpal - delay: milliseconds: 75 until: - condition: or conditions: - condition: state entity_id: input_select.sovevaerelse_soundbar_volume_remote_state state: 'off' - condition: state entity_id: input_select.sovevaerelse_soundbar_volume_remote_state state: down - alias: sovevaerelse_soundbar_volume_remote_down id: 522eda0a-ea1a-4868-8066-ace9a757d203 initial_state: true triggers: - trigger: state entity_id: input_select.sovevaerelse_soundbar_volume_remote_state to: down for: milliseconds: 75 mode: single actions: - repeat: sequence: - choose: - conditions: - condition: state entity_id: media_player.sovevaerelse state: playing sequence: - action: media_player.volume_down data: entity_id: media_player.sovevaerelse default: - action: media_player.volume_down data: entity_id: media_player.sovevaerelse_soundbar_songpal - delay: milliseconds: 75 until: - condition: or conditions: - condition: state entity_id: input_select.sovevaerelse_soundbar_volume_remote_state state: 'off' - condition: state entity_id: input_select.sovevaerelse_soundbar_volume_remote_state state: up - alias: Set Bedroom Latest Motion id: bf4a1137-12a0-4e56-8029-2355e1f64c84 initial_state: true triggers: - trigger: state entity_id: - binary_sensor.sovevaerelse_motion - binary_sensor.sovevarelse_gulv - binary_sensor.bedroom_door_activity to: 'on' conditions: - condition: state entity_id: vacuum.valetudo_roborocks5 state: docked - condition: state entity_id: person.rook state: home actions: action: input_select.select_option data: entity_id: input_select.latest_motion option: Bedroom - id: car_delayed_charging_on alias: Car Delayed Charging On initial_state: true triggers: - trigger: state entity_id: input_boolean.car_delayed_charging from: 'off' to: 'on' - trigger: state entity_id: input_datetime.car_start_charging_at conditions: - condition: state entity_id: input_boolean.car_delayed_charging state: 'on' actions: - parallel: - action: switch.turn_off target: entity_id: switch.id_3_pro_start_stop_charging - action: script.notify_darkphone data: message: Opladning er bliver stoppet. Den starter igen kl. {{ (states('input_datetime.car_start_charging_at') or '').split(':')[0:-1] | join(':') }}. - id: car_start_delayed_charging alias: Car Delayed Charging initial_state: true triggers: - trigger: time at: input_datetime.car_start_charging_at conditions: - condition: state entity_id: input_boolean.car_delayed_charging state: 'on' actions: - parallel: - action: input_boolean.turn_off target: entity_id: input_boolean.car_delayed_charging - action: switch.turn_on target: entity_id: switch.id_3_pro_start_stop_charging - action: script.notify_darkphone data: message: Forsinket opladningstidspunkt er nået. Genstarter opladning. - id: set_car_charging_started_time alias: Set Car Charging Started Time triggers: - trigger: state entity_id: sensor.id_3_pro_charging_connector_state from: 'off' to: 'on' actions: - alias: Set Car Charging Started to now action: input_text.set_value target: entity_id: input_text.car_charging_started data: value: '{{ now().timestamp()|int }}' - id: set_car_charging_type alias: Set Car Charging Type triggers: - trigger: state entity_id: sensor.id_3_pro_charging_type from: invalid to: - ac - dc actions: - alias: Set latest charge type action: input_text.set_value target: entity_id: input_text.car_charging_type data: value: '{{ trigger.to_state.state }}' - id: clear_car_charging_started_time alias: Clear Car Charging Started Time triggers: - trigger: state entity_id: sensor.id_3_pro_charging_connector_state to: 'off' actions: - alias: Clear charge type action: input_text.set_value target: entity_id: input_text.car_charging_type data: value: '' - alias: Clear Car Charging Started to now action: input_text.set_value target: entity_id: input_text.car_charging_started data: value: '' - alias: notify_car_charging id: notify_car_charging initial_state: true triggers: - trigger: state entity_id: sensor.id_3_pro_remaining_charging_time not_from: unavailable conditions: - alias: Estimated charging time remaining changed by more than 5 minutes condition: template value_template: '{%- set from_time = trigger.from_state.state|int(0) -%} {%- set to_time = trigger.to_state.state|int(0) -%} {{ (from_time - to_time > 5 or to_time - from_time > 5) }}' actions: - delay: 00:00:05 - action: script.notify_darkphone data: message: 'Bilen lader op fra {{ states(''sensor.id_3_pro_soc_primary'')|int }}% til {{ states(''number.id_3_pro_charging_target_level'')|int }}%. Færdig ca. kl. {{ states(''sensor.id_3_pro_charging_estimated_date_reached'')|as_timestamp|timestamp_custom(''%H:%M'', True) }}. ' - alias: notify_15_minutes_till_car_charged id: notify_15_minutes_till_car_charged initial_state: true triggers: - trigger: numeric_state entity_id: sensor.id_3_pro_remaining_charging_time below: 16 conditions: - condition: state entity_id: sensor.id_3_pro_charging_state state: charging actions: - action: script.notify_darkphone data: message: Bilen er ladt op til {{ states('sensor.id_3_pro_soc_primary')|int }} af {{ states('number.id_3_pro_charging_target_level')|int }}%. Færdig om {{ states('sensor.id_3_pro_remaining_charging_time') }} minutter. - alias: notify_car_charged id: notify_car_charged initial_state: true triggers: - trigger: state entity_id: sensor.id_3_pro_charging_state from: charging conditions: - condition: not conditions: - condition: state entity_id: sensor.id_3_pro_charging_state state: unavailable actions: - action: script.notify_darkphone data: message: Oplading afsluttet. Bilen er ladt op til {{ states('sensor.id_3_pro_soc_primary')|int }}%. - id: climatise_car_for_upcoming_drive alias: climatise_car_for_upcoming_drive initial_state: true triggers: - trigger: state entity_id: binary_sensor.upcoming_drive to: 'on' actions: - alias: Climatise car action: switch.turn_on target: entity_id: switch.id_3_pro_climatisation - id: car_keep_climatising alias: Car Keep Climatising initial_state: true triggers: - trigger: state entity_id: input_boolean.car_keep_climatising from: 'off' to: 'on' - trigger: state entity_id: binary_sensor.id_3_pro_klimatisering from: 'off' to: 'on' for: minutes: 5 conditions: - condition: state entity_id: input_boolean.car_keep_climatising state: 'on' actions: - alias: Climatise car action: switch.turn_on target: entity_id: switch.id_3_pro_climatisation - id: car_keep_klimatising_off alias: Car Keep Climatising Off initial_state: true triggers: - trigger: state entity_id: input_boolean.car_keep_climatising from: 'on' to: 'off' actions: - alias: Stop climatising car action: switch.turn_off target: entity_id: switch.id_3_pro_climatisation - alias: notify_car_climatising id: notify_car_climatising triggers: - trigger: state entity_id: binary_sensor.id_3_pro_klimatisering to: 'on' conditions: - condition: numeric_state entity_id: sensor.id_3_pro_remaining_climatisation_time above: 6 actions: - action: script.notify_darkphone data: message: 'Klimatiserer bilen til {{ state_attr(''climate.id_3_pro_start_stop_climatization'', ''temperature'')|int }}°. {{ states(''sensor.id_3_pro_remaining_climatisation_time'') }} minutter tilbage. ' data: inline_keyboard: - Stop klimatisering:/car_climatisation_off - action: automation.turn_on target: entity_id: automation.notify_car_climatisation_end - alias: notify_car_climatisation_end id: notify_car_climatisation_end initial_state: false triggers: - trigger: state entity_id: binary_sensor.id_3_pro_klimatisering to: 'off' actions: - action: script.notify_darkphone data: message: Klimatisering afsluttet. - action: automation.turn_off target: entity_id: automation.notify_car_climatisation_end - alias: Send upcoming travel location to car id: 295f96ad-137a-4096-9bed-f2c2762fbc8c initial_state: true triggers: - trigger: numeric_state entity_id: sensor.next_scheduled_leave_in below: 30 conditions: - condition: state entity_id: sensor.upcoming_travel_location attribute: mode state: driving - condition: state entity_id: binary_sensor.car_at_destination state: 'off' actions: - action: script.send_entity_destination_to_car data: entity_id: sensor.upcoming_travel_location - alias: Send home destination to car id: 5f90a704-bfc1-4f60-a525-6af990b697ed initial_state: true triggers: - trigger: state entity_id: binary_sensor.upcoming_drive to: 'on' conditions: - condition: numeric_state entity_id: sensor.next_scheduled_leave_in above: 60 - condition: not conditions: - condition: state entity_id: device_tracker.id_3_pro_position state: home actions: - action: script.send_home_destination data: entity_id: zone.home - template: - sensor: - name: Car Distance to Rook unique_id: c09db247-de53-4550-b417-442d7996e1f2 state: "{% if states('sensor.id_3_pro_vehicle_state') in ['ignition_on', 'driving']\ \ %}\n 0.0\n{%- else -%}\n {{ distance('device_tracker.id_3_pro_position',\ \ 'person.rook') }}\n{%- endif -%}" device_class: distance unit_of_measurement: km - binary_sensor: - name: Car at destination unique_id: 02d2ad65-faa4-40a9-9db6-14923247252c state: '{% set d = states(''sensor.rook_destination_distance'') %} {{ d is number and d | float(1000) < 1 }}' - name: Leave for drive within 5 min unique_id: 022c6936-34f9-48ba-ac32-38ad68edd3b1 state: "{% set leave_sensor = 'sensor.next_scheduled_leave_at' %} {% set leave\ \ = as_local(states(leave_sensor) | as_datetime(none))\n if\ \ has_value(leave_sensor) else none %}\n{% if leave %}\n {% set mins = (leave\ \ - now()).total_seconds() / 60 %}\n {{ mins <= 5 and not is_state('binary_sensor.car_at_destination',\ \ 'on') }}\n{% else %}\n false\n{% endif %}" - name: Driving event ends in 5 min unique_id: d81b7af7-2992-4434-95b1-06cd89f9d7a5 state: "{% set events = state_attr('sensor.current_event', 'events') %} {% set\ \ driving = events | selectattr('bil', 'eq', true) | list if events else []\ \ %} {% if driving | length > 0 %}\n {% set e = driving[-1] %}\n {% if e.end\ \ %}\n {% set end = as_local(e.end | as_datetime(none)) %}\n {% set\ \ mins = (end - now()).total_seconds() / 60 %}\n {{ mins <= 5 }}\n {%\ \ else %}\n false\n {% endif %}\n{% else %}\n false\n{% endif %}" - name: Upcoming drive unique_id: 2f27b7a3-22d3-44e7-871f-bac1b42b3568 state: "{{\n is_state('binary_sensor.leave_for_drive_within_5_min', 'on')\n\ \ or is_state('binary_sensor.driving_event_ends_in_5_min', 'on')\n}}" - id: car_menu initial_state: true alias: Bil Menu triggers: - trigger: event event_type: telegram_callback event_data: command: /bil - trigger: event event_type: telegram_command event_data: command: /bil actions: - action: notify.telegram_darkfox data: message: "{% if is_state('sensor.id_3_pro_charging_state', 'charging') -%}\n\ \ Opladning startet. Bilen lader op til {{ states('number.id_3_pro_charging_target_level')|int\ \ }}%.\n Færdig ca. {{ states('sensor.id_3_pro_charging_estimated_date_reached')\ \ }}\n{%- else -%}\n Oplading afsluttet. Bilen er ladt op til {{ states('sensor.id_3_pro_soc_primary')|int\ \ }}%.\n{%- endif %} {%- if states('sensor.id_3_pro_remaining_climatisation_time')|int\ \ > 0 -%}\n Klimatiserer bilen til {{ state_attr('climate.id_3_pro_start_stop_climatization',\ \ 'temperature')|int }}°. {{ states('sensor.id_3_pro_remaining_climatisation_time')\ \ }} minutter tilbage.\n{%- else -%}\n Klimatisering afsluttet.\n{%- endif\ \ -%}\n" - action: notify.telegram_darkfox data: message: 'Menu:' data: inline_keyboard: - Klimatisering:/car_climatisation, Opladning:/car_charging - id: car_climatisation_menu initial_state: true alias: Bil Klimatisering Menu triggers: - trigger: event event_type: telegram_callback event_data: command: /car_climatisation - trigger: event event_type: telegram_command event_data: command: /car_climatisation variables: temp: '{{ state_attr(''climate.id_3_pro_start_stop_climatization'', ''temperature'')|int }}' actions: - action: notify.telegram_darkfox data: message: Klimatisering Menu data: inline_keyboard: - '{{ ''Stop klimatisering:/car_climatisation_off'' if states(''sensor.id_3_pro_remaining_climatisation_time'')|int > 0 else ''Klimatiser nu:/car_climatisation_on'' }}' - '{{ ''[18°]'' if temp == 18 else ''18°'' }}:/car_climatisation_set 18, {{ ''[19°]'' if temp == 19 else ''19°'' }}:/car_climatisation_set 19, {{ ''[20°]'' if temp == 20 else ''20°'' }}:/car_climatisation_set 20' - '{{ ''[21°]'' if temp == 21 else ''21°'' }}:/car_climatisation_set 21, {{ ''[22°]'' if temp == 22 else ''22°'' }}:/car_climatisation_set 22, {{ ''[23°]'' if temp == 23 else ''23°'' }}:/car_climatisation_set 23' - id: car_climatisation_set initial_state: true alias: Bil Klimatisering Sæt temperatur triggers: - trigger: event event_type: telegram_callback event_data: command: /car_climatisation_set - trigger: event event_type: telegram_command event_data: command: /car_climatisation_set actions: - action: climate.set_temperature target: entity_id: climate.id_3_pro_start_stop_climatization data: temperature: '{{ trigger.event.data[''args''][0] }}' - action: switch.turn_on target: entity_id: switch.id_3_pro_climatisation - action: notify.telegram_darkfox data: message: Temperatur sat til {{ trigger.event.data['args'][0] }}°. - id: car_climatisation_on initial_state: true alias: Bil Klimatisering Tænd triggers: - trigger: event event_type: telegram_callback event_data: command: /car_climatisation_on - trigger: event event_type: telegram_command event_data: command: /car_climatisation_on actions: - action: switch.turn_on target: entity_id: switch.id_3_pro_climatisation - id: car_climatisation_off initial_state: true alias: Bil Klimatisering Stop triggers: - trigger: event event_type: telegram_callback event_data: command: /car_climatisation_off - trigger: event event_type: telegram_command event_data: command: /car_climatisation_off actions: - action: switch.turn_off target: entity_id: switch.id_3_pro_climatisation - id: car_charging_menu initial_state: true alias: Bil Opladning Menu triggers: - trigger: event event_type: telegram_callback event_data: command: /car_charging - trigger: event event_type: telegram_command event_data: command: /car_charging actions: - action: notify.telegram_darkfox data: message: Opladning Menu data: inline_keyboard: - '{{ ''Stop opladning:/car_charging_off'' if is_state(''sensor.id_3_pro_charging_state'', ''charging'') else ''Start opladning:/car_charging_on'' }}' - 50%:/car_charging_set 50, 60%:/car_charging_set 60, 70%:/car_charging_set 70, 80%:/car_charging_set 80, 90%:/car_charging_set 90, 100%:/car_charging_set 100 - initial_state: true alias: Send destination til bil id: 80abd8c2-ff5b-490e-9abd-411f10c0ad12 triggers: - trigger: event event_type: telegram_callback event_data: command: /destination - trigger: event event_type: telegram_command event_data: command: /destination variables: dest_parts: '{{ (trigger.event.data[''args''] | join('' '')).split('' - '') }}' name: '{{ dest_parts[0] if dest_parts|length > 1 else None }}' destination: '{{ dest_parts[1] if dest_parts|length > 1 else dest_parts[0] }}' actions: - action: script.send_destination_to_car data: name: '{{ name }}' destination: '{{ destination }}' - alias: Check Climate id: 5636f5f3-be1b-494b-95cd-be9ff7f4ba04 initial_state: true mode: single triggers: - trigger: event event_type: check_climate actions: - delay: seconds: 30 - choose: - conditions: - condition: state entity_id: binary_sensor.check_climate state: 'off' sequence: - action: automation.trigger entity_id: automation.restart_tado - alias: Termostat Badeværelse id: 46bcccf0-05d3-4652-8d1c-d1cd2b747a56 initial_state: true mode: queued triggers: - trigger: state entity_id: - sensor.bathroom_min_temp - trigger: event event_type: set_climate actions: - action: climate.turn_on data: entity_id: climate.badevaerelse - delay: seconds: 1 - condition: '{{ is_state(''climate.badevaerelse'', ''heat'') }}' - action: climate.set_temperature data: entity_id: climate.badevaerelse temperature: '{{ states(''sensor.bathroom_min_temp'') }}' - event: check_climate - alias: Termostat Kontor id: 83706625-cc7e-490a-affb-ee3fd42c2772 initial_state: true mode: queued triggers: - trigger: state entity_id: sensor.office_min_temp - trigger: state entity_id: binary_sensor.kontor_altandor - trigger: event event_type: set_climate actions: - action: "{%- if is_state('binary_sensor.kontor_altandor', 'off') -%}\n climate.turn_on\n\ {%- else -%}\n climate.turn_off\n{%- endif -%}\n" data: entity_id: climate.kontor - delay: seconds: 1 - condition: '{{ is_state(''climate.kontor'', ''heat'') }}' - action: climate.set_temperature data: entity_id: climate.kontor temperature: '{{ states(''sensor.office_min_temp'') }}' - event: check_climate - alias: Termostat Stue id: af2fd7a5-316f-4296-853d-a3d1a99efe79 initial_state: true mode: queued triggers: - trigger: state entity_id: sensor.living_room_min_temp - trigger: state entity_id: binary_sensor.stue_altandor - trigger: event event_type: set_climate actions: - action: "{%- if is_state('binary_sensor.stue_altandor', 'off') -%}\n climate.turn_on\n\ {%- else -%}\n climate.turn_off\n{%- endif -%}\n" data: entity_id: climate.stue - delay: seconds: 1 - condition: '{{ is_state(''climate.stue'', ''heat'') }}' - action: climate.set_temperature data: entity_id: climate.stue temperature: '{{ states(''sensor.living_room_min_temp'') }}' - event: check_climate - alias: Termostat Værksted id: 81f550e6-d1a0-451a-9ed7-40df34e1f8d6 initial_state: true mode: queued triggers: - trigger: state entity_id: sensor.workshop_min_temp - trigger: state entity_id: binary_sensor.varksted_vindue - trigger: event event_type: set_climate actions: - action: "{%- if is_state('binary_sensor.stue_altandor', 'off') -%}\n climate.turn_on\n\ {%- else -%}\n climate.turn_off\n{%- endif -%}\n" data: entity_id: climate.vaerksted - delay: seconds: 1 - condition: '{{ is_state(''climate.vaerksted'', ''heat'') }}' - action: climate.set_temperature data: entity_id: climate.vaerksted temperature: '{{ states(''sensor.workshop_min_temp'') }}' - event: check_climate - alias: Termostat Soveværelse id: 1a0bc86a-84e4-43aa-8872-0666bb0f01bd initial_state: true mode: queued triggers: - trigger: state entity_id: sensor.bedroom_min_temp - trigger: state entity_id: binary_sensor.sovevarelse_altandor - trigger: event event_type: set_climate actions: - action: "{%- if is_state('binary_sensor.sovevarelse_altandor', 'off') -%}\n climate.turn_on\n\ {%- else -%}\n climate.turn_off\n{%- endif -%}\n" data: entity_id: climate.sovevaerelse - delay: seconds: 1 - condition: '{{ is_state(''climate.sovevaerelse'', ''heat'') }}' - action: climate.set_temperature data: entity_id: climate.sovevaerelse temperature: '{{ states(''sensor.bedroom_min_temp'') }}' - event: check_climate - alias: Switchbot Curtain Battery Charged id: 37f532fe-45ec-4c48-a2be-9b8f8de1ab17 initial_state: true triggers: - trigger: numeric_state entity_id: - sensor.stue_gardin_hojre_battery - sensor.stue_gardin_venstre_battery - sensor.sovevaerelse_gardin_vindue_battery - sensor.sovevaerelse_gardin_dor_battery above: 99 actions: - action: script.notify_everywhere data: message: '{{ trigger.to_state.name }} er opladet' - alias: Fold ind automatisk id: c39877f9-c5dc-41e9-9bbe-fd4fbe973f7a initial_state: true mode: parallel triggers: - trigger: state entity_id: - input_boolean.fold_ud_altan_lys_panel - input_boolean.fold_ud_badevaerelse_lys_panel - input_boolean.fold_ud_sovevaerelse_lys_panel - input_boolean.fold_ud_gang_lys_panel - input_boolean.fold_ud_kokken_lys_panel - input_boolean.fold_ud_stue_lys_panel - input_boolean.fold_ud_kontor_lys_panel - input_boolean.fold_ud_vaerksted_lys_panel for: minutes: 1 actions: - action: input_boolean.turn_off target: entity_id: '{{ trigger.entity_id }}' - alias: Away id: 8eb5e623-aa20-4c04-b260-d9eb2251583e initial_state: true triggers: trigger: state entity_id: binary_sensor.rook_presence_delayed to: 'off' conditions: - alias: Not in guest mode condition: state entity_id: input_boolean.guests state: 'off' actions: - action: homeassistant.turn_off target: entity_id: group.all_media - alias: Dishwasher leak warning id: dishwasher_leak_warning initial_state: true triggers: trigger: state entity_id: binary_sensor.opvaskemaskine_lak to: 'on' actions: - action: script.notify_everywhere data: message: Vand under opvaskemaskinen! - alias: Dishwasher running claim chore id: 5a97b74e-24c9-4926-a442-2d2877cd6810 initial_state: true triggers: trigger: state entity_id: - sensor.opvaskemaskine_operationstate to: BSH.Common.EnumType.OperationState.Run actions: - action: kidschores.claim_chore data: kid_name: Rook chore_name: Opvask - alias: Dishwasher done set chore due date id: 98c85620-147c-44c4-a250-302572907883 initial_state: true triggers: trigger: state entity_id: sensor.opvaskemaskine_operationstate to: BSH.Common.EnumType.OperationState.End actions: - action: kidschores.set_chore_due_date data: chore_name: Tøm opvaskemaskine due_date: '{{ (now() + timedelta(seconds=2)).strftime(''%Y-%m-%dT%H:%M:%S'') }}' - alias: Door Phone Ringing id: bad7cf41-46f2-408a-9844-aa94685c8310 initial_state: true triggers: - trigger: state entity_id: event.dortelefon_ding actions: - parallel: - action: script.notify_everywhere data: message: Dørtelefonen Ringer! data: inline_keyboard: Svar Dør:/unlock_front_door - alias: Telegram Unlock Front Door id: f592b73c-e539-45e0-86ce-5196cd010957 initial_state: true triggers: - trigger: event event_type: telegram_callback event_data: command: /unlock_front_door - trigger: event event_type: telegram_command event_data: command: /unlock_front_door actions: - parallel: - action: notify.telegram_darkfox data: message: Døråbner Aktiveret! - action: button.press target: entity_id: button.dortelefon_open_door - alias: Guests Event id: d1738a9b-6825-4159-8dcc-dabb41464335 initial_state: true triggers: - trigger: state entity_id: binary_sensor.guests_event to: - 'on' - 'off' actions: - action: input_boolean.turn_{{ trigger.to_state.state }} target: entity_id: input_boolean.guests - alias: Guests Mode On id: 934d6298-ba45-4126-bd6c-65f85c928192 initial_state: true triggers: - trigger: state entity_id: input_boolean.guests to: 'on' actions: - parallel: - action: homeassistant.turn_on target: entity_id: - input_boolean.bathroom_separate_light_profile - input_boolean.bathroom_activity_override - input_boolean.bedroom_separate_light_profile - input_boolean.office_separate_light_profile - input_boolean.workshop_separate_light_profile - action: homeassistant.turn_off target: entity_id: - switch.living_room_curtain_automations - alias: Guests Mode Off id: 31e7c655-2b98-440d-9f0e-22121ebf901f initial_state: true triggers: - trigger: state entity_id: input_boolean.guests to: 'off' actions: - parallel: - action: homeassistant.turn_off target: entity_id: - input_boolean.bathroom_separate_light_profile - input_boolean.bathroom_activity_override - input_boolean.bedroom_separate_light_profile - input_boolean.office_separate_light_profile - input_boolean.workshop_separate_light_profile - action: homeassistant.turn_on target: entity_id: - switch.living_room_curtain_automations - id: doorbell_notification alias: Doorbell Notification mode: single triggers: - trigger: state entity_id: binary_sensor.dorklokke_knap from: 'off' to: 'on' actions: - action: notify.telegram_darkfox data: message: Ding dong! - action: script.popup_notification data: message: Ding dong! - alias: activate_light_profile_hallway id: b586de7c-ccd2-4714-86a6-ae75a946f913 mode: restart initial_state: true triggers: - trigger: state entity_id: sensor.hallway_active_light_profile - trigger: event event_type: refresh_light_profile variables: profile: '{{ states(''sensor.hallway_active_light_profile'') }}' actions: - choose: - conditions: - condition: template value_template: '{{ profile == ''Bright'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.gang_loftlampe: state: true brightness: 255 color_temp_kelvin: 3906 light.gang_spots: state: true brightness: 255 color_temp_kelvin: 3906 light.skoskab: state: true brightness: 255 color_temp_kelvin: 3906 effect: Solid light.gang_kommode: state: true brightness: 255 color_temp_kelvin: 3906 effect: None light.gang_skab: state: true brightness: 255 color_temp_kelvin: 3906 effect: Solid light.hallway_tablet: state: true brightness: 255 - conditions: - condition: template value_template: '{{ profile == ''Default'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.gang_loftlampe: state: true brightness: 255 color_temp_kelvin: 3030 light.gang_spots: state: true brightness: 255 color_temp_kelvin: 3030 light.skoskab: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.gang_kommode: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: None light.gang_skab: state: true brightness: 172 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.hallway_tablet: state: true brightness: 172 - conditions: - condition: template value_template: '{{ profile == ''Dimmed'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.gang_loftlampe: state: true brightness: 127 color_temp_kelvin: 3030 light.gang_spots: state: true brightness: 127 color_temp_kelvin: 3030 light.skoskab: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.gang_kommode: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: None light.gang_skab: state: true brightness: 72 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.hallway_tablet: state: true brightness: 127 - conditions: - condition: template value_template: '{{ profile == ''Ambient'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.gang_loftlampe: state: true brightness: 46 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.gang_spots: state: true brightness: 46 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.skoskab: state: true brightness: 42 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.gang_kommode: state: true brightness: 72 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: None light.gang_skab: state: true brightness: 8 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.hallway_tablet: state: true brightness: 72 - conditions: - condition: template value_template: '{{ profile == ''Night'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.gang_loftlampe: state: false light.gang_spots: state: false light.skoskab: state: true brightness: 48 rgb_color: - 255 - 0 - 0 effect: Solid light.gang_kommode: state: true brightness: 48 rgb_color: - 255 - 0 - 0 effect: None light.gang_skab: state: true brightness: 4 rgb_color: - 255 - 0 - 0 effect: Solid light.hallway_tablet: state: true brightness: 1 - conditions: - condition: template value_template: '{{ profile == ''Off'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.gang_spots: state: false light.gang_loftlampe: state: false light.skoskab: state: false light.gang_kommode: state: false light.gang_skab: state: false light.hallway_tablet: state: false - alias: activate_light_profile_hallway_candle_lights id: activate_light_profile_hallway_candle_lights mode: restart initial_state: true triggers: - trigger: state entity_id: sensor.hallway_active_light_profile - trigger: state entity_id: binary_sensor.badevarelse_las - trigger: event event_type: refresh_light_profile actions: - action: script.turn_on target: entity_id: "{% if is_state('input_boolean.guests', 'on') and (states('sensor.hallway_selected_light_profile')|lower)\ \ not in ['night', 'off'] %}\n script.hallway_candle_lights_{{ 'occupied'\ \ if is_state('binary_sensor.badevarelse_las', 'off') else 'free' }}\n{% else\ \ %}\n script.hallway_candle_lights_{{ (states('sensor.hallway_active_light_profile')|lower)\ \ }}\n{% endif %}" - id: refresh_hass_agent_on_startup alias: Refresh HASS.agent on startup triggers: trigger: homeassistant event: start actions: - alias: Refresh HASS.agent Satellite action: switch.turn_on target: entity_id: switch.rook_pc_satellite_publishallsensors - alias: Refresh HASS.agent action: button.press target: entity_id: button.rook_pc_publishallsensors - alias: Claim weight chore on weight update id: ca020a4b-bbe0-4e8f-869e-ba2dfacd67d5 initial_state: true triggers: - trigger: state entity_id: sensor.withings_weight actions: - action: kidschores.claim_chore data: kid_name: Rook chore_name: Vægt - alias: Claim blood pressure chore on BP update id: ab734918-2f34-4e43-b48c-55e383d58855 initial_state: true triggers: - trigger: state entity_id: sensor.darkphone_systolic_blood_pressure actions: - action: kidschores.claim_chore data: kid_name: Rook chore_name: Blodtryk - alias: Set home_assistant_started on startup id: e8b7e0a1-0e3e-45bd-9e48-53cb88d67650 initial_state: true triggers: trigger: homeassistant event: start actions: - action: input_boolean.turn_on data: entity_id: input_boolean.home_assistant_started - alias: Auto approve all chores for Rook id: bf25eccf-deca-4c0c-8931-6fe727034ab5 description: Automatically presses the correct approval button for claimed chores. initial_state: true mode: queued trigger: - trigger: state entity_id: sensor.rook_chores_claimed attribute: chores condition: - condition: numeric_state entity_id: sensor.rook_chores_claimed above: 0 variables: approval_buttons: "{{ \n state_attr('sensor.rook_chores_claimed', 'chores')\n\ \ | map('regex_replace',\n '^sensor\\\\.kc_([a-zA-Z0-9_]+)_chore_status_',\n\ \ 'button.kc_\\\\1_chore_approval_')\n | list\n}}" action: - repeat: for_each: '{{ approval_buttons }}' sequence: - action: button.press target: entity_id: '{{ repeat.item }}' - alias: Update KidsChore UI Helpers id: 888e8507-69cb-4726-9d2f-d9ef18d943c0 triggers: - trigger: homeassistant event: start - trigger: time_pattern minutes: /5 action: - action: input_datetime.set_datetime target: entity_id: input_datetime.kc_ui_set_date_helper data: datetime: '{{ (now().replace(hour=23, minute=0, second=0, microsecond=0) + timedelta(days=1)).isoformat() }}' - alias: Notify Rook about overdue chores id: 663a693f-d58b-4f0c-9340-6c8961e0c76f description: Notify Rook about chores that are overdue and have the Notify label initial_state: true mode: restart trigger: - trigger: state entity_id: sensor.rook_chores_overdue_notify attribute: chores for: seconds: 5 condition: - condition: numeric_state entity_id: sensor.rook_chores_overdue_notify above: 0 variables: chore_sensors: '{{ state_attr(''sensor.rook_chores_overdue_notify'', ''chores'') }}' actions: - condition: template value_template: '{{ chore_sensors | length > 0 }}' - action: notify.mobile_app_darkphone data: title: Opgaver forfaldne message: "Følgende opgaver er forfaldne: {% for entity_id in chore_sensors %}\n\ \ {% set sensor = states[entity_id] %}\n - {{ sensor.attributes.chore_name\ \ }}\n{% endfor %}" data: tag: kc_rook_overdue_chores_notification channel: Overdue Chores importance: high ttl: 0 priority: high clickAction: "{% set ns = namespace(has_health_chores=false) %} {% for entity_id\ \ in chore_sensors %}\n {% set sensor = states[entity_id] -%}\n {% if\ \ 'Helbred' in sensor.attributes.labels %}\n {% set ns.has_health_chores\ \ = true %}\n {% endif %}\n{% endfor %} {% if ns.has_health_chores %}\n\ \ /dashboard-health/symptomer\n{% else %}\n /dashboard-pligter/Rook\n\ {% endif %}" - alias: Notify Rook about critical overdue chores id: 601e476d-eabd-4300-960d-80fd307f1c86 description: Notify Rook about critical chores that are overdue every 5 minutes initial_state: true mode: restart trigger: - trigger: state entity_id: sensor.rook_chores_overdue_critical_notify attribute: chores for: seconds: 5 - trigger: time_pattern minutes: /6 condition: - condition: numeric_state entity_id: sensor.rook_chores_overdue_critical_notify above: 0 variables: chore_sensors: '{{ state_attr(''sensor.rook_chores_overdue_critical_notify'', ''chores'') }}' uri: "{% set ns = namespace(has_health_chores=false) %} {% for entity_id in chore_sensors\ \ %}\n {% set sensor = states[entity_id] %}\n {% if 'Helbred' in sensor.attributes.labels\ \ %}\n {% set ns.has_health_chores = true %}\n {% endif %}\n{% endfor %}\ \ {% if ns.has_health_chores %}\n /dashboard-health/symptomer\n{% else %}\n\ \ /dashboard-pligter/Rook\n{% endif %}" actions: - variables: action_open: '{{ ''CRITICAL_CHORE_NOTIFICATION_OPEN.'' ~ context.id }}' action_skip: '{{ ''CRITICAL_CHORE_NOTIFICATION_SKIP.'' ~ context.id }}' action_snooze: '{{ ''CRITICAL_CHORE_NOTIFICATION_SNOOZE.'' ~ context.id }}' - condition: template value_template: '{{ chore_sensors | length > 0 }}' - action: notify.mobile_app_darkphone data: title: Opgaver forfaldne message: "Følgende kritiske opgaver er forfaldne: {% for entity_id in chore_sensors\ \ %}\n {% set sensor = states[entity_id] -%}\n - {{ sensor.attributes.chore_name\ \ }}\n{% endfor %}" data: tag: kc_rook_critical_overdue_chores_notification channel: Critical Overdue Chores importance: high ttl: 0 priority: high actions: - action: '{{ action_open }}' title: Åbn uri: '{{ uri }}' - action: '{{ action_skip }}' title: Spring over - action: '{{ action_snooze }}' title: +30 min clickAction: '{{ uri }}' - alias: Wait for a response wait_for_trigger: - trigger: event event_type: mobile_app_notification_action event_data: action: '{{ action_skip }}' - trigger: event event_type: mobile_app_notification_action event_data: action: '{{ action_snooze }}' - alias: Perform the action choose: - conditions: '{{ wait.trigger.event.data.action == action_skip }}' sequence: - repeat: for_each: '{{ chore_sensors }}' sequence: - action: kidschores.skip_chore_due_date data: chore_name: '{{ states[repeat.item].attributes.chore_name }}' - conditions: '{{ wait.trigger.event.data.action == action_snooze }}' sequence: - variables: new_due_date: '{{ (now() + timedelta(minutes=30)).strftime(''%Y-%m-%dT%H:%M:%S'') }}' - repeat: for_each: '{{ chore_sensors }}' sequence: - action: kidschores.set_chore_due_date data: chore_name: '{{ states[repeat.item].attributes.chore_name }}' due_date: '{{ new_due_date }}' - alias: activate_light_profile_kitchen id: df388f52-33fe-4ab4-82ae-4690df1d906c mode: restart initial_state: true triggers: - trigger: state entity_id: sensor.kitchen_active_light_profile - trigger: event event_type: refresh_light_profile variables: profile: '{{ states(''sensor.kitchen_active_light_profile'') }}' actions: - choose: - conditions: - condition: template value_template: '{{ profile == ''Bright'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.kokken_loftlampe: state: true brightness: 255 color_temp_kelvin: 4000 light.emhatte: state: true brightness: 255 color_temp_kelvin: 3500 light.kokkenbord: state: true brightness: 255 color_temp_kelvin: 4000 light.kokken_spots: state: true brightness: 255 color_temp_kelvin: 4000 light.kitchen_tablet: state: true brightness: 255 light.lyskaede: state: true brightness: 255 effect: None - delay: seconds: '{{ (states(''input_number.scene_transition_time'') or 1) | round(0, ''ceil'')+2}}' - conditions: - condition: template value_template: '{{ profile == ''Default'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.kokken_loftlampe: state: true brightness: 127 color_temp_kelvin: 3076 light.emhatte: state: true brightness: 255 color_temp_kelvin: 3500 light.kokkenbord: state: true brightness: 200 color_temp_kelvin: 3076 light.kokken_spots: state: true brightness: 200 color_temp_kelvin: 3076 light.kitchen_tablet: state: true brightness: 172 light.lyskaede: state: true brightness: 255 effect: None - delay: seconds: '{{ (states(''input_number.scene_transition_time'') or 1) | round(0, ''ceil'')+2}}' - conditions: - condition: template value_template: '{{ profile == ''Dimmed'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.kokken_loftlampe: state: true brightness: 72 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.emhatte: state: true brightness: 72 color_temp_kelvin: 2500 light.kokkenbord: state: true brightness: 72 color_temp_kelvin: 2500 light.kokken_spots: state: true brightness: 72 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.kitchen_tablet: state: true brightness: 127 light.lyskaede: state: true brightness: 127 effect: None - delay: seconds: '{{ (states(''input_number.scene_transition_time'') or 1) | round(0, ''ceil'')+2}}' - conditions: - condition: template value_template: '{{ profile == ''Ambient'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.kokken_loftlampe: state: true brightness: 48 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.emhatte: state: true brightness: 48 color_temp_kelvin: 2500 light.kokkenbord: state: true brightness: 48 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' light.kokken_spots: state: true brightness: 48 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.kitchen_tablet: state: true brightness: 72 light.lyskaede: state: true brightness: 72 effect: None - delay: seconds: '{{ (states(''input_number.scene_transition_time'') or 1) | round(0, ''ceil'')+2}}' - conditions: - condition: template value_template: '{{ profile == ''Night'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.kokken_loftlampe: state: true brightness: 2 rgb_color: - 255 - 0 - 0 light.emhatte: state: false light.kokkenbord: state: true brightness: 8 rgb_color: - 255 - 0 - 0 light.kokken_spots: state: true brightness: 16 rgb_color: - 255 - 0 - 0 light.kitchen_tablet: state: true brightness: 1 light.lyskaede: state: true brightness: 24 effect: None - conditions: - condition: template value_template: '{{ profile == ''Off'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: group.kitchen_lights: state: false light.kitchen_tablet: state: false - alias: kokken_soundbar_volume_remote_up id: c6126fdc-bc40-4d2f-a904-24201aa18586 initial_state: true triggers: - trigger: state entity_id: input_select.kokken_soundbar_volume_remote_state to: up for: milliseconds: 75 mode: single actions: - repeat: sequence: - action: media_player.volume_up data: entity_id: media_player.kokken - delay: milliseconds: 75 until: - condition: or conditions: - condition: state entity_id: input_select.kokken_soundbar_volume_remote_state state: 'off' - condition: state entity_id: input_select.kokken_soundbar_volume_remote_state state: down - alias: kokken_soundbar_volume_remote_down id: b52dbb09-e7ef-45f2-a1eb-c6940a7c5f2c initial_state: true triggers: - trigger: state entity_id: input_select.kokken_soundbar_volume_remote_state to: down for: milliseconds: 75 mode: single actions: - repeat: sequence: - action: media_player.volume_down data: entity_id: media_player.kokken - delay: milliseconds: 75 until: - condition: or conditions: - condition: state entity_id: input_select.kokken_soundbar_volume_remote_state state: 'off' - condition: state entity_id: input_select.kokken_soundbar_volume_remote_state state: up - alias: Set Kitchen Latest Motion id: 13ec133d-2e48-4b94-891b-7d3e08bc24a3 initial_state: true triggers: - trigger: state entity_id: - binary_sensor.kokken_motion to: 'on' conditions: - condition: state entity_id: vacuum.valetudo_roborocks5 state: docked - condition: state entity_id: person.rook state: home actions: action: input_select.select_option data: entity_id: input_select.latest_motion option: Kitchen - alias: Reset Scene Transition Time id: reset_scene_transition_time initial_state: true triggers: trigger: template value_template: '{% if as_timestamp(now()) - as_timestamp(states.input_number.scene_transition_time.last_updated) > 60 %}true{% endif %}' actions: - action: input_number.set_value data: entity_id: input_number.scene_transition_time value: 0.5 - alias: Refresh Light Profile Event On Theme Change id: refresh_light_profile_event_on_theme_change initial_state: true triggers: - trigger: state entity_id: input_select.theme actions: - event: refresh_light_profile - alias: Set Light Profile id: set_light_profile initial_state: true mode: queued triggers: - trigger: event event_type: set_light_profile variables: rooms: '{{ trigger.event.data.room if trigger.event.data.room is list else [trigger.event.data.room] }}' profile: '{{ trigger.event.data.profile }}' transition_time: "{{-\n trigger.event.data.transition_time\n if trigger.event.data.transition_time\ \ is defined\n and (\n trigger.event.data.transition_time|string|regex_match('^\\\ \\d+$')\n or trigger.event.data.transition_time|string|regex_match('^\\\\\ d*\\\\.\\\\d+$')\n )\n-}}" light_profile_entity: "{%- set ns = namespace(ret=[]) -%} {%- for r in rooms -%}\n\ \ {%- if not r or is_state('input_boolean.'+r+'_separate_light_profile', 'off')\ \ -%}\n {%- set ns.ret = ns.ret + ['input_select.light_profile'] -%}\n {%-\ \ else -%}\n {%- set ns.ret = ns.ret + ['input_select.'~r~'_light_profile']\ \ -%}\n {%- endif -%}\n{%- endfor -%} {%- set ns.ret = ns.ret|unique|list -%}\ \ {{ ns.ret }}" actions: - choose: - conditions: - condition: template value_template: '{{ transition_time != '''' }}' sequence: - action: input_number.set_value data: entity_id: input_number.scene_transition_time value: '{{ transition_time|float(0.5) }}' - wait_template: '{{ is_state(''input_number.scene_transition_time'', transition_time|float(0.5)) }}' timeout: 00:00:05 continue_on_timeout: true - action: input_select.select_option data: entity_id: '{{ light_profile_entity }}' option: '{{ profile }}' - choose: - conditions: - condition: template value_template: '{{ transition_time != '''' }}' sequence: - delay: seconds: 2 - action: automation.trigger data: entity_id: automation.reset_scene_transition_time - alias: Increase Light Profile id: increase_light_profile initial_state: true mode: queued triggers: - trigger: event event_type: increase_light_profile variables: room: '{{ trigger.event.data.room }}' room_separate: '{{ not not room and is_state(''input_boolean.''+room+''_separate_light_profile'', ''on'') }}' current_light_profile: '{{ states(''sensor.'' + room + ''_light_profile'' if room_separate else ''input_select.light_profile'') }}' light_profile_entity: "{%- if room_separate -%}\n input_select.{{ room }}_light_profile\n\ {%- else -%}\n input_select.light_profile\n{%- endif -%}\n" conditions: - condition: template value_template: '{{ current_light_profile != ''Bright'' }}' actions: - action: input_select.select_previous data: entity_id: '{{ light_profile_entity }}' - alias: Decrease Light Profile id: decrease_light_profile initial_state: true mode: queued triggers: - trigger: event event_type: decrease_light_profile variables: room: '{{ trigger.event.data.room }}' room_separate: '{{ not not room and is_state(''input_boolean.''+room+''_separate_light_profile'', ''on'') }}' current_light_profile: '{{ states(''sensor.'' + room + ''_light_profile'' if room_separate else ''input_select.light_profile'') }}' light_profile_entity: "{%- if room_separate -%}\n input_select.{{ room }}_light_profile\n\ {%- else -%}\n input_select.light_profile\n{%- endif -%}\n" conditions: - condition: template value_template: '{{ current_light_profile != ''Off'' }}' actions: - action: input_select.select_next data: entity_id: '{{ light_profile_entity }}' - alias: Cycle Light Profile id: cycle_light_profile initial_state: true mode: queued triggers: - trigger: event event_type: cycle_light_profile variables: room: '{{ trigger.event.data.room }}' room_separate: '{{ not not room and is_state(''input_boolean.''+room+''_separate_light_profile'', ''on'') }}' current_light_profile: '{{ states(''sensor.'' + room + ''_light_profile'' if room_separate else ''input_select.light_profile'') }}' light_profile_entity: "{%- if room_separate -%}\n input_select.{{ room }}_light_profile\n\ {%- else -%}\n input_select.light_profile\n{%- endif -%}\n" actions: - choose: - conditions: - condition: template value_template: '{{ current_light_profile == ''Bright'' }}' sequence: - action: input_select.select_option data: option: Night entity_id: '{{ light_profile_entity }}' - conditions: - condition: template value_template: '{{ current_light_profile == ''Off'' }}' sequence: - action: input_select.select_option data: option: Default entity_id: '{{ light_profile_entity }}' default: - action: input_select.select_previous data: entity_id: '{{ light_profile_entity }}' - alias: Room Separate Light Profile id: room_separate_light_profile initial_state: true mode: parallel triggers: trigger: state entity_id: - input_boolean.bathroom_separate_light_profile - input_boolean.bedroom_separate_light_profile - input_boolean.hallway_separate_light_profile - input_boolean.kitchen_separate_light_profile - input_boolean.living_room_separate_light_profile - input_boolean.office_separate_light_profile - input_boolean.workshop_separate_light_profile - input_boolean.balcony_separate_light_profile - input_boolean.office_balcony_separate_light_profile variables: room: '{{ trigger.entity_id.replace(''input_boolean.'', '''').replace(''_separate_light_profile'', '''') }}' actions: - action: input_select.select_option data: entity_id: input_select.{{ room }}_light_profile option: '{{ states(''input_select.light_profile'') }}' - id: close_bar_after_no_activity alias: Close bar after 4 hours with no activity triggers: - trigger: state entity_id: binary_sensor.stue_tilstedevarelse_bar to: 'off' for: hours: 4 conditions: - condition: state entity_id: input_boolean.bar_open state: 'on' actions: - action: input_boolean.turn_off target: entity_id: input_boolean.bar_open - alias: Stue Gardiner Automatisering id: 22f774d8-6463-4115-84b0-2f5529326a79 mode: single triggers: - trigger: state entity_id: binary_sensor.living_room_curtains_auto_open for: minutes: 5 actions: - action: "{% set open = states('binary_sensor.living_room_curtains_auto_open')\ \ %} {% if open == 'on' %}\n cover.open_cover\n{% elif open == 'off' %}\n \ \ cover.close_cover\n{% else %}\n cover.stop_cover {# if the state is unknown\ \ do a no-op #}\n{% endif %}" target: entity_id: - cover.stue_gardin - alias: living_room_curtains_open_balcony_door id: 2c0834d8-a4b9-43b3-b085-05565890e98f initial_state: true triggers: - trigger: state entity_id: binary_sensor.stue_altandor to: 'on' conditions: - condition: state entity_id: cover.stue_gardin_venstre state: closed actions: - action: script.turn_on target: entity_id: script.stue_gardin_aabn_dor - alias: living_room_curtains_close_balcony_door id: fe60b467-8c49-43e1-a4c7-39b69daeaf0d initial_state: true triggers: - trigger: state entity_id: binary_sensor.stue_altandor to: 'off' for: minutes: 1 conditions: - condition: state entity_id: cover.stue_gardin_venstre state: open - condition: state entity_id: cover.stue_gardin_hojre state: closed actions: - action: cover.close_cover target: entity_id: cover.stue_gardin_venstre - alias: Bar åbnet id: d7ce60c1-c867-4ff0-b24b-ee3b2d4500e9 initial_state: true triggers: - trigger: state entity_id: input_boolean.bar_open to: 'on' actions: - event: refresh_light_profile - alias: Bar lukket id: 909a3888-901a-47fd-9def-fe843c52e610 initial_state: true triggers: - trigger: state entity_id: input_boolean.bar_open to: 'off' actions: - event: refresh_light_profile - id: bar_close_timeout alias: Bar luk ved idle triggers: - trigger: state entity_id: binary_sensor.living_room_activity to: 'off' for: hours: 4 actions: - action: input_boolean.turn_off target: entity_id: input_boolean.bar_open - id: living_room_balcony_door_open_reminder alias: living_room_balcony_door_open_reminder triggers: - trigger: state entity_id: sensor.living_room_activity_state to: 'off' for: minutes: 15 conditions: - alias: Balcony door open condition: state entity_id: binary_sensor.stue_altandor state: 'on' - alias: Outside temp below 18 condition: numeric_state entity_id: sensor.altan_temperatur below: 18 actions: - action: script.notify_everywhere data: message: Stue altandør står åben! - alias: living_room_balcony_door_activity_on id: a9ab798e-6086-4054-b31f-9430bbc860b0 initial_state: true triggers: - trigger: state entity_id: binary_sensor.stue_altandor to: 'on' actions: - action: input_boolean.turn_on data: entity_id: input_boolean.living_room_balcony_door_activity - alias: living_room_balcony_door_activity_off id: f2716cf8-226a-408c-b7ef-8ff6ffdda3f5 initial_state: true triggers: - trigger: state entity_id: input_boolean.living_room_balcony_door_activity to: 'on' for: seconds: 5 actions: - action: input_boolean.turn_off data: entity_id: input_boolean.living_room_balcony_door_activity - alias: activate_light_profile_living_room id: 0f9e2d9a-7d28-484c-a0de-6bef156ac906 mode: restart initial_state: true triggers: - trigger: state entity_id: sensor.living_room_active_light_profile - trigger: event event_type: refresh_light_profile variables: profile: '{{ states(''sensor.living_room_active_light_profile'') }}' actions: - choose: - conditions: - condition: template value_template: '{{ profile == ''Bright'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: group.living_room_lights: state: true brightness: 255 color_temp_kelvin: 4000 - conditions: - condition: template value_template: '{{ profile == ''Default'' }}' sequence: - action: script.turn_on target: entity_id: script.hue_scene_or_light_profile data: variables: room: Stue scene: '{{ states(''sensor.theme'') }}' fallback_scene: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.stue_spots: state: true brightness: 128 color_temp_kelvin: 2325 light.sofa_laeselampe: state: true brightness: 172 color_temp_kelvin: 2564 light.sofalampe: state: true brightness: 128 color_temp_kelvin: 2325 light.skaenk_lampe: state: true brightness: 128 color_temp_kelvin: 2325 light.sofa_uplight: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.globe: state: true brightness: 192 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' light.stue_tv: state: true brightness: 192 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.stue_tv_bund: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' - action: script.turn_on target: entity_id: script.wled_preset_or_light_profile data: variables: preset: '{{ states(''sensor.theme'') }}' entities: light.stue_gardinstang: state: true brightness: 96 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_12v'') }}' effect: Solid light.tv_mobel: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.stue_skaenk_gulv: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.stue_skaenk: state: true brightness: 128 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' effect: '{{ states(''sensor.theme'') if states(''sensor.theme'') is in state_attr(''light.stue_skaenk'', ''effect_list'') else '''' }}' - conditions: - condition: template value_template: '{{ profile == ''Dimmed'' }}' sequence: - action: script.turn_on target: entity_id: script.hue_scene_or_light_profile data: variables: room: Stue scene: '{{ states(''sensor.theme'') }}' fallback_scene: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.globe: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' light.sofa_laeselampe: state: true brightness: 76 color_temp_kelvin: 2202 light.sofa_uplight: state: true brightness: 172 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.sofalampe: state: true brightness: 76 color_temp_kelvin: 2202 light.skaenk_lampe: state: true brightness: 76 color_temp_kelvin: 2202 light.stue_spot_1: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' light.stue_spot_2: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' light.stue_spot_3: state: true brightness: 76 color_temp_kelvin: 2202 light.stue_tv: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.stue_tv_bund: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' - action: script.turn_on target: entity_id: script.wled_preset_or_light_profile data: variables: preset: '{{ states(''sensor.theme'') }}' entities: light.stue_gardinstang: state: true brightness: 48 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_12v'') }}' effect: Solid light.tv_mobel: state: true brightness: 48 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.stue_skaenk_gulv: state: true brightness: 64 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.stue_skaenk: state: true brightness: 64 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' effect: '{{ states(''sensor.theme'') if states(''sensor.theme'') is in state_attr(''light.stue_skaenk'', ''effect_list'') else '''' }}' - conditions: - condition: template value_template: '{{ profile == ''Ambient'' }}' sequence: - parallel: - action: script.turn_on target: entity_id: script.hue_scene_or_light_profile data: variables: room: Stue scene: '{{ states(''sensor.theme'') }}' fallback_scene: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.stue_spots: state: false light.sofa_laeselampe: state: true brightness: 32 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' light.sofa_uplight: state: true brightness: 86 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.sofalampe: state: true brightness: 32 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' light.skaenk_lampe: state: true brightness: 32 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.globe: state: true brightness: 32 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' light.stue_tv: state: true brightness: 32 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.stue_tv_bund: state: true brightness: 32 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color_hue'') }}' - action: number.set_value data: entity_id: number.stue_gardinstang_speed value: 45 - action: number.set_value data: entity_id: number.stue_gardinstang_intensity value: 60 - action: select.select_option data: entity_id: select.stue_gardinstang_color_palette option: '* Colors 1&2' - action: script.turn_on target: entity_id: script.wled_preset_or_light_profile data: variables: preset: '{{ states(''sensor.theme'') }}' entities: light.stue_gardinstang: state: true brightness: 16 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_12v'') }}' effect: Blends light.tv_mobel: state: true brightness: 8 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.stue_skaenk_gulv: state: true brightness: 8 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.stue_skaenk: state: true brightness: 24 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' effect: '{{ states(''sensor.theme'') if states(''sensor.theme'') is in state_attr(''light.stue_skaenk'', ''effect_list'') else '''' }}' - conditions: - condition: template value_template: '{{ profile == ''Night'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.globe: state: true brightness: 12 rgb_color: - 255 - 0 - 0 light.tv_mobel: state: true brightness: 4 rgb_color: - 255 - 0 - 0 effect: Solid light.stue_gardinstang: state: true brightness: 6 rgb_color: - 255 - 0 - 0 effect: Solid light.sofa_laeselampe: state: true brightness: 12 rgb_color: - 255 - 0 - 0 light.sofa_uplight: state: true brightness: 12 rgb_color: - 255 - 0 - 0 light.stue_spots: state: false light.sofalampe: state: true brightness: 2 rgb_color: - 255 - 0 - 0 light.skaenk_lampe: state: true brightness: 2 rgb_color: - 255 - 0 - 0 light.stue_skaenk_gulv: state: true brightness: 4 rgb_color: - 255 - 0 - 0 effect: Solid light.stue_tv: state: true brightness: 2 rgb_color: - 255 - 0 - 0 light.stue_tv_bund: state: true brightness: 2 rgb_color: - 255 - 0 - 0 light.stue_skaenk: state: true brightness: 8 rgb_color: - 255 - 0 - 0 - conditions: - condition: template value_template: '{{ profile == ''Off'' }}' sequence: - action: light.turn_off data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entity_id: group.living_room_lights - alias: activate_light_profile_living_room_dining_table id: activate_light_profile_living_room_dining_table mode: restart initial_state: true triggers: - trigger: state entity_id: sensor.living_room_active_light_profile - trigger: state entity_id: binary_sensor.stue_tilstedevarelse_spisebord to: 'on' - trigger: state entity_id: binary_sensor.stue_tilstedevarelse_spisebord to: 'off' for: seconds: 30 - trigger: event event_type: refresh_light_profile actions: - action: script.turn_on target: entity_id: "{%- set profile = states('sensor.living_room_selected_light_profile')\ \ -%} {% \n if profile != 'Off'\n and (\n is_state('binary_sensor.stue_tilstedevarelse_spisebord',\ \ 'on')\n )\n%}\n {%- set profiles = state_attr('input_select.light_profile',\ \ 'options') -%}\n script.dining_table_lights_{{ (profiles[profiles.index(profile)-1]\ \ or 'Bright')|lower }}\n{% else %}\n script.dining_table_lights_{{ (states('sensor.living_room_active_light_profile')|lower)\ \ }}\n{% endif %}" - alias: activate_light_profile_living_room_bar id: activate_light_profile_living_room_bar mode: queued initial_state: true triggers: - trigger: state entity_id: - sensor.living_room_active_light_profile - sensor.living_room_selected_light_profile - input_boolean.bar_open - trigger: state entity_id: binary_sensor.stue_tilstedevarelse_bar to: 'on' - trigger: state entity_id: binary_sensor.stue_tilstedevarelse_bar to: 'off' for: seconds: 30 - trigger: event event_type: refresh_light_profile actions: - action: script.turn_on target: entity_id: "{%- set profile = states('sensor.living_room_selected_light_profile')\ \ -%} {% \n if profile != 'Off'\n and (\n is_state('binary_sensor.stue_tilstedevarelse_bar',\ \ 'on')\n or is_state('input_boolean.bar_open', 'on')\n )\n%}\n {%- set\ \ profiles = state_attr('input_select.light_profile', 'options') -%}\n script.bar_lights_{{\ \ (profiles[profiles.index(profile)-1] or 'Bright')|lower }}\n{% else %}\n\ \ script.bar_lights_{{ (states('sensor.living_room_active_light_profile')|lower)\ \ }}\n{% endif %}" - alias: Set Living Room Latest Motion id: 8f82703e-c8ac-4280-bc4d-53e86c83e9bd initial_state: true triggers: - trigger: state entity_id: - binary_sensor.stue_motion - binary_sensor.stue_tilstedevarelse_alle_zoner - binary_sensor.stue_tilstedevarelse_bar - binary_sensor.stue_tilstedevarelse_spisebord - binary_sensor.stue_tilstedevarelse_sofa - binary_sensor.stue_tilstedevarelse_altandor to: 'on' conditions: - condition: state entity_id: vacuum.valetudo_roborocks5 state: docked - condition: state entity_id: person.rook state: home actions: action: input_select.select_option data: entity_id: input_select.latest_motion option: Living Room - alias: switch_climate_sensors_thermostats id: 5850f484-6c2f-4fcf-8f08-1731207f3dd1 initial_state: true triggers: - trigger: state entity_id: input_boolean.show_climate_sensors to: 'on' - trigger: state entity_id: input_boolean.show_thermostats to: 'on' actions: - action: input_boolean.turn_off data: entity_id: "{% if (trigger.entity_id == 'input_boolean.show_climate_sensors')\ \ -%}\n input_boolean.show_thermostats\n{% else -%}\n input_boolean.show_climate_sensors\n\ {% endif -%}\n" - alias: close_climate_sensors id: 92dbda3e-b736-4d13-89c6-ed7412bd9d2a initial_state: true triggers: - trigger: state entity_id: input_boolean.show_climate_sensors to: 'on' for: seconds: 30 actions: - action: input_boolean.toggle data: entity_id: input_boolean.show_climate_sensors - alias: close_thermostats id: 4d1fe726-f8cf-49b4-8fdb-a03fe092a0f8 initial_state: true triggers: - trigger: state entity_id: input_boolean.show_thermostats to: 'on' for: seconds: 30 actions: - action: input_boolean.toggle data: entity_id: input_boolean.show_thermostats - id: speaker_details_timeout alias: Speaker Details Timeout mode: parallel initial_state: true triggers: - trigger: state entity_id: - input_boolean.show_stue_speaker_details - input_boolean.show_kokken_speaker_details - input_boolean.show_kontor_speaker_details - input_boolean.show_sovevaerelse_speaker_details - input_boolean.show_badevaerelse_speaker_details - input_boolean.show_roam_speaker_details to: 'on' for: minutes: 5 actions: - action: input_boolean.turn_off target: entity_id: '{{ trigger.entity_id }}' - alias: Mikroovn startet id: 6ff8d64d-b0ff-450b-8b51-5c2da4c546e1 initial_state: true triggers: - trigger: state entity_id: binary_sensor.microwave_running to: 'on' actions: - action: automation.turn_off data: entity_id: automation.sluk_mikroovn_hvis_ikke_startet_efter_dor_lukket stop_actions: false - alias: Mikroovn Færdig id: de4b6b42-b9aa-4f47-aa7a-8a51180ed774 initial_state: true triggers: trigger: state entity_id: binary_sensor.microwave_running from: 'on' to: 'off' actions: - action: script.notify_everywhere data: message: Mikroovnen er færdig. - alias: Tænd mikroovn når dør åbnes id: 0cd271e7-3331-40b8-a772-d70e3f984bfb initial_state: true triggers: - trigger: state entity_id: binary_sensor.mikroovn_dor_abner to: 'on' actions: - action: switch.turn_on data: entity_id: switch.mikroovn - action: automation.turn_on data: entity_id: automation.sluk_mikroovn_hvis_ikke_startet_efter_dor_lukket - alias: Sluk mikroovn hvis ikke startet efter dør lukket id: f10c2677-b5cc-425e-9556-6fd4a2fd632d initial_state: false triggers: - trigger: state entity_id: binary_sensor.mikroovn_dor_abner to: 'off' for: minutes: 1 conditions: - condition: state entity_id: binary_sensor.microwave_running state: 'off' actions: - action: switch.turn_off data: entity_id: switch.mikroovn - action: automation.turn_off data: entity_id: automation.sluk_mikroovn_hvis_ikke_startet_efter_dor_lukket stop_actions: false - alias: Cold water leak warning id: cold_water_leak_warning initial_state: true triggers: - trigger: numeric_state entity_id: sensor.koldt_vand_forbrug above: 200 for: minutes: 10 actions: - action: script.notify_everywhere data: message: Koldt vand løber! severity: 2 - alias: Warm water leak warning id: warm_water_leak_warning initial_state: true triggers: - trigger: numeric_state entity_id: sensor.varmt_vand_forbrug above: 200 for: minutes: 10 actions: - action: script.notify_everywhere data: message: Varmt vand løber! severity: 2 - alias: Apartment Door Lock Notification id: apartment_door_lock_notification initial_state: true triggers: trigger: state entity_id: lock.hoveddor_las to: unlocked for: minutes: 3 actions: - action: script.notify_everywhere data: message: Hoveddøren er ikke låst! severity: 2 - alias: Freezer Door Open Notification id: freezer_door_open_notification initial_state: true triggers: trigger: state entity_id: binary_sensor.fryser_dor to: 'on' for: minutes: 3 actions: - action: script.notify_everywhere data: message: Fryseren står åben! severity: 2 - alias: Fridge Door Open Notification id: fridge_door_open_notification initial_state: true triggers: trigger: state entity_id: binary_sensor.koleskab_dor_abner to: 'on' for: minutes: 3 actions: - action: script.notify_everywhere data: message: Køleskabet står åben! severity: 2 - alias: Smartwatch charged notification id: smartwatch_charged_notification initial_state: true triggers: trigger: numeric_state entity_id: sensor.darkwatch_battery_level above: 98 actions: - action: script.notify_everywhere data: message: Ur er fuldt opladet! - alias: Kontor Gardiner Automatisering id: 202e827a-1c17-4941-b4ea-86598ef1a8d0 mode: single triggers: - trigger: state entity_id: binary_sensor.office_blinds_auto_open for: minutes: 2 actions: - action: "{% set open = states('binary_sensor.office_blinds_auto_open') %} {% if\ \ open == 'on' %}\n cover.open_cover\n{% elif open == 'off' %}\n cover.close_cover\n\ {% else %}\n cover.stop_cover {# if the state is unknown do a no-op #}\n{%\ \ endif %}" target: entity_id: - cover.kontor_rullegardin - cover.kontor_altandor_gardin - id: office_balcony_door_open_reminder alias: office_balcony_door_open_reminder triggers: - trigger: state entity_id: sensor.office_activity_state to: 'off' for: minutes: 15 conditions: - alias: Balcony door open condition: state entity_id: binary_sensor.kontor_altandor state: 'on' - alias: Outside temp below 18 condition: numeric_state entity_id: sensor.kontor_altan_temperatur below: 18 actions: - action: script.notify_everywhere data: message: Kontor altandør står åben! - alias: office_balcony_door_activity_on id: 3e1c2b9f-ad00-4781-b346-b0da8fbec9e8 initial_state: true triggers: - trigger: state entity_id: binary_sensor.kontor_altandor to: 'on' actions: - action: input_boolean.turn_on data: entity_id: input_boolean.office_balcony_door_activity - alias: office_balcony_door_activity_off id: e1204019-f3e1-472c-ba71-41015227f4cc initial_state: true triggers: - trigger: state entity_id: input_boolean.office_balcony_door_activity to: 'on' for: seconds: 5 actions: - action: input_boolean.turn_off data: entity_id: input_boolean.office_balcony_door_activity - alias: activate_light_profile_office_balcony id: 282a1712-2ab0-45d2-8988-7b357ad91279 mode: restart initial_state: true triggers: - trigger: state entity_id: sensor.office_balcony_active_light_profile - trigger: event event_type: refresh_light_profile variables: profile: '{{ states(''sensor.office_balcony_active_light_profile'') }}' actions: - delay: seconds: 0.1 - alias: activate_light_profile_office id: efe4262d-9e2d-4649-a756-fd61c97185bf mode: restart initial_state: true triggers: - trigger: state entity_id: sensor.office_active_light_profile - trigger: event event_type: refresh_light_profile variables: profile: '{{ states(''sensor.office_active_light_profile'') }}' actions: - choose: - conditions: - condition: template value_template: '{{ profile == ''Bright'' }}' sequence: - parallel: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.kontor_loftlampe: state: true brightness: 255 color_temp_kelvin: 3846 light.kontor_loftlys: state: true brightness: 255 color_temp_kelvin: 3846 light.projektor: state: true brightness: 255 color_temp_kelvin: 3846 light.kontor_hylde: state: true brightness: 255 hs_color: - 15 - 43 effect: Solid light.pc_skaerme_hojre: state: true brightness: 255 hs_color: - 15 - 43 effect: Solid light.pc_skaerme_midt: state: true brightness: 255 hs_color: - 15 - 43 effect: Solid light.motherboard: state: true brightness: 255 hs_color: - 15 - 43 light.g502_lightspeed_wireless_gaming_mouse_1_led_0: state: true brightness: 255 hs_color: - 15 - 43 light.gpu_stand: state: true brightness: 255 hs_color: - 15 - 43 light.gigabyte_rtx3070_ti_gaming_oc_8g_0: state: true brightness: 255 hs_color: - 15 - 43 light.g502_lightspeed_wireless_gaming_mouse_1_led_1: state: true brightness: 255 hs_color: - 15 - 43 light.spogelse: state: true brightness: 255 color_temp_kelvin: 2700 effect: None light.spogelse_ojne: state: true brightness: 255 effect: None - conditions: - condition: template value_template: '{{ profile == ''Default'' }}' sequence: - parallel: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.kontor_loftlampe: state: true brightness: 127 color_temp_kelvin: 2564 light.kontor_loftlys: state: true brightness: 255 color_temp_kelvin: 2564 light.projektor: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' effect: 'off' light.kontor_hylde: state: true brightness: 172 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color'') }}' effect: Solid light.pc_skaerme_hojre: state: true brightness: 172 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.pc_skaerme_midt: state: true brightness: 172 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.motherboard: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color'') }}' light.g502_lightspeed_wireless_gaming_mouse_1_led_0: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color'') }}' light.gpu_stand: state: true brightness: 64 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' light.gigabyte_rtx3070_ti_gaming_oc_8g_0: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' light.g502_lightspeed_wireless_gaming_mouse_1_led_1: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' light.spogelse: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: None light.spogelse_ojne: state: true brightness: 255 effect: None - conditions: - condition: template value_template: '{{ profile == ''Dimmed'' }}' sequence: - parallel: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.kontor_loftlampe: state: true brightness: 1 color_temp_kelvin: 2202 light.kontor_loftlys: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' effect: 'off' light.projektor: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' effect: 'off' light.kontor_hylde: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color'') }}' effect: Solid light.pc_skaerme_hojre: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.pc_skaerme_midt: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.motherboard: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color'') }}' light.g502_lightspeed_wireless_gaming_mouse_1_led_0: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color'') }}' light.gpu_stand: state: true brightness: 32 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' light.gigabyte_rtx3070_ti_gaming_oc_8g_0: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' light.g502_lightspeed_wireless_gaming_mouse_1_led_1: state: true brightness: 255 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' light.spogelse: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: None light.spogelse_ojne: state: true brightness: 127 effect: None - conditions: - condition: template value_template: '{{ profile == ''Ambient'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.kontor_loftlampe: state: false light.kontor_loftlys: state: true brightness: 100 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' effect: 'off' light.projektor: state: true brightness: 100 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' effect: 'off' light.kontor_hylde: state: true brightness: 64 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color'') }}' effect: Solid light.pc_skaerme_hojre: state: true brightness: 32 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.pc_skaerme_midt: state: true brightness: 32 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: Solid light.motherboard: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color'') }}' light.g502_lightspeed_wireless_gaming_mouse_1_led_0: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color'') }}' light.gpu_stand: state: true brightness: 24 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' light.gigabyte_rtx3070_ti_gaming_oc_8g_0: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' light.g502_lightspeed_wireless_gaming_mouse_1_led_1: state: true brightness: 127 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' light.spogelse: state: true brightness: 96 hs_color: '{{ state_attr(''sensor.theme'', ''secondary_color'') }}' effect: None light.spogelse_ojne: state: true brightness: 96 effect: None - conditions: - condition: template value_template: '{{ profile == ''Night'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.kontor_loftlampe: state: false light.kontor_loftlys: state: true brightness: 32 rgb_color: - 255 - 0 - 0 effect: 'off' light.projektor: state: true brightness: 32 rgb_color: - 255 - 0 - 0 effect: 'off' light.kontor_hylde: state: true brightness: 32 rgb_color: - 255 - 0 - 0 effect: Solid light.pc_skaerme_hojre: state: true brightness: 8 rgb_color: - 255 - 0 - 0 effect: Solid light.pc_skaerme_midt: state: true brightness: 8 rgb_color: - 255 - 0 - 0 effect: Solid light.motherboard: state: true brightness: 64 rgb_color: - 255 - 0 - 0 light.gigabyte_rtx3070_ti_gaming_oc_8g_0: state: true brightness: 64 rgb_color: - 255 - 0 - 0 light.g502_lightspeed_wireless_gaming_mouse_1_led_0: state: true brightness: 64 rgb_color: - 255 - 0 - 0 light.gpu_stand: state: true brightness: 16 rgb_color: - 255 - 0 - 0 light.g502_lightspeed_wireless_gaming_mouse_1_led_1: state: true brightness: 64 rgb_color: - 255 - 0 - 0 light.spogelse: state: true brightness: 24 rgb_color: - 255 - 0 - 0 effect: None light.spogelse_ojne: state: false - conditions: - condition: template value_template: '{{ profile == ''Off'' }}' sequence: - action: homeassistant.turn_off data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entity_id: - group.office_lights - alias: refresh_lights_after_openrgb_becomes_available id: d63a2c52-7387-4991-9511-82fbb31f2575 initial_state: true mode: single triggers: - trigger: state entity_id: - light.gpu_stand - light.gigabyte_rtx3070_ti_gaming_oc_8g_0 - light.g502_lightspeed_wireless_gaming_mouse_1_led_0 - light.motherboard - light.g502_lightspeed_wireless_gaming_mouse_1_led_1 from: unavailable for: seconds: 30 actions: - event: refresh_light_profile - alias: Office PC active trigger id: 9f0915b1-24af-4406-b12e-5510d87377d2 initial_state: true triggers: trigger: template value_template: "{{\n is_state('sensor.office_room_state', 'active')\n or is_state('binary_sensor.rook_pc_activity',\ \ 'on')\n or is_state('switch.rook_pc', 'on')\n}}" actions: action: switch.turn_on data: entity_id: switch.pc_afbryder - alias: Office PC inactive trigger id: 1baf4ea3-3efd-4f60-90dc-50d2f65b24a9 initial_state: true triggers: - trigger: template value_template: "{{\n is_state('sensor.office_room_state', 'off') \n and is_state('binary_sensor.rook_pc_activity',\ \ 'off')\n and is_state('switch.rook_pc', 'off')\n}}" for: minutes: 5 conditions: - alias: Quest not in use condition: state entity_id: binary_sensor.quest_in_use_delayed state: 'off' actions: action: switch.turn_off data: entity_id: switch.pc_afbryder - alias: Office Speaker/PC Accessories active trigger id: 25fc64ea-5663-4be4-aa3a-08fb6caf6c6a initial_state: true triggers: trigger: template value_template: "{{\n states('sensor.pc_afbryder_forbrug')|float > 0.03\n or\ \ is_state('binary_sensor.rook_pc_activity', 'on')\n or is_state('binary_sensor.vagtskema_wfh',\ \ 'on')\n}}" actions: action: switch.turn_on data: entity_id: switch.pc_tilbehor_afbryder - alias: Office Speaker/PC Accessories inactive trigger id: 79c485f8-79de-47b2-9169-884bc6e020bc initial_state: true triggers: - trigger: template value_template: "{{\n is_state('switch.pc_afbryder', 'off')\n and states('sensor.pc_afbryder_forbrug')|float\ \ < 0.02\n and is_state('binary_sensor.rook_pc_activity', 'off')\n and is_state('binary_sensor.vagtskema_wfh',\ \ 'off')\n and is_state('binary_sensor.quest_in_use_delayed', 'off')\n}}" actions: action: switch.turn_off data: entity_id: - switch.pc_tilbehor_afbryder - switch.printer_afbryder - alias: Turn PC Printer on when print queue not empty id: e5d8426d-2ded-49af-adf8-6f39e98a9bc2 initial_state: true triggers: - trigger: numeric_state entity_id: sensor.rook_pc_printers_npid634ed_hpcolorlaserjetm255dw above: 0 conditions: - condition: state entity_id: switch.printer_afbryder state: 'off' actions: - action: switch.turn_on target: entity_id: switch.printer_afbryder - alias: Mute PC TV line in on Office TV off id: mute_pc_tv_line_in_on_office_tv_off initial_state: true triggers: - trigger: state entity_id: - media_player.kontor_tv - media_player.kontor_shield_remote to: 'off' actions: - action: button.press target: entity_id: button.rook_pc_mute_tv - alias: Unute PC TV line in on Office TV on id: unute_pc_tv_line_in_on_office_tv_on initial_state: true triggers: - trigger: state entity_id: media_player.kontor_tv to: 'on' actions: - action: button.press target: entity_id: button.rook_pc_unmute_tv - alias: Switch Office TV speaker output to internal when PC off id: switch_office_tv_speaker_output_to_internal_when_pc_off initial_state: true triggers: - trigger: state entity_id: switch.rook_pc to: 'off' - trigger: state entity_id: media_player.kontor_tv to: 'on' conditions: - condition: state entity_id: media_player.kontor_tv state: 'on' - condition: state entity_id: switch.rook_pc state: 'off' actions: - action: webostv.select_sound_output data: entity_id: media_player.kontor_tv sound_output: tv_speaker - alias: Switch Office TV Speaker Output to optical when PC on id: switch_office_tv_speaker_output_to_optical_when_pc_on initial_state: true triggers: - trigger: state entity_id: switch.rook_pc to: 'on' - trigger: state entity_id: media_player.kontor_tv to: 'on' conditions: - condition: state entity_id: media_player.kontor_tv state: 'on' - condition: state entity_id: switch.rook_pc state: 'on' actions: - action: webostv.select_sound_output data: entity_id: media_player.kontor_tv sound_output: external_optical - alias: Set Office Latest Motion id: a0b61be0-7171-4225-8d61-e40fd3c6d888 initial_state: true triggers: - trigger: state entity_id: - binary_sensor.kontor_motion - binary_sensor.kontor_gulv_bevagelse - binary_sensor.rook_pc_activity - binary_sensor.rook_pc_activity_ping to: 'on' conditions: - condition: state entity_id: vacuum.valetudo_roborocks5 state: docked - condition: state entity_id: person.rook state: home actions: action: input_select.select_option data: entity_id: input_select.latest_motion option: Office - alias: Paid parking id: 9639dddf-8e3b-4321-811d-6df6b8562c24 initial_state: true triggers: trigger: state entity_id: binary_sensor.parking_lot_paid to: 'on' actions: - action: script.notify_darkphone data: message: 'Du har parkeret på {{ states(''sensor.parking_lot'') }}. Husk at oprette parkering i receptionen eller online. ' - alias: Set Parked Time id: c562770a-5958-46b7-ace8-3cbf4996fe88 initial_state: true triggers: trigger: state entity_id: sensor.parkeringsskive for: seconds: 10 actions: - condition: numeric_state entity_id: sensor.parking_duration_limit above: 0 - variables: parked_time: "{{\n as_timestamp(states('sensor.parking_last_captured'))\n \ \ | timestamp_custom('%H:%M')\n if has_value('sensor.parking_last_captured')\n\ \ else None\n}}" parkeringsskive: "{{\n as_timestamp(states('sensor.parkeringsskive'))\n |\ \ timestamp_custom('%H:%M')\n if has_value('sensor.parkeringsskive')\n else\ \ None\n}}" parking_limit: "{{\n as_timestamp(states('sensor.parking_limit'))\n | timestamp_custom('%H:%M')\n\ \ if has_value('sensor.parking_limit')\n else None\n}}" parking_alarm: "{{\n as_timestamp(states('sensor.parking_alarm'))\n | timestamp_custom('%H:%M')\n\ \ if has_value('sensor.parking_alarm')\n else None\n}}" - action: script.android_set_alarm data: action: notify.mobile_app_darkphone timehour: '{{ parking_alarm.split('':'')[0] }}' timemin: '{{ parking_alarm.split('':'')[1] }}' message: Flyt bilen! - action: script.notify_darkphone data: message: 'Parkeret på {{ states(''sensor.parking_lot'') }} klokken {{ parked_time }}. Timer sat til kl. {{ parkeringsskive }}, flyt bilen inden kl. {{ parking_limit }}. Alarm sat til kl. {{ parking_alarm }}. ' - alias: Parking Alarm id: parking_alarm initial_state: true triggers: trigger: time at: sensor.parking_alarm actions: - action: script.notify_darkphone data: message: Flyt bilen! - action: switch.turn_on target: entity_id: switch.id_3_pro_climatisation - alias: Stop Climatisation on parking id: 45fa7427-0498-4f77-a9f4-3e5983c15dc3 initial_state: true triggers: trigger: state entity_id: sensor.bil_placering not_to: - Away - unknown - unavailable conditions: condition: state entity_id: switch.id_3_pro_climatisation state: 'on' actions: - action: switch.turn_off target: entity_id: switch.id_3_pro_climatisation - alias: Toggle GDQ on event state id: 5d6fc4e6-291f-43f0-b555-831251da9ac5 initial_state: true triggers: - trigger: state entity_id: binary_sensor.gdq_event_active to: - 'on' - 'off' for: minutes: 1 condition: - condition: template value_template: '{{ not is_state(''group.gdq_automations'', states(''binary_sensor.gdq_event_active'')) }}' actions: - action: homeassistant.turn_{{ states('binary_sensor.gdq_event_active') }} target: entity_id: group.gdq_automations - alias: Slow update GDQ id: dc222bee-ba1b-49b4-80cf-7dee61761268 initial_state: true triggers: - trigger: time_pattern hours: '0' minutes: '0' seconds: '0' actions: - action: pyscript.get_gdq_event - alias: Refresh GDQ Tracker id: refresh_gdq_tracker mode: single triggers: - trigger: time_pattern hours: '*' minutes: /1 seconds: '0' actions: - action: script.refresh_gdq_data - alias: Notify GDQ Run Coming Up id: notify_gdq_run_coming_up triggers: - trigger: numeric_state entity_id: sensor.gdq_next_watch_run below: 30 - trigger: numeric_state entity_id: sensor.gdq_next_watch_run below: 15 - trigger: numeric_state entity_id: sensor.gdq_next_watch_run below: 5 variables: release_year: '{{ state_attr(''sensor.gdq_next_watch_run'', ''next_run'').release_year }}' game: '{{ state_attr(''sensor.gdq_next_watch_run'', ''next_run'').summary | replace('' (''+(release_year|string)+'')'', '''') }}' runner: '{{ state_attr(''sensor.gdq_next_watch_run'', ''next_run'').runner }}' time: "{% from 'easy_time.jinja' import custom_relative_time %} {{ custom_relative_time(\n\ \ state_attr('sensor.gdq_next_watch_run', 'next_run').get('start', ''),\n \ \ 'day, hour, minute'\n) }}" playing_gdq: '{{ is_state(''binary_sensor.tv_currently_streaming_gdq'', ''on'') }}' actions: - action: script.notify_everywhere data: severity: '{{ -1 if playing_gdq else 1 }}' message: - tts: 'Næste GDQ spil: ' language: da-DK offset: -500 - tts: '{{ game }} — Run by {{ runner }},' language: en-US voice: SteffanNeural offset: -900 - tts: ' starter {{ time }}' language: da-DK offset: -900 - alias: Watchlisted GDQ game now streaming id: e8acab09-6c30-4d0c-9c1a-3301013a34c6 mode: single triggers: - trigger: state entity_id: binary_sensor.gdq_currently_streaming_watchlist_game to: 'on' variables: game: '{{ state_attr(''sensor.gamesdonequick'', ''game'') }}' runner: "{% set run = state_attr('binary_sensor.gdq_calendar', 'events')\n \ \ | selectattr('summary', 'eq', game) | list | first %}\n{% if run %}\n\ \ {{ run.runner }}\n{% else %}\n {{ None }}\n{% endif %}" playing_gdq: '{{ is_state(''binary_sensor.tv_currently_streaming_gdq'', ''on'') }}' actions: - action: script.notify_everywhere data: severity: '{{ 0 if playing_gdq else 1 }}' message: - tts: 'GDQ streamer nu: ' language: da-DK offset: -500 - tts: '{{ game }} — Run by {{ runner }},' language: en-US voice: SteffanNeural offset: -900 - alias: Refresh GDQ Runs Regex id: refresh_gdq_runs_regex initial_state: true mode: restart triggers: - trigger: state entity_id: &id001 - todo.gdq_runs - todo.gdq_games - todo.gdq_runners - todo.gdq_commentators - todo.gdq_hosts - todo.gdq_categories - trigger: state entity_id: group.gdq_automations to: 'on' actions: - repeat: for_each: *id001 sequence: - action: todo.get_items data: status: needs_action target: entity_id: '{{ repeat.item }}' response_variable: todo_items - event: gdq_runs_updated event_data: watchlist: '{{ repeat.item }}' todo_items: '{{ todo_items }}' - alias: Update GDQ Bids After Calendar Update id: 680e332d-e89a-4170-b2b3-e997cbd830d3 mode: single triggers: - trigger: event event_type: gdq_calendar_updated actions: - action: script.run_pyscript data: action: pyscript.gdq_get_bids - alias: Update GDQ Milestones After Donation Stats id: bc6dbbf8-d7fd-44d6-921d-9e31b0564302 mode: single triggers: - trigger: event event_type: gdq_donation_stats actions: - action: script.run_pyscript data: action: pyscript.gdq_get_milestones - id: update_gdq_calendar alias: Update GDQ Calendar mode: single triggers: - trigger: state entity_id: calendar.gdq_schedule - trigger: state entity_id: binary_sensor.home_assistant_loaded to: 'on' variables: days: 10 regexes: '{{ states.sensor.calendar_regexes.attributes }}' attrs: game: "{{ \n {\n 'regex': '^(?:BONUS GAME \\d+ - )?(.+)$',\n 'fields':\ \ ['summary']\n }\n}}" category: (.+) — .+ — .+ platform: .+ — (.+) — .+ release_year: .+ — .+ — (.+) runner: Run by (.+) host: Hosted by (.+) commentators: Commentary by (.+) tags: Tagged (.+) bool_attrs: watch: "{{ [{\n 'regex': (state_attr('sensor.gdq_runs_regex', 'regex') or 'xxxxxxxx'),\n\ \ 'fields': ['summary']\n}] }}" watch_game: "{{ [{\n 'regex': (state_attr('sensor.gdq_games_watchlist', 'regex')\ \ or 'xxxxxxxx'),\n 'fields': ['summary']\n}] }}" watch_runner: "{{ [{\n 'regex': (state_attr('sensor.gdq_runners_watchlist',\ \ 'regex') or 'xxxxxxxx'),\n 'fields': ['runner']\n}] }}" watch_host: "{{ [{\n 'regex': (state_attr('sensor.gdq_hosts_watchlist', 'regex')\ \ or 'xxxxxxxx'),\n 'fields': ['host']\n}] }}" watch_commentators: "{{ [{\n 'regex': (state_attr('sensor.gdq_commentators_watchlist',\ \ 'regex') or 'xxxxxxxx'),\n 'fields': ['commentators']\n}] }}" watch_category: "{{ [{\n 'regex': (state_attr('sensor.gdq_categories_watchlist',\ \ 'regex') or 'xxxxxxxx'),\n 'fields': ['category']\n}] }}" watch_tags: "{{ [{\n 'regex': (state_attr('sensor.gdq_tags_watchlist', 'regex')\ \ or 'xxxxxxxx'),\n 'fields': ['tags']\n}] }}" actions: - action: homeassistant.update_entity target: entity_id: calendar.gdq_schedule - delay: seconds: 5 - action: calendar.get_events data: start_date_time: '{{ (now() + timedelta(days=-1)).strftime(''%Y-%m-%d'') }} 00:00:00' end_date_time: '{{ (now() + timedelta(days=days)).strftime(''%Y-%m-%d'') }} 23:59:59' target: entity_id: calendar.gdq_schedule response_variable: all_events - variables: agenda_events: "{% from 'agenda.jinja' import agenda_event %} {% set ns = namespace(ret=[])\ \ %} {% for event in all_events['calendar.gdq_schedule'].events | sort(attribute='start')\ \ | list -%}\n {% set ns.ret = ns.ret + [agenda_event(\"GDQ Kalender\", dict(event,\ \ location=none), regexes, bool_attrs, attrs)|from_json] %}\n{%- endfor -%}\ \ {{ ns.ret }}" - event: gdq_calendar_updated event_data: events: '{{ agenda_events }}' - alias: kitchen_timer_finished_event id: ddee7c3a-5809-44ba-97fd-297a63076b9c initial_state: true mode: parallel triggers: - trigger: event event_type: timer.finished event_data: entity_id: timer.kitchen_1 - trigger: event event_type: timer.finished event_data: entity_id: timer.kitchen_2 - trigger: event event_type: timer.finished event_data: entity_id: timer.kitchen_3 actions: - action: input_boolean.turn_on data: entity_id: input_boolean.timer_{{ trigger.event.data.entity_id | replace('timer.', '') }}_finished - action: script.notify_everywhere data: message: '{{ state_attr(trigger.event.data.entity_id, ''friendly_name'') }} er færdig!' - alias: kitchen_timer_finished id: 7b9af13b-fd32-4ff1-83c2-90a5981b13a7 initial_state: true mode: queued triggers: - trigger: state entity_id: binary_sensor.kitchen_timer_finished to: 'on' - trigger: state entity_id: &id002 - light.blyant - light.kontor_hylde - light.hobbybord_vaerktojsskab - light.gang_kommode - light.gang_skab - light.tv_mobel - light.skoskab - light.lyskaede - light.seng_hylder_ned - light.bar - light.badevaerelse_lampe_hojre - light.globe - light.skaenk_lampe to: - 'on' - 'off' - trigger: state entity_id: *id002 attribute: effect conditions: - condition: state entity_id: binary_sensor.kitchen_timer_finished state: 'on' actions: - choose: - conditions: - condition: template value_template: '{{ ''light'' in trigger.to_state.entity_id }}' sequence: - action: light.turn_on target: entity_id: '{{ trigger.to_state.entity_id }}' data: brightness_pct: 100 effect: '{{ ''Fade'' if ''Fade'' in state_attr(trigger.to_state.entity_id, ''effect_list'') else ''opal'' }}' default: - repeat: for_each: *id002 sequence: - action: light.turn_on target: entity_id: '{{ repeat.item }}' data: brightness_pct: 100 effect: '{{ ''Fade'' if ''Fade'' in state_attr(repeat.item, ''effect_list'') else ''opal'' }}' - alias: kitchen_timer_dismissed id: 1cc6a65e-b3c0-4e26-89b3-55bf7a260c7d initial_state: true mode: queued triggers: - trigger: state entity_id: binary_sensor.kitchen_timer_finished to: 'off' actions: - event: refresh_light_profile - id: notify_washing_machine_started alias: Notify Washing Machine Started initial_state: true triggers: - trigger: state entity_id: sensor.washing_machine to: Running - trigger: numeric_state entity_id: sensor.wash_cycle_remaining_time above: 5 conditions: - condition: state entity_id: sensor.washing_machine state: Running - condition: numeric_state entity_id: sensor.wash_cycle_remaining_time above: 5 actions: - delay: seconds: 10 - action: script.notify_everywhere data: message: Vaskemaskine startet. Færdig ca. kl. {{ states('sensor.vaskemaskine_faerdig') | as_timestamp | timestamp_custom('%H:%M') }} - id: notify_washing_machine_almost_finished alias: Notify Washing Machine Almost Finished initial_state: true triggers: - trigger: numeric_state entity_id: sensor.wash_cycle_remaining_time below: 6 conditions: - condition: state entity_id: sensor.washing_machine state: Running actions: - action: script.notify_everywhere data: message: Vaskemaskine færdig om 5 minutter. - id: washing_machine_finished alias: Washing Machine Finished initial_state: true triggers: - trigger: state entity_id: sensor.washing_machine to: Finished actions: - action: input_boolean.turn_on target: entity_id: input_boolean.washing_machine_finished - action: script.notify_everywhere data: message: Vaskemaskine Færdig - id: washing_machine_finished_reset alias: washing_machine_finished_reset initial_state: true triggers: - trigger: state entity_id: binary_sensor.vaskemaskine_dor_abner to: 'on' conditions: - condition: state entity_id: input_boolean.washing_machine_finished state: 'on' actions: - action: input_boolean.turn_off target: entity_id: input_boolean.washing_machine_finished - id: washing_machine_finished_reminder alias: Washing Machine Finished Reminder initial_state: true triggers: - trigger: state entity_id: binary_sensor.vaskemaskine_skal_tommes to: 'on' for: minutes: 15 - trigger: state entity_id: binary_sensor.vaskemaskine_skal_tommes to: 'on' for: minutes: 30 - trigger: state entity_id: binary_sensor.vaskemaskine_skal_tommes to: 'on' for: minutes: 60 - trigger: state entity_id: binary_sensor.vaskemaskine_skal_tommes to: 'on' for: minutes: 120 - trigger: state entity_id: binary_sensor.bathroom_activity to: 'on' for: seconds: 10 conditions: - condition: state entity_id: binary_sensor.vaskemaskine_skal_tommes state: 'on' for: minutes: 10 actions: - action: script.notify_everywhere data: message: Husk at tømme vaskemaskinen - id: dryer_finished alias: Dryer Finished initial_state: true triggers: - trigger: state entity_id: binary_sensor.torretumbler from: 'on' to: 'off' for: minutes: 10 actions: - action: input_boolean.turn_on target: entity_id: input_boolean.dryer_finished - action: script.notify_everywhere data: message: Tørretumbleren er færdig. - id: dryer_finished_reset alias: dryer_finished_reset initial_state: true triggers: - trigger: state entity_id: binary_sensor.torretumbler_dor_abner to: 'on' conditions: - condition: state entity_id: input_boolean.dryer_finished state: 'on' actions: - action: input_boolean.turn_off target: entity_id: input_boolean.dryer_finished - id: dryer_finished_reminder alias: Dryer Finished Reminder initial_state: true triggers: - trigger: state entity_id: input_boolean.dryer_finished to: 'on' for: minutes: 15 - trigger: state entity_id: input_boolean.dryer_finished to: 'on' for: minutes: 30 - trigger: state entity_id: input_boolean.dryer_finished to: 'on' for: minutes: 60 - trigger: state entity_id: input_boolean.dryer_finished to: 'on' for: minutes: 120 - trigger: state entity_id: binary_sensor.bathroom_activity to: 'on' for: seconds: 10 conditions: - condition: state entity_id: input_boolean.dryer_finished state: 'on' for: minutes: 10 actions: - action: script.notify_everywhere data: message: Husk at tømme tørretumbleren - alias: Notify HA Shutdown id: e87622e0-9691-421b-8691-94fdab200eef initial_state: true triggers: trigger: homeassistant event: shutdown actions: - action: notify.telegram_darkfox data: message: Home Assistant er ved at lukke ned! - alias: Notify High Memory Usage id: 9b460db9-09da-4b32-8183-7e315bd8d9d6 initial_state: true mode: single triggers: trigger: numeric_state entity_id: sensor.system_monitor_memory_use_percent above: 90 for: seconds: 30 variables: memory_use: '{{ states(''sensor.system_monitor_memory_use_percent'') }}' actions: - action: homeassistant.update_entity entity_id: sensor.add_ons_stats - delay: 2 - action: notify.telegram_darkfox data: message: "Hukommelsesforbrug er højt! {{ memory_use }}%\nTop 5 Add-ons:\n{%-\ \ set stats = state_attr('sensor.add_ons_stats', 'addon_stats') or {} -%}\n\ {%- set memory = stats.get('memory', {}) -%}\n{%- for key, value in memory.items()\ \ %}\n {{ key }}: {{ value }}%\n {%- if loop.index > 4 -%}\n {%- break\ \ -%}\n {%- endif -%}\n{%- endfor -%}\n" - delay: minutes: 15 - alias: Notify high CPU Usage id: 46d3d0e5-746b-4976-a66b-da481afbe993 initial_state: true mode: single triggers: trigger: numeric_state entity_id: sensor.processor_use above: 80 for: seconds: 30 variables: cpu_use: '{{ states(''sensor.processor_use'') }}' actions: - action: homeassistant.update_entity entity_id: sensor.add_ons_stats - delay: 2 - action: notify.telegram_darkfox data: message: "CPU forbrug er højt! {{ cpu_use }}%\nTop 5 Add-ons:\n{%- set stats\ \ = state_attr('sensor.add_ons_stats', 'addon_stats') or {} -%}\n{%- set cpu\ \ = stats.get('cpu', {}) -%}\n{%- for key, value in cpu.items() %}\n {{ key\ \ }}: {{ value }}%\n {%- if loop.index > 4 -%}\n {%- break -%}\n {%-\ \ endif -%}\n{%- endfor -%}\n" - delay: minutes: 15 - alias: Notify Of New External IP id: e86275ad-9c5a-4243-9428-e47f82c03586 initial_state: true triggers: trigger: state entity_id: sensor.gateway_external_ip conditions: - condition: template value_template: '{{ trigger.from_state and trigger.to_state }}' - condition: template value_template: '{{ not trigger.from_state.state == ''unknown'' }}' - condition: template value_template: '{{ not trigger.to_state.state == ''unknown'' }}' actions: - action: notify.telegram_darkfox data: message: Din eksterne IP har ændret sig fra {{ trigger.from_state.state }} til {{ trigger.to_state.state }} - alias: Uncommitted Changes Notification id: bc36b25e-030a-4f15-a0e1-65cf739b7c37 initial_state: true triggers: - trigger: state entity_id: binary_sensor.uncommitted_changes to: 'on' for: hours: 2 - trigger: state entity_id: input_select.sleep_state to: awake for: hours: 2 conditions: - condition: state entity_id: binary_sensor.uncommitted_changes state: 'on' for: hours: 2 actions: - action: persistent_notification.create data: notification_id: uncommitted_changes title: Uncommitted changes! message: You have uncommitted changes in your configuration! - alias: Clear TTS Cache id: ac4fb256-a4c2-4a83-ba9c-edf92df19852 initial_state: true triggers: trigger: time at: 04:45:00 actions: - action: chime_tts.clear_cache data: clear_temp_tts_cache: true clear_www_tts_cache: true clear_chimes_cache: false clear_ha_tts_cache: false - alias: Low Battery id: low_battery initial_state: false triggers: - trigger: state entity_id: sensor.low_battery attribute: entities for: minutes: 15 - trigger: state entity_id: input_select.sleep_state to: awake for: minutes: 15 conditions: - condition: template value_template: '{{ bool((state_attr(''sensor.low_battery'', ''entities'') or []) | length > 0) }}' - condition: state entity_id: input_select.sleep_state state: awake variables: entities: '{{ state_attr(''sensor.low_battery'', ''entities'') or [] }}' friendly_names: '{{ entities | map(''state_attr'', ''friendly_name'') | list }}' entity_count: '{{ friendly_names | length }}' entity_list: '{{ friendly_names | join('' - '') }}' actions: - action: persistent_notification.create data: notification_id: low_battery title: 'Lavt batteri på {{ entity_count }} enhed{{ ''er'' if entity_count > 1 else '''' }} ' message: '- {{ entity_list }} ' - alias: Check for duplicate package names id: f9814b8f-6cd7-42bc-9cf2-138832c4b484 initial_state: true triggers: - trigger: time_pattern hours: '*' minutes: /5 seconds: '0' actions: - action: script.run_pyscript data: action: pyscript.find_duplicate_package_names - alias: Notify of duplicate package names id: b606263a-6423-4b66-b0b4-dfbbd0358ff9 initial_state: true triggers: - trigger: event event_type: duplicate_package_names conditions: - condition: template value_template: '{{ trigger.event.data.get(''duplicates'', {})|length > 0 }}' actions: - action: persistent_notification.create data: notification_id: duplicate_package_names title: Duplicate Package Names message: "{%- set duplicates = trigger.event.data.get('duplicates', {}) -%}\n\ {%- set n = duplicates|length -%}\nFound {{ n }} duplicate package names:\n\ {%- for name, entities in duplicates.items() %}\n - {{ name }}:\n {%-\ \ for entity in entities %}\n - {{ entity }}\n {%- endfor %}\n{% endfor\ \ %}\n" - alias: living_room_tv_on id: 9c31a41b-1c54-469b-8cec-77d4f46fde2a initial_state: true triggers: - trigger: state entity_id: binary_sensor.living_room_video_out to: 'on' actions: - action: switch.turn_on target: entity_id: - switch.stue_tv_active - condition: template value_template: '{{ is_state(''select.sync_box_hdmi_input'', ''Nvidia Shield'') }}' - action: remote.turn_on target: entity_id: - remote.stue_shield - alias: living_room_tv_off id: 53c454fa-09d9-4b69-9862-a5de30a24ec1 initial_state: true triggers: - trigger: state entity_id: binary_sensor.living_room_video_out to: 'off' for: seconds: 10 actions: - action: switch.turn_off target: entity_id: - switch.stue_tv_active - alias: living_room_soundbar_night_mode id: d603bbac-037c-48a2-97d3-89a594565dbd initial_state: true triggers: - trigger: state entity_id: media_player.stue to: 'on' - trigger: time at: '23:00:00' conditions: condition: and conditions: - condition: state entity_id: media_player.stue state: 'on' - condition: time after: '22:59:59' before: 08:59:58 weekday: - sun - mon - tue - wed - thu actions: - action: switch.turn_on data: entity_id: switch.stue_night_sound - condition: template value_template: '{{ state_attr(''media_player.stue'', ''volume_level'')|float > 0.40 }}' - action: media_player.volume_set data: entity_id: media_player.stue volume_level: 0.4 - alias: living_room_soundbar_day_mode id: 13f5dd4a-ee3f-4839-bbe7-90350f00cf89 initial_state: true triggers: - trigger: state entity_id: media_player.stue to: 'on' - trigger: time at: 09:00:00 conditions: condition: and conditions: - condition: state entity_id: media_player.stue state: 'on' - condition: time after: 08:59:59 before: '22:59:58' actions: - action: switch.turn_off data: entity_id: switch.stue_night_sound - alias: Notify Night Sound toggled on Living Room TV id: 30e2883f-068f-47a3-a8ff-efd4a6265a8c initial_state: true triggers: - trigger: state entity_id: switch.stue_night_sound actions: - action: notify.stue_tv data: message: Natlyd slået {{ 'til' if is_state('switch.stue_night_sound', 'on') else 'fra' }} - alias: living_room_media_unmute id: 5812551d-5044-4e94-a6e9-b141b1773316 initial_state: true triggers: - trigger: state entity_id: sensor.living_room_room_state to: active - trigger: state entity_id: media_player.stue to: 'on' conditions: - condition: state entity_id: sensor.living_room_room_state state: active - condition: state entity_id: media_player.stue state: 'on' actions: - action: media_player.volume_mute data: entity_id: media_player.stue is_volume_muted: false - alias: living_room_media_mute id: 053305bf-7d7f-4500-9d2d-d4ca67e738c9 initial_state: true triggers: - trigger: state entity_id: sensor.living_room_room_state to: 'off' - trigger: state entity_id: media_player.stue to: 'on' conditions: - condition: state entity_id: sensor.living_room_room_state state: 'off' - condition: state entity_id: media_player.stue state: 'on' actions: - action: media_player.volume_mute data: entity_id: media_player.stue is_volume_muted: true - alias: Room activity override on id: room_activity_override_on initial_state: true mode: parallel triggers: trigger: state entity_id: - input_boolean.bathroom_activity_override - input_boolean.bedroom_activity_override - input_boolean.hallway_activity_override - input_boolean.kitchen_activity_override - input_boolean.living_room_activity_override - input_boolean.office_activity_override - input_boolean.workshop_activity_override - input_boolean.balcony_activity_override to: 'on' actions: - action: input_select.select_option data: entity_id: input_select.{{ trigger.entity_id.replace('input_boolean.', '').replace('_activity_override', '') }}_room_state option: active - alias: sleep_state_bedtime id: sleep_state_bedtime initial_state: true triggers: - trigger: state entity_id: binary_sensor.rook_presence_delayed to: 'on' - trigger: state entity_id: binary_sensor.bedtime to: 'on' conditions: condition: and conditions: - condition: state entity_id: binary_sensor.rook_presence_delayed state: 'on' - condition: state entity_id: binary_sensor.bedtime state: 'on' - condition: state entity_id: input_select.sleep_state state: awake actions: action: input_select.select_option data: entity_id: input_select.sleep_state option: bedtime - alias: sleep_state_in_bed id: sleep_state_in_bed initial_state: true triggers: - trigger: state entity_id: input_select.sleep_state to: bedtime - trigger: state entity_id: binary_sensor.sovevarelse_gulv to: 'off' conditions: condition: and conditions: - condition: state entity_id: input_select.sleep_state state: bedtime - condition: state entity_id: binary_sensor.sovevarelse_gulv state: 'off' - condition: state entity_id: binary_sensor.sovevaerelse_motion state: 'on' - condition: state entity_id: binary_sensor.sovevarelse_dor state: 'off' - condition: state entity_id: binary_sensor.rook_presence_delayed state: 'on' actions: action: input_select.select_option data: entity_id: input_select.sleep_state option: in bed - alias: sleep_state_sleeping id: sleep_state_sleeping initial_state: true triggers: - trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_started - trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_resumed conditions: condition: and conditions: - condition: state entity_id: binary_sensor.rook_presence_delayed state: 'on' - condition: or conditions: - condition: state entity_id: input_select.sleep_state state: in bed - condition: state entity_id: input_select.sleep_state state: paused - condition: and conditions: - condition: state entity_id: input_select.sleep_state state: bedtime - condition: or conditions: - condition: state entity_id: binary_sensor.sovevaerelse_motion state: 'on' actions: - action: input_select.select_option data: entity_id: input_select.sleep_state option: sleeping - alias: sleep_state_sleeping_cancelled id: sleep_state_sleeping_cancelled initial_state: true triggers: trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_stopped conditions: condition: and conditions: - condition: state entity_id: binary_sensor.rook_presence_delayed state: 'on' - condition: time after: '20:00:00' before: 04:00:00 - condition: or conditions: - condition: state entity_id: input_select.sleep_state state: sleeping - condition: state entity_id: input_select.sleep_state state: paused actions: - action: input_select.select_option data: entity_id: input_select.sleep_state option: in bed - alias: sleep_state_paused_event id: sleep_state_paused_event initial_state: true triggers: - trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_paused conditions: - condition: state entity_id: binary_sensor.rook_presence_delayed state: 'on' - condition: state entity_id: input_select.sleep_state state: sleeping actions: action: input_select.select_option data: entity_id: input_select.sleep_state option: paused - alias: sleep_state_paused id: sleep_state_paused initial_state: true triggers: - trigger: state entity_id: - binary_sensor.sovevarelse_gulv to: 'on' conditions: - condition: state entity_id: binary_sensor.rook_presence_delayed state: 'on' - condition: state entity_id: input_select.sleep_state state: sleeping actions: action: input_select.select_option data: entity_id: input_select.sleep_state option: paused - alias: sleep_state_unpause id: sleep_state_unpause initial_state: true triggers: - trigger: state entity_id: binary_sensor.sovevarelse_gulv to: 'off' conditions: - condition: state entity_id: input_select.sleep_state state: paused - condition: state entity_id: binary_sensor.sovevaerelse_motion state: 'on' - condition: state entity_id: binary_sensor.sovevarelse_dor state: 'off' actions: action: input_select.select_option data: entity_id: input_select.sleep_state option: sleeping - alias: sleep_state_smart_wake id: sleep_state_smart_wake initial_state: true triggers: trigger: event event_type: sleep_as_android event_data: event: smart_period conditions: condition: and conditions: - condition: state entity_id: binary_sensor.rook_presence_delayed state: 'on' - condition: or conditions: - condition: state entity_id: input_select.sleep_state state: in bed - condition: state entity_id: input_select.sleep_state state: sleeping - condition: state entity_id: input_select.sleep_state state: paused actions: - action: input_select.select_option data: entity_id: input_select.sleep_state option: smart wake - alias: sleep_state_alarm id: sleep_state_alarm initial_state: true triggers: trigger: event event_type: sleep_as_android event_data: event: alarm_alert_start conditions: condition: and conditions: - condition: state entity_id: binary_sensor.rook_presence_delayed state: 'on' - condition: or conditions: - condition: state entity_id: input_select.sleep_state state: in bed - condition: state entity_id: input_select.sleep_state state: sleeping - condition: state entity_id: input_select.sleep_state state: paused - condition: state entity_id: input_select.sleep_state state: smart wake actions: - action: input_select.select_option data: entity_id: input_select.sleep_state option: alarm - alias: sleep_state_snoozing id: sleep_state_snoozing initial_state: true triggers: trigger: event event_type: sleep_as_android event_data: event: alarm_snooze_clicked actions: - condition: state entity_id: binary_sensor.rook_presence_delayed state: 'on' - condition: state entity_id: input_select.sleep_state state: alarm - action: input_select.select_option data: entity_id: input_select.sleep_state option: snoozing - alias: sleep_state_waking id: sleep_state_waking initial_state: true triggers: - trigger: event event_type: sleep_as_android event_data: event: alarm_alert_dismiss - trigger: event event_type: sleep_as_android event_data: event: alarm_snooze_cancelled - trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_stopped conditions: condition: or conditions: - condition: state entity_id: input_select.sleep_state state: alarm - condition: state entity_id: input_select.sleep_state state: snoozing actions: - action: input_select.select_option data: entity_id: input_select.sleep_state option: waking - alias: sleep_state_awake id: sleep_state_awake initial_state: true triggers: - trigger: state entity_id: - binary_sensor.gang_entre_bevaegelse - binary_sensor.gang_badevaerelse_bevaegelse to: 'on' - trigger: state entity_id: binary_sensor.sovevarelse_dor to: 'on' conditions: - condition: state entity_id: binary_sensor.sovevarelse_dor state: 'on' - condition: or conditions: - condition: state entity_id: binary_sensor.gang_entre_bevaegelse state: 'on' - condition: state entity_id: binary_sensor.gang_badevaerelse_bevaegelse state: 'on' - condition: or conditions: - condition: state entity_id: input_select.sleep_state state: alarm - condition: state entity_id: input_select.sleep_state state: snoozing - condition: state entity_id: input_select.sleep_state state: waking actions: - action: input_select.select_option data: entity_id: input_select.sleep_state option: awake - alias: winddown_action id: 32b08820-d50d-4a06-a0a6-7678e16a0112 initial_state: true triggers: trigger: numeric_state entity_id: sensor.minutes_to_bedtime below: 31 conditions: - condition: state entity_id: input_select.sleep_state state: awake actions: - action: notify.telegram_darkfox data: message: Det er snart sengetid! Du har {{ states('sensor.minutes_to_bedtime') }} minutter til at afslutte hvad du laver. Alarmen ringer kl. {{ states('sensor.wake_up_time_clock') }}. - alias: winddown_action_2 id: 27d962dd-56b7-4bc6-a857-c562a6eaca63 initial_state: true triggers: trigger: numeric_state entity_id: sensor.minutes_to_bedtime below: 16 conditions: - condition: state entity_id: input_select.sleep_state state: awake actions: - parallel: - action: script.notify_text data: message_title: Det er snart sengetid! message: Du har kun {{ states('sensor.minutes_to_bedtime') }} minutter til at afslutte hvad du laver. Alarmen ringer kl. {{ states('sensor.wake_up_time_clock') }}. - event: set_light_profile event_data: room: bedroom profile: Ambient transition_time: 900 - alias: bedtime_action id: bedtime_action initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: bedtime actions: - action: script.notify_text data: message_title: Sengetid! message: Tid til at gå i gang med sengetidsrutinen! Alarm kl. {{ states('sensor.wake_up_time_clock') }} - event: set_light_profile event_data: room: bedroom profile: Ambient transition_time: 300 - alias: past_bedtime_action id: 4c56b511-63c9-4ee3-b1e9-3ceddebd6995 initial_state: true triggers: trigger: numeric_state entity_id: sensor.minutes_to_bedtime below: -15 conditions: - condition: state entity_id: input_select.sleep_state state: bedtime - condition: state entity_id: binary_sensor.kitchen_active state: 'off' - condition: state entity_id: binary_sensor.bathroom_active state: 'off' - condition: state entity_id: binary_sensor.sovevarelse_active state: 'off' actions: - action: script.notify_text data: message_title: Du er for sent i seng! message: Du er for sent i seng, det er nu {{ states('sensor.minutes_to_bedtime') }} minutter siden du skulle være gået i gang med sengetidsrutinen. Alarmen ringer kl. {{ states('sensor.wake_up_time_clock') }}. - event: set_light_profile event_data: room: bedroom profile: Night transition_time: 120 - action: script.pause_all_media - condition: state entity_id: input_boolean.strict_bedtime state: 'on' - action: script.notify_text data: message_title: Streng Sengetid message: Streng sengetid er slået til, enheder slukkes automatisk om 15 minutter. - alias: way_past_bedtime_action id: 63924853-ef16-4329-9706-da461362527d initial_state: true triggers: trigger: numeric_state entity_id: sensor.minutes_to_bedtime below: -30 conditions: - condition: state entity_id: input_select.sleep_state state: bedtime - condition: state entity_id: binary_sensor.kitchen_active state: 'off' - condition: state entity_id: binary_sensor.bathroom_active state: 'off' - condition: state entity_id: binary_sensor.sovevarelse_active state: 'off' actions: - parallel: - action: script.notify_text data: message_title: Du er meget for sent i seng! message: Du er meget for sent i seng, det er nu {{ states('sensor.minutes_to_bedtime') }} minutter siden du skulle være gået i gang med sengetidsrutinen. Alarmen ringer kl. {{ states('sensor.wake_up_time_clock') }}. - event: set_light_profile event_data: room: bedroom profile: Night transition_time: 120 - action: script.pause_all_media - condition: state entity_id: input_boolean.strict_bedtime state: 'on' - action: script.notify_text data: message_title: Streng Sengetid message: Streng sengetid er slået til, enheder slukkes automatisk. - action: home_assistant.turn_off target: entity_id: - switch.stue_tv - switch.rook_pc - alias: in_bed_action id: in_bed_action initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: in bed variables: wake_up_time: '{{ states(''sensor.wake_up_time_clock'') }}' actions: - parallel: - action: script.turn_on continue_on_error: true target: entity_id: script.sleep_as_android_set_alarm data: variables: message: HA timehour: '{{ wake_up_time.split('':'')[0] }}' timemin: '{{ wake_up_time.split('':'')[1] }}' - action: script.voice_broadcast continue_on_error: true data: entity_id: media_player.sovevaerelse volume_level: 0.08 message: "{%- set events = state_attr((\n 'sensor.agenda' if now().strftime('%H')|int\ \ < 10\n else 'sensor.agenda_tomorrow'\n ), 'events') | selectattr('routine',\ \ 'false') |list -%}\nAlarm sat til klokken {{ wake_up_time }}.\n{% if events\ \ -%} På kalenderen i morgen har du følgende: {% for event in events -%}\n\ \ {%- set start = (event.start | as_datetime) -%}\n {%- set end =\ \ (event.end | as_datetime) -%}\n {%- set start_time = start.strftime('%H:%M')\ \ -%}\n {%- set end_time = end.strftime('%H:%M') -%}\n {%- set start_day\ \ = start.weekday() -%}\n {%- set end_day = end.weekday() -%}\n {%-\ \ if event.current -%}\n - Lige nu: {{ event.summary }} indtil {{ state_attr('sensor.day_name',\ \ 'weekday_names')[end_day] if end_day != start_day }} kl. {{ end_time }}\n\ \ {%- else -%}\n - {{ start_time }} - {{ end_time }}: {{ event.summary\ \ }}\n {%- endif -%}\n{% endfor %} {% else -%} Du har ingen aftaler i\ \ kalenderen i morgen. {% endif %}" - event: set_light_profile event_data: room: bedroom profile: Ambient transition_time: 120.0 - alias: sleeping_action id: sleeping_action initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: sleeping from: in bed actions: - action: switch.turn_on target: entity_id: switch.dorklokke_forstyr_ikke - choose: - conditions: - condition: state entity_id: input_select.sleep_as_android_state state: awake sequence: - action: script.turn_on target: entity_id: script.sleep_as_android_start_tracking - event: set_light_profile event_data: room: bedroom profile: 'Off' transition_time: 10.0 - alias: sleep_paused_action id: sleep_paused_action initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: paused actions: - action: script.turn_on target: entity_id: script.sleep_as_android_pause_tracking - event: set_light_profile event_data: room: bedroom profile: Night - alias: resume_sleep_action id: resume_sleep_action initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: sleeping from: paused actions: - action: script.turn_on target: entity_id: script.sleep_as_android_start_tracking - event: set_light_profile event_data: room: bedroom profile: 'Off' - alias: smart_wake_action id: smart_wake_action initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: smart wake actions: - event: set_light_profile event_data: room: bedroom profile: Night transition_time: 300 - action: switch.turn_off target: entity_id: switch.dorklokke_forstyr_ikke - alias: Smart Wake Media Action id: 6fabaa3a-aac3-4b0d-b4aa-76890922f4f0 initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: smart wake actions: - action: media_player.unjoin target: entity_id: - media_player.sovevaerelse - media_player.badevaerelse - media_player.kokken - media_player.kontor - media_player.stue - media_player.roam - action: media_player.volume_set data: entity_id: - media_player.sovevaerelse volume_level: 0.01 - delay: seconds: 1 - action: script.mass_playlist data: entity_id: media_player.sovevaerelse_mass repeat_mode: all playlist: - I Love Chillhop - alias: Smart Wake Action Delayed id: 84d6b64e-0e23-4a77-baf9-dfc7cfe9d100 initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: smart wake for: minutes: 30 actions: - event: set_light_profile event_data: room: bedroom profile: Ambient transition_time: 300 - action: media_player.volume_set data: entity_id: - media_player.sovevaerelse volume_level: 0.02 - alias: alarm_action id: alarm_action initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: alarm actions: - action: switch.turn_off target: entity_id: switch.dorklokke_forstyr_ikke - event: set_light_profile event_data: room: bedroom profile: Ambient transition_time: 300 - delay: minutes: 5 - condition: state entity_id: input_select.sleep_state state: - alarm - snoozing - waking - event: set_light_profile event_data: room: bedroom profile: Dimmed transition_time: 300 - condition: state entity_id: sun.sun state: above_horizon - alias: snooze_action_media id: f025618f-e3ae-428e-b22a-7df121b56a44 initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: snooze actions: - action: media_player.unjoin target: entity_id: - media_player.sovevaerelse - media_player.badevaerelse - media_player.kokken - media_player.kontor - media_player.stue - media_player.roam - action: media_player.volume_set data: entity_id: - media_player.sovevaerelse volume_level: 0.2 - delay: seconds: 1 - action: script.mass_playlist data: entity_id: media_player.sovevaerelse_mass repeat_mode: all playlist: - Chillhop Radio - delay: minutes: 10 - condition: state entity_id: input_select.sleep_state state: - alarm - snoozing - action: media_player.volume_set data: entity_id: media_player.sovevaerelse volume_level: 0.3 - alias: waking_action_media id: waking_action_media initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: waking actions: - action: script.mass_playlist data: entity_id: media_player.sovevaerelse_mass repeat_mode: all playlist: - '{{ states(''sensor.podcast_radioavisen'') }}' - I Love Chillhop - action: media_player.volume_set data: entity_id: - media_player.sovevaerelse volume_level: 0.3 - alias: waking_action id: waking_action initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: waking actions: - parallel: - action: input_text.set_value target: entity_id: input_text.last_wake_up_time data: value: '{{ now().isoformat() }}' - event: set_light_profile event_data: room: bedroom profile: Dimmed transition_time: 120.0 - action: switch.turn_off target: entity_id: switch.dorklokke_forstyr_ikke - alias: awake_action_media id: awake_action_media initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: awake from: waking actions: - action: media_player.join target: entity_id: media_player.badevaerelse data: group_members: "[\n \"media_player.sovevaerelse\"\n {{ ', \"media_player.kokken\"\ ' if is_state('input_boolean.guests', 'off') }}\n {{ ', \"media_player.roam\"\ ' if is_state('input_boolean.guests', 'off') and not is_state('media_player.roam',\ \ 'unavailable') }}\n]" - action: script.mass_briefing_playlist data: entity_id: media_player.badevaerelse_mass volume_level: 0.5 playlist: - '{{ states(''sensor.podcast_radioavisen'') }}' - '{{ states(''sensor.podcast_dw_news_brief'') }}' - '{{ states(''sensor.podcast_daily_tech_headlines'') }}' - '{{ states(''sensor.podcast_daily_tech_news_show'') }}' - I Love Chillhop - wait_template: '{{ is_state(''media_player.badevaerelse'', ''playing'') }}' timeout: 00:00:30 - action: media_player.volume_set data: entity_id: '["media_player.badevaerelse", "media_player.sovevaerelse" {{ '', "media_player.kokken"'' if is_state(''input_boolean.guests'', ''off'') }}]' volume_level: 0.5 - delay: minutes: 2 - action: media_player.volume_set data: entity_id: '["media_player.badevaerelse", "media_player.sovevaerelse" {{ '', "media_player.kokken"'' if is_state(''input_boolean.guests'', ''off'') }}]' volume_level: 0.6 - alias: awake_action id: awake_action initial_state: true triggers: trigger: state entity_id: input_select.sleep_state to: awake from: waking actions: - parallel: - action: switch.turn_off target: entity_id: switch.dorklokke_forstyr_ikke - action: script.turn_on target: entity_id: script.sleep_as_android_stop_tracking - action: script.turn_on target: entity_id: script.sleep_as_android_dismiss_alarm - event: set_light_profile event_data: room: - bedroom - bathroom profile: Dimmed transition_time: 120.0 - delay: minutes: 3 - event: set_light_profile event_data: room: - bedroom - bathroom profile: Default transition_time: 120.0 - id: pause_tablet_on_sleep alias: Pause Tablet On Sleep triggers: - trigger: event event_type: sleep_as_android event_data: event: light_sleep - trigger: event event_type: sleep_as_android event_data: event: deep_sleep - trigger: event event_type: sleep_as_android event_data: event: rem conditions: - alias: Media is playing on tablet condition: state entity_id: binary_sensor.foxtablet_music_active state: 'on' actions: - action: notify.mobile_app_foxtablet data: message: command_media data: ttl: 0 priority: high media_command: pause media_package_name: "{% set found = false %} {% for key, value in states.sensor.foxtablet_media_session.attributes.items()\ \ %}\n {% if not found and key.startswith('playback_state_') and value\ \ == 'Playing' %}\n {{ key | replace('playback_state_', '') }}\n\ \ {% set found = true %}\n {% endif %}\n{% endfor %}" - alias: Turn on tablet extra dim on sleep id: 10d61b0d-3f8e-40ea-8393-6058c79b189c triggers: - trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_started actions: - action: script.trigger_tasker_task data: action: notify.mobile_app_foxtablet task_id: SET_EXTRA_DIM extra_data: state:true - alias: Turn off tablet extra dim on waking id: 1e67b4e2-cae9-4942-b465-41381052fc4b triggers: - trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_stopped actions: - action: script.trigger_tasker_task data: action: notify.mobile_app_foxtablet task_id: SET_EXTRA_DIM extra_data: state:false - id: turn_off_fan_on_sleep alias: turn_off_fan_on_sleep triggers: - trigger: event event_type: sleep_as_android event_data: event: deep_sleep - trigger: event event_type: sleep_as_android event_data: event: rem - trigger: state entity_id: input_select.sleep_state to: awake actions: - alias: turn off fans action: fan.turn_off target: entity_id: - fan.sovevaerelse_blaeser - alias: Turn on fans in the morning if it's too warm id: 27c977e6-9811-40dd-b11c-10d1447c2833 initial_state: true mode: single triggers: - trigger: state entity_id: - input_select.sleep_state - sensor.sovevaerelse_summer_simmer_perception not_to: - unavailable - unknown conditions: - condition: or conditions: - condition: and conditions: - condition: state entity_id: input_select.sleep_state state: - smart wake - alarm - snoozing - waking - condition: state entity_id: sensor.sovevaerelse_summer_simmer_perception state: - slightly_warm - increasing_discomfort - condition: and conditions: - condition: not conditions: - condition: state entity_id: input_select.sleep_state state: awake - condition: state entity_id: sensor.sovevaerelse_summer_simmer_perception state: - extremely_warm - danger_of_heatstroke - extreme_danger_of_heatstroke - circulatory_collapse_imminent actions: - action: fan.turn_on data: entity_id: - fan.sovevaerelse_blaeser - action: climate.set_temperature data: temperature: 20 hvac_mode: heat_cool target: entity_id: climate.aircondition - id: notify_phone_not_charging_on_sleep alias: Notify phone not charging on sleep initial_state: true mode: single triggers: - trigger: state entity_id: input_select.sleep_state to: sleeping - trigger: state entity_id: sensor.darkphone_charger_type to: none for: seconds: 10 - trigger: state entity_id: binary_sensor.darkphone_interactive to: 'off' for: seconds: 10 conditions: - condition: or conditions: - condition: state entity_id: input_select.sleep_state state: sleeping - condition: state entity_id: sensor.darkphone_charger_type state: none - condition: state entity_id: binary_sensor.darkphone_interactive state: 'off' actions: - action: script.darkphone_tts data: message: Din telefon lader ikke. Husk at sætte den i laderen. severity: 3 - delay: minutes: 5 - id: update_vacuum_last_clean alias: Update Vacuum Last Clean initial_state: true triggers: - trigger: state entity_id: vacuum.valetudo_roborocks5 from: cleaning actions: - action: input_datetime.set_datetime target: entity_id: input_datetime.vacuum_last_clean data: datetime: '{{ now().strftime(''%Y-%m-%d %H:%M:%S'') }}' - id: vacuum_show_menu_when_undocked alias: Vacuum Show Menu When Undocked initial_state: true triggers: - trigger: state entity_id: vacuum.valetudo_roborocks5 to: - cleaning - paused - idle - returning - error actions: - action: input_boolean.turn_on target: entity_id: input_boolean.vacuum_show_card - id: vacuum_hide_menu_when_docked alias: Vacuum Hide Menu When Docked initial_state: true triggers: - trigger: state entity_id: vacuum.valetudo_roborocks5 to: docked actions: - action: input_boolean.turn_off target: entity_id: input_boolean.vacuum_show_card - id: vacuum_while_away alias: Vacuum While Away initial_state: true triggers: - trigger: time_pattern hours: '11' minutes: /5 seconds: '0' - trigger: time_pattern hours: '15' minutes: /5 seconds: '0' conditions: - condition: state entity_id: - calendar.helligdage - input_boolean.guests state: 'off' - condition: time weekday: - mon - tue - wed - thu - fri - condition: state entity_id: vacuum.valetudo_roborocks5 state: docked - condition: state entity_id: binary_sensor.rook_presence_delayed state: 'off' - condition: template alias: At least 8 hours since last clean value_template: '{{ states(''input_datetime.vacuum_last_clean'')|as_timestamp < now()|as_timestamp - 8*60*60 }}' actions: - action: vacuum.start target: entity_id: vacuum.valetudo_roborocks5 - id: vacuum_stop_before_coming_home alias: Vacuum Stop Before Coming Home initial_state: true triggers: - trigger: state entity_id: binary_sensor.rook_home_soon from: 'off' to: 'on' for: minutes: 5 - trigger: state entity_id: binary_sensor.rook_presence from: 'off' to: 'on' for: minutes: 1 actions: - alias: Go to empty position if more than 120m2 since last empty choose: - conditions: - condition: template value_template: '{{ states(''sensor.vacuum_area_cleaned_since_last_empty'')|int > states(''input_number.vacuum_m2_before_empty'')|int }}' sequence: - action: script.send_vacuum_to_emptying_position default: - condition: template value_template: '{{ not is_state(''vacuum.valetudo_roborocks5'', ''docked'') }}' - action: vacuum.return_to_base - alias: Puzzel Robot id: c3d79ebf-18c1-4e2a-8776-a7fdddf87de1 triggers: - trigger: state entity_id: binary_sensor.puzzel_state_incorrect to: 'on' for: seconds: 10 - trigger: state entity_id: binary_sensor.location_at_work for: minutes: 5 - trigger: time_pattern minutes: /30 conditions: - condition: state entity_id: binary_sensor.puzzel_state_incorrect state: 'on' actions: - choose: - conditions: - condition: state entity_id: binary_sensor.puzzel_expected_state state: 'on' - condition: state entity_id: binary_sensor.location_at_work state: 'on' sequence: - action: script.puzzel_log_on data: queue_id: "{% set current_profile_id = state_attr('sensor.puzzel_ko', 'profile_id')|int\ \ %} {% set expected_profiles = state_attr('binary_sensor.puzzel_expected_state',\ \ 'any') %} {% set current_queue_matched = expected_profiles | selectattr('id',\ \ 'eq', current_profile_id) | first %} {% if current_queue_matched %}\n\ \ {{ current_queue_matched.id }}\n{% else %}\n {{ (expected_profiles\ \ | first).id }}\n{% endif %}" - conditions: - condition: state entity_id: binary_sensor.puzzel_expected_state state: 'on' - condition: state entity_id: binary_sensor.location_at_work state: 'off' sequence: - action: script.notify_darkphone data: message: Log på Puzzel? data: inline_keyboard: "{% set ns = namespace(ret=[]) %} {% for profile in state_attr('binary_sensor.puzzel_expected_state',\ \ 'any') | sort(attribute='name') %}\n {% set ns.ret = ns.ret + [profile.name\ \ + ':/puzzel_login '+(profile.id|string)] %}\n{% endfor %} {{ ns.ret\ \ + ['Ignorer:/puzzel_ignore_incorrect'] }}" - conditions: - condition: state entity_id: binary_sensor.puzzel_status state: 'on' - condition: state entity_id: binary_sensor.location_at_work state: 'on' sequence: - action: script.notify_darkphone data: message: Du er stadig logget på Puzzel data: inline_keyboard: '{{ [''Log af:/puzzel_log_off'', ''Ignorer:/puzzel_ignore_incorrect''] }}' - conditions: - condition: state entity_id: binary_sensor.puzzel_status state: 'on' - condition: state entity_id: binary_sensor.location_at_work state: 'off' sequence: - action: script.puzzel_log_off - alias: Ignore Incorrect Puzzel State id: 9b773b63-18d4-4c98-b743-683bc9d5cad9 initial_state: true triggers: - trigger: event event_type: telegram_callback event_data: command: /puzzel_ignore_incorrect - trigger: event event_type: telegram_command event_data: command: /puzzel_ignore_incorrect actions: - action: script.ignore_incorrect_puzzel_state - action: telegram_bot.answer_callback_query data: callback_query_id: '{{ trigger.event.data.id }}' message: Ignorerer forkert Puzzel status indtil næste skift - alias: Reset Ignore Incorrect Puzzel State id: efca9026-7293-4d95-8ae9-7cc084b3e244 triggers: - trigger: state entity_id: binary_sensor.puzzel_state_incorrect not_from: - unknown - unavailable actions: - action: script.reset_ignore_incorrect_puzzel_state - id: set_work_phone_modes initial_state: true alias: Set Work Phone Modes mode: queued triggers: - trigger: state entity_id: sensor.arbejdstelefon_phone_state to: - ringing - offhook - trigger: state entity_id: - binary_sensor.working - sensor.arbejdstelefon_do_not_disturb_sensor - sensor.arbejdstelefon_ringer_mode actions: - choose: - conditions: - alias: Prevent silencing phone when on call or at work condition: template value_template: "{{\n is_state('binary_sensor.working', 'on')\n}}" sequence: - action: notify.mobile_app_arbejdstelefon data: message: command_ringer_mode data: command: normal ttl: 0 priority: high - action: notify.mobile_app_arbejdstelefon data: message: command_dnd data: command: 'off' ttl: 0 priority: high - conditions: - alias: Silence phone when going off call/work condition: template value_template: "{{\n is_state('binary_sensor.working', 'off')\n}}" sequence: - action: notify.mobile_app_arbejdstelefon data: message: command_ringer_mode data: command: vibrate ttl: 0 priority: high - action: notify.mobile_app_arbejdstelefon data: message: command_dnd data: command: priority_only ttl: 0 priority: high - id: update_3d_printer_model_image_on_file_change alias: Update 3D Printer Model Image On File Change triggers: - trigger: state entity_id: sensor.octoprint_print_file actions: - action: script.turn_on target: entity_id: script.update_model_image - id: set_3d_printer_last_started alias: Set 3D Printer Last Started triggers: - trigger: state entity_id: sensor.octoprint_start_time not_to: - unavailable - unknown actions: - action: input_text.set_value data: entity_id: input_text.3d_printer_last_started value: '{{ states(''sensor.octoprint_start_time'') }}' - action: input_text.set_value data: entity_id: input_text.3d_printer_last_ended value: '' - id: set_3d_printer_last_ended alias: Set 3D Printer Last Ended triggers: - trigger: state entity_id: sensor.octoprint_start_time to: unknown actions: - action: input_text.set_value data: entity_id: input_text.3d_printer_last_ended value: '{{ now() }}' - alias: Update Personal Calendar id: 16e9122a-c1c4-4966-9040-1dc133e2e009 initial_state: true mode: restart triggers: - trigger: time_pattern hours: '*' minutes: /15 seconds: '0' - trigger: state entity_id: calendar.calendar - trigger: state entity_id: binary_sensor.home_assistant_loaded to: 'on' for: seconds: 10 - trigger: state entity_id: sensor.calendar_regexes conditions: - condition: state entity_id: sensor.calendar_regexes state: OK variables: calendar_entity: calendar.calendar calendar_name: Personlig Kalender regexes: '{{ states.sensor.calendar_regexes.attributes }}' bool_attrs: travel: '{{ [regexes.transit, regexes.bil] }}' bil: '{{ [regexes.bil] }}' transit: '{{ [regexes.transit] }}' guests: '{{ [regexes.guests] }}' wake: '{{ [{''negate'': true, ''regex'': ''.*(#nowake).*''}] }}' routine: '{{ [regexes.routine] }}' actions: - action: calendar.get_events data: start_date_time: '{{ now().strftime(''%Y-%m-%d'') }} 00:00:00' end_date_time: '{{ (now() + timedelta(days=7)).strftime(''%Y-%m-%d'') }} 23:59:59' target: entity_id: '{{ calendar_entity }}' response_variable: all_events - variables: agenda_events: '{%- from ''agenda.jinja'' import agenda_events -%} {{ agenda_events(all_events, calendar_entity, calendar_name, regexes, bool_attrs) }} ' - event: calendar_updated event_data: calendar: '{{ calendar_name }}' time: '{{ now().strftime(''%Y-%m-%d %H:%M:%S'') }}' events: '{{ agenda_events }}' - alias: Update Work Calendar id: ada86b2e-be99-4b82-b53f-da58547a0b3c initial_state: true mode: restart triggers: - trigger: time_pattern hours: '*' minutes: /15 seconds: '0' - trigger: state entity_id: calendar.arbejdskalender - trigger: state entity_id: binary_sensor.home_assistant_loaded to: 'on' for: seconds: 10 - trigger: state entity_id: sensor.calendar_regexes variables: calendar_entity: calendar.arbejdskalender calendar_name: Arbejdskalender regexes: '{{ states.sensor.calendar_regexes.attributes }}' bool_attrs: travel: '{{ [regexes.transit, regexes.work_bil, regexes.bil] }}' bil: '{{ [regexes.work_bil, regexes.bil] }}' wake: '{{ [regexes.work_bil, regexes.bil, regexes.wfh] }}' routine: '{{ [regexes.routine] }}' vagtskema: '{{ [regexes.vagtskema] }}' vagt: '{{ [regexes.vagt] }}' on_site: '{{ [regexes.on_site] }}' off_site: '{{ [regexes.off_site] }}' rsr: '{{ [regexes.rsr] }}' rsh: '{{ [regexes.rsh] }}' wfh: '{{ [regexes.wfh] }}' ferie: '{{ [regexes.ferie] }}' actions: - action: calendar.get_events data: start_date_time: '{{ now().strftime(''%Y-%m-%d'') }} 00:00:00' end_date_time: '{{ (now() + timedelta(days=7)).strftime(''%Y-%m-%d'') }} 23:59:59' target: entity_id: '{{ calendar_entity}}' response_variable: all_events - variables: agenda_events: '{%- from ''agenda.jinja'' import agenda_events -%} {{ agenda_events(all_events, calendar_entity, calendar_name, regexes, bool_attrs) }} ' - event: calendar_updated event_data: calendar: '{{ calendar_name }}' time: '{{ now().strftime(''%Y-%m-%d %H:%M:%S'') }}' events: '{{ agenda_events }}' - alias: Update Work Schedule id: e565f087-c440-4619-ab51-b18d535dbfac initial_state: true mode: restart triggers: - trigger: time_pattern hours: '*' minutes: /15 seconds: '0' - trigger: state entity_id: calendar.vagtplan - trigger: state entity_id: binary_sensor.home_assistant_loaded to: 'on' for: seconds: 10 - trigger: state entity_id: sensor.calendar_regexes variables: calendar_entity: calendar.vagtplan calendar_name: Vagtplan regexes: '{{ states.sensor.calendar_regexes.attributes }}' actions: - action: calendar.get_events data: start_date_time: '{{ now().strftime(''%Y-%m-%d'') }} 00:00:00' end_date_time: '{{ (now() + timedelta(days=15)).strftime(''%Y-%m-%d'') }} 23:59:59' target: entity_id: '{{ calendar_entity }}' response_variable: all_events - variables: agenda_events: '{%- from ''agenda.jinja'' import agenda_events -%} {%- from ''work_schedule.jinja'' import parse_work_schedule_event -%} {{ agenda_events(all_events, calendar_entity, calendar_name, regexes, preprocessor=parse_work_schedule_event) }} ' - event: calendar_updated event_data: calendar: '{{ calendar_name }}' time: '{{ now().strftime(''%Y-%m-%d %H:%M:%S'') }}' events: '{{ agenda_events }}' - alias: Update Tripit Calendar id: fdab31ae-dbd7-4808-a671-6fa05e331a59 initial_state: true triggers: - trigger: time_pattern hours: '*' minutes: /15 seconds: '0' - trigger: state entity_id: calendar.tripit - trigger: state entity_id: binary_sensor.home_assistant_loaded to: 'on' for: seconds: 10 - trigger: state entity_id: sensor.calendar_regexes variables: calendar_entity: calendar.tripit calendar_name: Tripit Kalender regexes: '{{ states.sensor.calendar_regexes.attributes }}' bool_attrs: travel: '{{ [regexes.transit, regexes.bil] }}' bil: '{{ [regexes.bil] }}' transit: '{{ [regexes.transit] }}' wake: '{{ [{''negate'': true, ''regex'': ''.*( Eberhardt is in ).*''}] }}' routine: '{{ [regexes.routine] }}' attrs: type: '\[(.+)\](?: (?:.+) -)* (?:.+) to (?:.+)' carrier: '\[(?:.+)\](?: (.+) -)* (?:.+) to (?:.+)' from: '\[(?:.+)\](?: (?:.+) -)* (.+) to (?:.+)' to: '\[(?:.+)\](?: (?:.+) -)* (?:.+) to (.+)' actions: - action: calendar.get_events data: start_date_time: '{{ now().strftime(''%Y-%m-%d'') }} 00:00:00' end_date_time: '{{ (now() + timedelta(days=7)).strftime(''%Y-%m-%d'') }} 23:59:59' target: entity_id: '{{ calendar_entity}}' response_variable: all_events - variables: agenda_events: '{%- from ''agenda.jinja'' import agenda_events -%} {{ agenda_events(all_events, calendar_entity, calendar_name, regexes, bool_attrs, attrs) }} ' - event: calendar_updated event_data: calendar: '{{ calendar_name }}' time: '{{ now().strftime(''%Y-%m-%d %H:%M:%S'') }}' events: '{{ agenda_events }}' - alias: get_dmi_weather_report id: 55586488-6ce5-429b-84c5-ce84f17f5c8b initial_state: true mode: restart triggers: - trigger: time_pattern minutes: /15 actions: - action: script.run_pyscript data: action: pyscript.get_dmi_weather_report data: location_id: secret dmi_location_id - alias: get_dmi_severe_weather_warnings id: 4db44655-fc7d-4808-b8fd-90ada6708c54 initial_state: true mode: restart triggers: - trigger: time_pattern minutes: /15 actions: - action: script.run_pyscript data: action: pyscript.get_dmi_severe_weather_warnings data: location_id: secret dmi_location_id - alias: download_dmi_warning_icon id: 6f7e8d9a-0b1c-2d3e-4f5g-6h7i8j9k0l1m initial_state: true mode: single triggers: - trigger: state entity_id: sensor.dmi_aktuel_varsel attribute: icon_file not_to: '' actions: - action: downloader.download_file data: url: https://www.dmi.dk/fileadmin/assets/Varselsikoner/{{ state_attr('sensor.dmi_aktuel_varsel', 'icon_file') }} subdir: dmi_warning_icons overwrite: true - alias: Broadcast Weather Forecast id: c220f137-3ea0-4a9e-9531-5db7e025168c initial_state: true mode: single triggers: trigger: state entity_id: weather.forecast_home actions: - action: weather.get_forecasts response_variable: forecast target: entity_id: weather.forecast_home data: type: hourly - event: weather_forecast event_data: entity_id: weather.forecast_home forecast: '{{ forecast.get(''weather.forecast_home'', {}).get(''forecast'', []) }}' - alias: lightning_warning id: 7abec12c-5464-4934-93aa-6decdc94186a initial_state: true mode: single triggers: trigger: template value_template: "{{\n not is_state('sensor.blitzortung_lightning_distance', 'unknown')\n\ \ and not is_state('sensor.blitzortung_lightning_distance', 'unavailable')\n\ \ and (states('sensor.blitzortung_lightning_distance') | int) < 10\n}}" actions: - action: script.notify_darkphone data: message_title: 'Vejr Varsel: Torden' message: Lynnedslag {{ states('sensor.blitzortung_lightning_distance') }} {{ state_attr('sensor.blitzortung_lightning_distance', 'unit_of_measurement') }} væk. - delay: minutes: 10 - alias: Kettle Set Keep Warm id: e463a349-ae3b-41be-8d29-3fbc75d4e5ed initial_state: true triggers: - trigger: state entity_id: number.elkedel_varmholdningstid - trigger: state entity_id: binary_sensor.elkedel_brygger to: 'on' condition: - condition: numeric_state entity_id: number.elkedel_varmholdningstid above: 0 - condition: state entity_id: binary_sensor.elkedel_brygger state: 'on' action: - action: switch.turn_on target: entity_id: switch.elkedel_varmholdning - alias: Kettle Reset Keep Warm Time id: b85c1cdb-f8dd-4680-8101-cdc9919a60f2 initial_state: true triggers: - trigger: state entity_id: switch.elkedel to: 'off' action: - action: number.set_value target: entity_id: number.elkedel_varmholdningstid data: value: 0 - id: kettle_brewing_notification alias: Elkedel Brygger Notifikation initial_state: true triggers: trigger: state entity_id: binary_sensor.elkedel_brygger from: 'off' to: 'on' actions: - action: notify.telegram_darkfox data: message: Elkedel brygger - id: kettle_done_notification alias: Elkedel Færdig Notifikation initial_state: true triggers: trigger: state entity_id: binary_sensor.elkedel_brygger from: 'on' to: 'off' actions: - action: script.notify_everywhere data: message: Elkedel færdig{{ ' og holder varm i ' + (states('number.elkedel_varmholdningstid') | int) + ' minutter' if states('sensor.elkedel_status') == 'Holder varm' else '' }}. - alias: Pause Media On Phone Call id: pause_media_on_phone_call initial_state: true triggers: - trigger: state entity_id: - sensor.arbejdstelefon_phone_state - sensor.darkphone_phone_state to: - ringing - offhook from: idle conditions: - condition: state entity_id: binary_sensor.rook_presence state: 'on' - condition: template value_template: "{{\n trigger.to_state.entity_id == 'sensor.darkphone_phone_state'\n\ \ or is_state('binary_sensor.working', 'on')\n}}" actions: - action: script.turn_on entity_id: script.pause_all_media - alias: Unpause On Phone Call Finished id: unpause_media_on_phone_call_finished initial_state: true triggers: - trigger: state entity_id: - sensor.arbejdstelefon_phone_state - sensor.darkphone_phone_state to: idle conditions: - condition: state entity_id: binary_sensor.rook_presence state: 'on' actions: - action: script.turn_on entity_id: script.resume_all_media - alias: On Call Ringing While Sleeping id: on_call_ringing_while_sleeping initial_state: true triggers: - trigger: state entity_id: sensor.arbejdstelefon_phone_state to: ringing conditions: - condition: state entity_id: binary_sensor.rook_presence state: 'on' - condition: state entity_id: binary_sensor.on_call state: 'on' actions: - choose: - conditions: - condition: state entity_id: input_select.sleep_state state: - sleeping - smart wake sequence: - action: input_select.select_option data: entity_id: input_select.sleep_state option: paused - event: set_light_profile event_data: room: bedroom profile: Night - alias: On Call Picked Up id: on_call_picked_up initial_state: true triggers: - trigger: state entity_id: sensor.arbejdstelefon_phone_state to: offhook conditions: - condition: state entity_id: binary_sensor.rook_presence state: 'on' - condition: state entity_id: binary_sensor.on_call state: 'on' - condition: state entity_id: input_select.sleep_state state: - sleeping - smart wake - paused actions: - event: set_light_profile event_data: room: bedroom profile: Ambient - delay: seconds: 30 - condition: state entity_id: sensor.arbejdstelefon_phone_state state: offhook - event: set_light_profile event_data: room: bedroom profile: Dimmed - alias: On Call Done id: on_call_done initial_state: true triggers: - trigger: state entity_id: sensor.arbejdstelefon_phone_state from: offhook to: idle for: minutes: 2 - trigger: state entity_id: device_tracker.pc074805 to: not_home for: seconds: 30 conditions: - condition: state entity_id: binary_sensor.rook_presence state: 'on' - condition: state entity_id: binary_sensor.on_call state: 'on' - condition: state entity_id: device_tracker.pc074805 state: not_home - condition: state entity_id: sensor.arbejdstelefon_phone_state state: idle actions: - choose: - conditions: - condition: state entity_id: input_select.sleep_state state: - paused sequence: - event: set_light_profile event_data: room: bedroom profile: 'Off' - action: input_select.select_option data: entity_id: input_select.sleep_state option: sleeping - alias: On Call Not Picked Up id: on_call_not_picked_up initial_state: true triggers: - trigger: state entity_id: input_boolean.work_phone_ringing to: 'off' for: seconds: 5 conditions: - condition: state entity_id: sensor.arbejdstelefon_phone_state state: idle - condition: state entity_id: binary_sensor.rook_presence state: 'on' - condition: state entity_id: binary_sensor.on_call state: 'on' actions: - choose: - conditions: - condition: state entity_id: input_select.sleep_state state: - paused sequence: - event: set_light_profile event_data: room: bedroom profile: 'Off' - action: input_select.select_option data: entity_id: input_select.sleep_state option: sleeping - alias: Work phone caller lookup id: work_phone_caller_lookup initial_state: true triggers: - trigger: state entity_id: input_text.work_phone_caller conditions: - condition: template value_template: '{{ trigger.to_state.state not in ['''', ''unavailable'', ''unknown''] }}' - condition: state entity_id: sensor.arbejdstelefon_phone_state state: - ringing - offhook actions: - variables: phone_number: '{{ states(''input_text.work_phone_caller'')[-8:] }}' - action: script.puzzel_lookup_caller response_variable: caller data: phone_number: '{{ phone_number }}' - action: script.puzzel_get_current_request response_variable: puzzel_request - variables: current_request: '{{ puzzel_request or {} }}' actual_phone_number: '{{ current_request.get(''phone_number'', '''') or phone_number }}' actual_caller: '{{ current_request.get(''caller'', {}) or caller }}' line: '{{ caller.get(''caller'', {}).get(''name'', '''') if current_request.get(''phone_number'') else ''''}}' - event: work_call_received event_data: phone_number: '{{ actual_phone_number }}' caller_info: '{{ actual_caller }}' line: '{{ line }}' - alias: Work call picked up id: work_call_picked_up initial_state: true triggers: - trigger: state entity_id: sensor.arbejdstelefon_phone_state to: offhook actions: - action: input_boolean.turn_on data: entity_id: input_boolean.work_phone_picked_up - alias: Work call ended id: work_call_ended initial_state: true triggers: - trigger: state entity_id: sensor.arbejdstelefon_phone_state to: idle from: - ringing - offhook actions: - event: work_call_ended event_data: call_info: phone_number: '{{ states(''sensor.current_work_call'') }}' formatted_phone: '{{ state_attr(''sensor.current_work_call'', ''formatted_phone'') }}' caller_info: '{{ state_attr(''sensor.current_work_call'', ''caller_info'') }}' line: '{{ state_attr(''sensor.current_work_call'', ''line'') }}' start: '{{ state_attr(''sensor.current_work_call'', ''start'') }}' picked_up: '{{ is_state(''input_boolean.work_phone_picked_up'', ''on'') }}' - action: input_text.set_value data: entity_id: input_text.work_phone_caller value: '' - action: input_boolean.turn_off data: entity_id: input_boolean.work_phone_picked_up - alias: Notify Work Call id: notify_work_call initial_state: true triggers: - trigger: state entity_id: sensor.current_work_call conditions: - condition: template value_template: "{{\n trigger is defined\n and trigger\n and trigger.to_state\n\ \ and trigger.to_state.state\n and trigger.to_state.attributes\n and trigger.to_state.state\ \ not in ['unknown', 'unavailable', '']\n}}" actions: - choose: - conditions: - condition: template value_template: '{{ trigger.to_state.attributes.caller_info is not none and trigger.to_state.attributes.caller_info != {} }}' sequence: - variables: caller: '{{ trigger.to_state.attributes.caller_info }}' name: '{{ caller.name }}' title: '{{ caller.title }}' email: '{{ caller.email }}' organization: '{{ caller.organization }}' formatted_phone: '{{ trigger.to_state.attributes.formatted_phone }}' line: '{{ trigger.to_state.attributes.line }}' - action: notify.mobile_app_arbejdstelefon data: title: '{{ name }}' message: '{{ title }} hos {{ organization }}. Tlf: {{ formatted_phone }} Email: {{ email }} {{ ''Linje: '' + line if line != '''' }} ' data: tag: puzzel_caller channel: Puzzel Caller importance: high ttl: 0 priority: high persistent: false clickAction: noAction notification_icon: mdi:phone-classic - action: notify.telegram_darkfox data: message: 'Arbejdspkald fra {{ name }} {{ title }} hos {{ organization }}. Tlf: {{ formatted_phone }} Email: {{ email }} {{ ''Linje: '' + line if line != '''' }} ' default: - action: notify.telegram_darkfox data: message: 'Arbejdsopkald fra ukendt nummer: {{ trigger.to_state.attributes.formatted_phone }}' - alias: presence notification id: 88f231b1-3ece-4832-89da-698a699887ce triggers: - trigger: state entity_id: binary_sensor.rook_presence from: 'on' to: 'off' - trigger: state entity_id: binary_sensor.rook_presence from: 'off' to: 'on' actions: - action: script.debug_notification data: message: 'Presence: {{ states(''binary_sensor.rook_presence'') }}' title: Presence - alias: home soon notification id: 86c36bf4-87dd-4a33-8f71-19ae84b98426 triggers: - trigger: state entity_id: binary_sensor.rook_home_soon from: 'on' to: 'off' - trigger: state entity_id: binary_sensor.rook_home_soon from: 'off' to: 'on' actions: - action: script.debug_notification data: message: 'Home Soon: {{ states(''binary_sensor.rook_home_soon'') }}' title: Home Soon - alias: Turn off away power saving devices id: 533afc86-936c-45bc-92eb-dbb2e2a3a66e initial_state: true triggers: - trigger: state entity_id: binary_sensor.rook_presence_delayed to: 'off' conditions: - condition: state entity_id: input_boolean.guests state: 'off' actions: - repeat: for_each: '{{ state_attr(''group.away_power_saving_devices'', ''entity_id'') | list }}' sequence: - action: homeassistant.turn_off continue_on_error: true target: entity_id: '{{ repeat.item }}' - alias: Turn on home power saving devices id: bfa2d56c-21c2-4d9f-9dfb-abe37e55e8d1 initial_state: true triggers: - trigger: state entity_id: binary_sensor.rook_presence to: 'on' actions: - repeat: for_each: '{{ state_attr(''group.home_power_saving_devices'', ''entity_id'') | list }}' sequence: - action: homeassistant.turn_on continue_on_error: true target: entity_id: '{{ repeat.item }}' - alias: Rook State Machine id: rook_state_machine initial_state: true mode: queued triggers: - trigger: event event_type: rook_state_change variables: current_state: '{{ states(''input_select.rook_state'') }}' new_state: '{{ trigger.event.data.state }}' allowed_transitions: home_soon: - home - away - away_long just_arrived: - home - leaving - just_left home: - leaving - just_left leaving: - just_left - home just_left: - home - away away: - away_long - home_soon - just_arrived away_long: - home_soon - just_arrived transition_allowed: '{{ new_state in allowed_transitions[current_state] }}' actions: - choose: - conditions: - condition: template value_template: '{{ transition_allowed }}' sequence: - action: input_datetime.set_datetime target: entity_id: input_datetime.rook_state_changed data: timestamp: '{{ now().isoformat() }}' - action: input_select.select_option target: entity_id: input_select.rook_state data: option: '{{ new_state }}' - conditions: - condition: template value_template: '{{ not transition_allowed }}' sequence: - action: script.debug_notification data: message: Invalid state transition from {{ current_state }} to {{ new_state }} title: 'Rook State: Invalid State Transition' - alias: Rook State Machine - Trigger Home id: c2e74123-6fe3-43c6-bf7c-e0af3fab0ed7 triggers: - trigger: numeric_state entity_id: sensor.rook_state_changed_minutes_ago above: 5 conditions: - condition: state entity_id: input_select.rook_state state: just_arrived actions: - event: rook_state_change event_data: state: home - alias: Rook State Machine - Trigger Just Left id: 44ae4efa-54f0-439e-9b68-fa2caaaf3294 triggers: - trigger: numeric_state entity_id: sensor.rook_state_changed_minutes_ago above: 5 conditions: - condition: state entity_id: input_select.rook_state state: leaving actions: - event: rook_state_change event_data: state: just_left - alias: Rook State Machine - Trigger Away id: ca164f86-7ee5-4001-b705-c0c1585472cf triggers: - trigger: numeric_state entity_id: sensor.rook_state_changed_minutes_ago above: 30 conditions: - condition: state entity_id: input_select.rook_state state: just_left actions: - event: rook_state_change event_data: state: away - alias: Rook State Machine - Trigger Away Long id: 64d9c2af-8404-404c-ae18-b86cd3d98a94 triggers: - trigger: numeric_state entity_id: sensor.rook_state_changed_minutes_ago above: 1080 conditions: - condition: state entity_id: input_select.rook_state state: away actions: - event: rook_state_change event_data: state: away_long - id: update_puzzel_user_info alias: Update Puzzel user info initial_state: true mode: queued triggers: - trigger: state entity_id: sensor.puzzel_login - trigger: homeassistant event: start actions: - delay: seconds: 1 - action: homeassistant.update_entity target: entity_id: sensor.puzzel_user - delay: seconds: 1 - action: homeassistant.update_entity target: entity_id: sensor.puzzel_user_details - alias: Puzzel faster scan interval when logged on id: 0a2b75b8-58d4-4dce-8894-fb09bd8aba6b initial_state: true mode: single triggers: - trigger: time_pattern seconds: /5 conditions: - condition: state entity_id: binary_sensor.puzzel_status state: 'on' actions: - action: homeassistant.update_entity target: entity_id: - sensor.puzzel_user_status - sensor.puzzel_user_details - alias: Update Puzzel Requests id: 7194575a-e2c6-4c54-b081-847fdf8056d2 initial_state: true mode: single triggers: - trigger: state entity_id: sensor.puzzel_user_status not_from: null actions: - action: homeassistant.update_entity target: entity_id: sensor.puzzel_user_requests - id: puzzel_state_confirmation alias: Puzzel state confirmation initial_state: true mode: restart triggers: - trigger: state entity_id: sensor.puzzel_profil not_from: - unknown - unavailable not_to: - unknown - unavailable - trigger: state entity_id: binary_sensor.puzzel_status attribute: state not_from: - unknown - unavailable not_to: - unknown - unavailable conditions: - condition: template alias: Not to or from unknown or unavailable state value_template: "{{ \n has_value('sensor.puzzel_state')\n and has_value('sensor.puzzel_profil')\n\ }}" actions: - delay: seconds: 5 - action: script.notify_darkphone data: message: "{% if is_state('binary_sensor.puzzel_status', 'on') %}\n Logget på\ \ Puzzel - {{ states('sensor.puzzel_ko') }}. Status: {{ states('sensor.puzzel_state')\ \ }}\n{% else %}\n Logget af Puzzel\n{% endif %}" - id: puzzel_state_notification alias: Puzzel State Notification initial_state: true mode: queued triggers: - trigger: state entity_id: sensor.puzzel_profil - trigger: state entity_id: sensor.puzzel_state attribute: state actions: - action: notify.mobile_app_arbejdstelefon data: title: 'Puzzel Status: {{ ''Logget af'' if is_state(''sensor.puzzel_profil'', ''Logget af'') else ''Logget på'' }}' message: 'Profil: {{ states(''sensor.puzzel_profil'') }}. Status: {{ states(''sensor.puzzel_state'') }}' data: tag: puzzel_status channel: Puzzel Status importance: low ttl: 0 priority: high persistent: true clickAction: noAction notification_icon: "{%- if is_state('sensor.puzzel_state', 'Logget af') -%}\n\ \ mdi:phone-classic-off\n{%- elif is_state('sensor.puzzel_state', 'Pause')\ \ -%}\n mdi:pause-circle-outline\n{%- elif is_state('sensor.puzzel_state',\ \ 'Ledig') -%}\n mdi:phone-classic\n{%- else -%}\n mdi:help\n{%- endif\ \ -%}" actions: - action: puzzel_switch title: '{{ ''Log på'' if is_state(''sensor.puzzel_profil'', ''Logget af'') else ''log_af'' }}' - action: puzzel_pause title: '{{ ''Ledig'' if is_state(''sensor.puzzel_state'', ''Pause'') else ''Pause'' }}' - action: URI title: Menu uri: /lovelace-work/work - id: notification_action_puzzel_switch alias: Notification Action Puzzel Switch initial_state: true triggers: - trigger: event event_type: mobile_app_notification_action event_data: action: puzzel_switch actions: - action: switch.toggle target: entity_id: switch.puzzel - id: notification_action_puzzel_pause alias: Notification Action Puzzel Pause initial_state: true triggers: - trigger: event event_type: mobile_app_notification_action event_data: action: puzzel_pause actions: - action: switch.toggle target: entity_id: switch.puzzel_pause - id: telegram_bot_puzzel_menu initial_state: true alias: Puzzel menu triggers: - trigger: event event_type: telegram_callback event_data: command: /puzzel - trigger: event event_type: telegram_command event_data: command: /puzzel actions: - action: notify.telegram_darkfox data: message: "{% if is_state('sensor.puzzel_profil', 'Logget af') %}\n Logget af\ \ Puzzel\n{% else %}\n Logget på Puzzel - {{ states('sensor.puzzel_profil')\ \ }}. Status: {{ states('sensor.puzzel_state') }}\n{% endif %} Menu:" data: inline_keyboard: "{% if is_state('sensor.puzzel_profil', 'Logget af') %}\n\ \ {{ (\n state_attr('sensor.puzzel_ko', 'available_profiles')\n |\ \ map(attribute='name')\n | map('regex_replace', '\\A(.*)\\Z', '\\\\\ 1:/puzzel_login \\\\1')\n | list\n ) }}\n{% else %}\n {{ ['Log af:/puzzel_log_off']\n\ \ + ['Skift kø:/puzzel_login']\n + ['Ledig:/puzzel_pause off']\n + ['Pause:/puzzel_pause\ \ on'] }}\n{% endif %}" - id: telegram_bot_log_off_puzzel alias: Telegram bot log off puzzel initial_state: true triggers: - trigger: event event_type: telegram_callback event_data: command: /puzzel_log_off - trigger: event event_type: telegram_command event_data: command: /puzzel_log_off actions: - action: telegram_bot.answer_callback_query data: callback_query_id: '{{ trigger.event.data.id }}' message: Logger af Puzzel... - action: script.puzzel_log_off - id: telegram_bot_log_on_puzzel alias: Telegram bot log on Puzzel initial_state: true triggers: - trigger: event event_type: telegram_callback event_data: command: /puzzel_login - trigger: event event_type: telegram_command event_data: command: /puzzel_login actions: - choose: - conditions: - condition: template value_template: '{{ not trigger.event.data[''args''] }}' sequence: - action: notify.telegram_darkfox data: message: Log på Puzzel? data: inline_keyboard: "{% set ns = namespace(ret=[]) %} {% for profile in state_attr('sensor.puzzel_ko',\ \ 'available_profiles') | sort(attribute='name') %}\n {% set ns.ret\ \ = ns.ret + [profile.name + ':/puzzel_login '+(profile.id|string)]\ \ %}\n{% endfor %} {{ ns.ret }}" default: - variables: queue_id: '{{ trigger.event.data[''args''][0]|int }}' profile: '{{ state_attr(''sensor.puzzel_ko'', ''available_profiles'') | selectattr(''id'', ''eq'', queue_id) | list | first }}' - choose: - conditions: - condition: template value_template: '{{ profile is not none }}' sequence: - action: telegram_bot.answer_callback_query data: callback_query_id: '{{ trigger.event.data.id }}' message: Logger på {{ profile.name }}... - action: script.puzzel_log_on data: queue_id: '{{ queue_id }}' default: - action: telegram_bot.answer_callback_query data: callback_query_id: '{{ trigger.event.data.id }}' message: Kø ikke fundet - action: automation.trigger target: entity_id: automation.telegram_bot_log_on_puzzel - id: telegram_bot_pause_puzzel alias: Telegram bot pause Puzzel initial_state: true triggers: - trigger: event event_type: telegram_callback event_data: command: /puzzel_pause - trigger: event event_type: telegram_command event_data: command: /puzzel_pause actions: - choose: - conditions: - condition: template value_template: '{{ not trigger.event.data[''args''] }}' sequence: - action: telegram_bot.answer_callback_query data: callback_query_id: '{{ trigger.event.data.id }}' message: Sætter på pause... - action: script.puzzel_pause_on - conditions: - condition: template value_template: '{{ trigger.event.data[''args''][0] == ''off'' }}' sequence: - action: telegram_bot.answer_callback_query data: callback_query_id: '{{ trigger.event.data.id }}' message: Sætter ledig... - action: script.puzzel_pause_off - alias: Switch PC sound to VR id: switch_pc_sound_to_vr mode: single initial_state: true triggers: - trigger: state entity_id: binary_sensor.quest_in_use to: 'on' actions: - action: button.press target: entity_id: button.rook_pc_vr_sound - alias: Sleep as Android MQTT event id: 5cb9a551-a39e-462b-9a7f-ebc36711173d initial_state: true triggers: - trigger: mqtt topic: SleepAsAndroid actions: - event: sleep_as_android event_data: event: '{{ trigger.payload_json.event }}' value1: '{{ trigger.payload_json.value1 if ''value1'' in trigger.payload_json }}' value2: '{{ trigger.payload_json.value2 if ''value2'' in trigger.payload_json }}' value3: '{{ trigger.payload_json.value3 if ''value3'' in trigger.payload_json }}' - alias: Sleep as Android Webhook event id: 7984e11c-2846-4faa-aed7-ee439127b9fd initial_state: true triggers: - trigger: webhook webhook_id: secret sleep_as_android_webhook local_only: false allowed_methods: - GET - POST actions: - event: sleep_as_android event_data: event: '{{ trigger.json.event }}' value1: '{{ trigger.json.value1 if ''value1'' in trigger.json }}' value2: '{{ trigger.json.value2 if ''value2'' in trigger.json }}' value3: '{{ trigger.json.value3 if ''value3'' in trigger.json }}' - alias: sleep_as_android_state_bedtime id: 101fbdda-3b78-42ea-aa9d-9e8e41200e07 initial_state: true triggers: - trigger: event event_type: sleep_as_android event_data: event: time_to_bed_alarm_alert conditions: - condition: state entity_id: input_select.sleep_as_android_state state: awake actions: action: input_select.select_option data: entity_id: input_select.sleep_as_android_state option: bedtime - alias: sleep_as_android_state_sleeping id: fc21b034-8ae6-4492-bd54-049929dcb983 initial_state: true triggers: - trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_started - trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_resumed actions: - action: input_select.select_option data: entity_id: input_select.sleep_as_android_state option: sleeping - alias: sleep_as_android_state_sleeping_cancelled id: 39894ea0-3b35-4ba8-8f0a-1e4cf745d525 initial_state: true triggers: trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_stopped actions: - choose: - conditions: condition: and conditions: - condition: time after: '20:00:00' before: 04:00:00 - condition: or conditions: - condition: state entity_id: input_select.sleep_as_android_state state: sleeping - condition: state entity_id: input_select.sleep_as_android_state state: paused sequence: - action: input_select.select_option data: entity_id: input_select.sleep_as_android_state option: bedtime default: - action: input_select.select_option data: entity_id: input_select.sleep_as_android_state option: awake - alias: sleep_as_android_state_paused id: c26bb668-9674-4a71-9936-08689fd67fb1 initial_state: true triggers: - trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_paused actions: action: input_select.select_option data: entity_id: input_select.sleep_as_android_state option: paused - alias: sleep_as_android_state_smart_wake id: 83b0f739-65dc-4750-95ec-65b17f0b867c initial_state: true triggers: trigger: event event_type: sleep_as_android event_data: event: smart_period actions: - action: input_select.select_option data: entity_id: input_select.sleep_as_android_state option: smart wake - alias: sleep_as_android_state_alarm id: 89bc0e9f-aea6-4f3b-a356-03053b387578 initial_state: true triggers: trigger: event event_type: sleep_as_android event_data: event: alarm_alert_start actions: - action: input_select.select_option data: entity_id: input_select.sleep_as_android_state option: alarm - alias: sleep_as_android_state_snoozing id: ca190425-e85b-4f14-b4ec-8bb7d0063f55 initial_state: true triggers: trigger: event event_type: sleep_as_android event_data: event: alarm_snooze_clicked actions: - action: input_select.select_option data: entity_id: input_select.sleep_as_android_state option: snoozing - alias: sleep_as_android_state_awake id: 2777f4fa-1631-46d6-9755-a0515e33da0f initial_state: true triggers: - trigger: event event_type: sleep_as_android event_data: event: alarm_alert_dismiss - trigger: event event_type: sleep_as_android event_data: event: alarm_skip_next - trigger: event event_type: sleep_as_android event_data: event: alarm_snooze_cancelled - trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_stopped actions: - action: input_select.select_option data: entity_id: input_select.sleep_as_android_state option: awake - alias: sleep_as_android_reset_snooze_counter id: 899e638d-4471-4168-94ee-8a9e51885a1e initial_state: true triggers: - trigger: event event_type: sleep_as_android event_data: event: alarm_snooze_clicked actions: - action: counter.reset data: entity_id: counter.snooze_counter - alias: sleep_as_android_snoozing id: 247c8b50-72be-467b-95bf-73ebebaaa4ab initial_state: true triggers: - trigger: event event_type: sleep_as_android event_data: event: sleep_tracking_started actions: - action: counter.increment data: entity_id: counter.snooze_counter - alias: Ensure AC power on when ac climate started id: 2a88ce77-de4b-4454-9e57-b69ac7deba33 initial_state: true mode: single triggers: - trigger: state entity_id: climate.aircondition not_to: 'off' conditions: - condition: state entity_id: switch.aircondition_afbryder state: 'off' actions: - action: switch.turn_on entity_id: switch.aircondition_afbryder - delay: seconds: 5 - action: climate.turn_on entity_id: climate.aircondition - id: adjust_speaker_group_volume alias: Adjust Speaker Group Volume mode: parallel initial_state: true triggers: - trigger: state entity_id: - input_number.stue_group_volume - input_number.kokken_group_volume - input_number.kontor_group_volume - input_number.sovevaerelse_group_volume - input_number.badevaerelse_group_volume - input_number.roam_group_volume actions: repeat: for_each: '{{ state_attr((trigger.entity_id|replace(''input_number'',''media_player'')|replace(''_group_volume'', '''')), ''group_members'') }}' sequence: - action: media_player.volume_set target: entity_id: '{{ repeat.item }}' data: volume_level: '{{ trigger.to_state.state|int/100 }}' - alias: charge_kitchen_tablet id: 790eb451-80a1-4e6d-a02e-27bd51e3687f triggers: - trigger: numeric_state entity_id: sensor.kokken_tablet_battery_level below: 60 - trigger: state entity_id: sensor.kokken_tablet_battery_level to: - unknown - unavailable - trigger: state entity_id: binary_sensor.home_assistant_loaded to: 'on' conditions: - condition: numeric_state entity_id: sensor.kokken_tablet_battery_level below: 60 actions: - action: switch.turn_on data: entity_id: switch.kokken_tablet_lader - alias: discharge_kokken_tablet id: a4b4cf41-183f-4071-bd8a-00569dc76c16 triggers: - trigger: numeric_state entity_id: sensor.kokken_tablet_battery_level above: 80 - trigger: state entity_id: binary_sensor.home_assistant_loaded to: 'on' conditions: - condition: numeric_state entity_id: sensor.kokken_tablet_battery_level above: 80 actions: - action: switch.turn_off data: entity_id: switch.kokken_tablet_lader - alias: charge_hallway_tablet id: b74dbe2a-670d-41ef-9b20-25c070f4325b triggers: - trigger: numeric_state entity_id: sensor.gang_tablet_battery_level below: 60 - trigger: state entity_id: sensor.gang_tablet_battery_level to: - unknown - unavailable - trigger: state entity_id: binary_sensor.home_assistant_loaded to: 'on' conditions: - condition: numeric_state entity_id: sensor.gang_tablet_battery_level below: 60 actions: - action: switch.turn_on data: entity_id: switch.gang_tablet_lader - alias: discharge_gang_tablet id: 9b1665fb-5a02-4489-8a9d-ff49d8afcb14 triggers: - trigger: numeric_state entity_id: sensor.gang_tablet_battery_level above: 80 - trigger: state entity_id: binary_sensor.home_assistant_loaded to: 'on' conditions: - condition: numeric_state entity_id: sensor.gang_tablet_battery_level above: 80 actions: - action: switch.turn_off data: entity_id: switch.gang_tablet_lader - id: restart_tado alias: Restart Tado mode: single triggers: - trigger: time_pattern minutes: /5 seconds: '0' conditions: - condition: state entity_id: binary_sensor.tado_hub_crashed state: 'on' for: minutes: 15 actions: - action: switch.turn_off data: entity_id: switch.tado - delay: seconds: 60 - action: switch.turn_on data: entity_id: switch.tado - wait_template: '{{ is_state(''device_tracker.tado'', ''home'') }}' - event: set_climate - id: update_telegram_keyboard alias: Update Telegram Keyboard initial_state: true triggers: trigger: homeassistant event: start actions: - action: notify.telegram_darkfox data: message: Home Assistant er genstartet data: keyboard: - /puzzel - /bil - /destination - alias: Handle Telegram Message id: handle_telegram_message initial_state: true triggers: - trigger: event event_type: telegram_text event_data: chat_id: secret telegram_darkfox_id actions: - action: conversation.process data: text: '{{ trigger.event.data.text }}' language: da agent_id: 4e0a875b09f8a19a405e1bf3e5c4adac response_variable: agent - action: telegram_bot.send_message data: target: '{{ trigger.event.data.chat_id }}' message: '{{ agent.response.speech.plain.speech }}' - alias: Telegram yt-dlp id: fedddc04-a5ac-4412-811d-b54d5f03cb0e triggers: trigger: event event_type: telegram_command event_data: command: /yt-dlp actions: - action: shell_command.yt_dlp response_variable: file_path data: url: '{{ trigger.event.data.text }}' - action: telegram_bot.send_document data: target: '{{ trigger.event.data.chat_id }}' document: '{{ file_path }}' - alias: Light Profile Frontend Theme Setter id: light_profile_frontend_theme_setter initial_state: true triggers: - trigger: homeassistant event: start - trigger: state entity_id: input_select.light_profile - trigger: template alias: Set current mode when a browser becomes available value_template: "[\n {%- for entity in states.binary_sensor | rejectattr('state',\ \ 'eq', 'unavailable') | selectattr('entity_id', 'match', '.+_browser_dark_mode')\ \ | list -%}\n \"{{ entity.attributes.get('browserID') }}\",\n {% endfor\ \ -%}\n]" variables: browser_id: '{{ [trigger.to_state.attributes.browserID] if trigger.platform == ''template'' and trigger.to_state.state != ''unavailable'' else [] }}' actions: - choose: - conditions: - condition: state entity_id: input_select.light_profile state: - Bright sequence: action: browser_mod.set_theme data: dark: light browser_id: '{{ browser_id }}' - conditions: - condition: state entity_id: input_select.light_profile state: - Dimmed - Ambient - Night - 'Off' sequence: action: browser_mod.set_theme data: dark: dark browser_id: '{{ browser_id }}' default: action: browser_mod.set_theme data: dark: auto browser_id: '{{ browser_id }}' - alias: Get upcoming travel destionation coordinates id: 29f91918-2f1c-4968-a147-2de8df7555f4 initial_state: true triggers: - trigger: state entity_id: sensor.next_travel_event for: seconds: 10 actions: - action: script.osm_geocoding_lookup response_variable: geocoded_data data: query: '{{ state_attr(''sensor.next_travel_event'', ''location'') }}' - variables: destination: '{%- from ''osm.jinja'' import geocodejson_to_vw -%} {{ geocodejson_to_vw(geocoded_data.location, name) if geocoded_data.get(''location'', None) else {} }}' - event: upcoming_travel_destination_coordinates event_data: destination: '{{ destination }}' - alias: Next destination - Update sensors with high frequency when close to leave time id: e342768f-0119-453a-8301-201282f58103 initial_state: true triggers: - trigger: time_pattern minutes: /5 conditions: - condition: state entity_id: binary_sensor.rook_next_scheduled_destination_leave_soon state: 'on' actions: - choose: - conditions: '{{ is_state_attr(''sensor.upcoming_travel_location'', ''mode'', ''driving'') }}' sequence: - action: homeassistant.update_entity target: entity_id: sensor.rook_destination_duration_in_traffic - conditions: '{{ is_state_attr(''sensor.upcoming_travel_location'', ''mode'', ''transit'') }}' sequence: - action: homeassistant.update_entity target: entity_id: sensor.rook_destination_transit_duration - alias: Next destination - Update sensors slowly 12 hours before or when destination changes id: f4eb3d8f-daf0-487b-91d0-d0f8d89d6fa7 initial_state: true triggers: - trigger: time_pattern minutes: /45 - trigger: state entity_id: - sensor.upcoming_travel_location - binary_sensor.rook_next_scheduled_destination_active conditions: - condition: state entity_id: binary_sensor.rook_next_scheduled_destination_active state: 'on' actions: - choose: - conditions: '{{ is_state_attr(''sensor.upcoming_travel_location'', ''mode'', ''driving'') }}' sequence: - action: homeassistant.update_entity target: entity_id: sensor.rook_destination_duration_in_traffic - conditions: '{{ is_state_attr(''sensor.upcoming_travel_location'', ''mode'', ''transit'') }}' sequence: - action: homeassistant.update_entity target: entity_id: sensor.rook_destination_transit_duration - id: time_to_leave_notification alias: time_to_leave_notification initial_state: true mode: single triggers: - trigger: numeric_state entity_id: sensor.next_scheduled_leave_in below: 61 - trigger: numeric_state entity_id: sensor.next_scheduled_leave_in below: 46 - trigger: numeric_state entity_id: sensor.next_scheduled_leave_in below: 31 - trigger: numeric_state entity_id: sensor.next_scheduled_leave_in below: 21 - trigger: numeric_state entity_id: sensor.next_scheduled_leave_in below: 16 - trigger: numeric_state entity_id: sensor.next_scheduled_leave_in below: 11 - trigger: numeric_state entity_id: sensor.next_scheduled_leave_in below: 6 - trigger: numeric_state entity_id: sensor.next_scheduled_leave_in below: 1 conditions: - alias: Not from unavailable/unknown condition: template value_template: '{{ not trigger.from_state.state in [''unavailable'', ''unknown''] }}' actions: - action: script.notify_everywhere data: message: "{% if trigger.to_state.state|int(0) < 1 %}\n Tid til at tage afsted.\n\ {% else %}\n Tag afsted om {{ trigger.to_state.state|int(0) }} minutter.\n\ {% endif %}" - alias: Set notification sounds options id: c5dab2fa-93df-488e-ad02-5da4c458d497 initial_state: true triggers: - trigger: state entity_id: - sensor.chime_tts_sounds - sensor.notification_sounds - trigger: homeassistant event: start actions: - variables: saved_option: '{{ states(''input_text.notification_sound'') }}' - action: input_select.set_options data_template: entity_id: input_select.notification_sound options: "{% set ns = namespace(ret=[]) %} {%- for file in state_attr('sensor.chime_tts_sounds',\ \ 'files') -%}\n {% set title = (file.replace('/config/custom_components/chime_tts/mp3s/','').replace('.mp3',\ \ '').replace('_', ' ')|title) %}\n {% set ns.ret = ns.ret + [title+': '+file]\ \ %}\n{%- endfor -%} {%- for file in state_attr('sensor.notification_sounds',\ \ 'files') -%}\n {% set title = file.replace('/media/Notifications/','').replace('.mp3',\ \ '').replace('/', ' - ') %}\n {% set ns.ret = ns.ret + [title+': '+file]\ \ %}\n{%- endfor -%} {{ ns.ret }}\n" - action: input_select.select_option data_template: entity_id: input_select.notification_sound option: '{{ saved_option }}' - alias: Save new notification sound id: 554dfdef-5e6d-4abd-9cf3-791cd1329f03 initial_state: true triggers: trigger: state entity_id: input_select.notification_sound for: seconds: 1 conditions: - condition: state entity_id: binary_sensor.home_assistant_loaded state: 'on' actions: - action: input_text.set_value data_template: entity_id: input_text.notification_sound value: '{{ states(''input_select.notification_sound'') }}' - alias: Announce notification sound changed id: 09c0059c-52b2-42d1-9650-a46a22e97aae initial_state: true triggers: trigger: state entity_id: sensor.chime_path not_from: - unknown - unavailable actions: - action: script.voice_broadcast data: message: Notifikationslyd ændret - alias: Vacation Mode Off id: 16796890-7e97-4e23-96da-0617c70d1c1d initial_state: true triggers: - trigger: state entity_id: input_boolean.vacation_mode to: 'off' actions: - action: input_boolean.turn_off data: entity_id: input_boolean.vacation_mode_lights_active - delay: seconds: 2 - event: refresh_light_profile - alias: Vacation Lights On id: 6498613d-e172-4b9c-8ea1-b02f095f8e8a initial_state: true triggers: trigger: time_pattern minutes: /5 conditions: - condition: state entity_id: input_boolean.vacation_mode state: 'on' - condition: or conditions: - condition: time after: '17:00:00' before: '23:00:00' weekday: - mon - tue - wed - thu - fri - condition: time after: '10:00:00' before: '23:00:00' weekday: - sat - sun - condition: or conditions: - condition: template value_template: '{{ states.sun.sun.attributes.elevation < 4 }}' - condition: numeric_state entity_id: sensor.kokken_illuminance below: 10 actions: - action: input_boolean.turn_on data: entity_id: input_boolean.vacation_mode_lights_active - alias: Vacation Lights Off id: 98223344-098b-4299-a45b-96e837be919c initial_state: true triggers: - trigger: time at: '23:00:00' conditions: condition: state entity_id: input_boolean.vacation_mode_lights_active state: 'on' actions: - action: input_boolean.turn_off data: entity_id: input_boolean.vacation_mode_lights_active - alias: Vacation Office on id: f6b6f7e1-6bfb-4d34-8ab9-37324f8da9d8 initial_state: true triggers: trigger: state entity_id: input_boolean.vacation_mode_lights_active to: 'on' actions: - condition: state entity_id: binary_sensor.vacation_mode_random_boolean state: 'on' - delay: hours: 1 minutes: '{{ states(''sensor.vacation_mode_random_minutes'') }}' - action: light.turn_on data: entity_id: light.kontor_loftlampe brightness: 200 - alias: Vacation Living Room on id: 704d680d-9c4d-4864-b7a5-9e0eb4f34997 initial_state: true triggers: trigger: state entity_id: input_boolean.vacation_mode_lights_active to: 'on' actions: - delay: minutes: '{{ states(''sensor.vacation_mode_random_minutes'') }}' - action: light.turn_on data: entity_id: light.stue_spot_3 brightness: 200 color_temp_kelvin: 3333 - alias: Vacation Kitchen on id: 3b27e55d-b343-46bc-9b2e-1c42002a29d0 initial_state: true triggers: - trigger: state entity_id: input_boolean.vacation_mode_lights_active to: 'on' - trigger: event event_type: vacation_kitchen_loop actions: - delay: minutes: '{{ states(''sensor.vacation_mode_random_minutes'') }}' - action: light.turn_on data: entity_id: light.kokken_loftlampe color_temp_kelvin: 3333 brightness: 200 - delay: minutes: '{{ (states(''sensor.vacation_mode_random_minutes'')) | int }}' - action: light.turn_off data: entity_id: light.kokken_loftlampe - delay: hours: 2 - event: vacation_kitchen_loop - alias: Vacation Bathroom on id: 60374093-f70e-40df-a664-dcc4421b17d2 initial_state: true triggers: - trigger: state entity_id: input_boolean.vacation_mode_lights_active to: 'on' - trigger: event event_type: vacation_bathroom_loop conditions: condition: state entity_id: input_boolean.vacation_mode_lights_active state: 'on' actions: - delay: minutes: '{{ states(''sensor.vacation_mode_random_minutes'') }}' - action: light.turn_on data: entity_id: light.badevaerelse_lampe brightness: 200 color_temp_kelvin: 3333 - delay: minutes: '{{ (states(''sensor.vacation_mode_random_minutes'')/2) | int }}' - action: light.turn_off data: entity_id: light.badevaerelse_lampe - delay: hours: 2 - event: vacation_bathroom_loop - alias: Vacation Office Off id: 3f66aea8-43db-476a-8f5d-d38d0bfb7086 initial_state: true triggers: trigger: state entity_id: input_boolean.vacation_mode_lights_active to: 'off' actions: - delay: minutes: '{% if is_state(''input_boolean.vacation_mode_lights_active'', ''on'') %}{{ states(''sensor.vacation_mode_random_minutes'') }}{% else %}0{% endif %}' - action: light.turn_off data: entity_id: light.kontor_loftlampe - alias: Vacation Living Room Off id: d4e31627-05b8-40f3-b4bc-bcb5e51fbd1a initial_state: true triggers: trigger: state entity_id: input_boolean.vacation_mode_lights_active to: 'off' actions: - delay: minutes: '{% if is_state(''input_boolean.vacation_mode_lights_active'', ''on'') %}{{ states(''sensor.vacation_mode_random_minutes'') }}{% else %}0{% endif %}' - action: light.turn_off data: entity_id: light.stue_spot_3 - alias: Vacation Kitchen Off id: 81cb653f-741c-45cf-af42-7d6dad7007cd initial_state: true triggers: trigger: state entity_id: input_boolean.vacation_mode_lights_active to: 'off' actions: - delay: minutes: '{% if is_state(''input_boolean.vacation_mode_lights_active'', ''on'') %}{{ states(''sensor.vacation_mode_random_minutes'') }}{% else %}0{% endif %}' - action: light.turn_off data: entity_id: light.kokken_loftlampe - alias: Vacation Bathroom Off id: 99259e0c-cff0-411c-83b3-1392fa88a00e initial_state: true triggers: trigger: state entity_id: input_boolean.vacation_mode_lights_active to: 'off' actions: - delay: minutes: '{% if is_state(''input_boolean.vacation_mode_lights_active'', ''on'') %}{{ states(''sensor.vacation_mode_random_minutes'') }}{% else %}0{% endif %}' - action: light.turn_off data: entity_id: light.badevaerelse_lampe - alias: Force VW data update on phone notification id: 748368fc-75e1-4931-b0a4-63bb9f0e15e5 initial_state: true mode: single triggers: - trigger: state entity_id: sensor.darkphone_last_notification_post_time conditions: - condition: state entity_id: sensor.darkphone_last_notification state: com.volkswagen.weconnect actions: - action: button.press target: entity_id: button.id_3_pro_wakeup - alias: ID.3 Force Update During Climatisation Request id: 6045309c-38ec-4bd9-828b-c812ff88b32e initial_state: false mode: single triggers: - trigger: state entity_id: - binary_sensor.id_3_pro_climatisation_change_requested - binary_sensor.id_3_pro_charging_change_requested to: 'on' conditions: - condition: or conditions: - condition: state entity_id: binary_sensor.id_3_pro_climatisation_change_requested state: 'on' - condition: state entity_id: binary_sensor.id_3_pro_charging_change_requested state: 'on' action: - delay: seconds: 10 - action: button.press target: entity_id: button.id_3_pro_wakeup - alias: ID.3 Pro Notify destinations sent id: 5b33950a-780e-4708-94b5-9276239e4a80 initial_state: true triggers: - trigger: event event_type: id_3_pro_destinations_sent variables: destinations: '{{ trigger.event.data.get(''destinations'', []) }}' parts: '{{ destinations|length }}' final: '{{ destinations|last }}' actions: - action: notify.telegram_darkfox data: message: "{{ parts }} destination{{ 'er' if parts > 1 }} sendt til bilen:\n\ {% for d in destinations %}\n {%- set address = d.get('address') -%}\n -\ \ {{ d.get('name', 'Destination') }}{{ ': '~address.values()|reverse|list|join(',\ \ ') if address }}\n{% endfor %}\n" - delay: 0.5 - action: notify.telegram_darkfox data: message: Destination data: location: latitude: '{{ final.get(''geoCoordinate'', {}).get(''latitude'') }}' longitude: '{{ final.get(''geoCoordinate'', {}).get(''longitude'')}}' - alias: workshop_door_activity_on id: 2569ea62-ac9f-4ba8-9e18-13a914f9e180 initial_state: true triggers: - trigger: state entity_id: binary_sensor.varksted_dor to: - 'on' - 'off' not_from: - unavailable - unknown actions: - action: input_boolean.turn_on data: entity_id: input_boolean.workshop_door_activity - alias: workshop_door_activity_off id: 0af8945b-8abc-4cca-88fd-a168c64bcc37 initial_state: true triggers: - trigger: state entity_id: input_boolean.workshop_door_activity to: 'on' for: seconds: 5 actions: - action: input_boolean.turn_off data: entity_id: input_boolean.workshop_door_activity - alias: workshop_desk_power_reminder id: b51a8636-e588-400d-b894-1be7ed7bf265 initial_state: true triggers: - trigger: state entity_id: binary_sensor.workshop_activity to: 'off' for: minutes: 15 conditions: - condition: numeric_state entity_id: sensor.hobbybord_afbryder_forbrug above: 0.05 actions: - action: script.notify_everywhere data: message: Loddekolben eller andet er muligvis tændt på hobbybordet. Husk at slukke for strømmen. - alias: workshop_desk_power_off id: cbb52f2f-38f4-4131-b561-79b269a8dfe4 initial_state: true triggers: - trigger: state entity_id: binary_sensor.workshop_activity to: 'off' for: minutes: 30 actions: - action: switch.turn_off data: entity_id: switch.hobbybord_afbryder - alias: activate_light_profile_workshop id: b95904b0-7a60-4c6e-bdaf-1c6fe7a98df2 mode: restart initial_state: true triggers: - trigger: state entity_id: sensor.workshop_active_light_profile - trigger: event event_type: refresh_light_profile variables: profile: '{{ states(''sensor.workshop_active_light_profile'') }}' actions: - choose: - conditions: - condition: template value_template: '{{ profile == ''Bright'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.vaerksted_loftlampe: state: true brightness: 255 color_temp_kelvin: 4000 light.hobbybord_bord: state: true brightness: 255 effect: None light.hobbybord_vaerktojsskab: state: true brightness: 255 effect: None - conditions: - condition: template value_template: '{{ profile == ''Default'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.vaerksted_loftlampe: state: true brightness: 255 color_temp_kelvin: 4000 light.hobbybord_bord: state: true brightness: 255 effect: None light.hobbybord_vaerktojsskab: state: true brightness: 255 effect: None - conditions: - condition: template value_template: '{{ profile == ''Dimmed'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.vaerksted_loftlampe: state: true brightness: 72 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.hobbybord_bord: state: true brightness: 48 effect: None light.hobbybord_vaerktojsskab: state: true brightness: 48 effect: None - conditions: - condition: template value_template: '{{ profile == ''Ambient'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.vaerksted_loftlampe: state: true brightness: 48 hs_color: '{{ state_attr(''sensor.theme'', ''primary_color_hue'') }}' light.hobbybord_bord: state: true brightness: 36 effect: None light.hobbybord_vaerktojsskab: state: true brightness: 36 effect: None - conditions: - condition: template value_template: '{{ profile == ''Night'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.vaerksted_loftlampe: state: true brightness: 2 rgb_color: - 255 - 0 - 0 light.hobbybord_bord: state: true brightness: 8 effect: None light.hobbybord_vaerktojsskab: state: false - conditions: - condition: template value_template: '{{ profile == ''Off'' }}' sequence: - action: scene.apply data: transition: '{{ (states(''input_number.scene_transition_time'') | float or 0.5) }}' entities: light.vaerksted_lys: state: false - alias: Set Workshop Latest Motion id: ccf9375e-f45f-4845-927a-7dc0743e7c0c initial_state: true triggers: - trigger: state entity_id: - binary_sensor.vaerksted_motion - binary_sensor.varktojsskab to: 'on' conditions: - condition: state entity_id: vacuum.valetudo_roborocks5 state: docked - condition: state entity_id: person.rook state: home actions: action: input_select.select_option data: entity_id: input_select.latest_motion option: Workshop