TapHome

Interpolacija i pragovi

Linearna interpolacija LINEAR i preklapanje na pragovima HYSTERESIS za preslikavanje vrijednosti, prigušivanje svjetla i upravljanje grijanjem u skriptama TapHome.

LINEAR pretvara vrijednost iz jednog raspona u drugi duž pravca. HYSTERESIS preklapa između dviju izlaznih vrijednosti s mrtvom zonom, tako da izlaz ne skače amo-tamo oko jednog praga.

LINEAR

LINEAR preslikava vrijednost iz ulaznog raspona u izlazni raspon duž pravca kroz dvije točke, in1 → out1 i in2 → out2 — na primjer neobrađenu vrijednost registra u postotke ili dnevno svjetlo u svjetlinu svjetla.

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

Parametri

NazivTipOpis
valuebrojUlazna vrijednost.
in1, out1brojPrva točka: ulaz in1 daje izlaz out1.
in2, out2brojDruga točka: ulaz in2 daje izlaz out2.
LinearTypeenum, neobaveznoŠto se događa kada je value izvan raspona in1 – in2.
LinearTypeRezultat izvan ulaznog raspona
DEFAULT (ili izostavljeno)Isto kao BOUNDS. Na verzijama Core starijim od 2022.2 ekstrapolira kao INFINITE.
BOUNDSVrijednost se ograničava na raspon, pa rezultat ostaje između out1 i out2.
STRICTNaN.
INFINITEPravac se nastavlja (ekstrapolacija).
LINEAR function graph

Vraća — double. Ulaz NaN daje NaN. Kada je in1 jednako in2, nagib se ne može izračunati i umjesto njega koristi se 1.

Primjer — pretvorba neobrađene vrijednosti

# 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

Učinak parametra LinearType za ulaz 11 s točkama 0 → 400 i 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

Primjer — prigušivanje: preslikavanje vrijednosti u svjetlinu svjetla

Razina dimera u sustavu TapHome ide od 0 do 1 (0 – 100 %). Ova formula prigušuje svjetlo od pune svjetline u mraku do isključenja pri 300 lx dnevnog svjetla; BOUNDS drži razinu između 0 i 1 i za svjetlija ili tamnija očitanja:

# 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

Krivulja prigušivanja koja nikad ne pada ispod 10 % — vrijednost klizača x od 0 do 1 preslikava se u 0.1 – 1:

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

Isto radi i za ventilaciju: LINEAR(co2, 400, 0, 1200, 1) daje 0 pri 400 ppm, 0.5 (50 %) pri 800 ppm i 1 pri 1200 ppm.

Vidi također — HYSTERESIS, Zaokruživanje i slučajni brojevi.

HYSTERESIS

HYSTERESIS vraća lowerState kada vrijednost padne na lowerThreshold, upperState kada naraste na upperThreshold, a previousState dok ostaje između njih.

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

Histereza filtrira signal tako da izlaz reagira sporije od ulaza: termostat uključuje grijač kada temperatura padne ispod jedne vrijednosti, a isključuje ga tek kada naraste iznad druge.

Parametri

NazivTipOpis
valuebrojIzmjerena vrijednost, na primjer temperatura.
upperThresholdbrojVrijednost pri kojoj i iznad koje se vraća upperState. Mora biti viša od lowerThreshold.
lowerThresholdbrojVrijednost pri kojoj i ispod koje se vraća lowerState.
upperState, lowerStatebrojRezultati za dva praga — bilo koji brojevi, ne samo 0 i 1.
previousStatebrojRezultat dok je vrijednost između pragova, obično prethodni izlaz. Ne smije biti Null.

Vraća — double: upperState, lowerState ili previousState. Za vrijednost koja je od praga udaljena najviše 0.005 smatra se da ga je dosegla. Vrijednost NaN vraća previousState.

Primjer — grijanje

Održavanje prostorije na 20 °C s histerezom ±2 °C: grijač se uključuje kada temperatura padne na 18 °C i isključuje kada naraste na 22 °C. U smart rule Skripta skripta sklopku grijača i čita i piše:

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

U smart rule Formula prethodni rezultat je LastState, koji je pri prvom izvršavanju i nakon pogreške skripte Null:

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

Pogreške

  • Upper threshold must be higher than lower threshold — pri spremanju skripte čiji su pragovi fiksni brojevi.
  • Upper threshold (X) must be higher than lower threshold (Y) — pri izvršavanju, kada pragovi dolaze iz varijabli.

Vidi također — Skripte u smart rules, Upravljanje punjenjem spremnika pomoću histereze.