Zmienne i stałe
Zmienne w skryptach TapHome: wartości urządzeń według skrótu, wartości grup, zmienne modułu i urządzenia, VAR i deklaracje z typem, przypisanie, właściwości i stałe kontekstu.
Zmienne urządzeń
Wartości urządzeń wybrane w edytorze skryptów są dostępne pod swoim skrótem, na przykład Se, Mu lub Te. Urządzenie, które już nie istnieje, odczytuje się jako Null.
Se + 2;Większość skryptów tylko odczytuje wartości urządzeń. Skrypt może zmienić wartość urządzenia w dwóch miejscach:
- W smart rule Skrypt zmiennej do odczytu i zapisu można przypisać wartość. Każde przypisanie staje się akcją urządzenia.
- W skrypcie listener modułu Packet parser przypisanie do skrótu wartości urządzenia ustawia tę wartość.
IF Se > 25
Mu := 1;
ENDW każdym innym miejscu przypisanie zatrzymuje skrypt komunikatem Can not directly set value to device variable.
Wartość urządzenia można też wybrać jako statystykę urządzenia albo jako Info wartości z czasem jej ostatniej zmiany, poprzednią wartością i wartościami zakończonych okresów — zobacz Statystyki i Info wartości.
Wartości grup
Zmienna powiązana z grupą urządzeń przechowuje groupvalue:
| Właściwość | Zawartość |
|---|---|
Calculated | Wartość obliczona dla grupy funkcją obliczeniową ustawioną w grupie — Min, Max, Avg, Sum, Or lub And. Członkowie z wartością NaN są pomijani. Or i And traktują wartość powyżej 0,5 jako włączoną i dają 1 lub 0. Gdy żaden członek nie ma prawidłowej wartości, wynikiem jest 0. |
Values | Wartości członków w kolejności członków w grupie. Członek, który jeszcze nie wystartował, to Null, nieznana wartość to NaN. |
W arytmetyce i porównaniach wartość grupy zachowuje się jak jej wartość Calculated:
# Se = device group of room temperatures (calculation Avg)
IF Se > 22
RETURN(1);
END
0;Po zmianie wartości grupy przez smart rule lub sterowanie ręczne zmienna może przez chwilę przechowywać zwykłą liczbę zamiast groupvalue. Przed odczytem Values sprawdź .Type; MIN i MAX pomijają członków, którzy są Null lub NaN:
# Se = device group of room temperatures
IF Se.Type = "GroupValue"
RETURN(MAX(Se.Values) - MIN(Se.Values));
END
NaN;Zmienne modułu i urządzenia
Zmienne zdefiniowane w module lub urządzeniu Modbus albo Packet parser są dostępne według nazwy i zachowują wartość między uruchomieniami skryptu. Przekazują dane ze skryptu odczytu do atrybutów serwisowych albo ze skryptu listener do skryptów odczytu urządzeń.
# Packet parser module read script: one request, the answer is kept for the device scripts
VAR response := SENDHTTPREQUEST("/status", "GET");
StatusJson := response.Content;Dostępność — zmienne modułu typu kolekcji: TapHome Next 2026.1.39507+.
Zmienne lokalne
Zmienna lokalna istnieje przez jedno uruchomienie skryptu. Deklaruje się ją słowem VAR, które przejmuje typ wartości początkowej, albo z jawnym typem. W obu przypadkach typ jest ustalony dla całego skryptu, a każde późniejsze przypisanie jest na niego konwertowane.
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 silentlyDeklaracja z typem może pominąć wartość początkową; zmienna dostaje wtedy wartość domyślną swojego typu (0, FALSE, pusty tekst, pustą kolekcję). VAR zawsze potrzebuje wartości, VAR y; kończy się błędem Variable must have initial value provided.
datetime timestamp;
collection<uint16> block;
double ratio := 0.5;Zasady:
- Nazwa zaczyna się od litery i zawiera tylko litery i cyfry;
_kończy się błędemOnly letters or numbers are allowed in variable name. - Nazwa nie może powtarzać stałej, zmiennej ani skrótu urządzenia.
- Zmienna musi być zadeklarowana przed pierwszym użyciem. Nie ma zasięgu blokowego: zmienna zadeklarowana wewnątrz
IFjest widoczna poEND.
Słowa kluczowe typów są wymienione na stronie Typy danych.
Przypisanie
:= przypisuje, a = porównuje. Operatory złożone +=, -=, *=, /=, <<=, >>=, &=, |= i ^= łączą operację z przypisaniem.
VAR x := 5;
x += 1;
x *= 2;
x <<= 1;
x;
# Result: 24Operator złożony ma priorytet swojej operacji, więc
x -= a - bjest obliczane jako(x -= a) - b. Prawą stronę ujmij w nawiasy:x -= (a - b);. Zobacz Priorytet.
Właściwości
Właściwość odczytuje się przez .. Zapisać można jeden poziom, zagnieżdżone właściwości można tylko odczytać (Unable to assign a value to a nested property), a właściwości tylko do odczytu nie można zapisać.
VAR t := NOW();
t.Minute := 0;
t.Hour;
Se.Current.LastKnownValue;Właściwości można odczytać tylko z nazwanej zmiennej, stałej lub zmiennej urządzenia. NOW().Hour to błąd parsowania; najpierw zapisz wartość.
Stałe kontekstu
Stałe kontekstu to wartości tylko do odczytu, które smart rule lub skrypt listener przekazuje swojemu skryptowi:
| Stała | Dostępna w | Zawartość |
|---|---|---|
TriggerName | Smart rules Równanie, Formuła i Skrypt | Skrót zmiennej, której zmiana uruchomiła regułę, albo nazwa wyzwalacza, który zadziałał. W smart rule Równanie wymagana wersja: TapHome Next 2026.1.36599+. |
LastState | Smart rules Równanie i Formuła | Poprzedni wynik; zobacz Skrypty w smart rules. |
RECEIVEDMSG | Skrypt listener modułu Packet parser | Przychodząca wiadomość (receivedmessage). |
RECEIVEDBYTES | Skrypt listener modułu Packet parser | Starsza forma treści jako kolekcja bajtów; preferuj RECEIVEDMSG. |
Skrypty tytułu i treści powiadomienia mają te stałe tylko do odczytu:
| Stała | W powiadomieniu wysłanym przez |
|---|---|
SmartRuleName, LocationName | Dowolną smart rule |
TriggerName | Akcje dla prawdy lub fałszu smart rule Równanie |
CardName, DeviceName | Zdarzenie dostępu; CardName to Null dla nieznanej karty |
DeviceName | Akcję wyzwalacza |
SensorNames | Alarm |
SensorNames, AlarmPhaseName | Fazę alarmu |
SensorNames, NumberOfSensors | Akcję czujników, na przykład otwarte okna |