TapHome

Logik und Diagnose

Funktionen der TapHome-Skripte für unbekannte Werte und Gerätediagnose: ISNULL, ISNAN, EQUALS, SLEEP, ADDERROR, ADDWARNING, ADDINFO und DEBOUNCE.

Diese Funktionen prüfen Werte auf Null und NaN, vergleichen Dezimalzahlen mit einer Toleranz, halten ein Geräteskript an und melden Nachrichten an einem Gerät. NaN ist eine unbekannte Zahl, Null ein fehlender Wert — siehe Datentypen. Die minimale Core-Version jeder Funktion steht in Versionsanforderungen.

ISNULL

ISNULL gibt TRUE zurück, wenn ein Wert Null ist, also ein fehlender Wert — zum Beispiel LastState beim ersten Durchlauf einer smart rule Formel oder PARSEJSON mit ignorierten Fehlern, wenn der Pfad nicht gefunden wird.

1
ISNULL(value)

Rückgabewert — bool. Ein Wert jedes Typs wird akzeptiert. NaN ist eine Zahl, kein fehlender Wert, daher ist ISNULL(NaN) gleich FALSE.

Beispiel

IF(ISNULL(LastState), 0, LastState);
# Result: 0 on the first run of a Formula smart rule, then the previous result

Siehe auch — ISNAN, Skripte in smart rules.

ISNAN

ISNAN gibt TRUE zurück, wenn eine Zahl NaN ist, also ein unbekannter Wert — zum Beispiel der Wert eines Geräts, das einen Fehler hat oder noch nicht gelesen wurde.

1
ISNAN(number)

Rückgabewert — bool.

Hinweise — NaN ist nie gleich irgendetwas. Ein Vergleich mit dem Literal NaN, etwa x = NaN, wird beim Speichern des Skripts abgelehnt. Das Argument muss eine Zahl sein: ISNAN(Null) bricht das Skript mit einem Laufzeitfehler ab; prüfen Sie also zuerst ISNULL, wenn ein Wert auch fehlen kann.

Beispiel — 0 schreiben, wenn ein Gerät einen Fehler hat oder NaN zurückgibt

Verwenden Sie IF(ISNAN(x), 0, x), um eine Zahl weiterzugeben, auch während das Quellgerät einen Fehler hat:

IF(ISNAN(x), 0, x);
# Result: 0 while the device is in error or returns NaN, otherwise x

Wenn der Wert auch Null sein kann, prüfen Sie das zuerst — OR wertet seine rechte Seite nicht aus, wenn die linke Seite bereits TRUE ist:

IF(ISNULL(value) OR ISNAN(value), 0, value);

Fehler — Comparison with NaN is always false. Use the IsNaN method to check for NaN value. (beim Speichern des Skripts).

Siehe auch — ISNULL, EQUALS.

EQUALS

EQUALS gibt TRUE zurück, wenn sich zwei Zahlen höchstens um eine Toleranz unterscheiden (epsilon, standardmäßig 0.005); verwenden Sie es statt = für Dezimalwerte wie Temperaturen.

1
2
EQUALS(number1, number2)
EQUALS(number1, number2, epsilon)

Parameter

NameTypBeschreibung
number1, number2ZahlZu vergleichende Werte.
epsilonZahl, optionalGrößte Differenz, die noch als gleich gilt. Standard 0.005.

Rückgabewert — bool. Zwei Werte NaN gelten als gleich, daher ist EQUALS(NaN, NaN) gleich TRUE. Ein Argument Null ist ein Laufzeitfehler.

Beispiel

EQUALS(21.499, 21.5);
# Result: TRUE
EQUALS(21.4, 21.5, 0.01);
# Result: FALSE
EQUALS(NaN, NaN);
# Result: TRUE

SLEEP

SLEEP hält ein Skript von Modbus oder Packet Parser für die angegebene Anzahl Millisekunden (0 – 10 000) an und gibt diese Zahl zurück.

