TapHome

Interpolation und Schwellenwerte

Lineare Interpolation mit LINEAR und Schalten mit Schwellenwerten mit HYSTERESIS zum Abbilden von Werten, Dimmen von Licht und Steuern der Heizung in TapHome-Skripten.

LINEAR wandelt einen Wert entlang einer Geraden von einem Bereich in einen anderen um. HYSTERESIS schaltet mit einer Totzone zwischen zwei Ausgangswerten, sodass der Ausgang nicht um einen einzelnen Schwellenwert herum hin und her springt.

LINEAR

LINEAR bildet einen Wert aus einem Eingangsbereich auf einen Ausgangsbereich ab, entlang der Geraden durch zwei Punkte, in1 → out1 und in2 → out2 — zum Beispiel einen rohen Registerwert auf Prozent oder das Tageslicht auf die Helligkeit des Lichts.

1
2
LINEAR(value, in1, out1, in2, out2)
LINEAR(value, in1, out1, in2, out2, LinearType)

Parameter

NameTypBeschreibung
valueZahlEingangswert.
in1, out1ZahlErster Punkt: Eingang in1 ergibt Ausgang out1.
in2, out2ZahlZweiter Punkt: Eingang in2 ergibt Ausgang out2.
LinearTypeenum, optionalWas passiert, wenn value außerhalb des Bereichs in1 – in2 liegt.
LinearTypeErgebnis außerhalb des Eingangsbereichs
DEFAULT (oder weggelassen)Wie BOUNDS. Bei Core-Versionen vor 2022.2 extrapoliert es wie INFINITE.
BOUNDSDer Wert wird auf den Bereich begrenzt, das Ergebnis bleibt also zwischen out1 und out2.
STRICTNaN.
INFINITEDie Gerade wird fortgesetzt (Extrapolation).
Graph der Funktion LINEAR

Rückgabewert — double. Eine Eingabe NaN ergibt NaN. Wenn in1 gleich in2 ist, lässt sich die Steigung nicht berechnen, und stattdessen wird 1 verwendet.

Beispiel — einen Rohwert umrechnen

# raw register 0 ... 1000 -> 0 ... 100 %
LINEAR(MODBUSR(H, 10, Uint16), 0, 0, 1000, 100);
VAR raw := 250;
LINEAR(raw, 0, 0, 500, 50);
# Result: 25

Die Wirkung von LinearType für die Eingabe 11 mit den Punkten 0 → 400 und 10 → 2000:

LINEAR(11, 0, 400, 10, 2000, BOUNDS);
# Result: 2000
LINEAR(11, 0, 400, 10, 2000, INFINITE);
# Result: 2160
LINEAR(11, 0, 400, 10, 2000, STRICT);
# Result: NaN

Beispiel — Dimmen: einen Wert auf die Helligkeit des Lichts abbilden

Ein Dimmerwert läuft in TapHome von 0 bis 1 (0 – 100 %). Diese Formel dimmt ein Licht von voller Helligkeit bei Dunkelheit bis aus bei 300 lx Tageslicht; BOUNDS hält den Wert bei helleren oder dunkleren Messwerten zwischen 0 und 1:

# Va is the daylight sensor in lx, the result is the dimmer level
LINEAR(Va, 0, 1, 300, 0, BOUNDS);
# Result: 0.5 at 150 lx, 0 at 300 lx and more

Eine Dimmkurve, die nie unter 10 % fällt — ein Schiebereglerwert x von 0 bis 1 wird auf 0.1 – 1 abgebildet:

LINEAR(x, 0, 0.1, 1, 1);

Dasselbe funktioniert für die Lüftung: LINEAR(co2, 400, 0, 1200, 1) ergibt 0 bei 400 ppm, 0.5 (50 %) bei 800 ppm und 1 bei 1 200 ppm.

Siehe auch — HYSTERESIS, Runden und Zufallszahlen.

HYSTERESIS

HYSTERESIS gibt lowerState zurück, wenn ein Wert auf lowerThreshold fällt, upperState, wenn er auf upperThreshold steigt, und previousState, solange er dazwischen bleibt.

1
HYSTERESIS(value, upperThreshold, lowerThreshold, upperState, lowerState, previousState)

Eine Hysterese filtert ein Signal so, dass der Ausgang langsamer reagiert als der Eingang: Ein Thermostat schaltet eine Heizung ein, wenn die Temperatur unter einen Wert fällt, aber erst wieder aus, wenn sie über einen anderen steigt.

Parameter

NameTypBeschreibung
valueZahlGemessener Wert, zum Beispiel eine Temperatur.
upperThresholdZahlWert, ab dem upperState zurückgegeben wird. Muss höher sein als lowerThreshold.
lowerThresholdZahlWert, bei dem oder unter dem lowerState zurückgegeben wird.
upperState, lowerStateZahlErgebnisse für die beiden Schwellenwerte — beliebige Zahlen, nicht nur 0 und 1.
previousStateZahlErgebnis, solange der Wert zwischen den Schwellenwerten liegt, meist der vorherige Ausgang. Darf nicht Null sein.

Rückgabewert — double: upperState, lowerState oder previousState. Ein Wert, der höchstens 0.005 von einem Schwellenwert entfernt ist, gilt als erreicht. Ein Wert NaN gibt previousState zurück.

Beispiel — Heizung

Halten Sie einen Raum mit einer Hysterese von ±2 °C auf 20 °C: Die Heizung schaltet ein, wenn die Temperatur auf 18 °C fällt, und aus, wenn sie auf 22 °C steigt. In einer smart rule Skript wird der Schalter der Heizung sowohl gelesen als auch geschrieben:

# Te is the room temperature, Sw the heater switch
Sw := HYSTERESIS(Te, 22, 18, 0, 1, Sw);

In einer smart rule Formel ist das vorherige Ergebnis LastState, das beim ersten Durchlauf und nach einem Skriptfehler Null ist:

HYSTERESIS(Te, 22, 18, 0, 1, IF(ISNULL(LastState), 0, LastState));

Fehler

  • Upper threshold must be higher than lower threshold — wenn Sie ein Skript speichern, dessen Schwellenwerte feste Zahlen sind.
  • Upper threshold (X) must be higher than lower threshold (Y) — zur Laufzeit, wenn die Schwellenwerte aus Variablen stammen.

Siehe auch — Skripte in smart rules, Füllstandsregelung eines Behälters mit Hysterese.