TapHome

Variabile și constante

Variabilele din scripturile TapHome: valorile dispozitivelor după abreviere, Value info, 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.

Value info

Variabilele de intrare ale smart rules Ecuație, Formulă și Script, ale condiției de limitare Formulă și ale textelor notificărilor se pot alege ca Value info; lista de selecție le afișează ca Info valoare numele valorii. O astfel de variabilă conține valoarea curentă împreună cu istoricul ei:

ProprietateTipConținut
CurrentcurrentvalueinfoCurrentValueTime, PreviousValue, PreviousValueTime, LastKnownValue, LastKnownValueTime
HistoryhistoryvaluesFirstPeriodStartTime, Values; completat doar pentru o valoare agregată a perioadei curente al cărei istoric se înregistrează, altfel Null

LastKnownValue este cea mai recentă valoare anterioară care nu a fost nici NaN, nici Null, iar LastKnownValueTime este momentul în care dispozitivul a avut-o.

# Se was picked as Value info of a temperature
IF ISNAN(Se.Current.PreviousValue)
    RETURN(Se.Current.LastKnownValue);
END
Se.Current.PreviousValue;

Disponibilitate — Core 2026.1, build 36599.

Valorile grupurilor

O variabilă legată de un grup de dispozitive conține un groupvalue: Calculated este valoarea calculată pentru grup, Values sunt valorile membrilor lui. În aritmetică, o valoare de grup se comportă ca valoarea ei Calculated.

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 din Core 2026.1, build 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 silently

O 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ă cu Only 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 IF este 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: 24

Un operator compus are precedența operației sale, așa că x -= a - b se 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ă înConținut
TriggerNameSmart rules Ecuație, Formulă și ScriptAbrevierea variabilei a cărei modificare a pornit regula sau numele declanșatorului care s-a activat. În smart rule Ecuație din Core 2026.1, build 35936.
LastStateSmart rules Ecuație și FormulăRezultatul anterior; consultați Scripturi în smart rules.
RECEIVEDMSGScriptul listener Packet parserMesajul primit (receivedmessage).
RECEIVEDBYTESScriptul listener Packet parserForma 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, LocationNameOrice smart rule
TriggerNameAcțiunile pentru adevărat sau fals ale unei smart rule Ecuație
CardName, DeviceNameUn eveniment de acces; CardName este Null pentru un card necunoscut
DeviceNameO acțiune a declanșatorului
SensorNamesO alarmă
SensorNames, AlarmPhaseNameO fază a alarmei
SensorNames, NumberOfSensorsO acțiune a senzorilor, de exemplu ferestre deschise