TapHome

Variabili e costanti

Variabili negli script TapHome: valori dei dispositivi per abbreviazione, valori di gruppo, variabili del modulo e del dispositivo, VAR e dichiarazioni tipizzate, assegnazione, proprietà e costanti di contesto.

Variabili dei dispositivi

I valori dei dispositivi scelti nell’editor degli script sono disponibili con la loro abbreviazione, per esempio Se, Mu o Te. Un dispositivo che non esiste più viene letto come Null.

Se + 2;

La maggior parte degli script legge soltanto i valori dei dispositivi. Uno script può modificare il valore di un dispositivo in due punti:

  • Nella smart rule Script si può assegnare una variabile di lettura e scrittura. Ogni assegnazione diventa un’azione sul dispositivo.
  • In uno script listener del Packet parser, l’assegnazione dell’abbreviazione di un valore del dispositivo imposta quel valore.
IF Se > 25
    Mu := 1;
END

In qualsiasi altro punto un’assegnazione interrompe lo script con Can not directly set value to device variable.

Un valore del dispositivo si può scegliere anche come statistica del dispositivo oppure come Info valore con l’ora della sua ultima modifica, il valore precedente e i valori dei periodi conclusi — vedi Statistiche e Info valore.

Valori di gruppo

Una variabile collegata a un gruppo di dispositivi contiene un groupvalue:

ProprietàContenuto
CalculatedIl valore calcolato per il gruppo dalla funzione di calcolo impostata sul gruppo — Min, Max, Avg, Sum, Or o And. I membri con valore NaN vengono esclusi. Or e And considerano acceso un valore sopra 0,5 e danno 1 o 0. Se nessun membro ha un valore valido, il risultato è 0.
ValuesI valori dei membri, nell’ordine dei membri nel gruppo. Un membro non ancora avviato è Null, un valore sconosciuto è NaN.

Nei calcoli e nei confronti un valore di gruppo si comporta come il suo valore Calculated:

# Se = device group of room temperatures (calculation Avg)
IF Se > 22
    RETURN(1);
END
0;

Dopo che il valore del gruppo è stato cambiato da una smart rule o dal comando manuale, la variabile può contenere per un po’ un semplice numero invece di un groupvalue. Controlla .Type prima di leggere Values; MIN e MAX saltano i membri che sono Null o NaN:

# Se = device group of room temperatures
IF Se.Type = "GroupValue"
    RETURN(MAX(Se.Values) - MIN(Se.Values));
END
NaN;

Variabili del modulo e del dispositivo

Le variabili definite su un modulo o un dispositivo Modbus o Packet parser sono disponibili per nome e conservano il loro valore tra un’esecuzione dello script e l’altra. Passano dati da uno script di lettura agli attributi di servizio, oppure da uno script listener agli script di lettura dei dispositivi.

# Packet parser module read script: one request, the answer is kept for the device scripts
VAR response := SENDHTTPREQUEST("/status", "GET");
StatusJson := response.Content;

Disponibile — variabili del modulo di tipo collezione: TapHome Next 2026.1.39507+.

Variabili locali

Una variabile locale vive per un’esecuzione dello script. Si dichiara con VAR, che prende il tipo del valore iniziale, oppure con un tipo esplicito. In entrambi i casi il tipo è fisso per l’intero script e ogni assegnazione successiva viene convertita in quel tipo.

VAR    a := 5;
int    b := 5;
string s := 5;
b := 2.6;
# Result: b = 3, converted to int, halves are rounded away from zero
VAR    t := "a";
t := 5;
# Result: t = "5", VAR keeps the type of its first value
uint16 r := 70000;
# Result: r = 4464, a value out of range wraps around silently

Una dichiarazione tipizzata può omettere il valore iniziale; la variabile riceve allora il valore predefinito del suo tipo (0, FALSE, testo vuoto, una collezione vuota). VAR richiede sempre un valore, VAR y; fallisce con Variable must have initial value provided.

datetime timestamp;
collection<uint16> block;
double ratio := 0.5;

Regole:

  • Un nome inizia con una lettera e contiene solo lettere e cifre; _ fallisce con Only letters or numbers are allowed in variable name.
  • Un nome non deve ripetere una costante, una variabile o l’abbreviazione di un dispositivo.
  • Una variabile deve essere dichiarata sopra il suo primo utilizzo. Non esiste un ambito di blocco: una variabile dichiarata dentro IF è visibile dopo END.

Le parole chiave dei tipi sono elencate nella pagina Tipi di dati.

Assegnazione

:= assegna e = confronta. Gli operatori composti +=, -=, *=, /=, <<=, >>=, &=, |= e ^= combinano un’operazione con l’assegnazione.

VAR x := 5;
x += 1;
x *= 2;
x <<= 1;
x;
# Result: 24

Un operatore composto ha la precedenza della sua operazione, quindi x -= a - b viene valutato come (x -= a) - b. Metti il lato destro tra parentesi: x -= (a - b);. Vedi Precedenza.

Proprietà

Una proprietà si legge con .. Un livello si può scrivere, le proprietà annidate si possono solo leggere (Unable to assign a value to a nested property) e le proprietà di sola lettura non si possono scrivere.

VAR t := NOW();
t.Minute := 0;
t.Hour;
Se.Current.LastKnownValue;

Le proprietà si possono leggere solo da una variabile con nome, da una costante o da una variabile del dispositivo. NOW().Hour è un errore di analisi; salva prima il valore.

Costanti di contesto

Le costanti di contesto sono valori di sola lettura che una smart rule o uno script listener passa al proprio script:

CostanteDisponibile inContenuto
TriggerNameSmart rule Equazione, Formula e ScriptL’abbreviazione della variabile il cui cambiamento ha avviato la regola, oppure il nome del trigger che è scattato. Nella smart rule Equazione richiede TapHome Next 2026.1.36599+.
LastStateSmart rule Equazione e FormulaIl risultato precedente; vedi Script nelle smart rule.
RECEIVEDMSGScript listener del Packet parserIl messaggio in arrivo (receivedmessage).
RECEIVEDBYTESScript listener del Packet parserForma più vecchia del contenuto del messaggio come collezione di byte; preferisci RECEIVEDMSG.

Gli script del titolo e del messaggio di una notifica hanno queste costanti di sola lettura:

CostanteIn una notifica inviata da
SmartRuleName, LocationNameQualsiasi smart rule
TriggerNameLe azioni per vero o per falso di una smart rule Equazione
CardName, DeviceNameUn evento di accesso; CardName è Null per una tessera sconosciuta
DeviceNameUn’azione di trigger
SensorNamesUn allarme
SensorNames, AlarmPhaseNameUna fase di allarme
SensorNames, NumberOfSensorsUn’azione dei sensori, per esempio finestre aperte