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 intiteiten in HA. Ook kun je diverse lampen, schakelaars en groepen schakelen en dit laatste doe je dan met een ‘action node‘. In de action dient een actie opgegeven te worden van het formaat ‘domain.action‘ waarbij domain o.a. kan zijn ‘light‘, ‘switch‘, ‘input_binary‘, etc…, afhankelijk van het type dat geschakeld dient te worden. De action is dan afhankelijk van het domain, vaak ’turn_on’, ’turn_off’, ’toggle’, etc. Bijvoorbeeld een action om een lamp aan te zetten:

De aan te roepen Action wordt hier ‘light.turn_on‘ vervolgens kan aangegeven worden welke verlichting aangezet dient te worden. Die kan dan geselecteerd worden met behulp van

  • de entiteit naam
  • de device naam
  • de area (gebied)
  • de floor (verdieping)
  • het label

Wil je een schakelaar aan zetten, dan wordt de action dus ‘switch.turn_on‘:

Mocht je nu beide domain-types willen schakelen in één node, gebruik dan voor de action ‘homeassistant.turn_on‘.


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 ‘action‘ 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 ‘action’ 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 ‘action’ 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 ‘action’ node het licht zowel aan- als uit te zetten. Wijzig daarvoor de action naar light.turn{{payload}}:

waardoor de flow er simpelweg zo uit gaat zien:


Call service node voor een gebied

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

In plaats van Area, kun je uiteraard ook kiezen voor ‘Floor‘ of ‘Label‘.


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!