---
title: "Interpolace a prahy"
description: "Funkce LINEAR v TapHome pro lineární interpolaci (převod hodnot, stmívání, režimy BOUNDS, INFINITE, STRICT) a HYSTERESIS pro spínání topení podle prahů ve smart rules a skriptech."
url: "https://taphome.com/cs/docs/script/interpolation-and-thresholds/"
language: cs
lastmod: 2026-10-13
generator: hugo
ai:
  topics: ["linear-interpolation","hysteresis","value-mapping","thresholds","smart-rules"]
  questions: ["Jak v TapHome použít funkci LINEAR pro interpolaci hodnot?","Jak pomocí LINEAR převést hodnotu senzoru na výstupní rozsah?","Co dělají parametry BOUNDS, INFINITE a STRICT ve funkci LINEAR?","Jak se funkce LINEAR chová, když je vstup mimo rozsah?","Jak v TapHome použít HYSTERESIS k řízení topení?","Jaký je rozdíl mezi LINEAR a HYSTERESIS?","Jak filtrovat signál pomocí pásma hystereze?","Jak funguje funkce LINEAR a k čemu se ve skriptu TapHome používá?","Jak použít LINEAR pro stmívání — převod hodnoty na jas světla?"]
---

# 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.

Poslední aktualizace: 2026-10-13

`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.

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

**Parametry**

| Název | Typ | Popis |
|---|---|---|
| `value` | number | Vstupní hodnota. |
| `in1`, `out1` | number | První bod: vstup `in1` dá výstup `out1`. |
| `in2`, `out2` | number | Druhý bod: vstup `in2` dá výstup `out2`. |
| `LinearType` | enum, nepovinný | Co se stane, když je `value` mimo rozsah `in1` – `in2`. |

| `LinearType` | Výsledek mimo vstupní rozsah |
|---|---|
| `DEFAULT` (nebo vynechán) | Stejně jako `BOUNDS`. Na Core starších než 2022.2 extrapoluje jako `INFINITE`. |
| `BOUNDS` | Hodnota se omezí na rozsah, takže výsledek zůstane mezi `out1` a `out2`. |
| `STRICT` | `NaN`. |
| `INFINITE` | Přímka pokračuje (extrapolace). |

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

**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**

```taphome
# surový registr 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:

```taphome
# omezeno na rozsah
LINEAR(11, 0, 400, 10, 2000, BOUNDS);
# Result: 2000
# přímka pokračuje mimo rozsah
LINEAR(11, 0, 400, 10, 2000, INFINITE);
# Result: 2160
# mimo rozsah vznikne NaN
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:

```taphome
# Va je senzor denního světla v lx, výsledek je úroveň stmívače
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:

```taphome
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](https://taphome.com/cs/docs/script/interpolation-and-thresholds/#hysteresis), [Zaokrouhlení a náhodná čísla](https://taphome.com/cs/docs/script/rounding-and-random/).

## HYSTERESIS

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

```text
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ázev | Typ | Popis |
|---|---|---|
| `value` | number | Měřená hodnota, například teplota. |
| `upperThreshold` | number | Hodnota, od které (včetně) se vrací `upperState`. Musí být vyšší než `lowerThreshold`. |
| `lowerThreshold` | number | Hodnota, do které (včetně) se vrací `lowerState`. |
| `upperState`, `lowerState` | number | Výsledky pro oba prahy — libovolná čísla, nejen 0 a 1. |
| `previousState` | number | Vý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:

```taphome
# Te je teplota místnosti, Sw spínač topení
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`:

```taphome
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](https://taphome.com/cs/docs/script/smart-rules/), [Řízení plnění nádrže pomocí hystereze](https://taphome.com/cs/docs/configuration/hysteresis-equation/).