1
SLEEP(milliseconds)

Hinweise — Während das Skript wartet, fragt das Modul seine Geräte nicht ab; halten Sie die Pause also kurz, typischerweise eine Lücke, die ein Gerät zwischen zwei Schreibvorgängen braucht.

Beispiel

MODBUSW(H, 100, Uint16, 1);
SLEEP(200);
MODBUSW(H, 101, Uint16, 1);

Fehler

  • SLEEP function not allowed in this context. — das Skript gehört zu einer smart rule (Gleichung, Formel oder Skript) oder zu einer Benachrichtigung; es lässt sich nicht speichern.
  • Interval ‘X’ is out of range (0-10000) — zur Laufzeit.

Verfügbar — Skripte von Modbus und Packet Parser.

ADDERROR, ADDWARNING, ADDINFO

ADDERROR, ADDWARNING und ADDINFO zeigen am Gerät in der TapHome-App einen Fehler, eine Warnung oder eine Infomeldung an und geben TRUE zurück.

1
2
3
4
5
6
ADDERROR(text)
ADDERROR(code, text)
ADDWARNING(text)
ADDWARNING(code, text)
ADDINFO(text)
ADDINFO(code, text)

Parameter

NameTypBeschreibung
codeganze Zahl, optionalKennzeichnet die Meldung. Meldungen mit unterschiedlichen Codes werden nebeneinander angezeigt; eine neue Meldung mit demselben Code oder eine zweite Meldung ohne Code ersetzt die vorherige.
textstringIn der App angezeigte Meldung.

Hinweise — Die Meldungen werden bei jedem Durchlauf neu ausgewertet: Eine Meldung verschwindet, sobald ein Durchlauf des Skripts sie nicht mehr auslöst.

Beispiel

VAR alarm := MODBUSR(H, 599, Uint16);
IF(alarm > 0, ADDERROR("There are " + alarm + " active alarms"));
IF(GETBIT(MODBUSR(H, 600, Uint16), 0) = 1, ADDERROR(1, "Alarm 1 active"));
IF(GETBIT(MODBUSR(H, 600, Uint16), 1) = 1, ADDWARNING(2, "Filter change due"));

Fehler — ADDERROR function not supported here. (oder ADDWARNING, ADDINFO) in jedem Skript, das nicht unter Verfügbar aufgeführt ist.

Verfügbar — Leseskripte von Modbus-Modulen und -Geräten; Lese-, Schreib- und Listener-Skripte des Packet Parsers. Nicht in Schreib- und Initialisierungsskripten von Modbus, in Service-Attributen und Service-Aktionen beider Integrationen, in smart rules oder Benachrichtigungen.

Siehe auch — Modbus-Funktionen, Packet-Parser-Funktionen.

DEBOUNCE

DEBOUNCE ignoriert die vom Gerät gelesenen Werte eines Gerätewerts für die angegebene Anzahl Millisekunden und prüft den Wert erneut, wenn diese Zeit abläuft; Schreibvorgänge an das Gerät sind nicht betroffen.

1
DEBOUNCE(deviceVariable, milliseconds)

Parameter

NameTypBeschreibung
deviceVariableGerätevariableAbkürzung des Gerätewerts, zum Beispiel St. Ein Ausdruck wird nicht akzeptiert.
millisecondsZahlLänge des Zeitfensters, 0 oder mehr.

Rückgabewert — das Intervall. Bei einem Gerätewert ohne Entprellfilter bewirkt der Aufruf nichts.

Beispiel

DEBOUNCE(St, 500);

Fehler

  • DEBOUNCE - Function is not available — das Skript ist kein unter Verfügbar aufgeführtes Geräteskript.
  • DEBOUNCE - invalid argument, must be a device variable

Verfügbar — Core 2026.1, Build 36599 und neuer · Lese- und Schreibskripte von Modbus-Geräten, Lese-, Schreib- und Listener-Skripte des Packet Parsers.