Hoofdstuk 5 van 22

Voorwaarden — Wanneer mag de automatisering doorgaan?

In het vorige hoofdstuk heb je gezien dat een trigger het startsein van een automatisering is. De bewegingssensor ziet beweging. Het wordt 19:00 uur. De…

In het vorige hoofdstuk heb je gezien dat een trigger het startsein van een automatisering is.

De bewegingssensor ziet beweging.
Het wordt 19:00 uur.
De temperatuur zakt onder 18 °C.
De zon gaat onder.

Op zo’n moment wordt Home Assistant wakker en bekijkt de automatisering.

Maar dat betekent nog niet dat de actie ook altijd uitgevoerd moet worden.

Stel dat in De Werkplaats een bewegingssensor beweging detecteert. Je wilt dat daardoor het licht aangaat. Overdag is dat waarschijnlijk nergens voor nodig. En als het licht al aanstaat, hoeft Home Assistant het ook niet opnieuw in te schakelen.

Daar komen voorwaarden bij kijken.

Een voorwaarde is eigenlijk een controlevraag:

Nu de automatisering is gestart: mag hij op dit moment verdergaan?

Dat verschil tussen een trigger en een voorwaarde is belangrijk. Een trigger zegt wanneer Home Assistant moet kijken. Een voorwaarde bepaalt vervolgens of de automatisering door mag gaan.

Eerst starten, daarna controleren

Neem deze eenvoudige wens:

Als er beweging is in De Werkplaats, zet dan het licht aan als het donker is.

Je kunt deze zin inmiddels opdelen.

Trigger:

Er wordt beweging gedetecteerd.

Voorwaarde:

Het is donker.

Actie:

Zet het licht aan.

De volgorde is belangrijk.

Home Assistant wacht eerst op de trigger. Pas wanneer die trigger plaatsvindt, worden de voorwaarden gecontroleerd.

Je kunt het zien als iemand die aanbelt.

De deurbel is de trigger.

Daarna kijk je eerst wie er voor de deur staat. Dat is de voorwaarde.

Pas daarna besluit je de deur open te doen. Dat is de actie.

Een voorwaarde start een automatisering dus niet uit zichzelf.

Dat is een veelgemaakte denkfout.

Een voorwaarde is geen tweede trigger

Stel dat je automatisering als volgt is opgebouwd:

Trigger: beweging wordt gedetecteerd
Voorwaarde: lichtniveau is lager dan 100 lux
Actie: werkplaatslamp aan

Om 14:00 uur wordt beweging gedetecteerd.

De sensor meet op dat moment 600 lux.

De automatisering wordt gestart, maar de voorwaarde is niet waar. Er gebeurt dus niets.

Een uur later trekt er een donkere onweerswolk over en daalt het lichtniveau naar 80 lux.

Wat verwacht je dat er gebeurt?

Waarschijnlijk niets.

De automatisering wordt namelijk niet opnieuw gestart. Het dalende lichtniveau was geen trigger.

Pas wanneer de bewegingssensor opnieuw beweging detecteert, controleert Home Assistant opnieuw of het lichtniveau lager dan 100 lux is.

Dat onderscheid wordt straks steeds belangrijker.

Een trigger vraagt:

Is er iets gebeurd waardoor ik deze automatisering moet starten?

Een voorwaarde vraagt:

Nu ik toch gestart ben, klopt de situatie waarin ik verder mag gaan?

Waarom voorwaarden automatiseringen beter maken

Zonder voorwaarden reageert een automatisering puur op gebeurtenissen.

Dat kan prima zijn.

Bijvoorbeeld:

Wanneer ik op deze knop druk, zet de werkbankverlichting aan.

Daar is misschien helemaal geen voorwaarde nodig.

Maar zodra de gewenste werking iets ingewikkelder wordt, helpen voorwaarden om ongewenst gedrag tegen te houden.

Je kunt bijvoorbeeld zeggen:

  • alleen als het donker is;
  • alleen als iemand thuis is;
  • alleen tussen bepaalde tijden;
  • alleen als een apparaat uitstaat;
  • alleen op werkdagen;
  • alleen wanneer de temperatuur lager is dan een bepaalde waarde.

Je hoeft een automatisering daarmee niet ingewikkelder te maken dan nodig. Een voorwaarde voeg je alleen toe wanneer er daadwerkelijk een situatie bestaat waarin de automatisering niet verder mag gaan.

Dat is een nuttige gewoonte.

Begin met de eenvoudigste automatisering die je behoefte beschrijft. Voeg daarna pas beperkingen toe.

