---
title: "Interpolacja i progi"
description: "Funkcja LINEAR w TapHome do interpolacji liniowej (przeliczanie wartości, ściemnianie, tryby BOUNDS, INFINITE, STRICT) i HYSTERESIS do progowego przełączania grzejnika w smart rules i skryptach."
url: "https://taphome.com/pl/docs/script/interpolation-and-thresholds/"
language: pl
lastmod: 2026-10-13
generator: hugo
ai:
  topics: ["linear-interpolation","hysteresis","value-mapping","thresholds","smart-rules"]
  questions: ["Jak używać funkcji LINEAR do interpolacji wartości w TapHome?","Jak przeliczyć wartość czujnika na zakres wyjścia funkcją LINEAR?","Do czego służą parametry BOUNDS, INFINITE i STRICT w LINEAR?","Jak zachowuje się funkcja LINEAR, gdy wejście jest poza zakresem?","Jak użyć HYSTERESIS do sterowania grzejnikiem w TapHome?","Czym różni się LINEAR od HYSTERESIS?","Jak przefiltrować sygnał zakresem histerezy?","Jak działa funkcja LINEAR i do czego służy w skrypcie TapHome?","Jak użyć LINEAR do ściemniania — przeliczenia wartości na jasność światła?"]
---

# Interpolacja i progi

Interpolacja liniowa LINEAR i przełączanie progowe HYSTERESIS do przeliczania wartości, ściemniania światła i sterowania ogrzewaniem w skryptach TapHome.

Ostatnia aktualizacja: 2026-10-13

`LINEAR` przenosi wartość z jednego zakresu do drugiego wzdłuż linii prostej. `HYSTERESIS` przełącza między dwiema wartościami wyjściowymi ze strefą martwą, dzięki czemu wyjście nie przeskakuje tam i z powrotem wokół jednego progu.

## LINEAR

`LINEAR` przenosi wartość z zakresu wejściowego do zakresu wyjściowego wzdłuż prostej przechodzącej przez dwa punkty, `in1` → `out1` i `in2` → `out2` — na przykład surową wartość rejestru na procenty albo światło dzienne na jasność światła.

```text
LINEAR(value, in1, out1, in2, out2)
LINEAR(value, in1, out1, in2, out2, LinearType)
```

**Parametry**

| Nazwa | Typ | Opis |
|---|---|---|
| `value` | liczba | Wartość wejściowa. |
| `in1`, `out1` | liczba | Pierwszy punkt: wejście `in1` daje wyjście `out1`. |
| `in2`, `out2` | liczba | Drugi punkt: wejście `in2` daje wyjście `out2`. |
| `LinearType` | wyliczenie, opcjonalne | Co się dzieje, gdy `value` jest poza zakresem `in1` – `in2`. |

| `LinearType` | Wynik poza zakresem wejściowym |
|---|---|
| `DEFAULT` (lub pominięty) | Tak samo jak `BOUNDS`. W jednostkach Core starszych niż 2022.2 ekstrapoluje jak `INFINITE`. |
| `BOUNDS` | Wartość jest ograniczana do zakresu, więc wynik pozostaje między `out1` a `out2`. |
| `STRICT` | `NaN`. |
| `INFINITE` | Prosta jest przedłużana (ekstrapolacja). |

