Node-RED tips

Meerdere domain types in één node

In node-RED kun je met de koppeling naar Home Assistant de status opvragen van de intities in HA. Ook kun je diverse lampen, schakelaars en groepen schakelen en dit laatste doe je dan met een ‘service node‘. Binnen de service node dient een ‘domain‘ opgegeven te worden en dit kan o.a. zijn ‘light‘, ‘switch‘, ‘input_binary‘, afhankelijk van het type dat geschakeld dient te worden. Bijvoorbeeld een service om een lamp aan te zetten:

De aan te roepen Service is hier ‘turn_on‘ en bij Entity kan alles ingevoerd worden wat van het Domainlight‘ is. Je hoeft dan geen groep aan te maken in HA.

Wil je een schakelaar bedienen, dan wordt het domain dus ‘switch‘:

Mocht je nu beide domain-types willen schakelen in één node, gebruik dan voor Domain ‘homeassistant‘. Hiermee kunnen alle entities gebruikt worden:


Schakel alle lampen in één keer uit

Om alle lampen te vinden die momenteel aan staan en deze in één keer uit te kunnen zetten kun je gebruik maken van een ‘get entites‘ node, gevolgd door een ‘call service‘ node. Bijvoorbeeld:

In de ‘get entities‘ node staat het volgende:

Hiermee worden dus de entities gezocht die beginnen met ‘light‘ waarvan de statuson‘ is.
De ‘call service’ node om deze lampen uit te zetten, gebruikt de payload uit deze ‘get entities’ node en om deze allemaal te kunnen schakelen maken we gebruik van een javascriptjoin‘ functie. De ‘call service’ node ziet er dan zo uit:


Gebruik één node voor zowel aan als uit, afhankelijk van de payload.

Het komt voor dat een entity aangeroepen wordt vanuit een bepaalde conditie waarvan niet van te voren bekend is of het resultaat is dat de entity ‘aan’ of ‘uit’ gezet moet gaan worden. Bijvoorbeeld een lamp moet aan als er beweging wordt gedetecteerd (status ‘on’) en weer uit als bewegings-sensor weer status ‘off’ heeft. Dit zou dan bijvoorbeeld zo kunnen:

Als we deze flow nu voorzien van debug-nodes dan zal de msg.payload zichtbaar worden in het debug-venster en deze zijn voor de sensor respectievelijk ‘on’ en ‘off’ met een interval van 15 seconden.

Dit kunnen we gebruiken om met één ‘call service’ node het licht zowel aan- als uit te zetten. WIjzig daarvoor de service naar:

waardoor de flow er simpelweg zo uit gaat zien:


Call service node voor een gebied

De ‘call service’ nodes kunnen gebruikt worden om een ‘Area‘ in te stellen om zo bijvoorbeeld alle lampen of schakelaars aan- of uit te zetten. Hieronder een ‘call-service’ om in het gebied ‘Kantoor Nico’ alle lampen uit te zetten:

Je ziet hier dat de Device en Entity leeg kunnen blijven. Uiteraard is de voorwaarde wel dat je in de eigenschap van de entiteiten het Gebied aangeeft.


Bewaar flow variabelen op disk

Standaard worden de flow variabelen in het geheugen bewaard en zolang Node-RED actief blijft kunnen die variabelen uit het geheugen gelezen worden. Echter, na een restart van Node-RED staan die flow-waardes niet meer in het geheugen. Om toch de waardes van de variabelen te kunnen blijven gebruiken, kunnen deze op disk opgeslagen worden. Hiervoor is een aanpassing nodig in de configuratie van Node-RED, in het bestand settings.js. Dit bestand staat bij een Node-RED integratie in HA in de directory /addon_configs/a0d7b954_nodered/ De toe te voegen code is alsvolgt:

  contextStorage: {
    store: { module: "localfilesystem"},
    default: { module: "memory" }
  },

(zet deze als eerste na het commentaar //, dus net boven de ‘functionGlobalContext;’ en op gelijk niveau, dus inspringen met 2 spaties zoals in de code hierboven)

Node-RED herstarten en hierna kan in een node in Node-RED gekozen worden waar de variabele opgeslagen dient te worden, waarbij ‘default’ nog steeds het geheugen is.

Let er dan op dat bij het ophalen van de flow- of globalvariabele, aangegeven dient te worden of deze uit de store of uit default moet komen!