Een eerste voorbeeld in De Werkplaats

We nemen opnieuw een lamp in De Werkplaats.

De wens is:

Als er beweging wordt gedetecteerd en het is donker, zet dan het licht aan.

Voordat je Home Assistant opent, kun je deze zin eerst uitschrijven.

OnderdeelBetekenis
TriggerEr wordt beweging gedetecteerd
VoorwaardeHet is donker
ActieHet licht gaat aan

Nu komt de interessante vraag:

Hoe weet Home Assistant eigenlijk dat het donker is?

Dat kan op verschillende manieren.

Je kunt bijvoorbeeld kijken naar:

  • het tijdstip;
  • zonsopkomst en zonsondergang;
  • een lichtsensor;
  • de toestand van een andere lamp;
  • een combinatie hiervan.

Welke methode het beste is, hangt af van wat je werkelijk wilt weten.

Als je bedoelt:

Het licht mag alleen 's avonds aan.

dan kan tijd of zonsondergang prima werken.

Maar als je eigenlijk bedoelt:

Het licht mag alleen aan als er onvoldoende daglicht in De Werkplaats is.

dan is een echte lichtsensor meestal logischer.

Dit is precies waarom het nuttig is om eerst in gewone taal te beschrijven wat je wilt bereiken.

Toestanden gebruiken als voorwaarde

Veel voorwaarden in Home Assistant controleren de toestand van een entiteit.

Een deurcontact kan bijvoorbeeld de toestand hebben:

  • open;
  • gesloten.

Een lamp kan zijn:

  • aan;
  • uit.

Een aanwezigheidsmelder kan bijvoorbeeld aangeven:

  • gedetecteerd;
  • niet gedetecteerd.

Je kunt zo'n toestand gebruiken om te bepalen of een automatisering verder mag.

Bijvoorbeeld:

Als beweging wordt gedetecteerd, zet de werkbankverlichting aan, maar alleen als de grote plafondlamp uitstaat.

De plafondlamp is dan geen trigger.

Home Assistant wacht niet tot die lamp uitgaat.

De toestand wordt alleen gecontroleerd op het moment dat de automatisering door de bewegingssensor wordt gestart.

Dat lijkt misschien een klein verschil, maar bij het zoeken naar fouten maakt het enorm veel uit.

Numerieke voorwaarden

Sommige sensoren leveren geen simpele toestand zoals aan of uit, maar een getal.

Bijvoorbeeld:

  • temperatuur: 18,7 °C;
  • luchtvochtigheid: 63%;
  • lichtniveau: 74 lux;
  • accuniveau: 81%;
  • elektrisch vermogen: 425 W.

Daarmee kun je een numerieke voorwaarde maken.

Numeriek betekent simpelweg dat Home Assistant een getal vergelijkt.

Bijvoorbeeld:

Alleen doorgaan als het lichtniveau lager is dan 100 lux.

Of:

Alleen doorgaan als de temperatuur hoger is dan 25 °C.

Je kunt ook een bereik gebruiken.

Bijvoorbeeld:

Alleen doorgaan als de temperatuur hoger is dan 18 °C en lager dan 22 °C.

Bij dit soort voorwaarden is het verstandig eerst naar de werkelijke sensorwaarden te kijken.

Stel dat je zonder te meten besluit dat 300 lux "donker" is. De automatisering werkt technisch precies zoals ingesteld, maar misschien gaat de lamp daardoor de hele middag aan.

Dan is er niets mis met Home Assistant.

De gekozen grenswaarde klopt simpelweg niet met de werkelijkheid.

Dat is bruikbare informatie.

Kijk daarom eerst een tijdje naar de sensorwaarden voordat je een grens kiest.

Tijd als voorwaarde

Tijd is een andere veelgebruikte voorwaarde.

Bijvoorbeeld:

Als er beweging is, zet het licht aan, maar alleen tussen 07:00 en 23:00 uur.

De trigger blijft beweging.

Het tijdstip bepaalt alleen of de automatisering na die trigger verder mag.

Dit kan handig zijn als bepaald gedrag 's nachts ongewenst is.

Bijvoorbeeld:

Als de deur van De Werkplaats wordt geopend, zet de hoofdverlichting aan — maar alleen tussen 07:00 en 22:30 uur.

's Nachts wil je misschien juist een kleine, gedimde lamp gebruiken.

Je zou daarvoor later een tweede automatisering kunnen maken.

Dat is vaak duidelijker dan één automatisering waarin steeds meer uitzonderingen worden verwerkt.

