Meerdere beslissingen maken met Choose
In het vorige hoofdstuk heb je gezien dat een automatisering na de trigger en eventuele voorwaarden één of meer acties kan uitvoeren. Dat werkt prima zolang…
In het vorige hoofdstuk heb je gezien dat een automatisering na de trigger en eventuele voorwaarden één of meer acties kan uitvoeren.
Dat werkt prima zolang Home Assistant steeds ongeveer hetzelfde moet doen.
Bijvoorbeeld:
Als er beweging in De Werkplaats wordt gedetecteerd en het is donker genoeg, zet dan de verlichting aan.
De beslissing is eenvoudig. De automatisering mag doorgaan of niet. Als hij doorgaat, wordt de lamp ingeschakeld.
Maar in de praktijk wil je vaak iets anders.
Misschien wil je dat dezelfde bewegingssensor overdag niets doet, 's avonds de verlichting normaal inschakelt en 's nachts alleen een kleine lamp op lage helderheid gebruikt.
Dan is één vaste reeks acties niet meer voldoende.
Home Assistant moet niet alleen bepalen of er iets moet gebeuren, maar ook wat er in deze specifieke situatie moet gebeuren.
Daarvoor kun je Choose gebruiken.
Van één antwoord naar meerdere mogelijkheden
Je kunt Choose het beste zien als een keuzeblok.
Home Assistant krijgt verschillende mogelijkheden aangeboden en controleert welke daarvan bij de huidige situatie past.
Bijvoorbeeld:
- is het overdag → doe niets;
- is het avond → zet de werkplaatsverlichting normaal aan;
- is het nacht → zet alleen een kleine lamp gedimd aan.
In gewone taal zou je kunnen zeggen:
Als er beweging is, kijk dan hoe laat het is en kies daarna wat je moet doen.
Dat is precies het soort beslissing waarvoor Choose bedoeld is.
In Home Assistant bestaat een Choose-actie uit één of meer keuzemogelijkheden. Iedere mogelijkheid heeft zijn eigen voorwaarden en zijn eigen reeks acties. Home Assistant controleert deze mogelijkheden op volgorde en voert de eerste mogelijkheid uit waarvan alle voorwaarden waar zijn. Je kunt daarnaast een standaardactie instellen voor het geval geen enkele mogelijkheid past.
Je kunt het vergelijken met:
ALS situatie A waar is
DAN doe actie A
ANDERS ALS situatie B waar is
DAN doe actie B
ANDERS
doe actie C
Je hoeft hiervoor niet te kunnen programmeren. De visuele automatiseringseditor kan deze structuur voor je opbouwen. Automatiseringen kunnen in Home Assistant gewoon via de gebruikersinterface worden gemaakt.
Waarom niet gewoon meerdere voorwaarden gebruiken?
Dat verschil is belangrijk.
Een gewone voorwaarde bepaalt meestal of de automatisering verder mag gaan.
Stel:
Trigger: er wordt beweging gedetecteerd.
Voorwaarde: het lichtniveau is lager dan 200 lux.
Actie: verlichting aan.
Als de voorwaarde niet waar is, stopt de automatisering.
Dat is prima wanneer je maar twee uitkomsten nodig hebt:
doorgaan of stoppen.
Bij Choose wil je juist meerdere geldige uitkomsten kunnen hebben.
Bijvoorbeeld:
Minder dan 50 lux → grote verlichting aan.
Tussen 50 en 200 lux → alleen werkbankverlichting aan.
Meer dan 200 lux → niets doen.
De automatisering hoeft dus niet te stoppen omdat een eerste voorwaarde niet klopt. Hij kan kijken of een andere mogelijkheid beter past.
Dat maakt Choose vooral handig wanneer je in gewone taal woorden gebruikt zoals:
anders, anders als, afhankelijk van, in dat geval of wanneer dit niet zo is.
Een voorbeeld uit De Werkplaats
We gebruiken een bewegingssensor in De Werkplaats.
We willen het volgende gedrag:
Wanneer er beweging wordt gedetecteerd:
- vóór 23:00 uur gaat de normale werkplaatsverlichting aan;
- vanaf 23:00 uur gaat alleen een kleine lamp gedimd aan.
Probeer voordat je verder leest zelf te bepalen hoe deze automatisering is opgebouwd.
De trigger is:
Er wordt beweging gedetecteerd.
Daarna hoeven we de automatisering niet met een algemene voorwaarde tegen te houden.
In plaats daarvan komt bij de acties een Choose-blok.
Dat bevat twee mogelijkheden.
Mogelijkheid 1
Voorwaarde:
De tijd ligt vóór 23:00 uur.
Actie:
Zet de normale verlichting aan.
Mogelijkheid 2
Voorwaarde:
De tijd ligt vanaf 23:00 uur.
Actie:
Zet de kleine lamp aan.
Je hebt nu dus nog steeds één automatisering en één trigger, maar twee mogelijke reacties.
Dat is een belangrijk verschil.
Choose toevoegen
Open een automatisering via:
Instellingen → Automatiseringen & scènes → Automatiseringen
Open de automatisering die je wilt aanpassen.
Ga naar het gedeelte Dan doen met de acties.
Voeg daar een nieuwe actie toe en kies voor de bouwsteen waarmee meerdere mogelijkheden kunnen worden gekozen.
Je krijgt vervolgens een Choose-structuur waarin je keuzes kunt toevoegen.
Per keuze stel je twee dingen in:
- de voorwaarden waaronder deze keuze geldig is;
- de acties die bij deze keuze moeten worden uitgevoerd.
Dat lijkt in het begin misschien alsof voorwaarden en acties nu door elkaar beginnen te lopen.
Dat is niet zo.
De structuur is nog steeds logisch:
Trigger → eventueel algemene voorwaarden → acties
Alleen zit binnen de acties nu een extra beslissing:
Choose → voorwaarden van deze keuze → bijbehorende acties
Home Assistant ondersteunt zulke conditionele actiereeksen rechtstreeks in de script- en automatiseringssyntax.
Eerst één keuze maken
Begin niet meteen met vier of vijf mogelijkheden.
Maak eerst alleen de avondvariant.
De structuur wordt dan ongeveer:
Wanneer
Beweging gedetecteerd.
Dan doen
Choose:
Keuze 1
Voorwaarde:
Tijd vóór 23:00 uur.
Actie:
Werkplaatsverlichting inschakelen.
Sla de automatisering op.
Nu kun je gericht testen.
Doe dat voordat je de tweede keuze toevoegt.
Voorspel eerst wat er gaat gebeuren
Kijk naar de huidige tijd.
Stel dat het 20:30 uur is.
De voorwaarde vóór 23:00 uur is waar.
Wat verwacht je?
De verlichting zou moeten worden ingeschakeld.
Stel nu dat het 23:30 uur is.
Dezelfde voorwaarde is niet meer waar.
Wat verwacht je dan?
Er is nog geen tweede keuze gemaakt.
Home Assistant vindt dus geen passende keuze en voert binnen dit Choose-blok niets uit.
Dat is geen fout.
Het is precies wat je op dit moment hebt ingesteld.
Dit soort voorspellingen lijken misschien overbodig, maar ze maken het veel gemakkelijker om later fouten te vinden. Je weet immers vooraf welk gedrag je verwacht.
Een tweede keuze toevoegen
Voeg nu binnen hetzelfde Choose-blok een tweede mogelijkheid toe.
Bijvoorbeeld:
Keuze 2
Voorwaarde:
Tijd vanaf 23:00 uur.
Actie:
Kleine werkplaatslamp inschakelen.
Stel de helderheid bijvoorbeeld lager in wanneer de lamp dat ondersteunt.
De automatisering kan nu twee verschillende beslissingen nemen.
Vóór 23:00 uur:
normale verlichting.
Vanaf 23:00 uur:
gedimde verlichting.
De trigger is in beide gevallen hetzelfde.
Alleen de reactie verandert.
Waarom de volgorde belangrijk kan zijn
Choose controleert de mogelijkheden op volgorde. Zodra Home Assistant een keuze vindt waarvan alle voorwaarden waar zijn, wordt die reeks acties uitgevoerd. De volgende keuzes worden dan niet meer gebruikt.
Daarom moet je opletten wanneer voorwaarden elkaar kunnen overlappen.
Stel dat je dit maakt:
Keuze 1
Tijd na 18:00 uur.
Keuze 2
Tijd na 23:00 uur.
Om 23:30 uur zijn beide voorwaarden waar.
Het is immers zowel na 18:00 uur als na 23:00 uur.
Maar als keuze 1 bovenaan staat, wordt die als eerste gevonden.
De tweede keuze wordt dan niet uitgevoerd.
Je zou daardoor misschien verwachten dat de nachtverlichting wordt ingeschakeld, terwijl Home Assistant de avondverlichting kiest.
De automatisering doet dan technisch precies wat je hebt gevraagd.
Alleen je voorwaarden beschrijven je bedoeling niet goed genoeg.
Dat onderscheid is belangrijk bij het zoeken naar fouten.
Maak voorwaarden zo duidelijk mogelijk
Je kunt het vorige probleem bijvoorbeeld oplossen door de tijdvakken duidelijk af te bakenen.
Avond
Na 18:00 uur én vóór 23:00 uur.
Nacht
Na 23:00 uur én vóór 07:00 uur.
Nu overlappen de situaties niet meer op dezelfde manier.
Je kunt de beslissing dan in gewone taal lezen:
Als het avond is, doe dit.
Als het nacht is, doe dat.
Dat is meestal een goed teken.
Wanneer je een automatisering niet meer eenvoudig hardop kunt uitleggen, wordt het ook moeilijker om hem later te onderhouden.
Meerdere voorwaarden binnen één keuze
Een keuze hoeft niet uit één voorwaarde te bestaan.
Je kunt bijvoorbeeld zeggen:
Zet de normale verlichting alleen aan wanneer het vóór 23:00 uur is én het buiten donker genoeg is.
Een keuze bevat dan bijvoorbeeld:
- tijd vóór 23:00 uur;
- lichtniveau lager dan 200 lux.
Pas wanneer alle voorwaarden van die keuze kloppen, wordt de bijbehorende reeks acties uitgevoerd. Dat sluit aan bij de officiële Choose-werking van Home Assistant.
Je kunt zo stap voor stap meer context toevoegen.
Bijvoorbeeld:
beweging + avond + donker → grote verlichting;
of:
beweging + nacht + donker → kleine lamp.
Maar voeg niet alles tegelijk toe.
Begin met tijd.
Test.
Voeg daarna het lichtniveau toe.
Test opnieuw.
Zo weet je welke verandering verantwoordelijk is wanneer het gedrag ineens anders wordt.
De standaardkeuze
Choose heeft nog een handige mogelijkheid: Default.
Dat betekent ongeveer:
Als geen van de bovenstaande keuzes klopt, doe dan dit.
In programmeertaal zou dat vaak else worden genoemd. Home Assistant gebruikt een default-reeks wanneer geen van de eerdere keuzes wordt uitgevoerd.
Stel bijvoorbeeld:
- keuze 1: vóór 23:00 uur → normale verlichting;
- keuze 2: tussen 23:00 en 06:00 uur → nachtlamp.
Wat moet Home Assistant doen als geen van beide situaties klopt?
Misschien helemaal niets.
Dan heb je geen standaardactie nodig.
Maar misschien wil je bij onverwachte situaties een melding laten maken.
Tijdens het bouwen zou je als standaardactie bijvoorbeeld tijdelijk een melding kunnen gebruiken:
Geen passende situatie gevonden.
Dat kan heel bruikbaar zijn bij het testen.
Je ziet dan onmiddellijk dat de trigger wel heeft gewerkt, maar dat geen enkele keuze aan zijn voorwaarden voldeed.
Niets doen is soms de juiste keuze
Beginners hebben vaak de neiging om voor iedere mogelijkheid een actie te willen instellen.
Dat hoeft niet.
Een automatisering mag ook bewust niets doen.
Stel dat je zegt:
Bij beweging:
- als het donker is, verlichting aan;
- als het licht is, niets doen.
Je hoeft niet noodzakelijk een tweede keuze te maken die expliciet niets uitvoert.
Als geen keuze past en er is geen Default ingesteld, kan het Choose-blok simpelweg eindigen zonder een actie uit te voeren.
Dat kan juist duidelijker zijn.
Voeg alleen logica toe als die werkelijk nodig is.
Choose of meerdere automatiseringen?
Je zou hetzelfde probleem ook kunnen oplossen met twee automatiseringen.
Bijvoorbeeld:
Automatisering 1
Beweging + avond → normale verlichting aan.
Automatisering 2
Beweging + nacht → nachtlamp aan.
Dat is niet automatisch verkeerd.
Soms zijn twee eenvoudige automatiseringen zelfs gemakkelijker te begrijpen dan één zeer grote automatisering.
Choose is vooral handig wanneer de verschillende reacties duidelijk bij dezelfde gebeurtenis horen.
Bijvoorbeeld:
Dezelfde knop wordt ingedrukt, maar afhankelijk van de situatie gebeurt iets anders.
of:
Dezelfde bewegingssensor wordt geactiveerd, maar de reactie hangt af van het tijdstip.
Als twee automatiseringen eigenlijk totaal verschillende doelen hebben, is het vaak overzichtelijker om ze ook gescheiden te houden.
Het doel is niet om zo weinig mogelijk automatiseringen te maken.
Het doel is dat je over een half jaar nog begrijpt waarom ze bestaan.
Een praktisch voorbeeld met lichtniveau
Laten we de automatisering in De Werkplaats iets slimmer maken.
We hebben:
- een bewegingssensor;
- een lichtsensor;
- normale plafondverlichting;
- een kleine lamp.
We willen:
Wanneer beweging wordt gedetecteerd:
- bij minder dan 50 lux: plafondverlichting aan;
- bij 50 tot 200 lux: alleen de kleine lamp aan;
- boven 200 lux: niets doen.
Maak hier nog niet meteen de automatisering van.
Schrijf eerst de beslissing uit.
Situatie 1 — donker
Voorwaarde:
Lichtniveau lager dan 50 lux.
Actie:
Plafondverlichting aan.
Situatie 2 — schemerig
Voorwaarden:
Lichtniveau minimaal 50 lux.
Lichtniveau lager dan 200 lux.
Actie:
Kleine lamp aan.
Situatie 3 — voldoende licht
Geen actie nodig.
Nu wordt meteen duidelijk waarom bij de tweede keuze twee grenzen nodig zijn.
Alleen zeggen:
lager dan 200 lux
is niet voldoende.
Bij 30 lux zou die voorwaarde namelijk ook waar zijn.
Door de situaties eerst in gewone taal op te schrijven, ontdek je zulke overlappingen voordat je in Home Assistant allerlei blokken hebt gebouwd.
Test de grenswaarden bewust
Automatiseringen gaan opvallend vaak mis rond grenswaarden.
Stel:
Keuze 1
onder 50 lux.
Keuze 2
boven 50 lux.
Wat gebeurt er precies bij 50 lux?
Dat hangt af van hoe je de voorwaarden hebt ingesteld.
Misschien voldoet 50 aan geen van beide.
Of misschien heb je bij één van de voorwaarden gekozen voor groter dan of gelijk aan.
Test daarom niet alleen duidelijke waarden zoals 20 en 150 lux.
Controleer ook:
- 49 lux;
- 50 lux;
- 51 lux;
- 199 lux;
- 200 lux;
- 201 lux.
Je probeert daarmee niet Home Assistant te slim af te zijn.
Je controleert of je eigen definitie van de grens klopt.
Dat is een nuttige gewoonte bij vrijwel iedere automatisering met meetwaarden.
Geef keuzes herkenbare namen
Zodra een Choose-blok meerdere mogelijkheden bevat, kunnen duidelijke namen veel verschil maken.
Gebruik liever:
Donker — plafondverlichting
dan:
Keuze 1
En liever:
Schemer — kleine lamp
dan:
Keuze 2
Home Assistant ondersteunt een alias voor afzonderlijke Choose-sequenties.
Zo kun je later veel gemakkelijker zien waarom een bepaalde tak bestaat.
Vooral wanneer je een automatisering maanden later opnieuw opent, is dat prettig.
Je hoeft dan niet eerst drie voorwaarden te bestuderen om te ontdekken wat een keuze eigenlijk moest doen.
Controleren welke keuze werkelijk is uitgevoerd
Bij complexere automatiseringen is alleen kijken naar de lamp niet altijd voldoende.
Misschien is de lamp al aan.
Misschien reageerde het apparaat niet.
Misschien werd een andere keuze uitgevoerd dan je dacht.
Home Assistant houdt daarom bij een uitgevoerde automatisering een trace bij. Daarin kun je terugzien welke stappen zijn doorlopen en welke voorwaarden wel of niet slaagden. De automatiseringseditor laat bovendien afzonderlijke voorwaarden en acties testen.
Dat maakt een trace bijzonder nuttig bij Choose.
Je kunt bijvoorbeeld zien:
- de automatisering is gestart;
- keuze 1 is gecontroleerd;
- de voorwaarde was niet waar;
- keuze 2 is gecontroleerd;
- die voorwaarde was wel waar;
- de bijbehorende actie is uitgevoerd.
Dan hoef je niet te gokken.
Je volgt wat Home Assistant werkelijk heeft gedaan.
Testen met 'Acties uitvoeren'
Er zit wel een belangrijk verschil tussen normaal activeren en handmatig testen.
Via Acties uitvoeren kun je de acties van een automatisering starten zonder te wachten tot de echte trigger plaatsvindt. Daarbij worden de normale triggers en de algemene voorwaarden van de automatisering overgeslagen. Voorwaarden die onderdeel zijn van de acties zelf kunnen nog wel bepalend zijn voor wat er gebeurt. Home Assistant waarschuwt daarnaast dat triggergegevens niet beschikbaar zijn wanneer je op deze manier test.
Voor onze eenvoudige Choose op basis van tijd of lux is dat meestal geen probleem.
Maar later, wanneer een keuze afhankelijk wordt van welke trigger de automatisering heeft gestart, moet je daar rekening mee houden.
Voor nu is vooral belangrijk:
Weet wat je test.
Test je alleen de acties?
Of test je de hele automatisering inclusief de echte trigger?
Dat zijn niet altijd dezelfde tests.
Wanneer Choose te ingewikkeld wordt
Choose is krachtig, maar dat betekent niet dat je alles in één Choose-blok moet stoppen.
Als je uiteindelijk iets krijgt als:
- keuze 1 met vier voorwaarden;
- keuze 2 met vijf voorwaarden;
- daarbinnen nog een Choose;
- daarin opnieuw drie keuzes;
- daarna nog verschillende uitzonderingen;
dan werkt de automatisering misschien technisch nog prima.
Maar de vraag wordt:
Begrijp jij hem nog?
Home Assistant ondersteunt het nesten van Choose-blokken, dus technisch kan dat.
Maar technisch mogelijk is niet hetzelfde als verstandig.
Wanneer je merkt dat je steeds meer uitzonderingen nodig hebt, schrijf dan opnieuw in gewone taal op wat je eigenlijk probeert te bereiken.
Misschien blijken het eigenlijk twee verschillende automatiseringen te zijn.
Of misschien kun je een deel later beter onderbrengen in een script.
Eenvoudige logica is gemakkelijker te testen en vaak betrouwbaarder.
Een bruikbare vuistregel
Je kunt voorlopig deze vuistregel gebruiken.
Gebruik een gewone voorwaarde wanneer je wilt zeggen:
Alleen doorgaan als…
Gebruik Choose wanneer je wilt zeggen:
Afhankelijk van de situatie doe je dit of dat.
Bijvoorbeeld:
Gewone voorwaarde
Alleen doorgaan als iemand thuis is.
Choose
Als Ap thuis is, doe A.
Als niemand thuis is, doe B.
Het verschil zit dus niet in het soort informatie dat je controleert.
Het verschil zit in wat je met de uitkomst wilt doen.
Zelf proberen
Maak een eenvoudige testautomatisering met een lamp die je veilig kunt gebruiken.
Gebruik bijvoorbeeld een knop of bewegingssensor als trigger.
Maak daarna een Choose-blok met twee mogelijkheden:
Overdag
Zet de lamp op normale helderheid.
's Avonds
Zet de lamp op lagere helderheid.
Voordat je de automatisering uitvoert, controleer je:
- Hoe laat is het nu?
- Welke keuze verwacht ik dat Home Assistant maakt?
- Welke actie hoort daarbij?
Voer daarna de automatisering uit.
Kijk niet alleen of de lamp reageert.
Open ook de trace.
Controleer of Home Assistant werkelijk dezelfde keuze heeft gemaakt die jij vooraf voorspelde.
Als dat zo is, weet je niet alleen dát de automatisering werkt.
Je begrijpt ook waarom hij werkt.
Als het niet werkt
Verander niet meteen verschillende dingen tegelijk.
Controleer eerst:
Is de automatisering gestart?
Zo niet, kijk dan naar de trigger.
Is het Choose-blok bereikt?
Zo niet, kijk dan naar eventuele algemene voorwaarden of eerdere acties.
Welke keuze is getest?
Bekijk de trace.
Was de voorwaarde waar of niet waar?
Controleer de actuele status of meetwaarde.
Werd de juiste actie gekozen?
Voer die actie eventueel afzonderlijk uit.
Pas daarna één ding aan.
Bijvoorbeeld de tijdsgrens van 23:00 naar 22:00.
Test opnieuw.
Door steeds één onderdeel te veranderen, blijft zichtbaar welk onderdeel het gedrag veroorzaakt.
Een mislukte test is dan geen verloren tijd.
Hij vertelt je waar je verder moet zoeken.
Van reageren naar beslissen
Tot nu toe hebben we de drie belangrijkste onderdelen van een automatisering steeds verder opgebouwd.
Een trigger vertelt Home Assistant:
Nu moet je kijken.
Een voorwaarde vertelt:
Alleen doorgaan wanneer dit klopt.
Een actie vertelt:
Dit moet je uitvoeren.
Choose voegt daar iets nieuws aan toe:
Kijk naar de situatie en bepaal welke actie daarbij hoort.
Daarmee begint een automatisering steeds meer te lijken op de manier waarop je zelf beslissingen neemt.
Niet:
Er is beweging, dus lamp aan.
Maar:
Er is beweging. Hoe donker is het? Hoe laat is het? Welke verlichting is in deze situatie logisch?
Je hoeft daar geen ingewikkelde automatisering van te maken.
Juist door de beslissingen klein en herkenbaar te houden, bouw je stap voor stap een huis dat niet alleen reageert, maar rekening houdt met de situatie.
Tot nu toe voerde Home Assistant zijn acties direct uit zodra de juiste keuze was gemaakt.
Maar soms wil je juist dat er tijd tussen acties zit.
Misschien moet een lamp vijf minuten aanblijven.
Misschien wil je wachten totdat een sensor verandert.
Of misschien moet dezelfde actie een aantal keren worden herhaald.
Daar kijken we in het volgende hoofdstuk naar: