Home Assistant Automations

  • door

Ik ben inmiddels al een tijdje bezig met Home Assistant, en heb gisteren mijn configuratie eindelijk in een redelijk overzichtelijke manier opgezet. Voorheen had ik alles in één bestand staan, nu is alles opgesplitst in losse bestanden. Deze manier van configureren zorgt ervoor dat ik door enkel een nieuw bestand aan te maken op de juiste plek, zonder extra stappen nieuwe configuratie kan introduceren. Wil ik een nieuwe automation? Dan maak ik gewoon een yaml bestand aan in de automations-map, en dan is die automation beschikbaar! No additional steps required.

Na het omzetten van de configuratie was het ook tijd om eens dieper in te gaan op de automations.

Allereerst een korte omschrijving van wat een automation nou precies is:
# Example
(trigger) When Paulus arrives home
(condition) and it is after sunset:
(action) Turn the lights in the living room on

Een automation bestaat uit een drietal onderdelen: een trigger, een conditie en een actie.

Een trigger beschrijft wanneer een automation geactiveerd moet worden. Dit kan een verandering van een state zijn (iemand komt thuis), of een bepaald event wat door het systeem afgevuurd wordt.

Het tweede deel is de conditie. Dit geeft aan binnen welke kaders de automation uitgevoerd mag worden. Dit is een optionele configuratie waarmee je bijvoorbeeld aan kan geven dat een automation niet (of juist alleen) tussen bepaalde tijdstippen af mag gaan.

Het derde en laatste deel is de action. Dit is de actie die uitgevoerd wordt zodra de automation afgaat. Dit kan een simpele actie zijn (zoals ik al eerder laten zien heb), of een uitgebreidere actie met condities. Op die laatste soort ga ik in deze blog in.

Als case heb ik gekozen om een optie toe te voegen aan mijn Home Assistant configuratie zodat ik de internet stream van een radiozender af zou kunnen spelen op mijn Chromecast.

De eerste stap om dit te realiseren is door een optie te maken om te kunnen kiezen naar welke zender ik zou willen luisteren. Dit is vrij eenvoudig:
# Select Radio Stations
radio_station:
name: "Radiozender"
options:
- Uit
- 538
- SLAM
- Veronica
initial: Uit
icon: mdi:radio

De bovenstaande yaml code maakt een nieuwe input select aan waar gekozen kan worden uit een aantal statussen. Standaard staat deze uit.

Vervolgens kunnen we de automation aanmaken die acteert op de status ‘Uit’:
# Chromecast Radio - State: Off
alias: "Chromecast Radio Uit"
trigger:
platform: state
entity_id: input_select.radio_station
to: "Uit"
action:
service: media_player.turn_off
data:
entity_id: media_player.huis

De bovenstaande automation wordt geactiveerd zodra de status van de input_select.radio_station veranderd naar “Uit”. In dat geval zet deze de media_player.huis uit. Dat is de naam die ik mijn Chromecast Audio groep gegeven heb.

Dan is het natuurlijk nog zaak om te zorgen dat er een radiozender afgespeeld kan worden. Om dat te doen maak ik gebruik van een data-template. Dit is een krachtig mechanisme om afvragingen te kunnen doen binnen één automation:
# Chromecast Radio - State: Play Media
alias: "Chromecast Radio Play Media"
trigger:
platform: state
entity_id: input_select.radio_station
action:
service: media_player.play_media
data_template:
entity_id: media_player.huis
media_content_id: >
{% if is_state("input_select.radio_station", "538") %}
http://vip-icecast.538.lw.triple-it.nl:80/RADIO538_MP3
{%-elif is_state("input_select.radio_station", "SLAM") %}
http://edge2-icecast.538.lw.triple-it.nl/SLAMFM_MP3
{%-elif is_state("input_select.radio_station", "Veronica") %}
http://8543.live.streamtheworld.com/VERONICACMP3
{% else %}
none
{% endif %}
media_content_type: "audio/mp4"

Deze automation speelt een stream af op de eerder genoemde Chromecast groep, op basis van de geselecteerde radiozender. Met if is_state(<input select>, <waarde>) kan je een conditie opgeven, welke dan hetgeen wat binnen deze if valt als waarde zet op media_content_id. In het bovenstaande voorbeeld speelt de conditie is_state("input_select.radio_station", "538") dus de stream van Radio 538 af.

Bovenstaande code is slechts een klein deel van wat je allemaal met Automations kan doen. Op de forums van Home Assistant zijn heel veel andere enthousiaste mensen bezig met het automatiseren van hun eigen huis, en sommigen delen dan ook ideeën over hoe je bepaalde dingen kan inregelen. Dat is erg leuk om te zien, en soms pik ik daar zelf ook nog wel een en ander van mee 🙂

De code uit deze blog (en mijn hele Home Assistant setup) staat op mijn Github account.