Functies: IF, Math, Range, Filter, Javascript

De knooppunten van de categorie Functions in de Flow: vergelijkingen met IF, berekeningen met Math, schaalkonversies met Range, filtering van waarden met Filter en aangepaste code met het Javascript-knooppunt, met eigenschappen en voorbeelden.

De knooppunten van de categorie Functions werken met waarden: ze vergelijken, berekenen, converteren en filteren. IF, Math, Range en Filter hebben de ingang TRG, die werkt zoals in de booleaanse operatoren: als die is aangesloten, berekent het knooppunt alleen wanneer TRG naar ingeschakeld gaat.

IF: twee waarden vergelijken

Vergelijkt IN A met IN B en schakelt de uitgang OUT in als de voorwaarde waar is.

Voorwaarde

OUT ingeschakeld wanneer

Greater

A > B

Less

A < B

Greater or equal

A ≥ B

Less or equal

A ≤ B

Equal

A = B

Not equal

A ≠ B

Flow IF: Temperature en Setpoint op een IF-knooppunt met voorwaarde Greater
De IF-flow van het voorbeeldproject

Als beide waarden getallen zijn (ook wanneer ze als tekst zijn geschreven, bijvoorbeeld "21.5"), dan is de vergelijking numeriek; anders vergelijkt IF de teksten exact zoals ze zijn geschreven (inclusief hoofdletters). Zo kun je Equal ook gebruiken om een tekst te controleren, bijvoorbeeld de weekdag Sunday van het Date/Hour-knooppunt.

Voorbeeld — koelvraag: kamertemperatuur op IN A, setpoint op IN B, voorwaarde Greater: de uitgang Cooling request schakelt in wanneer de ruimte warmer is dan het setpoint.

Een IF tussen temperatuur en setpoint schakelt om bij elke tiende graad rond de waarde. Voor een echte thermostaat is hysterese nodig: zie het voorbeeld in Praktische voorbeelden.

Math: berekeningen op meerdere waarden

Voert een bewerking uit op alle ingangen IN (met Add voeg je er meer toe) en zet het resultaat op OUT.

Bewerking

Resultaat

Max / Min

De hoogste / laagste waarde.

Average

Het gemiddelde.

Sum

De som.

Subtraction

De eerste ingang min alle andere.

Multiplication

Het product.

Division

De eerste ingang gedeeld door de andere; delen door nul geeft een ongeldig resultaat (NaN).

Absolute

De absolute waarde van de net ontvangen waarde.

Log10

De logaritme met basis 10 van de net ontvangen waarde (alleen waarden groter dan nul).

Flow Math: drie sensoren op een Math Average-knooppunt
Gemiddelde van drie sensoren met Math › Average

Ingangen die nog geen waarde hebben ontvangen, worden genegeerd: een gemiddelde van drie sensoren, waarvan er één nog niet is aangesloten, is het gemiddelde van de andere twee.

Voorbeeld — gemiddelde temperatuur: drie temperatuursensoren op een Math Average; de uitgang gaat naar een Info-component voor de app of naar een thermostaat als referentietemperatuur.

Andere toepassingen: Sum voor het totale verbruik van meerdere lijnen, Max voor de hoogste temperatuur in meerdere ruimtes, Subtraction voor het verschil tussen aanvoer en retour, Multiplication om een eenheid om te rekenen (bijvoorbeeld kWh × prijs).

Range: een schaal converteren

Converteert een waarde lineair van de ene schaal naar een andere: de waarde X0 aan de ingang wordt Y0 aan de uitgang, X1 wordt Y1, en tussenliggende waarden zijn proportioneel.

Eigenschap / ingang

Betekenis

X0, X1

Begin en einde van de ingangsschaal.

Y0, Y1

Begin en einde van de uitgangsschaal.

IN

De te converteren waarde.

Priority Enabled

Als dit is ingeschakeld, neemt de uitgang de vaste waarde Priority Value aan, ongeacht de ingang.

Priority Value

De afgedwongen waarde wanneer de prioriteit actief is (standaard 0).

Direct/Inverse

Als dit is ingeschakeld, voert het knooppunt de omzetting omgekeerd uit: van Y0–Y1 naar X0–X1.