Zon als voorwaarde

Home Assistant weet wanneer de zon opkomt en ondergaat voor jouw locatie.

Daardoor kun je bijvoorbeeld zeggen:

Alleen doorgaan na zonsondergang.

Of:

Alleen doorgaan vóór zonsopkomst.

Dat is vaak praktischer dan vaste tijden.

In december kan het immers al voor 17:00 uur donker zijn, terwijl het in juni nog tot laat in de avond licht blijft.

Toch betekent zonsondergang niet automatisch hetzelfde als donker.

Op een bewolkte middag kan een ruimte donker zijn vóór zonsondergang. Andersom kan er buiten na zonsondergang nog behoorlijk wat schemerlicht zijn.

Denk daarom opnieuw aan wat je werkelijk wilt meten.

  • Wil je weten welk deel van de dag het is? Dan kan de zonpositie geschikt zijn.
  • Wil je weten hoeveel licht er werkelijk aanwezig is? Dan past een lichtsensor beter.

Aanwezigheid als voorwaarde

Een automatisering hoeft niet alleen naar apparaten of sensoren te kijken.

Je kunt ook voorwaarden gebruiken die met aanwezigheid te maken hebben.

Bijvoorbeeld:

Zet de verwarming hoger wanneer de temperatuur daalt, maar alleen als er iemand thuis is.

Of:

Zet de verlichting in De Werkplaats aan bij beweging, maar alleen als de woning niet in de modus 'Afwezig' staat.

Dit kan energie besparen en voorkomt dat automatiseringen onnodig reageren wanneer niemand thuis is.

Toch is hier voorzichtigheid nodig.

Een aanwezigheidsdetectie is nooit beter dan de informatie waarop deze gebaseerd is.

Als je aanwezigheid afleidt uit een telefoonverbinding en de telefoon meldt zich tijdelijk niet bij Home Assistant, kan het systeem denken dat niemand thuis is.

Bij belangrijke automatiseringen is het daarom verstandig jezelf af te vragen:

Wat gebeurt er wanneer deze voorwaarde ten onrechte waar of onwaar is?

Een lamp die niet aangaat is vervelend.

Een verwarmingssysteem dat verkeerd reageert kan grotere gevolgen hebben.

Hoe belangrijker de automatisering, hoe zorgvuldiger je de voorwaarden test.

Meerdere voorwaarden tegelijk

Een automatisering kan meer dan één voorwaarde hebben.

Stel dat je wilt:

Als beweging wordt gedetecteerd in De Werkplaats, zet het licht aan wanneer het donker is én het tussen 07:00 en 23:00 uur is.

Je hebt dan twee voorwaarden:

  • het lichtniveau is laag genoeg;
  • het tijdstip ligt binnen het toegestane bereik.

In de eenvoudigste vorm moeten beide voorwaarden waar zijn.

Je kunt dit lezen als:

Voorwaarde A EN voorwaarde B.

Dat noemen we een AND-voorwaarde.

EN: alles moet kloppen

Stel:

  • lichtniveau moet lager zijn dan 100 lux;
  • tijd moet tussen 07:00 en 23:00 uur liggen.

Bekijk deze situaties eens.

TijdLichtniveauMag doorgaan?
15:00500 luxNee
15:0050 luxJa
23:3050 luxNee
23:30500 luxNee

Alle voorwaarden moeten waar zijn.

Dat is meestal gemakkelijk te begrijpen zolang er maar twee of drie voorwaarden zijn.

Bij tien voorwaarden wordt het al een stuk lastiger om te ontdekken waarom een automatisering niet is uitgevoerd.

Daarom blijft dezelfde regel gelden:

Maak een automatisering niet ingewikkelder dan nodig.

OF: één van de situaties is voldoende

Soms mag een automatisering in meerdere verschillende situaties doorgaan.

Bijvoorbeeld:

Zet de verwarming in De Werkplaats aan als ik thuis ben óf als ik handmatig de modus 'Werkplaats gebruiken' heb ingeschakeld.

Nu hoeft niet alles tegelijk waar te zijn.

Eén van de voorwaarden is voldoende.

Dat noemen we een OR-voorwaarde.

In gewone taal betekent dat:

Voorwaarde A OF voorwaarde B.

Dit soort constructies zijn krachtig, maar maken een automatisering ook sneller moeilijker te lezen.

Schrijf daarom eerst letterlijk uit wat je bedoelt.

Bijvoorbeeld:

De automatisering mag verder wanneer:

  • ik thuis ben;
    of
  • de werkplaatsmodus actief is.

