---
title: "Interpolazione e soglie"
description: "Funzione LINEAR di TapHome per l'interpolazione lineare (mappatura dei valori, dimmerazione, modalità BOUNDS, INFINITE, STRICT) e HYSTERESIS per la commutazione a soglia di un riscaldatore nelle smart rule e negli script."
url: "https://taphome.com/it/docs/script/interpolation-and-thresholds/"
language: it
lastmod: 2026-10-13
generator: hugo
ai:
  topics: ["linear-interpolation","hysteresis","value-mapping","thresholds","smart-rules"]
  questions: ["Come si usa la funzione LINEAR per l'interpolazione dei valori in TapHome?","Come si mappa il valore di un sensore su un intervallo di uscita con LINEAR?","A che cosa servono i parametri BOUNDS, INFINITE e STRICT in LINEAR?","Come si comporta la funzione LINEAR quando l'ingresso è fuori intervallo?","Come si usa HYSTERESIS per controllare un riscaldatore in TapHome?","Qual è la differenza tra LINEAR e HYSTERESIS?","Come si filtra un segnale con un intervallo di isteresi?","Come funziona la funzione LINEAR e a che cosa serve in uno script TapHome?","Come si usa LINEAR per la dimmerazione, mappando un valore sulla luminosità della luce?"]
---

# Interpolazione e soglie

Interpolazione lineare con LINEAR e commutazione a soglia con HYSTERESIS per mappare valori, regolare l'intensità delle luci e controllare il riscaldamento negli script TapHome.

Ultimo aggiornamento: 2026-10-13

`LINEAR` converte un valore da un intervallo a un altro lungo una retta. `HYSTERESIS` commuta tra due valori di uscita con una banda morta, così l'uscita non oscilla avanti e indietro attorno a un'unica soglia.

## LINEAR

`LINEAR` mappa un valore da un intervallo di ingresso a un intervallo di uscita lungo la retta che passa per due punti, `in1` → `out1` e `in2` → `out2` — per esempio un valore grezzo di un registro in percentuale, oppure la luce diurna sulla luminosità di una luce.

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

**Parametri**

| Nome | Tipo | Descrizione |
|---|---|---|
| `value` | numero | Valore di ingresso. |
| `in1`, `out1` | numero | Primo punto: l'ingresso `in1` dà l'uscita `out1`. |
| `in2`, `out2` | numero | Secondo punto: l'ingresso `in2` dà l'uscita `out2`. |
| `LinearType` | enum, facoltativo | Che cosa succede quando `value` è fuori dall'intervallo `in1` – `in2`. |

| `LinearType` | Risultato fuori dall'intervallo di ingresso |
|---|---|
| `DEFAULT` (o omesso) | Come `BOUNDS`. Sui Core precedenti alla 2022.2 estrapola come `INFINITE`. |
| `BOUNDS` | Il valore viene limitato all'intervallo, quindi il risultato resta tra `out1` e `out2`. |
| `STRICT` | `NaN`. |
| `INFINITE` | La retta prosegue (estrapolazione). |

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

**Valore restituito** — `double`. Un ingresso `NaN` dà `NaN`. Quando `in1` è uguale a `in2` la pendenza non si può calcolare e al suo posto si usa `1`.

**Esempio — convertire un valore grezzo**

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

L'effetto di `LinearType` per l'ingresso 11 con i punti 0 → 400 e 10 → 2000:

```taphome
# limitato all'intervallo
LINEAR(11, 0, 400, 10, 2000, BOUNDS);
# Result: 2000
# la retta prosegue oltre l'intervallo
LINEAR(11, 0, 400, 10, 2000, INFINITE);
# Result: 2160
# fuori intervallo si ottiene NaN
LINEAR(11, 0, 400, 10, 2000, STRICT);
# Result: NaN
```

**Esempio — dimmerazione: mappare un valore sulla luminosità della luce**

In TapHome il livello di un dimmer va da 0 a 1 (0 – 100 %). Questa formula regola una luce dalla piena luminosità al buio fino allo spegnimento a 300 lx di luce diurna; `BOUNDS` mantiene il livello tra 0 e 1 per letture più chiare o più scure:

```taphome
# Va è il sensore di luce diurna in lx, il risultato è il livello del dimmer
LINEAR(Va, 0, 1, 300, 0, BOUNDS);
# Result: 0.5 at 150 lx, 0 at 300 lx and more
```

Una curva di dimmerazione che non scende mai sotto il 10 % — il valore di un cursore `x` da 0 a 1 viene mappato su 0.1 – 1:

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

Lo stesso vale per la ventilazione: `LINEAR(co2, 400, 0, 1200, 1)` dà 0 a 400 ppm, 0.5 (50 %) a 800 ppm e 1 a 1 200 ppm.

**Vedi anche** — [HYSTERESIS](https://taphome.com/it/docs/script/interpolation-and-thresholds/#hysteresis), [Arrotondamento e numeri casuali](https://taphome.com/it/docs/script/rounding-and-random/).

## HYSTERESIS

`HYSTERESIS` restituisce `lowerState` quando un valore scende a `lowerThreshold`, `upperState` quando sale a `upperThreshold` e `previousState` finché resta tra le due soglie.

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

L'isteresi filtra un segnale in modo che l'uscita reagisca più lentamente dell'ingresso: un termostato accende un riscaldatore quando la temperatura scende sotto un valore, ma lo spegne solo quando sale sopra un altro.

**Parametri**

| Nome | Tipo | Descrizione |
|---|---|---|
| `value` | numero | Valore misurato, per esempio una temperatura. |
| `upperThreshold` | numero | Valore pari o superiore al quale viene restituito `upperState`. Deve essere maggiore di `lowerThreshold`. |
| `lowerThreshold` | numero | Valore pari o inferiore al quale viene restituito `lowerState`. |
| `upperState`, `lowerState` | numero | Risultati per le due soglie — numeri qualsiasi, non solo 0 e 1. |
| `previousState` | numero | Risultato mentre il valore è tra le soglie, di solito l'uscita precedente. Non deve essere `Null`. |

**Valore restituito** — `double`: `upperState`, `lowerState` o `previousState`. Un valore entro 0.005 da una soglia viene considerato come raggiunto. Un valore `NaN` restituisce `previousState`.

**Esempio — riscaldamento**

Mantenere una stanza a 20 °C con un'isteresi di ±2 °C: il riscaldatore si accende quando la temperatura scende a 18 °C e si spegne quando sale a 22 °C. In una smart rule Script l'interruttore del riscaldatore viene sia letto sia scritto:

```taphome
# Te è la temperatura della stanza, Sw l'interruttore del riscaldatore
Sw := HYSTERESIS(Te, 22, 18, 0, 1, Sw);
```

In una smart rule Formula il risultato precedente è `LastState`, che è `Null` alla prima esecuzione e dopo un errore dello script:

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

**Errori**

- *Upper threshold must be higher than lower threshold* — quando salvi uno script le cui soglie sono numeri fissi.
- *Upper threshold (X) must be higher than lower threshold (Y)* — durante l'esecuzione, quando le soglie provengono da variabili.

**Vedi anche** — [Script nelle smart rule](https://taphome.com/it/docs/script/smart-rules/), [Controllo del riempimento di un serbatoio basato sull'isteresi](https://taphome.com/it/docs/configuration/hysteresis-equation/).
