TapHome

Variablen und Konstanten

Variablen in TapHome-Skripten: Gerätewerte über die Abkürzung, Gruppenwerte, Modul- und Gerätevariablen, VAR und typisierte Deklarationen, Zuweisung, Eigenschaften und Kontextkonstanten.

Gerätevariablen

Gerätewerte, die im Skripteditor ausgewählt wurden, stehen unter ihrer Abkürzung zur Verfügung, zum Beispiel Se, Mu oder Te. Ein Gerät, das nicht mehr existiert, wird als Null gelesen.

Se + 2;

Die meisten Skripte lesen Gerätewerte nur. An zwei Stellen kann ein Skript einen Gerätewert ändern:

  • In der smart rule Skript kann einer Lese-/Schreibvariablen ein Wert zugewiesen werden. Jede Zuweisung wird zu einer Geräteaktion.
  • In einem Listener-Skript des Packet Parsers setzt die Zuweisung an die Abkürzung eines Gerätewerts diesen Wert.
IF Se > 25
    Mu := 1;
END

An jeder anderen Stelle bricht eine Zuweisung das Skript mit Can not directly set value to device variable ab.

Ein Gerätewert kann auch als Statistik des Geräts ausgewählt werden oder als Wertinfo mit dem Zeitpunkt seiner letzten Änderung, seinem vorherigen Wert und den Werten abgeschlossener Zeiträume — siehe Statistiken und Wertinfo.

Gruppenwerte

Eine an eine Gerätegruppe gebundene Variable enthält einen groupvalue:

EigenschaftInhalt
CalculatedDer für die Gruppe mit der an der Gruppe eingestellten Berechnungsfunktion berechnete Wert — Min, Max, Avg, Sum, Or oder And. Mitglieder mit dem Wert NaN werden ausgelassen. Or und And behandeln einen Wert über 0,5 als eingeschaltet und liefern 1 oder 0. Hat kein Mitglied einen gültigen Wert, ist das Ergebnis 0.
ValuesDie Werte der Mitglieder in der Reihenfolge der Mitglieder in der Gruppe. Ein noch nicht gestartetes Mitglied ist Null, ein unbekannter Wert NaN.

In der Arithmetik und in Vergleichen verhält sich ein Gruppenwert wie sein Wert Calculated:

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

Nachdem der Gruppenwert von einer smart rule oder durch manuelle Steuerung geändert wurde, kann die Variable eine Zeit lang eine einfache Zahl statt eines groupvalue enthalten. Prüfen Sie .Type, bevor Sie Values lesen; MIN und MAX überspringen die Mitglieder, die Null oder NaN sind:

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

Modul- und Gerätevariablen

Variablen, die an einem Modul oder Gerät von Modbus oder Packet Parser definiert sind, stehen über ihren Namen zur Verfügung und behalten ihren Wert zwischen Skriptdurchläufen. Sie geben Daten aus einem Leseskript an Service-Attribute weiter oder aus einem Listener-Skript an die Leseskripte der Geräte.

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

Verfügbar — Modulvariablen eines Sammlungstyps: TapHome Next 2026.1.39507+.

Lokale Variablen

Eine lokale Variable lebt für einen Durchlauf des Skripts. Sie wird mit VAR deklariert, das den Typ des Anfangswerts übernimmt, oder mit einem expliziten Typ. In beiden Fällen ist der Typ für das ganze Skript festgelegt, und jede spätere Zuweisung wird in ihn umgewandelt.

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

Eine typisierte Deklaration darf den Anfangswert weglassen; die Variable erhält dann den Standardwert ihres Typs (0, FALSE, leerer Text, eine leere Sammlung). VAR braucht immer einen Wert, VAR y; schlägt mit Variable must have initial value provided fehl.

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

Regeln:

  • Ein Name beginnt mit einem Buchstaben und enthält nur Buchstaben und Ziffern; _ schlägt mit Only letters or numbers are allowed in variable name fehl.
  • Ein Name darf keine Konstante, Variable oder Geräteabkürzung wiederholen.
  • Eine Variable muss oberhalb ihrer ersten Verwendung deklariert sein. Es gibt keinen Gültigkeitsbereich pro Block: Eine innerhalb von IF deklarierte Variable ist auch nach END sichtbar.

Die Typ-Schlüsselwörter sind auf Datentypen aufgeführt.

Zuweisung

:= weist zu und = vergleicht. Die zusammengesetzten Operatoren +=, -=, *=, /=, <<=, >>=, &=, |= und ^= verbinden eine Operation mit der Zuweisung.

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

Ein zusammengesetzter Operator hat die Rangfolge seiner Operation, daher wird x -= a - b als (x -= a) - b ausgewertet. Setzen Sie die rechte Seite in Klammern: x -= (a - b);. Siehe Rangfolge.

Eigenschaften

Eine Eigenschaft wird mit . gelesen. Eine Ebene lässt sich schreiben, verschachtelte Eigenschaften lassen sich nur lesen (Unable to assign a value to a nested property), und nur lesbare Eigenschaften lassen sich nicht schreiben.

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

Eigenschaften lassen sich nur aus einer benannten Variablen, Konstante oder Gerätevariablen lesen. NOW().Hour ist ein Parse-Fehler; speichern Sie den Wert zuerst.

Kontextkonstanten

Kontextkonstanten sind nur lesbare Werte, die eine smart rule oder ein Listener-Skript an sein Skript übergibt:

KonstanteVerfügbar inInhalt
TriggerNamesmart rules Gleichung, Formel und SkriptDie Abkürzung der Variablen, deren Änderung die smart rule gestartet hat, oder der Name des ausgelösten Triggers. In der smart rule Gleichung erfordert es TapHome Next 2026.1.36599+.
LastStatesmart rules Gleichung und FormelDas vorherige Ergebnis; siehe Skripte in smart rules.
RECEIVEDMSGListener-Skript des Packet ParsersDie eingehende Nachricht (receivedmessage).
RECEIVEDBYTESListener-Skript des Packet ParsersÄltere Form der Nutzdaten als Bytesammlung; bevorzugen Sie RECEIVEDMSG.

Die Skripte für Titel und Nachricht einer Benachrichtigung haben diese nur lesbaren Konstanten:

KonstanteIn einer Benachrichtigung, gesendet von
SmartRuleName, LocationNameJeder smart rule
TriggerNameDen Aktionen für „wahr“ oder „falsch“ einer smart rule Gleichung
CardName, DeviceNameEinem Zutrittsereignis; CardName ist Null bei einer unbekannten Karte
DeviceNameEiner Trigger-Aktion
SensorNamesEinem Alarm
SensorNames, AlarmPhaseNameEiner Alarmphase
SensorNames, NumberOfSensorsEiner Sensorenaktion, zum Beispiel offene Fenster