Hoofdstuk 9 van 22

Wat gebeurt er wanneer een automatisering opnieuw start?

In het vorige hoofdstuk heb je gezien dat een automatisering niet altijd direct klaar hoeft te zijn. Je kunt Home Assistant laten wachten, een vertraging…

In het vorige hoofdstuk heb je gezien dat een automatisering niet altijd direct klaar hoeft te zijn. Je kunt Home Assistant laten wachten, een vertraging toevoegen of bepaalde acties meerdere keren laten uitvoeren.

Daarmee ontstaat vanzelf een nieuwe vraag:

Wat gebeurt er wanneer de automatisering opnieuw wordt gestart terwijl de vorige uitvoering nog niet klaar is?

Bij een korte automatisering merk je daar vaak niets van. Een lamp inschakelen duurt maar een fractie van een seconde. Tegen de tijd dat dezelfde trigger opnieuw optreedt, is de automatisering meestal al beëindigd.

Maar zodra je delay, wait of een herhaling gebruikt, kan een automatisering seconden, minuten of zelfs langer actief blijven.

Dan wordt het gedrag bij een nieuwe trigger ineens belangrijk.

Een voorbeeld uit De Werkplaats

Stel dat je in De Werkplaats een bewegingssensor hebt.

Je wilt het licht automatisch inschakelen wanneer beweging wordt gedetecteerd. Daarna wacht Home Assistant vijf minuten en schakelt het licht weer uit.

In gewone taal:

Als er beweging wordt gedetecteerd, zet dan het licht aan, wacht vijf minuten en zet het licht daarna uit.

Dat klinkt logisch.

De automatisering verloopt ongeveer zo:

  • beweging wordt gedetecteerd;
  • het licht gaat aan;
  • Home Assistant wacht vijf minuten;
  • het licht gaat uit.

Maar stel dat je na drie minuten opnieuw langs de bewegingssensor loopt.

De vorige uitvoering is dan nog bezig met zijn wachttijd.

Wat moet Home Assistant nu doen?

Daar bestaat niet één vanzelfsprekend antwoord op.

Je zou bijvoorbeeld kunnen zeggen:

Negeer de nieuwe beweging. De automatisering loopt immers al.

Maar je zou ook kunnen zeggen:

Begin opnieuw met vijf minuten wachten.

Of:

Bewaar de nieuwe trigger en voer hem later uit.

Of zelfs:

Start gewoon een tweede uitvoering naast de eerste.

Welke keuze juist is, hangt af van wat je probeert te bereiken.

Daarom heeft Home Assistant verschillende uitvoeringsmodi.

Een automatisering kan nog actief zijn

Het helpt om een automatisering niet alleen te zien als een lijst regels, maar als iets dat tijdelijk wordt uitgevoerd.

Wanneer de trigger optreedt, begint één uitvoering van de automatisering.

Je kunt dat zien als een klein taakje dat Home Assistant krijgt:

Voer deze stappen van boven naar beneden uit.

Zolang Home Assistant nog bezig is met die stappen, is die uitvoering actief.

Bijvoorbeeld:

Beweging

Licht aan

Wacht 5 minuten ← automatisering is hier nog actief

Licht uit

Tijdens die vijf minuten is Home Assistant dus niet vergeten wat hij aan het doen was. De uitvoering bestaat nog steeds en wacht tot hij verder mag.

Juist op dat moment kan dezelfde trigger opnieuw optreden.

Home Assistant moet dan weten wat hij met die nieuwe aanvraag moet doen.

De vier uitvoeringsmodi

Home Assistant kent hiervoor vier modi:

  • single
  • restart
  • queued
  • parallel

De standaardinstelling is single. Bij restart wordt een lopende uitvoering eerst gestopt en daarna opnieuw begonnen. Bij queued worden nieuwe uitvoeringen achter elkaar in een wachtrij geplaatst. Bij parallel kunnen meerdere uitvoeringen tegelijkertijd actief zijn.

Je hoeft deze Engelse namen niet meteen uit je hoofd te leren. Het belangrijkste is dat je begrijpt welk gedrag erbij hoort.

We bekijken ze één voor één.

Single — één uitvoering tegelijk

single betekent letterlijk: één.

Zolang de automatisering al bezig is, wordt er geen tweede uitvoering gestart.

Stel opnieuw dat je automatisering vijf minuten wacht.

12:00 beweging → automatisering start

12:00 licht aan

12:03 opnieuw beweging

12:05 licht uit

De beweging van 12:03 veroorzaakt geen nieuwe uitvoering, omdat de eerste nog actief is.

Home Assistant gaat dus gewoon verder met de oorspronkelijke automatisering.

Voor ons voorbeeld betekent dat iets belangrijks.

Je liep om 12:03 opnieuw De Werkplaats binnen, maar het licht gaat toch om 12:05 uit.

Dat is waarschijnlijk niet wat je bedoelde.

single is daarom niet automatisch de beste keuze alleen omdat het de standaardinstelling is.

Het is vooral geschikt wanneer een automatisering niet meerdere keren tegelijk mag worden uitgevoerd.

Denk bijvoorbeeld aan een automatisering die:

  • een apparaat inschakelt;
  • een korte handeling uitvoert;
  • vijf seconden wacht;
  • en daarna klaar is.

Als een nieuwe trigger tijdens die paar seconden zonder problemen genegeerd mag worden, kan single prima werken.

Eerst voorspellen

Stel:

  • de automatisering wacht tien minuten;
  • hij wordt om 14:00 gestart;
  • om 14:04 komt dezelfde trigger opnieuw.

Wanneer is de automatisering klaar als de modus single is?

Niet om 14:14.

De tweede trigger wordt genegeerd.

De oorspronkelijke uitvoering eindigt rond 14:10.

Dat verschil is belangrijk.

Restart — stop en begin opnieuw

Voor onze bewegingssensor is een andere keuze vaak logischer: restart.

Bij deze modus gebeurt het volgende:

Als de automatisering opnieuw wordt getriggerd terwijl hij nog bezig is, stop dan de oude uitvoering en begin opnieuw.

Ons voorbeeld ziet er dan zo uit:

12:00 beweging

12:00 licht aan

wacht 5 minuten

12:03 opnieuw beweging

oude uitvoering stopt

12:03 automatisering begint opnieuw

12:03 licht aan

wacht opnieuw 5 minuten

12:08 licht uit

Nu gebeurt precies wat je waarschijnlijk verwacht.

Elke nieuwe beweging begint als het ware opnieuw met tellen.

Dat maakt restart bijzonder bruikbaar voor situaties als:

Doe iets zolang er activiteit blijft plaatsvinden en begin de wachttijd opnieuw wanneer er nieuwe activiteit komt.

Bijvoorbeeld:

  • verlichting na beweging;
  • een ventilator die nog een tijdje moet blijven draaien;
  • een melding die pas moet worden verstuurd wanneer iets een bepaalde tijd rustig is gebleven.

Home Assistant stopt bij restart eerst de vorige uitvoering voordat de nieuwe begint; de nieuwe uitvoering start alleen wanneer de voorwaarden van de automatisering op dat moment worden gehaald.

Dat laatste detail is makkelijk over het hoofd te zien.

Een nieuwe trigger betekent dus niet automatisch dat alle acties opnieuw worden uitgevoerd. Eventuele voorwaarden worden opnieuw beoordeeld.

Restart is niet hetzelfde als verdergaan

Bij restart gaat Home Assistant niet verder vanaf het punt waar de oude uitvoering was gebleven.

De oude uitvoering wordt afgebroken.

De nieuwe begint weer aan het begin.

Dat verschil kun je goed zien met deze reeks:

Licht aan

Wacht 5 minuten

Speel geluid

Wacht 10 minuten

Licht uit

Stel dat de automatisering tijdens de tweede wachttijd opnieuw wordt getriggerd.

Home Assistant gaat dan niet terug naar:

Wacht 10 minuten

De hele reeks begint opnieuw:

Licht aan

Wacht 5 minuten

Speel geluid

...

