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;
ENDIn 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 |
|---|---|
Calculated | Il 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. |
Values | I 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 silentlyUna 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 conOnly 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 dopoEND.
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: 24Un operatore composto ha la precedenza della sua operazione, quindi
x -= a - bviene 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:
| Costante | Disponibile in | Contenuto |
|---|---|---|
TriggerName | Smart rule Equazione, Formula e Script | L’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+. |
LastState | Smart rule Equazione e Formula | Il risultato precedente; vedi Script nelle smart rule. |
RECEIVEDMSG | Script listener del Packet parser | Il messaggio in arrivo (receivedmessage). |
RECEIVEDBYTES | Script listener del Packet parser | Forma 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:
| Costante | In una notifica inviata da |
|---|---|
SmartRuleName, LocationName | Qualsiasi smart rule |
TriggerName | Le azioni per vero o per falso di una smart rule Equazione |
CardName, DeviceName | Un evento di accesso; CardName è Null per una tessera sconosciuta |
DeviceName | Un’azione di trigger |
SensorNames | Un allarme |
SensorNames, AlarmPhaseName | Una fase di allarme |
SensorNames, NumberOfSensors | Un’azione dei sensori, per esempio finestre aperte |