Als de gewone taal al lastig te volgen is, zal de automatisering in Home Assistant meestal niet duidelijker worden.

NIET: een situatie uitsluiten

Soms wil je juist controleren dat iets niet het geval is.

Bijvoorbeeld:

Zet de verlichting bij beweging aan, behalve wanneer de filmstand actief is.

Of:

Stuur een melding wanneer de buitendeur opent, zolang ik niet thuis ben.

Logisch gezien gebruik je dan een ontkenning:

NIET thuis.

of:

NIET filmstand.

Dit heet vaak een NOT-voorwaarde.

Gebruik zulke constructies bewust. Een zin als:

Doe dit als dit niet uit staat.

is moeilijker te begrijpen dan:

Doe dit als dit aan staat.

Als je dezelfde logica positief kunt formuleren, is dat meestal duidelijker.

Voorwaarden kunnen ook bij acties staan

Tot nu toe hebben we gedaan alsof een automatisering één blok voorwaarden heeft:

trigger → voorwaarden → acties

Dat is een goede manier om te beginnen.

Maar Home Assistant kan voorwaarden ook midden tussen acties gebruiken.

Bijvoorbeeld:

  • licht inschakelen;
  • controleren of de temperatuur lager is dan 15 °C;
  • zo ja, ook de verwarming inschakelen.

Daarmee kun je veel uitgebreidere automatiseringen bouwen.

Voor een eerste automatisering is dat meestal nog niet nodig.

Hoe meer vertakkingen en controles je toevoegt, hoe moeilijker het wordt om later te begrijpen wat er precies gebeurt.

In deze gids bouwen we daarom stap voor stap.

Eerst één trigger.

Dan een duidelijke voorwaarde.

Daarna een duidelijke actie.

Pas wanneer dat betrouwbaar werkt, voegen we meer mogelijkheden toe.

Wat gebeurt er als een voorwaarde niet klopt?

Dit is belangrijk.

Als een voorwaarde niet waar is, is dat normaal gesproken geen fout.

Home Assistant zegt eigenlijk:

De automatisering is gestart, ik heb gekeken, maar volgens de afgesproken regels hoef ik nu niets te doen.

De automatisering stopt dan.

Dat is iets anders dan een technisch probleem.

Stel:

Trigger: beweging
Voorwaarde: minder dan 100 lux
Actie: lamp aan

Je loopt om 13:00 uur De Werkplaats binnen.

De bewegingssensor reageert.

Het is 700 lux.

De lamp blijft uit.

Dat is precies het gewenste gedrag.

Wanneer je later in de logboeken of traces kijkt, kan het dus nuttig zijn onderscheid te maken tussen:

  • de automatisering is helemaal niet gestart;
  • de automatisering is wel gestart, maar een voorwaarde was niet waar;
  • de voorwaarden waren waar, maar een actie ging fout.

Dat onderscheid maakt foutzoeken veel eenvoudiger.

Voorspel eerst wat er gaat gebeuren

Voordat je een voorwaarde toevoegt, kun je een kleine test doen.

Neem deze automatisering:

Bij beweging gaat het licht aan, maar alleen onder 100 lux.

Kijk eerst naar het huidige lichtniveau.

Stel dat je sensor aangeeft:

245 lux

Vraag jezelf dan af:

Wat verwacht ik wanneer ik nu beweging maak?

Het antwoord zou moeten zijn:

De automatisering wordt gestart, maar de lamp blijft uit.

Test dat vervolgens.

Maak beweging.

Kijk wat er gebeurt.

Verlaag daarna, als dat praktisch kan, het lichtniveau. Sluit bijvoorbeeld de gordijnen of wacht tot later op de dag.

De sensor geeft nu:

72 lux

Voorspel opnieuw:

Als ik nu beweging maak, verwacht ik dat de lamp aangaat.

Test het.

Door steeds eerst te voorspellen en daarna waar te nemen, leer je veel sneller hoe Home Assistant redeneert.

Verander steeds één ding

Stel dat de automatisering niet doet wat je verwacht.

Verander dan niet tegelijkertijd:

  • de trigger;
  • de luxgrens;
  • de tijdsvoorwaarde;
  • de bewegingssensor;
  • én de actie.

Dan weet je achteraf niet welke wijziging verschil heeft gemaakt.

Controleer liever stap voor stap.

Bijvoorbeeld:

  • Wordt de automatisering gestart?
  • Welke waarde geeft de lichtsensor op dat moment?
  • Is die waarde boven of onder de ingestelde grens?
  • Wordt de voorwaarde daardoor waar?
  • Wordt daarna de actie uitgevoerd?

