Variabile și constante
Variabilele din scripturile TapHome: valorile dispozitivelor după abreviere, valorile grupurilor, variabilele modulului și ale dispozitivului, VAR și declarațiile cu tip, atribuirea, proprietățile și constantele contextului.
Variabilele dispozitivelor
Valorile dispozitivelor alese în editorul de scripturi sunt disponibile sub abrevierea lor, de exemplu Se, Mu sau Te. Un dispozitiv care nu mai există se citește ca Null.
Se + 2;Majoritatea scripturilor doar citesc valorile dispozitivelor. Un script poate modifica valoarea unui dispozitiv în două locuri:
- În smart rule Script se poate atribui o variabilă de citire/scriere. Fiecare atribuire devine o acțiune a dispozitivului.
- Într-un script listener Packet parser, atribuirea către abrevierea unei valori de dispozitiv setează acea valoare.
IF Se > 25
Mu := 1;
ENDÎn orice alt loc, o atribuire oprește scriptul cu Can not directly set value to device variable.
O valoare a dispozitivului se poate alege și ca statistică a dispozitivului sau ca Value info, cu momentul ultimei ei modificări, valoarea anterioară și valorile perioadelor încheiate — vezi Statistici și Value info.
Valorile grupurilor
O variabilă legată de un grup de dispozitive conține un groupvalue:
| Proprietate | Conținut |
|---|---|
Calculated | Valoarea calculată pentru grup de funcția de calcul setată pe grup — Min, Max, Avg, Sum, Or sau And. Membrii cu valoarea NaN sunt omiși. Or și And consideră o valoare peste 0,5 ca pornită și dau 1 sau 0. Când niciun membru nu are o valoare validă, rezultatul este 0. |
Values | Valorile membrilor, în ordinea membrilor din grup. Un membru care nu a pornit încă este Null, o valoare necunoscută este NaN. |
În aritmetică și în comparații, o valoare de grup se comportă ca valoarea ei Calculated:
# Se = device group of room temperatures (calculation Avg)
IF Se > 22
RETURN(1);
END
0;După ce valoarea grupului este schimbată dintr-un smart rule sau prin control manual, variabila poate conține o vreme un număr simplu în loc de un groupvalue. Verificați .Type înainte de a citi Values; MIN și MAX sar peste membrii care sunt Null sau NaN:
# Se = device group of room temperatures
IF Se.Type = "GroupValue"
RETURN(MAX(Se.Values) - MIN(Se.Values));
END
NaN;Variabilele modulului și ale dispozitivului
Variabilele definite pe un modul sau pe un dispozitiv Modbus ori Packet parser sunt disponibile după nume și își păstrează valoarea între rulările scripturilor. Ele transmit date dintr-un script de citire către atributele de service sau dintr-un script listener către scripturile de citire ale dispozitivelor.
# Packet parser module read script: one request, the answer is kept for the device scripts
VAR response := SENDHTTPREQUEST("/status", "GET");
StatusJson := response.Content;Disponibilitate — variabilele modulului de tip colecție: TapHome Next 2026.1.39507+.
Variabile locale
O variabilă locală există pe durata unei rulări a scriptului. Se declară cu VAR, care preia tipul valorii inițiale, sau cu un tip explicit. În ambele cazuri tipul este fix pentru întregul script, iar fiecare atribuire ulterioară se convertește în el.
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 silentlyO declarație cu tip poate omite valoarea inițială; variabila primește atunci valoarea implicită a tipului ei (0, FALSE, text gol, o colecție goală). VAR necesită întotdeauna o valoare, VAR y; eșuează cu Variable must have initial value provided.
datetime timestamp;
collection<uint16> block;
double ratio := 0.5;Reguli:
- Un nume începe cu o literă și conține doar litere și cifre;
_eșuează cuOnly letters or numbers are allowed in variable name. - Un nume nu poate repeta o constantă, o variabilă sau o abreviere de dispozitiv.
- O variabilă trebuie declarată deasupra primei utilizări. Nu există domeniu de vizibilitate la nivel de bloc: o variabilă declarată în interiorul lui
IFeste vizibilă și dupăEND.
Cuvintele cheie ale tipurilor sunt enumerate pe pagina Tipuri de date.
Atribuire
:= atribuie, iar = compară. Operatorii compuși +=, -=, *=, /=, <<=, >>=, &=, |= și ^= combină o operație cu atribuirea.
VAR x := 5;
x += 1;
x *= 2;
x <<= 1;
x;
# Result: 24Un operator compus are precedența operației sale, așa că
x -= a - bse evaluează ca(x -= a) - b. Partea dreaptă se pune între paranteze:x -= (a - b);. Consultați Precedența.
Proprietăți
O proprietate se citește cu .. Un singur nivel se poate scrie, proprietățile imbricate se pot doar citi (Unable to assign a value to a nested property), iar proprietățile numai în citire nu se pot scrie.
VAR t := NOW();
t.Minute := 0;
t.Hour;
Se.Current.LastKnownValue;Proprietățile se pot citi doar dintr-o variabilă, o constantă sau o variabilă de dispozitiv cu nume. NOW().Hour este o eroare de parsare; valoarea se stochează mai întâi.
Constantele contextului
Constantele contextului sunt valori numai în citire pe care o smart rule sau un script listener le pune la dispoziția scriptului său:
| Constantă | Disponibilă în | Conținut |
|---|---|---|
TriggerName | Smart rules Ecuație, Formulă și Script | Abrevierea variabilei a cărei modificare a pornit regula sau numele declanșatorului care s-a activat. În smart rule Ecuație necesită TapHome Next 2026.1.36599+. |
LastState | Smart rules Ecuație și Formulă | Rezultatul anterior; consultați Scripturi în smart rules. |
RECEIVEDMSG | Scriptul listener Packet parser | Mesajul primit (receivedmessage). |
RECEIVEDBYTES | Scriptul listener Packet parser | Forma mai veche a conținutului ca o colecție de octeți; se preferă RECEIVEDMSG. |
Scripturile pentru titlul și mesajul notificării au aceste constante numai în citire:
| Constantă | Într-o notificare trimisă de |
|---|---|
SmartRuleName, LocationName | Orice smart rule |
TriggerName | Acțiunile pentru adevărat sau fals ale unei smart rule Ecuație |
CardName, DeviceName | Un eveniment de acces; CardName este Null pentru un card necunoscut |
DeviceName | O acțiune a declanșatorului |
SensorNames | O alarmă |
SensorNames, AlarmPhaseName | O fază a alarmei |
SensorNames, NumberOfSensors | O acțiune a senzorilor, de exemplu ferestre deschise |