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.
| |
Parameter
| Name | Typ | Beschreibung |
|---|---|---|
value | Zahl | Eingangswert. |
in1, out1 | Zahl | Erster Punkt: Eingang in1 ergibt Ausgang out1. |
in2, out2 | Zahl | Zweiter Punkt: Eingang in2 ergibt Ausgang out2. |
LinearType | enum, optional | Was passiert, wenn value außerhalb des Bereichs in1 – in2 liegt. |
LinearType | Ergebnis außerhalb des Eingangsbereichs |
|---|---|
DEFAULT (oder weggelassen) | Wie BOUNDS. Bei Core-Versionen vor 2022.2 extrapoliert es wie INFINITE. |
BOUNDS | Der Wert wird auf den Bereich begrenzt, das Ergebnis bleibt also zwischen out1 und out2. |
STRICT | NaN. |
INFINITE | Die Gerade wird fortgesetzt (Extrapolation). |
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: 25Die 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: NaNBeispiel — 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 moreEine 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.
| |
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
| Name | Typ | Beschreibung |
|---|---|---|
value | Zahl | Gemessener Wert, zum Beispiel eine Temperatur. |
upperThreshold | Zahl | Wert, ab dem upperState zurückgegeben wird. Muss höher sein als lowerThreshold. |
lowerThreshold | Zahl | Wert, bei dem oder unter dem lowerState zurückgegeben wird. |
upperState, lowerState | Zahl | Ergebnisse für die beiden Schwellenwerte — beliebige Zahlen, nicht nur 0 und 1. |
previousState | Zahl | Ergebnis, 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.