Daarom moet je bij restart altijd even naar de volledige automatisering kijken.

Vraag jezelf af:

Kan het kwaad wanneer alle eerdere acties opnieuw worden uitgevoerd?

Bij een lamp die nogmaals wordt ingeschakeld is dat meestal geen probleem.

Bij andere apparaten kan dat wel belangrijk zijn.

Queued — netjes achter elkaar wachten

De derde mogelijkheid is queued.

Een queue is een wachtrij.

Je kent het principe waarschijnlijk gewoon uit de supermarkt:

persoon 1

persoon 2

persoon 3

kassa

De tweede persoon verdwijnt niet omdat de kassa bezig is.

Hij wacht.

Home Assistant kan hetzelfde doen met uitvoeringen van een automatisering.

Stel:

12:00 trigger A

12:01 trigger B

12:02 trigger C

En iedere uitvoering duurt vijf minuten.

Met queued gebeurt ongeveer dit:

12:00 - 12:05 uitvoering A

12:05 - 12:10 uitvoering B

12:10 - 12:15 uitvoering C

De uitvoeringen worden dus achter elkaar afgewerkt en de volgorde blijft behouden. Home Assistant kan bovendien met een maximum begrenzen hoeveel uitvoeringen actief of in de wachtrij mogen staan.

Voor onze bewegingssensor zou dit meestal een vreemde keuze zijn.

Als je tien keer langs de sensor loopt, wil je waarschijnlijk niet dat Home Assistant tien wachttijden van vijf minuten achter elkaar uitvoert.

Maar voor andere toepassingen kan een wachtrij juist nuttig zijn.

Bijvoorbeeld wanneer een apparaat opdrachten één voor één moet verwerken.

De kern van queued is:

Vergeet de nieuwe opdracht niet, maar wacht tot de vorige klaar is.

Parallel — meerdere uitvoeringen tegelijk

De vierde mogelijkheid is parallel.

Daarbij mag iedere nieuwe trigger zijn eigen uitvoering starten.

De bestaande uitvoering blijft gewoon doorgaan.

Stel opnieuw dat iedere uitvoering vijf minuten duurt:

12:00 uitvoering A start

12:02 uitvoering B start

12:03 uitvoering C start

Dan kunnen ze tegelijkertijd actief zijn:

uitvoering A ─────────────

uitvoering B ─────────────

uitvoering C ─────────────

Iedere uitvoering werkt onafhankelijk verder.

Dat kan handig zijn.

Maar het kan ook snel verwarrend worden.

Stel dat iedere uitvoering dezelfde lamp bedient:

licht aan

wacht 5 minuten

licht uit

Dan kan dit gebeuren:

12:00 uitvoering A → licht aan

12:03 uitvoering B → licht aan

12:05 uitvoering A → licht uit

12:08 uitvoering B → licht uit

Je liep om 12:03 opnieuw de ruimte binnen.

Toch schakelt uitvoering A om 12:05 het licht uit.

Uitvoering B is ondertussen nog gewoon actief.

Technisch doet Home Assistant precies wat je hebt gevraagd.

Maar het resultaat voelt verkeerd.

Dat is een belangrijk principe bij automatiseren:

Een automatisering kan technisch correct zijn en toch verkeerd gedrag veroorzaken.

parallel is daarom iets dat je bewust gebruikt, niet simpelweg omdat meer tegelijk uitvoeren sneller klinkt.

Vier modi naast elkaar

We gebruiken steeds dezelfde situatie:

De automatisering duurt vijf minuten en wordt na drie minuten opnieuw getriggerd.

Dan krijg je grofweg dit gedrag.

Single

eerste uitvoering: blijft doorgaan

nieuwe trigger: wordt genegeerd

Restart

eerste uitvoering: wordt gestopt

nieuwe trigger: begint opnieuw

Queued

eerste uitvoering: blijft doorgaan

nieuwe trigger: wacht op zijn beurt

Parallel

eerste uitvoering: blijft doorgaan

nieuwe trigger: start daarnaast

Dat is eigenlijk de hele kern van dit hoofdstuk.

Als je deze vier verschillen begrijpt, kun je veel onverwacht gedrag van automatiseringen verklaren.

Welke modus moet je kiezen?

Probeer niet te beginnen met de technische instelling.

Begin opnieuw met gewone taal.

Vraag jezelf af:

Wat moet er gebeuren wanneer dezelfde gebeurtenis opnieuw plaatsvindt terwijl Home Assistant nog bezig is?

Je antwoord wijst meestal vanzelf naar de juiste modus.

Nieuwe triggers mogen worden genegeerd

Denk aan:

Als dit eenmaal bezig is, hoeft het niet nogmaals gestart te worden.

Dan past meestal:

Single

De nieuwste gebeurtenis is het belangrijkst

Denk aan:

Stop wat je deed en begin opnieuw vanaf dit moment.

Dan past vaak:

Restart

Iedere gebeurtenis moet worden afgehandeld

Denk aan:

Niets mag verloren gaan, maar doe het wel netjes één voor één.

Dan past:

Queued

Iedere gebeurtenis mag onafhankelijk worden uitgevoerd

Denk aan:

Start voor iedere gebeurtenis een eigen uitvoering.

Dan kan passen:

Parallel

Die gewone-taalvraag is belangrijker dan het onthouden van de namen.

Probeer het zelf

We kunnen het gedrag goed zichtbaar maken met onze verlichting in De Werkplaats.

Maak hiervoor bij voorkeur een eenvoudige testautomatisering:

Trigger:

Beweging gedetecteerd

Acties:

Licht aan

Wacht 30 seconden

Licht uit

Gebruik voor de test bewust maar 30 seconden.

Met vijf minuten testen wordt het al snel onnodig traag.

Verander ook maar één ding tegelijk.

Test 1 — Single

Stel de uitvoeringsmodus in op single.

Voorspel eerst wat er gebeurt.

  • Activeer de bewegingssensor.
  • Wacht ongeveer tien seconden.
  • Activeer hem opnieuw.
  • Kijk wanneer het licht uitgaat.

Als alles werkt zoals verwacht, heeft de tweede trigger de wachttijd niet opnieuw gestart.

Het licht gaat ongeveer dertig seconden na de eerste trigger uit.

Test 2 — Restart

Verander nu alleen de modus naar restart.

Verander verder niets.

Herhaal dezelfde test.

  • Activeer de sensor.
  • Wacht tien seconden.
  • Activeer hem opnieuw.

Voorspel opnieuw wanneer het licht uitgaat.

Nu zou de lopende uitvoering worden gestopt en opnieuw beginnen.

Het licht blijft daardoor ongeveer dertig seconden branden vanaf de laatste trigger.

Dat is een klein verschil in configuratie, maar een groot verschil in gedrag.

Test 3 — Kijk naar de trace

Open daarna de trace van de automatisering.

Een trace laat zien welke stappen Home Assistant tijdens een uitvoering heeft doorlopen.

Dat is hier bijzonder nuttig.

Je kunt niet alleen zien dát iets gebeurde, maar ook welke uitvoering actief was en waar deze zich in de reeks bevond.

Bij automatiseringen met wachttijden is dat veel nuttiger dan alleen naar de lamp kijken.

Je combineert daarmee drie dingen:

voorspellen → uitvoeren → controleren

Dat is een veel betrouwbaardere manier om Home Assistant te leren kennen dan steeds instellingen veranderen totdat het toevallig lijkt te werken.

Een fout is hier vaak gewoon een aanwijzing

Bij single kun je merken dat Home Assistant meldt dat een automatisering al actief is wanneer een nieuwe trigger probeert te starten.

Zie zo'n melding niet onmiddellijk als iets dat gerepareerd moet worden.

De melding vertelt je iets nuttigs:

Deze automatisering werd opnieuw getriggerd terwijl de vorige uitvoering nog bezig was.

Dat kan precies de aanwijzing zijn die je nodig hebt.

Misschien duurt de automatisering langer dan je dacht.

Misschien wordt de trigger vaker geactiveerd dan verwacht.

