TapHome

Interpolace a prahy

Lineární interpolace LINEAR a spínání podle prahů HYSTERESIS pro převod hodnot, stmívání světel a řízení vytápění ve skriptech TapHome.

LINEAR převede hodnotu z jednoho rozsahu do jiného po přímce. HYSTERESIS přepíná mezi dvěma výstupními hodnotami s pásmem necitlivosti, takže výstup nepřeskakuje sem a tam kolem jediného prahu.

LINEAR

LINEAR převede hodnotu ze vstupního rozsahu do výstupního rozsahu po přímce procházející dvěma body, in1 → out1 a in2 → out2 — například surovou hodnotu registru na procenta nebo denní světlo na jas světla.

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

Parametry

NázevTypPopis
valuenumberVstupní hodnota.
in1, out1numberPrvní bod: vstup in1 dá výstup out1.
in2, out2numberDruhý bod: vstup in2 dá výstup out2.
LinearTypeenum, nepovinnýCo se stane, když je value mimo rozsah in1 – in2.
LinearTypeVýsledek mimo vstupní rozsah
DEFAULT (nebo vynechán)Stejně jako BOUNDS. Na Core starších než 2022.2 extrapoluje jako INFINITE.
BOUNDSHodnota se omezí na rozsah, takže výsledek zůstane mezi out1 a out2.
STRICTNaN.
INFINITEPřímka pokračuje (extrapolace).
LINEAR function graph

Vrací — double. Vstup NaN dá NaN. Když se in1 rovná in2, sklon nelze spočítat a místo něj se použije 1.

Příklad — převod surové hodnoty

# 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

Účinek LinearType pro vstup 11 s body 0 → 400 a 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

Příklad — stmívání: převod hodnoty na jas světla

Úroveň stmívače je v TapHome od 0 do 1 (0 – 100 %). Tento vzorec stmívá světlo z plného jasu za tmy až po vypnutí při 300 lx denního světla; BOUNDS udrží úroveň mezi 0 a 1 i při jasnějších nebo tmavších hodnotách:

# 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

Křivka stmívání, která nikdy neklesne pod 10 % — hodnota posuvníku x od 0 do 1 se převede na 0.1 – 1:

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

Stejně to funguje u větrání: LINEAR(co2, 400, 0, 1200, 1) dá 0 při 400 ppm, 0.5 (50 %) při 800 ppm a 1 při 1 200 ppm.

Viz také — HYSTERESIS, Zaokrouhlení a náhodná čísla.

HYSTERESIS

HYSTERESIS vrátí lowerState, když hodnota klesne na lowerThreshold, upperState, když stoupne na upperThreshold, a previousState, dokud zůstává mezi nimi.

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

Hystereze filtruje signál tak, aby výstup reagoval pomaleji než vstup: termostat zapne topení, když teplota klesne pod jednu hodnotu, ale vypne ho, až když stoupne nad jinou.

Parametry

NázevTypPopis
valuenumberMěřená hodnota, například teplota.
upperThresholdnumberHodnota, od které (včetně) se vrací upperState. Musí být vyšší než lowerThreshold.
lowerThresholdnumberHodnota, do které (včetně) se vrací lowerState.
upperState, lowerStatenumberVýsledky pro oba prahy — libovolná čísla, nejen 0 a 1.
previousStatenumberVýsledek, dokud je hodnota mezi prahy, obvykle předchozí výstup. Nesmí být Null.

Vrací — double: upperState, lowerState nebo previousState. Hodnota, která je od prahu vzdálena nejvýše 0.005, se počítá jako jeho dosažení. Hodnota NaN vrátí previousState.

Příklad — vytápění

Udržujte místnost na 20 °C s hysterezí ±2 °C: topení se zapne, když teplota klesne na 18 °C, a vypne, když stoupne na 22 °C. Ve smart rule Skript se spínač topení čte i zapisuje:

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

Ve smart rule Vzorec je předchozím výsledkem LastState, který je při prvním běhu a po chybě skriptu Null:

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

Chyby

  • Upper threshold must be higher than lower threshold — když ukládáte skript, jehož prahy jsou pevná čísla.
  • Upper threshold (X) must be higher than lower threshold (Y) — za běhu, když prahy pocházejí z proměnných.

Viz také — Skripty ve smart rules, Řízení plnění nádrže pomocí hystereze.