Automationer
Automationer til Home Assistant, klar til at kopiere
Korte udgaver af automationerne fra bloggen. Entitets-ID’erne er pladsholdere, så skift dem ud med dine egne. Hele historien, også det der gik galt undervejs, står i indlægget, der er linket til.
Sæt TV’et på pause, når telefonen ringer
TV’et går på pause, så snart telefonen ringer, og fortsætter to sekunder efter, at samtalen er slut. Men kun hvis det var automationen, der satte det på pause.
- Trigger
- Telefonens tilstandssensor fra Companion-appen skifter til ringing, in_call eller offhook.
- Betingelser
- TV’et er tændt, og hjælperen input_boolean.tv_was_playing er slået fra.
- Handlinger
- Slå hjælperen til, send pause, vent på idle (højst to timer), vent to sekunder, send play, slå hjælperen fra.
- Kræver
- Home Assistant Companion-appen på telefonen, Android TV-integrationen og én input_boolean-hjælper.
Automation
alias: TV — Pause on phone call
trigger:
- platform: state
entity_id: sensor.your_phone_phone_state
to: [ringing, in_call, offhook]
condition:
- condition: state
entity_id: remote.living_room_tv
state: "on"
- condition: state
entity_id: input_boolean.tv_was_playing
state: "off"
action:
- action: input_boolean.turn_on
target:
entity_id: input_boolean.tv_was_playing
- action: remote.send_command
target:
entity_id: remote.living_room_tv
data:
command: MEDIA_PAUSE
- wait_for_trigger:
- platform: state
entity_id: sensor.your_phone_phone_state
to: idle
timeout: "02:00:00"
continue_on_timeout: true
- delay:
seconds: 2
- condition: state
entity_id: input_boolean.tv_was_playing
state: "on"
- action: remote.send_command
target:
entity_id: remote.living_room_tv
data:
command: MEDIA_PLAY
- action: input_boolean.turn_off
target:
entity_id: input_boolean.tv_was_playing Hele historien: TV'et går automatisk på pause ved almindelige opkald og Messenger
Varmen slukker, når vinduet åbnes (blueprint)
Radiatoren slukker, når vinduet har stået åbent i et minut, og får præcis sin tidligere tilstand tilbage, når vinduet lukkes. Lavet som blueprint, så næste rum tager omkring 30 sekunder.
- Trigger
- Vinduet har været åbent i det valgte antal minutter, eller vinduet lukkes.
- Betingelser
- Ingen. En hurtig udluftning udløser den aldrig, fordi triggeren venter på forsinkelsen.
- Handlinger
- Ved åbning: gem radiatorens tilstand i en scene, og sluk den. Ved lukning: gendan scenen.
- Kræver
- En vinduessensor med device_class window og en klima-entitet. Testet med Mill-radiatorer af første generation.
Blueprint: /config/blueprints/automation/homeassistant/window_heating_control.yaml
blueprint:
name: "Window → Heating off"
domain: automation
input:
window_sensor:
selector:
entity:
domain: binary_sensor
device_class: window
climate_entity:
selector:
entity:
domain: climate
delay_minutes:
default: 1
selector:
number:
min: 0
max: 10
unit_of_measurement: min
mode: restart
trigger:
- platform: state
entity_id: !input window_sensor
to: "on"
for:
minutes: !input delay_minutes
id: opened
- platform: state
entity_id: !input window_sensor
to: "off"
id: closed
action:
- choose:
- conditions:
- condition: trigger
id: opened
sequence:
- action: scene.create
data:
scene_id: "{{ this.entity_id | replace('automation.', '') }}"
snapshot_entities:
- !input climate_entity
- action: climate.set_hvac_mode
target:
entity_id: !input climate_entity
data:
hvac_mode: "off"
- conditions:
- condition: trigger
id: closed
sequence:
- action: scene.turn_on
target:
entity_id: "scene.{{ this.entity_id | replace('automation.', '') }}"
continue_on_error: true Én instans pr. rum
- alias: "Window → Heating: bedroom"
use_blueprint:
path: homeassistant/window_heating_control.yaml
input:
window_sensor: binary_sensor.bedroom_window
climate_entity: climate.bedroom
delay_minutes: 1 Hele historien: Et Home Assistant-blueprint der stopper varmen når vinduet åbnes
Udendørslys tænder ved solnedgang og slukker ved midnat
Udendørslyset tænder et kvarter efter solnedgang og slukker ved midnat hele året. Der er ikke noget timerur, der skal stilles om efter årstiden.
- Trigger
- Solnedgang plus 15 minutter for at tænde, og midnat for at slukke.
- Betingelser
- Ingen.
- Handlinger
- Tænd udendørslyset på fuld styrke, og sluk det igen ved midnat.
- Kræver
- Hvilke som helst lamper i Home Assistant. Hos mig er det Govee og LEDVANCE.
To automationer
- alias: Outdoor lights — Sunset on
trigger:
- platform: sun
event: sunset
offset: "+00:15:00"
action:
- action: light.turn_on
target:
entity_id:
- light.outdoor_1
- light.outdoor_2
data:
brightness_pct: 100
- alias: Outdoor lights — Midnight off
trigger:
- platform: time
at: "00:00:00"
action:
- action: light.turn_off
target:
entity_id:
- light.outdoor_1
- light.outdoor_2 Hele historien: Govee- og LEDVANCE-udelys på en solnedgangs-tidsplan i Home Assistant
Døgnrytmelys styret af solens højde
Hver halve time, og hver gang en lampe tændes, følger farvetemperaturen solen: koldt lys midt på dagen og varmt i skumringen. Slukkede lamper bliver ikke rørt.
- Trigger
- Hver halve time, eller når en lampe har været tændt i fem sekunder.
- Betingelser
- Ingen i triggeren. I løkken bliver kun lamper, der allerede er tændt, ændret.
- Handlinger
- Omsæt solens højde til 2200–6500 K, og sæt den farvetemperatur på hver tændt lampe.
- Kræver
- Lamper med justerbar farvetemperatur (hos mig WiZ) og den indbyggede sol-entitet.
Automation
alias: Circadian lighting
trigger:
- platform: time_pattern
minutes: "/30"
- platform: state
entity_id:
- light.lamp_1
- light.lamp_2
- light.lamp_3
- light.lamp_4
to: "on"
for: "00:00:05"
variables:
elevation: "{{ state_attr('sun.sun', 'elevation') | float(0) }}"
color_temp_k: >
{{ [[5000 if elevation > 45
else ((3500 + (elevation - 15) / 30 * 1500) | int) if elevation > 15
else ((2700 + elevation / 15 * 800) | int) if elevation > 0
else 2200,
2200] | max,
6500] | min }}
action:
- repeat:
for_each:
- light.lamp_1
- light.lamp_2
- light.lamp_3
- light.lamp_4
sequence:
- if:
- condition: template
value_template: "{{ is_state(repeat.item, 'on') }}"
then:
- action: light.turn_on
target:
entity_id: "{{ repeat.item }}"
data:
color_temp_kelvin: "{{ color_temp_k }}" Hele historien: Circadian belysning med WiZ der følger solens farvetemperatur
Varmen går ned på 17 grader, når alle er ude
Alle Tado-zoner går ned på 17 grader, når den sidste forlader huset, og Tados eget skema overtager igen, når den første kommer hjem. Tilstedeværelsen kommer fra din egen opsætning og ikke fra Tados geofencing.
- Trigger
- Husstandsgruppen skifter til not_home eller tilbage til home.
- Betingelser
- Ingen.
- Handlinger
- Ude: sæt alle zoner til 17 grader. Hjemme: sæt alle zoner tilbage til auto.
- Kræver
- Tado-integrationen, én klima-entitet pr. zone og en gruppe eller person-entitet, der viser, hvem der er hjemme.
To automationer
- alias: Tado — Away setback
trigger:
- platform: state
entity_id: group.household_members
to: not_home
action:
- action: climate.set_temperature
target:
entity_id:
- climate.zone_living_room
- climate.zone_bedroom
- climate.zone_office
data:
temperature: 17
- alias: Tado — Restore on return
trigger:
- platform: state
entity_id: group.household_members
to: home
action:
- action: climate.set_hvac_mode
target:
entity_id:
- climate.zone_living_room
- climate.zone_bedroom
- climate.zone_office
data:
hvac_mode: auto Hele historien: Et Tado-varmedashboard med card_mod, der faktisk er værd at se på
Besked, når et vindue står åbent, og varmen kører
Du får en push, når et vindue har stået åbent i tyve minutter, og zonen stadig varmer. Den fanger vinduet, ingen fik lukket, og koster ingenting at have kørende.
- Trigger
- En vinduessensor har været tændt i tyve minutter.
- Betingelser
- Den tilhørende klima-entitet melder hvac_action heating.
- Handlinger
- Send en push med rummets navn, hentet fra entitets-ID’et.
- Kræver
- Tado-vinduessensorer med navne som binary_sensor.zone_<rum>_window, tilsvarende climate.zone_<rum>-entiteter og en notify-tjeneste.
Automation
alias: Tado — Open window alert
trigger:
- platform: state
entity_id:
- binary_sensor.zone_living_room_window
- binary_sensor.zone_bathroom_window
to: "on"
for:
minutes: 20
condition:
- condition: template
value_template: >
{{ state_attr(trigger.entity_id | replace('binary_sensor.', 'climate.') | replace('_window', ''), 'hvac_action') == 'heating' }}
action:
- action: notify.all_devices
data:
title: "Window open — heating running"
message: >
{{ trigger.entity_id
| replace('binary_sensor.zone_', '')
| replace('_window', '')
| replace('_', ' ')
| title }} has been open for 20 minutes. Hele historien: Et Tado-varmedashboard med card_mod, der faktisk er værd at se på
Støvsugeren kører, når du går, og er hjemme, når du kommer
Robotten starter fem minutter efter, du er gået, og kører tilbage til dokken, når du kommer hjem. De fem minutter fanger GPS-hop, så den ikke starter, bare fordi telefonen mistede signalet et øjeblik.
- Trigger
- Person-entiteten har været not_home i fem minutter, eller skifter til home.
- Betingelser
- Start: mellem kl. 09.00 og 18.00, og støvsugeren står i dokken. Dok: støvsugeren er i gang.
- Handlinger
- Start støvsugeren, eller send den tilbage til dokken.
- Kræver
- En vilkårlig støvsuger-entitet (hos mig en Roborock) og Companion-appen til tilstedeværelse.
To automationer
- alias: Vacuum — Clean on departure
trigger:
- platform: state
entity_id: person.your_name
to: not_home
for:
minutes: 5
condition:
- condition: time
after: "09:00:00"
before: "18:00:00"
- condition: state
entity_id: vacuum.your_vacuum
state: docked
action:
- action: vacuum.start
target:
entity_id: vacuum.your_vacuum
- alias: Vacuum — Dock on return
trigger:
- platform: state
entity_id: person.your_name
to: home
condition:
- condition: state
entity_id: vacuum.your_vacuum
state: cleaning
action:
- action: vacuum.return_to_base
target:
entity_id: vacuum.your_vacuum Hele historien: Det, der faktisk er nyttigt ved Roborock-kortet i Home Assistant
Push, når postkassen åbnes
Alle telefoner får en besked, når lugen i postkassen går op. En reed-kontakt kender kun åben eller lukket, så der kommer aldrig falske alarmer.
- Trigger
- Postkassesensoren skifter fra off til on.
- Betingelser
- Ingen.
- Handlinger
- Send en besked til notify-gruppen.
- Kræver
- En LoRa-sensor til postkassen (hos mig en MailBoxGuard) og en notify-gruppe med jeres telefoner.
Automation
alias: Mailbox — Notify on delivery
trigger:
- platform: state
entity_id: binary_sensor.mailboxguard
from: "off"
to: "on"
action:
- action: notify.all_devices
data:
title: "Mail in the mailbox"
message: "Something was delivered." Hele historien: MailBoxGuard: LoRa-sensor i postkassen 200 meter fra huset
Stuelyset følger TV’et
Når filmen starter, slukker loftlamperne, og hjørnelamperne går ned på 15 procent. Sæt den på pause eller sluk, så er der fuld lys igen. Ingen sceneknap og ingen stemmekommando.
- Trigger
- TV’ets media player skifter til playing, paused eller idle/off.
- Betingelser
- Klokken er over 18.00.
- Handlinger
- Playing: loftlamper slukket, hjørnelamper på 15 procent og 2200 K. Paused eller slukket: alle lamper på 100 procent og 4000 K.
- Kræver
- En media player-entitet til TV’et (hos mig Android TV-integrationen) og lamper med farvetemperatur. Mode restart sørger for, at en hurtig pause og play ikke giver et lysglimt.
Automation
alias: Living room lights follow the TV
mode: restart
trigger:
- platform: state
entity_id: media_player.living_room_tv
to: playing
id: playing
- platform: state
entity_id: media_player.living_room_tv
to: paused
id: paused
- platform: state
entity_id: media_player.living_room_tv
to: [idle, "off"]
id: stopped
condition:
- condition: time
after: "18:00:00"
action:
- choose:
- conditions:
- condition: trigger
id: playing
sequence:
- action: light.turn_off
target:
entity_id:
- light.ceiling_1
- light.ceiling_2
- action: light.turn_on
target:
entity_id:
- light.accent_1
- light.accent_2
data:
brightness_pct: 15
color_temp_kelvin: 2200
- conditions:
- condition: trigger
id: [paused, stopped]
sequence:
- action: light.turn_on
target:
entity_id:
- light.ceiling_1
- light.ceiling_2
- light.accent_1
- light.accent_2
data:
brightness_pct: 100
color_temp_kelvin: 4000 Hele historien: WiZ-lys, der reagerer på TV'et, uden en knap til biograftilstand
Opvaskemaskinen kører i den billigste time
Ét script finder den billigste time, der er tilbage i dagens spotpriser, sætter sluttidspunktet og starter maskinen. På en almindelig hverdag i Danmark er det en eller to kroner pr. vask.
- Trigger
- Ingen. Du starter scriptet fra en knap på dashboardet, når maskinen er fyldt.
- Betingelser
- Ingen. Kun timer fra nu og frem bliver talt med.
- Handlinger
- Hent dagens priser, vælg den billigste time, læg programmets varighed til, sæt sluttidspunktet og tryk start.
- Kræver
- Energi Data Service (HACS) og en tilsluttet opvaskemaskine med en select til sluttidspunkt og en startknap. Fjernstart skal være slået til på selve maskinen.
Script, startet fra en dashboard-knap
alias: Dishwasher — Schedule cheapest hour
sequence:
- variables:
prices: "{{ state_attr('sensor.energi_data_service', 'raw_today') | default([]) }}"
now_h: "{{ now().hour }}"
duration_h: 2
best_hour: >
{% set ns = namespace(hour=none, price=999) %}
{% for h in prices %}
{% if as_datetime(h.hour).hour >= now_h | int and h.price < ns.price %}
{% set ns.price = h.price %}
{% set ns.hour = h.hour %}
{% endif %}
{% endfor %}
{{ ns.hour }}
- action: select.select_option
target:
entity_id: select.dishwasher_finish_at
data:
option: >
{{ (as_datetime(best_hour) + timedelta(hours=duration_h)).strftime('%H:%M') }}
- action: button.press
target:
entity_id: button.dishwasher_start Hele historien: Sådan planlægger jeg Bosch-opvaskemaskinen i Home Assistant efter elprisen
Indkøbslisten som push, når du når butikken
Når en telefon kommer ind i en butikszone, læser automationen indkøbslisten og sender varerne til netop den butik. Er der intet på listen, der hører til, sker der ingenting.
- Trigger
- En telefon kommer ind i en af butikszonerne.
- Betingelser
- Mindst én åben vare på listen har en beskrivelse, der starter med butikkens navn.
- Handlinger
- Slå butiksnavnet op, hent de åbne varer, filtrér på butik og send en push med listen.
- Kræver
- eTilbudsavis-integrationen med den rettede todo.py fra indlægget, én zone pr. butik og Companion-appen. Enhver todo-liste duer, hvis butiksnavnet står i beskrivelsen.
Automation, to butikker vist
alias: Shopping list — Push at the store
trigger:
- platform: zone
entity_id:
- device_tracker.phone_1
- device_tracker.phone_2
zone: zone.supermarket_a
event: enter
- platform: zone
entity_id:
- device_tracker.phone_1
- device_tracker.phone_2
zone: zone.supermarket_b
event: enter
variables:
store_lookup:
zone.supermarket_a: "Supermarket A"
zone.supermarket_b: "Supermarket B"
store_name: "{{ store_lookup[trigger.zone.entity_id] | default('') }}"
action:
- action: todo.get_items
target:
entity_id: todo.shopping_list
data:
status: needs_action
response_variable: todo_result
- variables:
found: >
{% set ns = namespace(items=[]) %}
{% for item in todo_result['todo.shopping_list']['items'] | default([]) %}
{% if store_name != '' and item.description | default('') | regex_match(store_name) %}
{% set ns.items = ns.items + [item.summary] %}
{% endif %}
{% endfor %}
{{ ns.items }}
- condition: template
value_template: "{{ found | count > 0 }}"
- action: notify.all_devices
data:
title: "{{ store_name }}: {{ found | count }} item(s) on the list"
message: "{{ found | join('\n') }}" Hele historien: eTilbudsavis i Home Assistant: sorteret efter butik og med besked, når du ankommer
Morgenbriefing, der bliver læst højt kl. 06.00
Højttaleren i køkkenet læser vejret, dagens kalender, affaldsafhentning og elprisen op. Den her er en forkortet udgave. Min egen læser også trafikken og bilens ladestatus op.
- Trigger
- Klokken er 06.00.
- Betingelser
- Ingen. Tilføj en ugedagsbetingelse, hvis weekenderne skal være stille.
- Handlinger
- Hent dagens aftaler, byg teksten i en skabelon og læs den op med tts.speak.
- Kræver
- En kalender, en vejr-entitet, en TTS-motor og en media player. Affalds- og prissensorerne er valgfri, så fjern de linjer, hvis du ikke har dem.
Automation, forkortet udgave
alias: Morning briefing — spoken at 06:00
mode: single
trigger:
- platform: time
at: "06:00:00"
action:
- action: calendar.get_events
target:
entity_id: calendar.family
data:
start_date_time: "{{ today_at('00:00') }}"
end_date_time: "{{ today_at('23:59') }}"
response_variable: calendar_result
- action: tts.speak
target:
entity_id: tts.your_tts_engine
data:
media_player_entity_id: media_player.kitchen_speaker
language: en-US # change language and message text to your own
message: >-
{% set events = calendar_result['calendar.family']['events'] %}
{% set temp = state_attr('weather.forecast_home', 'temperature') %}
{% set waste_days = states('sensor.next_waste_collection') | int(99) %}
{% set price = states('sensor.energi_data_service') | float(0) | round(2) %}
Good morning. It is {{ now().strftime('%A') }}.
The temperature outside is {{ temp }} degrees.
{% if events | length > 0 %}
You have {{ events | length }} appointment(s) today:
{% for event in events %}{{ event.summary }}{% if not loop.last %}, {% endif %}{% endfor %}.
{% else %}Nothing in the calendar today.
{% endif %}
{% if waste_days <= 1 %}The bins are collected today.
{% elif waste_days == 2 %}The bins are collected tomorrow.
{% endif %}
The electricity price is {{ price }} kroner per kilowatt hour. Hele historien: En talt morgenbriefing i Home Assistant: kalender, vejr og elpris