![LINEAR function graph](https://taphome.com/documentation/script/linear-function.svg)

**Zwraca** — `double`. Wejście `NaN` daje `NaN`. Gdy `in1` jest równe `in2`, nachylenia nie da się obliczyć i zamiast niego używane jest `1`.

**Przykład — przeliczenie surowej wartości**

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

Działanie `LinearType` dla wejścia 11 i punktów 0 → 400 oraz 10 → 2000:

```taphome
# ograniczone do zakresu
LINEAR(11, 0, 400, 10, 2000, BOUNDS);
# Result: 2000
# prosta biegnie dalej poza zakres
LINEAR(11, 0, 400, 10, 2000, INFINITE);
# Result: 2160
# poza zakresem daje NaN
LINEAR(11, 0, 400, 10, 2000, STRICT);
# Result: NaN
```

**Przykład — ściemnianie: przeliczenie wartości na jasność światła**

Poziom ściemniacza w TapHome wynosi od 0 do 1 (0 – 100 %). Ta formuła ściemnia światło od pełnej jasności w ciemności do wyłączenia przy 300 lx światła dziennego; `BOUNDS` utrzymuje poziom między 0 a 1 przy jaśniejszych lub ciemniejszych odczytach:

```taphome
# Va to czujnik światła dziennego w lx, wynik to poziom ściemniacza
LINEAR(Va, 0, 1, 300, 0, BOUNDS);
# Result: 0.5 at 150 lx, 0 at 300 lx and more
```

Krzywa ściemniania, która nigdy nie schodzi poniżej 10 % — wartość suwaka `x` od 0 do 1 jest przenoszona na 0.1 – 1:

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

Tak samo działa to dla wentylacji: `LINEAR(co2, 400, 0, 1200, 1)` daje 0 przy 400 ppm, 0.5 (50 %) przy 800 ppm i 1 przy 1 200 ppm.

**Zobacz też** — [HYSTERESIS](https://taphome.com/pl/docs/script/interpolation-and-thresholds/#hysteresis), [Zaokrąglanie i liczby losowe](https://taphome.com/pl/docs/script/rounding-and-random/).

## HYSTERESIS

`HYSTERESIS` zwraca `lowerState`, gdy wartość spadnie do `lowerThreshold`, `upperState`, gdy wzrośnie do `upperThreshold`, i `previousState`, dopóki pozostaje między nimi.

```text
HYSTERESIS(value, upperThreshold, lowerThreshold, upperState, lowerState, previousState)
```

Histereza filtruje sygnał tak, aby wyjście reagowało wolniej niż wejście: termostat włącza grzejnik, gdy temperatura spadnie poniżej jednej wartości, ale wyłącza go dopiero wtedy, gdy wzrośnie powyżej innej.

**Parametry**

| Nazwa | Typ | Opis |
|---|---|---|
| `value` | liczba | Mierzona wartość, na przykład temperatura. |
| `upperThreshold` | liczba | Wartość, przy której lub powyżej której zwracane jest `upperState`. Musi być wyższa niż `lowerThreshold`. |
| `lowerThreshold` | liczba | Wartość, przy której lub poniżej której zwracane jest `lowerState`. |
| `upperState`, `lowerState` | liczba | Wyniki dla obu progów — dowolne liczby, nie tylko 0 i 1. |
| `previousState` | liczba | Wynik, dopóki wartość jest między progami, zwykle poprzednie wyjście. Nie może być `Null`. |

**Zwraca** — `double`: `upperState`, `lowerState` lub `previousState`. Wartość odległa od progu najwyżej o 0.005 liczy się jako jego osiągnięcie. Wartość `NaN` zwraca `previousState`.

**Przykład — ogrzewanie**

Utrzymuj w pomieszczeniu 20 °C z histerezą ±2 °C: grzejnik włącza się, gdy temperatura spadnie do 18 °C, i wyłącza, gdy wzrośnie do 22 °C. W smart rule Skrypt przełącznik grzejnika jest jednocześnie odczytywany i zapisywany:

```taphome
# Te to temperatura pomieszczenia, Sw przełącznik grzejnika
Sw := HYSTERESIS(Te, 22, 18, 0, 1, Sw);
```

W smart rule Formuła poprzedni wynik to `LastState`, który przy pierwszym uruchomieniu i po błędzie skryptu jest `Null`:

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

**Błędy**

- *Upper threshold must be higher than lower threshold* — przy zapisywaniu skryptu, którego progi są stałymi liczbami.
- *Upper threshold (X) must be higher than lower threshold (Y)* — podczas wykonania, gdy progi pochodzą ze zmiennych.

**Zobacz też** — [Skrypty w smart rules](https://taphome.com/pl/docs/script/smart-rules/), [Sterowanie napełnianiem zbiornika z histerezą](https://taphome.com/pl/docs/configuration/hysteresis-equation/).