Op die manier verandert foutzoeken van gokken in meten.

Een veelgemaakte fout: te veel voorwaarden

Wanneer een automatisering soms ongewenst reageert, is de verleiding groot om steeds een nieuwe voorwaarde toe te voegen.

Eerst:

Alleen als het donker is.

Daarna:

En alleen na 17:00 uur.

Dan:

En alleen als iemand thuis is.

En:

Niet wanneer de plafondlamp aanstaat.

En:

Alleen op werkdagen.

Na een tijdje heb je een automatisering waarvan je zelf nauwelijks nog kunt voorspellen wanneer hij wel of niet werkt.

Dat is een waarschuwingssignaal.

Vraag jezelf dan af of je eigenlijk verschillende situaties probeert op te lossen met één automatisering.

Twee eenvoudige automatiseringen zijn vaak beter dan één zeer ingewikkelde.

Begrijpelijkheid is geen luxe.

Een automatisering die je over een halfjaar nog kunt begrijpen, is veel makkelijker te onderhouden.

Wanneer heb je géén voorwaarde nodig?

Niet iedere automatisering heeft een voorwaarde nodig.

Bijvoorbeeld:

Als ik op de knop naast de werkbank druk, zet de werkbanklamp aan.

Dat kan gewoon zijn:

Trigger: knop ingedrukt
Actie: lamp aan

Je zou als voorwaarde kunnen toevoegen:

Alleen als de lamp uitstaat.

Maar vaak is dat niet nodig. Een lamp die al aanstaat nogmaals de opdracht inschakelen geven, levert meestal geen probleem op.

Iedere extra voorwaarde is ook een extra onderdeel dat je later moet begrijpen.

Gebruik voorwaarden daarom niet omdat ze beschikbaar zijn, maar omdat ze een duidelijke functie hebben.

Denk opnieuw in gewone taal

Een handige manier om voorwaarden te herkennen is het woord als of alleen als.

Bijvoorbeeld:

Wanneer er beweging is, zet het licht aan als het donker is.

Of:

Wanneer de temperatuur onder 18 °C komt, zet de verwarming aan als iemand thuis is.

Of:

Om 22:30 uur zet Home Assistant de werkplaatsapparatuur uit als de werkplaatsmodus niet actief is.

Je kunt de automatisering dan opnieuw opdelen:

Wat geeft het startsein?

Dat is de trigger.

Wat moet op dat moment waar zijn?

Dat zijn de voorwaarden.

Wat moet daarna gebeuren?

Dat zijn de acties.

Die drie vragen zijn belangrijker dan de precieze knoppen in de interface.

De interface van Home Assistant kan in de loop van de tijd veranderen. De logica erachter blijft hetzelfde.

Een kleine oefening

Lees de volgende wens:

Als de deur van De Werkplaats wordt geopend, zet de verlichting aan wanneer het buiten donker is en iemand thuis is.

Probeer eerst zelf de drie onderdelen te vinden.

Trigger

De deur van De Werkplaats wordt geopend.

Voorwaarden

  • Het is buiten donker.
  • Er is iemand thuis.

Actie

De verlichting gaat aan.

Nu veranderen we één ding:

Als het buiten donker wordt, zet de verlichting aan wanneer de deur van De Werkplaats openstaat.

Dat lijkt bijna hetzelfde, maar de logica is anders.

Nu is:

Trigger

Het wordt buiten donker.

Voorwaarde

De deur staat open.

Actie

De verlichting gaat aan.

In het eerste voorbeeld start de deur de automatisering.

In het tweede voorbeeld start het donker worden de automatisering.

Dat verschil bepaalt het gedrag.

Voorwaarden maken gedrag voorspelbaar

Een goede automatisering doet niet alleen iets op het juiste moment.

Hij weet ook wanneer hij juist niets moet doen.

Dat is de rol van voorwaarden.

Een trigger zegt:

Kijk nu naar deze automatisering.

Een voorwaarde zegt:

Controleer eerst of de situatie klopt.

Pas daarna komt de volgende vraag:

Wat moet Home Assistant daadwerkelijk uitvoeren?

Dat is het onderwerp van het volgende hoofdstuk.

Daar gaan we kijken naar acties: het deel van de automatisering waarmee Home Assistant daadwerkelijk een lamp inschakelt, een melding verstuurt, een apparaat bedient of meerdere stappen achter elkaar uitvoert.