Snapshot med Home Assistant och Node-Red

Jag vill släcka alla lampor i huset när jag är borta, men inte utelamporna, om de var på. Låter jobbigt? Man kan självklart lösa detta på flera sätt, men det absolut lättaste sättet jag har hittat är att använda oss av snapshots, en funktion som är lite glömd i all dokumentation men som är riktigt, riktigt bra!

Vill du inte lära dig något utan bara kopiera kod så finns detta längst ner i inlägget.

OBS! Detta är en artikel som ursprungligen var publicerad på frosenlind.se den 22 november 2020.
Länkar i inlägget som hänvisar till gamla sidan kommer inte att fungera!

Målbild

Släcka alla lampor, men inte 2st OM de var tända från början.

Förutsättningar

Allt genomförs i Node-Red.

Bra läsning: https://www.home-assistant.io/integrations/scene/#creating-scenes-on-the-fly

Genomförande

Vi börjar med att dra in tre ”call service”-noder och länkar dessa efter ”set to away”-noden vi gjorde i första inlägget i denna serie.

Node-Red med tre tomma call service-noder

Följande ska nu ske.

  1. Huset sätts till ”Away” (se tidigare inlägg om ni inte gjort detta)
  2. Vi sparar sedan ner vilket ”state” våra utelampor är i.
  3. Vi släcker alla lampor
  4. Vi återställer våra utelampor.

Scene create

I vår första ”call service”-nod ska vi skapa en scen. Observera att entity ID ska vara tom!

VadVärde
Domainscene
Servicecreate
Node-Red, scene create

Vi måste sedan använda oss av json i data-fältet för att skapa vår scen.

{
    "scene_id": "outside_lights_state",
    "snapshot_entities": [
        "light.lt_tf_12",
        "light.lt_tf_15"
    ]
}
VadVärdeKommentar
scene_idoutside_lights_stateSe kommentar nedan.
snapshot_entitiesarray av entitiesglöm inte att innesluta arrayn med [ ]
Node-Red. data in scene create

scene_id blir globalt i hela Home Assistant och skrivs över om du skapar en ny scen med samma namn. Det kan därför vara lämpligt att INTE döpa dina scener till before (som många tutorials på internet gör), skulle du råka använda samma namn på flera platser kan du få väldigt konstiga ”fel”.

Light, turn off all!

I nästa ”call service”-nod fyller vi i enligt nedan.

VadVärdeKommentar
Domainlight
Serviceturn_off
Entity IDall
Node-Red, turn off all lights

Turn_on scene

Nu ska vi återställa våra utomhuslampor. Vi vet fortfarande inte om de är på eller inte, vi vet bara att efter vi gjort nedan kommer de vara i samma state som innan vi släckte alla lampor.
Dvs. var de släckta så kommer det inte hända något, var de tända så kommer de tändas.

VadVärdeKommentar
Domainscene
Serviceturn_on
Entity IDscene.outside_lights_stateNamnet som du angav i första noden.
Node-Red, scene.turn_on

Delay, för att det kan behövas

Vad händer nu?

  1. Vi sparar ner vilket state några lampor har
  2. Vi släcker alla lampor
  3. Vi återställer lamporna vi släckte

Vad kan gå fel? Jo, det visar sig att det faktiskt kan gå fel. (Om det finns någon som kan förklara detta mer tekniskt korrekt så skrik till så lägger jag in det nedan). Kommandona skickas ut och all genomförs inte precis exakt samtidigt. Det innebär att följande skulle kunna ske (vilket hände mig).

  1. Vi sparar ner state på utomhuslamporna
  2. Vi startar processen att släcka alla lampor
  3. Vi återställer lamporna vi släckte
  4. Home Assistant han inte släcka våra utomhuslampor innan vi återställde dem så det händer nu

Dvs. Jag återställde utomhuslamporna innan Home Assistant han släcka dem.

Hur löser vi detta?

Håll ner CTRL och klicka på ett snöre mellan två noder för att lägga till en ny nod.

Lägg till en ”delay”-nod mellan noden som släcker alla lampor och noden som återställer vår scen, lägg in två sekunders fördröjning. Två sekunder är LÅNG tid, troligen behöver du bara några millisekunder för att det faktiskt ska fungera.

Har du följt alla delar i serien borde du nu ha något som ser ut som detta.

Sammanfattning

  • Vi skapar en scen och sparar värdena en ljuskälla har för tillfället
  • Därefter släcker vi alla lamporna vi har
  • Vi väntar två sekunder för att säkerställa att släckningen är klar
  • Slutligen återställer vi våra utomhuslampor till det läge de var innan släckningen

Har du följt alla steg så händer detta
när du lämnar ditt hem, helt automatiskt!

Länk till Node-Red flödet här: https://gist.github.com/frosenlind/3303caa92583dad2ce6573ce6db8353e

Leave a Reply