Flow Range: Brightness % omgezet van 0-100 naar 0-255 voor een DMX-niveau
De Range-flow: van 0–100 naar 0–255

Het knooppunt begrenst het resultaat niet: een waarde buiten de ingangsschaal geeft een waarde buiten de uitgangsschaal (met X 0–100 en Y 0–255 geeft een ingang van 110 280,5).

Voorbeeld — van percentage naar DMX: een schuifregelaar 0–100 % stuurt een DMX-kanaal 0–255 aan. Met X0 = 0, X1 = 100, Y0 = 0, Y1 = 255 wordt 50 % 127,5. De ingang Force value gekoppeld aan Priority Enabled dwingt de prioriteitswaarde af (bijvoorbeeld 0 om alles uit te schakelen).

Andere toepassingen: een 4–20 mA-sensor gelezen als 0–1000 om te zetten naar 0–50 °C; een omgekeerde schaal (Y0 = 100, Y1 = 0) om de opening van een rolluik om te zetten in sluiting.

Filter: slechts één waarde doorlaten

Flow Filter: Motion op een Filter met conditie 1 naar Turn on
De Filter-flow: alleen inschakelingen gaan door

Laat naar OUT alleen waarden door die gelijk zijn aan de Condition:

  • Condition = 1: alleen inschakelingen gaan door; uitschakelingen worden verworpen.

  • Condition = 0: alleen uitschakelingen gaan door; inschakelingen worden verworpen.

Voorbeeld — alleen inschakeling: een bewegingssensor schakelt een licht in, maar het uitschakelen moet van een andere logica komen (bijvoorbeeld een timer). Met een Filter op 1 kan de sensor alleen inschakelen.

Javascript: aangepaste code

Wanneer de standaardknooppunten niet volstaan, voert het Javascript-knooppunt een door jou geschreven script uit. Het heeft één ingang IN en één uitgang OUT; met de knoppen Add voeg je extra ingangen toe (IN 1, IN 2…) en extra uitgangen (OUT 1, OUT 2…).

Javascript-knooppunt Format kW geselecteerd met het script in het Properties-venster
Het Javascript-knooppunt met het script in het Properties-venster

Het script wordt telkens uitgevoerd wanneer een ingang verandert en heeft toegang tot:

Naam

Inhoud

inputs

De lijst met huidige ingangwaarden: inputs[0] is IN, inputs[1] is IN 1, enzovoort. Een ingang zonder waarde is null.

changedIndex

Het nummer van de ingang die zojuist van waarde is veranderd (0 voor IN, 1 voor IN 1…).

changedValue

De nieuwe waarde van die ingang.

setOutput(n, waarde)

Stuur een waarde naar uitgangsnummer n (0 voor OUT, 1 voor OUT 1…). Als het script setOutput niet aanroept, verandert de uitgang niet.

log(tekst)

Schrijft een bericht in het serverlogboek, handig om het script te controleren.

Waarden komen als tekst binnen: gebruik Number(inputs[0]) voor getallen. De variabelen die in het script worden gedeclareerd blijven in het geheugen tussen uitvoeringen van dezelfde node, zodat je een vorige waarde kunt onthouden.

Voorbeeld — verbruik opmaken: van watt naar tekst in kW met twee decimalen, voor een Info-component.

var w = Number(inputs[0]);
setOutput(0, (w / 1000).toFixed(2) + ' kW');

Voorbeeld — alleen grote veranderingen melden: stuur de temperatuur alleen wanneer deze met minstens een halve graad verandert.

var t = Number(inputs[0]);
if (typeof last === 'undefined' || Math.abs(t - last) >= 0.5) {
  last = t;
  setOutput(0, t);
}

Voorbeeld — twee uitgangen uit één ingang: van een vermogen, een booleaanse uitgang "overbelasting" en een numerieke uitgang in kW.

var w = Number(inputs[0]);
setOutput(0, w > 3000);
setOutput(1, w / 1000);

Elke uitvoering mag maximaal 250 ms duren en maximaal 8 MB geheugen gebruiken; recursieve functies zijn beperkt tot 64 niveaus. Een script dat de limieten overschrijdt, wordt afgebroken en de fout verschijnt in het serverlogboek. Gebruik geen wachtlussen: voor vertragingen gebruik je de timer-nodes.

Laatst bijgewerkt: