472 lines
14 KiB
YAML
472 lines
14 KiB
YAML
- id: kitchen_hood
|
|
alias: YAML Kitchen Hood Control
|
|
description: Automatically manages the kitchen hood state based on whether the cooktop
|
|
is on or off and the status of the countertop lights.
|
|
trigger:
|
|
- platform: state
|
|
entity_id: binary_sensor.cooktop_power
|
|
to: 'on'
|
|
alias: When cooktop turned ON
|
|
- platform: state
|
|
entity_id: binary_sensor.cooktop_power
|
|
to: 'off'
|
|
alias: When cooktop turned OFF
|
|
- platform: state
|
|
entity_id: light.kitchen_countertop
|
|
to: 'off'
|
|
alias: When countertop turned OFF
|
|
condition:
|
|
alias: Conditions per trigger
|
|
condition: or
|
|
conditions:
|
|
- condition: and
|
|
alias: When cooktop turned ON and outlet is OFF
|
|
conditions:
|
|
- condition: trigger
|
|
id: 0
|
|
- condition: state
|
|
entity_id: switch.outlet_kitchen_hood
|
|
state: 'off'
|
|
- condition: and
|
|
alias: When cooktop turned OFF and outlet is ON and countertop is OFF
|
|
conditions:
|
|
- condition: trigger
|
|
id: 1
|
|
- condition: state
|
|
entity_id: switch.outlet_kitchen_hood
|
|
state: 'on'
|
|
- condition: state
|
|
entity_id: light.kitchen_countertop
|
|
state: 'off'
|
|
- condition: and
|
|
alias: When countertop turned ON and outlet is ON
|
|
conditions:
|
|
- condition: trigger
|
|
id: 2
|
|
- condition: state
|
|
entity_id: switch.outlet_kitchen_hood
|
|
state: 'on'
|
|
action:
|
|
- service: '{{ ''switch.turn_on'' if(trigger.to_state.state == ''on'') else ''switch.turn_off''
|
|
}}'
|
|
alias: Toggle the hood outlet
|
|
target:
|
|
entity_id: switch.outlet_kitchen_hood
|
|
mode: single
|
|
- id: home_presence_count_enabled
|
|
alias: Home presence - count enabled switches
|
|
description: Count enabled switches for home presence estimation
|
|
mode: queued
|
|
max: 50
|
|
trigger:
|
|
- platform: state
|
|
entity_id: include ../entities/home_presence.yaml
|
|
condition: '{{ trigger.from_state.state = trigger.to_state.state and trigger.from_state.state
|
|
in [''off'', ''on''] and trigger.to_state.state in [''off'', ''on''] }}'
|
|
action:
|
|
- action: '{{ ''counter.decrement'' if trigger.to_state.state == ''off'' else ''counter.increment''
|
|
}}'
|
|
target:
|
|
entity_id: counter.switches_enabled
|
|
- id: hvac_turn_off
|
|
alias: YAML HVAC turn off on leak sensor
|
|
trigger:
|
|
- platform: state
|
|
entity_id: binary_sensor.air_cond_leakage
|
|
to: 'on'
|
|
condition:
|
|
not:
|
|
- condition: state
|
|
entity_id: climate.air_conditioner
|
|
state: 'off'
|
|
action:
|
|
- service: climate.set_hvac_mode
|
|
target:
|
|
entity_id: climate.air_conditioner
|
|
data:
|
|
hvac_mode: 'off'
|
|
- service: notify.mobile_app_iphone_kamil
|
|
data:
|
|
message: Air conditioner turned off - the water container is full
|
|
mode: single
|
|
- id: lights_dim_on_toggle
|
|
alias: YAML Lights - dim on toggle
|
|
description: Adjusts lights brightness and temperature to day/night time
|
|
trigger:
|
|
- platform: state
|
|
entity_id:
|
|
- input_boolean.lights_dim
|
|
action:
|
|
- variables:
|
|
entities:
|
|
- id: light.wardrobe_ceiling
|
|
previous_state: '{{ states(''light.wardrobe_ceiling'') }}'
|
|
- id: light.wardrobe_clothes
|
|
previous_state: '{{ states(''light.wardrobe_clothes'') }}'
|
|
- id: light.bathroom_ceiling
|
|
previous_state: '{{ states(''light.bathroom_ceiling'') }}'
|
|
- id: light.bathroom_mirror
|
|
previous_state: '{{ states(''light.bathroom_mirror'') }}'
|
|
color_temp_kelvin: '{{ 3600 if (states(''input_boolean.lights_dim'') == ''on'')
|
|
else 2000 }}'
|
|
brightness_pct: '{{ 30 if (states(''input_boolean.lights_dim'') == ''on'') else
|
|
1 }}'
|
|
- service: light.turn_on
|
|
data:
|
|
color_temp_kelvin: '{{ color_temp_kelvin }}'
|
|
brightness_pct: '{{ brightness_pct }}'
|
|
target:
|
|
entity_id: '{{ entities | map(attribute=''id'') | list }}'
|
|
- delay:
|
|
seconds: 2
|
|
- service: light.turn_off
|
|
target:
|
|
entity_id: '{{ entities | selectattr(''previous_state'', ''eq'', ''off'') |
|
|
map(attribute=''id'') | list }}'
|
|
mode: single
|
|
- id: lights_dim_on_morning
|
|
alias: YAML lights - dim on morning
|
|
trigger:
|
|
- platform: time
|
|
at: 06:30:00
|
|
action:
|
|
- service: input_boolean.turn_on
|
|
target:
|
|
entity_id:
|
|
- input_boolean.lights_dim
|
|
mode: single
|
|
- id: lights_dim_on_evening
|
|
alias: YAML lights - dim on evening
|
|
trigger:
|
|
- platform: time
|
|
at: '22:00:00'
|
|
action:
|
|
- service: input_boolean.turn_off
|
|
target:
|
|
entity_id:
|
|
- input_boolean.lights_dim
|
|
mode: single
|
|
- id: lights_switch2light
|
|
alias: YAML Lights - On switch toggle light
|
|
variables:
|
|
lights: include ../entities/lights.yaml
|
|
switches: include ../entities/switches.yaml
|
|
mode: parallel
|
|
max: 20
|
|
trigger:
|
|
- platform: state
|
|
entity_id: include ../entities/switches.yaml
|
|
condition:
|
|
- condition: template
|
|
value_template: '{{ states(lights[switches.index(trigger.entity_id)]) == trigger.from_state.state
|
|
}}'
|
|
- condition: template
|
|
value_template: '{{ trigger.to_state.state == ''on'' or trigger.to_state.state
|
|
== ''off'' }}'
|
|
action:
|
|
- service: '{{ ''light.turn_on'' if(trigger.to_state.state == ''on'') else ''light.turn_off''
|
|
}}'
|
|
target:
|
|
entity_id: '{{ lights[switches.index(trigger.entity_id)] }}'
|
|
- id: lights_light2switch
|
|
alias: YAML Lights - On light toggle switch
|
|
variables:
|
|
lights: include ../entities/lights.yaml
|
|
switches: include ../entities/switches.yaml
|
|
mode: parallel
|
|
max: 20
|
|
trigger:
|
|
- platform: state
|
|
entity_id: include ../entities/lights.yaml
|
|
condition:
|
|
- condition: template
|
|
value_template: '{{ states(switches[lights.index(trigger.entity_id)]) == trigger.from_state.state
|
|
}}'
|
|
- condition: template
|
|
value_template: '{{ trigger.to_state.state == ''on'' or trigger.to_state.state
|
|
== ''off'' }}'
|
|
action:
|
|
- service: '{{ ''switch.turn_on'' if(trigger.to_state.state == ''on'') else ''switch.turn_off''
|
|
}}'
|
|
target:
|
|
entity_id: '{{ switches[lights.index(trigger.entity_id)] }}'
|
|
- id: light-tripleclick
|
|
alias: YAML actions on light switch triple click
|
|
description: Automates actions triggered on light switch triple-click
|
|
variables:
|
|
switches: include ../entities/light_tripleclick_switches.yaml
|
|
actions: include ../entities/light_tripleclick_actions.yaml
|
|
trigger:
|
|
- platform: state
|
|
entity_id: include ../entities/light_tripleclick_switches.yaml
|
|
action:
|
|
- wait_template: '{{ states(trigger.entity_id) = trigger.to_state.state }}'
|
|
timeout:
|
|
seconds: 1
|
|
continue_on_timeout: false
|
|
- wait_template: '{{ states(trigger.entity_id) == trigger.to_state.state }}'
|
|
timeout:
|
|
seconds: 1
|
|
continue_on_timeout: false
|
|
- delay:
|
|
milliseconds: 500
|
|
- action: '{{ actions[switches.index(trigger.entity_id)][''action''] }}'
|
|
target:
|
|
entity_id: '{{ actions[switches.index(trigger.entity_id)][''target''] }}'
|
|
mode: single
|
|
max_exceeded: silent
|
|
- id: media_radio_fm_update
|
|
alias: Radio FM station update
|
|
mode: single
|
|
triggers:
|
|
- entity_id: input_select.radio_fm
|
|
trigger: state
|
|
variables:
|
|
preset_id: '{{ state_attr(''input_select.radio_fm'', ''options'').index(trigger.to_state.state)
|
|
+ 1 }}'
|
|
actions:
|
|
- action: media_player.onkyo_command
|
|
data:
|
|
entity_id: media_player.pioneer_onkyo
|
|
iscp_command: preset
|
|
iscp_value: '{{ preset_id }}'
|
|
- id: media-radio-net
|
|
alias: YAML Media - Play Radio NET
|
|
mode: single
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: input_select.media_radio_net
|
|
variables:
|
|
stations: include ../entities/media_radio_net_stations.yaml
|
|
actions:
|
|
- alias: Check the media player availability
|
|
if:
|
|
- condition: template
|
|
value_template: '{{ has_value(''media_player.pioneer_dlna'') == False }}'
|
|
then:
|
|
- stop: Target media_player.pioneer_dlna is not available
|
|
- alias: Get the NET radio station
|
|
variables:
|
|
station: '{{ stations | selectattr(''name'', ''eq'', trigger.to_state.state)
|
|
| first }}'
|
|
- alias: Play NET media
|
|
action: media_player.play_media
|
|
target:
|
|
entity_id: media_player.pioneer_dlna
|
|
data:
|
|
media_content_id: '{{ station[''url''] }}'
|
|
media_content_type: audio/aac
|
|
- id: media-radio-net-select-return
|
|
alias: YAML Media - Radio NET selector reset to 'Other'
|
|
mode: single
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: media_player.pioneer_dlna
|
|
attribute: media_content_id
|
|
variables:
|
|
radio_net_stations: include ../entities/media_radio_net_stations.yaml
|
|
radio_net_stations_urls: '{{ radio_net_stations | map(attribute=''url'') | list
|
|
}}'
|
|
conditions:
|
|
- '{{ trigger.to_state.state not in radio_net_stations_urls }}'
|
|
actions:
|
|
- action: input_select.select_option
|
|
target:
|
|
entity_id: input_select.media_radio_net
|
|
data:
|
|
option: Other
|
|
- id: media_sound_mode
|
|
alias: Sound Mode update
|
|
mode: single
|
|
triggers:
|
|
- entity_id: input_select.sound_mode
|
|
trigger: state
|
|
variables:
|
|
listening_mode_value:
|
|
Auto: auto-surround
|
|
Extended: all-ch-stereo
|
|
Surround: dolby-atmos
|
|
Desk: full-mono
|
|
cmt_message:
|
|
Auto: CMT00000000000000000000000000
|
|
Extended: CMT00000000000000000000000000
|
|
Surround: CMT00000000000000000000000000
|
|
Desk: CMT00010100010000000000000000
|
|
tcl_message:
|
|
Auto: TCL000000+02-01000000000-01000000000000000
|
|
Extended: TCL-0C000+02+0E+0A000000-04000000000000000
|
|
Surround: TCL000000+02-01000000000-01000000000000000
|
|
Desk: TCL000-01+02+18000000000-04000000000000000
|
|
actions:
|
|
- action: media_player.onkyo_command
|
|
data:
|
|
entity_id: media_player.pioneer_onkyo
|
|
iscp_command: listening-mode
|
|
iscp_value: '{{ listening_mode_value[trigger.to_state.state] }}'
|
|
- action: media_player.onkyo_message
|
|
data:
|
|
entity_id: media_player.pioneer_onkyo
|
|
iscp_message: '{{ cmt_message[trigger.to_state.state] }}'
|
|
- action: media_player.onkyo_message
|
|
data:
|
|
entity_id: media_player.pioneer_onkyo
|
|
iscp_message: '{{ tcl_message[trigger.to_state.state] }}'
|
|
- id: mqtt_knob
|
|
alias: MQTT knob
|
|
mode: queued
|
|
triggers:
|
|
- topic: zigbee2mqtt/Remote Bathroom audio knob
|
|
trigger: mqtt
|
|
- topic: zigbee2mqtt/Remote Bedroom audio knob
|
|
trigger: mqtt
|
|
conditions:
|
|
- condition: template
|
|
value_template: '{{ ''action'' in trigger.payload_json }}'
|
|
actions:
|
|
- variables:
|
|
media_player_entity: '{{ ''media_player.pioneer_onkyo_zone_2'' if (trigger.id
|
|
== ''0'') else ''media_player.pioneer_onkyo_zone_3'' }}'
|
|
command: '{{ trigger.payload_json.action }}'
|
|
step_size: '{{ trigger.payload_json.action_step_size }}'
|
|
step_percent: '{% if is_number(step_size) %} {{ (step_size * 0.0005 ) | float
|
|
}} {% else %} {{ 0 }} {% endif %}'
|
|
- choose:
|
|
- conditions:
|
|
- condition: template
|
|
value_template: '{{ command == ''toggle'' }}'
|
|
sequence:
|
|
- if:
|
|
- condition: template
|
|
value_template: '{{ states(media_player_entity) == "on" }}'
|
|
then:
|
|
- target:
|
|
entity_id: '{{ media_player_entity }}'
|
|
data: {}
|
|
action: media_player.turn_off
|
|
else:
|
|
- target:
|
|
entity_id: '{{ media_player_entity }}'
|
|
data: {}
|
|
action: media_player.turn_on
|
|
enabled: true
|
|
- conditions:
|
|
- condition: template
|
|
value_template: '{{ states(media_player_entity) == "on" }}'
|
|
- condition: template
|
|
value_template: '{{ command == ''brightness_step_down'' }}'
|
|
sequence:
|
|
- target:
|
|
entity_id: '{{ media_player_entity }}'
|
|
data:
|
|
volume_level: '{{ state_attr(media_player_entity, ''volume_level'') - step_percent
|
|
}}'
|
|
action: media_player.volume_set
|
|
- conditions:
|
|
- condition: template
|
|
value_template: '{{ states(media_player_entity) == "on" }}'
|
|
- condition: template
|
|
value_template: '{{ command == ''brightness_step_up'' }}'
|
|
sequence:
|
|
- target:
|
|
entity_id: '{{ media_player_entity }}'
|
|
data:
|
|
volume_level: '{{ state_attr(media_player_entity, ''volume_level'') + step_percent
|
|
}}'
|
|
action: media_player.volume_set
|
|
- alias: Remote menu publish MQTT
|
|
id: mqtt_remote_menu_publish
|
|
description: ''
|
|
mode: parallel
|
|
max: 20
|
|
triggers:
|
|
- trigger: state
|
|
entity_id: sensor.remote_menu_line_1
|
|
- trigger: state
|
|
entity_id: sensor.remote_menu_line_2
|
|
- trigger: state
|
|
entity_id: sensor.remote_menu_line_3
|
|
- trigger: state
|
|
entity_id: sensor.remote_menu_line_4
|
|
- trigger: state
|
|
entity_id: sensor.remote_menu_line_5
|
|
conditions: []
|
|
actions:
|
|
- action: mqtt.publish
|
|
metadata: {}
|
|
data:
|
|
evaluate_payload: false
|
|
qos: '1'
|
|
retain: false
|
|
topic: homeassistant/remote_menu/line_{{ trigger.id }}
|
|
payload: '{{ trigger.to_state.state }}'
|
|
- id: presence-lights
|
|
alias: YAML Presence lights
|
|
description: Automates lights basing on user presence
|
|
variables:
|
|
sensors: include ../entities/presence_sensors.yaml
|
|
lights:
|
|
- light.living_room_sofa
|
|
- light.living_room_desk
|
|
- light.kitchen_countertop
|
|
trigger:
|
|
- platform: state
|
|
entity_id: include ../entities/presence_sensors.yaml
|
|
condition:
|
|
- condition: state
|
|
entity_id: input_boolean.presence_lights
|
|
state: 'on'
|
|
action:
|
|
- service: '{{ ''light.turn_on'' if(trigger.to_state.state == ''on'') else ''light.turn_off''
|
|
}}'
|
|
target:
|
|
entity_id: '{{ lights[sensors.index(trigger.entity_id)] }}'
|
|
mode: parallel
|
|
- id: presence-speakers
|
|
alias: YAML Presence speakers
|
|
description: Automates sound mode basing on user presence
|
|
variables:
|
|
presence_sensors: include ../entities/presence_sensors.yaml
|
|
sound_modes:
|
|
- Auto
|
|
- Desk
|
|
- Extended
|
|
trigger:
|
|
- platform: state
|
|
entity_id: include ../entities/presence_sensors.yaml
|
|
to: 'on'
|
|
condition:
|
|
- condition: state
|
|
entity_id: input_boolean.presence_speakers
|
|
state: 'on'
|
|
action:
|
|
- service: input_select.select_option
|
|
data:
|
|
option: '{{ sound_modes[presence_sensors.index(trigger.entity_id)] }}'
|
|
target:
|
|
entity_id: input_select.sound_mode
|
|
mode: single
|
|
- id: on-startup
|
|
alias: On Startup
|
|
mode: single
|
|
triggers:
|
|
- trigger: homeassistant
|
|
event: start
|
|
conditions: null
|
|
actions:
|
|
- alias: Populate input_select.media_radio_net options
|
|
sequence:
|
|
- variables:
|
|
stations: include ../entities/media_radio_net_stations.yaml
|
|
stations_names: '{{ (stations | map(attribute=''name'') | list) + [''Other'']
|
|
}}'
|
|
- service: input_select.set_options
|
|
target:
|
|
entity_id: input_select.media_radio_net
|
|
data:
|
|
options: '{{ stations_names }}'
|
|
- action: frontend.set_theme
|
|
metadata: {}
|
|
data:
|
|
mode: dark
|
|
name: skynet
|