Of misschien past single simpelweg niet bij wat je wilt bereiken.

Ga daarom niet meteen allerlei instellingen veranderen.

Controleer eerst:

  • waardoor werd de automatisering gestart?
  • welke acties waren nog bezig?
  • zat hij misschien in een delay of wait?
  • kwam er ondertussen een nieuwe trigger?
  • welk gedrag wil je in die situatie eigenlijk?

Pas daarna kies je eventueel een andere uitvoeringsmodus.

Kies niet automatisch voor parallel

Het kan verleidelijk zijn om bij problemen gewoon parallel te kiezen.

Dan wordt immers iedere trigger uitgevoerd.

Maar daarmee los je het onderliggende probleem niet noodzakelijk op.

Je kunt juist nieuwe problemen maken.

Twee uitvoeringen kunnen bijvoorbeeld allebei:

  • dezelfde lamp bedienen;
  • dezelfde schakelaar bedienen;
  • dezelfde melding versturen;
  • dezelfde wachttijd uitvoeren;
  • tegenstrijdige opdrachten geven.

Begin daarom meestal met de vraag:

Mag deze automatisering werkelijk meerdere keren tegelijkertijd actief zijn?

Als je daar niet duidelijk ja op kunt antwoorden, is parallel waarschijnlijk niet je eerste keuze.

In veel eenvoudige huisautomatiseringen zijn single en restart al voldoende.

Denk in gedrag, niet in instellingen

We hebben inmiddels behoorlijk wat bouwstenen gezien:

  • triggers;
  • voorwaarden;
  • acties;
  • choose;
  • wachten;
  • vertragen;
  • herhalen;
  • uitvoeringsmodi.

Het gevaar is dat Home Assistant daardoor als een verzameling instellingen begint te voelen.

Probeer dat te voorkomen.

Blijf eerst beschrijven wat je huis of De Werkplaats moet doen.

Bij onze bewegingssensor bijvoorbeeld:

Als ik binnenkom, moet het licht aangaan.
Zolang er opnieuw beweging wordt waargenomen, moet het licht aanblijven.
Pas wanneer er vijf minuten geen nieuwe beweging is geweest, mag het uit.

Daaruit volgt bijna vanzelf dat een nieuwe beweging de lopende wachttijd opnieuw moet beginnen.

En daarmee kom je vanzelf uit bij restart.

De instelling volgt dus uit het gewenste gedrag.

Niet andersom.

Wat je nu weet

Je weet nu dat een automatisering niet noodzakelijk klaar is zodra de eerste actie is uitgevoerd.

Een delay, wait of herhaling kan ervoor zorgen dat één uitvoering langere tijd actief blijft.

Wordt dezelfde automatisering ondertussen opnieuw getriggerd, dan bepaalt de uitvoeringsmodus wat er gebeurt.

Je kunt het onthouden als:

single → negeren

restart → opnieuw beginnen

queued → achteraan aansluiten

parallel → tegelijk uitvoeren

Vooral bij automatiseringen met wachttijden is het verstandig hierover bewust na te denken.

Als een automatisering zich vreemd gedraagt, stel dan daarom één extra vraag:

Zou deze automatisering misschien meerdere keren zijn getriggerd terwijl hij nog bezig was?

Dat verklaart verrassend veel problemen.

Tot nu toe hebben we de acties steeds rechtstreeks in onze automatiseringen gezet. Maar wanneer je verder bouwt, zul je merken dat sommige groepen acties op meerdere plaatsen terugkomen.

Bijvoorbeeld:

Zet in De Werkplaats de werkverlichting aan, stel de juiste helderheid in en schakel een paar andere apparaten in.

Je kunt diezelfde reeks natuurlijk in drie verschillende automatiseringen kopiëren.

Maar zodra je later iets wilt wijzigen, moet je dat ook op drie plaatsen aanpassen.

Dat kan slimmer.

In het volgende hoofdstuk kijken we daarom naar scripts en scènes: manieren om veelgebruikte handelingen één keer vast te leggen en daarna opnieuw te gebruiken, zonder hetzelfde werk steeds opnieuw te doen.