TapHome

Skriptfehler und Fehlerbehebung

Fehlermeldungen der TapHome-Skripte im genauen Wortlaut — Division by zero, Parserfehler, Laufzeitfehler sowie Kontext- und Versionsfehler — jeweils mit Ursache und Behebung.

Ein TapHome-Skript kann auf zwei Arten fehlschlagen. Ein Parserfehler wird beim Einlesen des Skripttextes gefunden: Der Skripteditor zeigt ihn an, und das Skript läuft nicht. Ein Laufzeitfehler hält ein Skript an, das bereits läuft. Die folgenden Meldungen sind im genauen Wortlaut zitiert; X, A, B und N stehen für den Namen, den Typ oder die Zahl in der Meldung.

Wie Fehler gemeldet werden

Ein Laufzeitfehler enthält die Zeile des Skripts und die Meldung:

1
2
Line in script: 7
Message: Division by zero

Wo der Zeilenumbruch nicht angezeigt wird, lautet derselbe Fehler Line in script: 7 Message: Division by zero. Ein durch einen Laufzeitfehler angehaltenes Skript liefert keinen Wert (Null); eine smart rule Formel hat dann bei ihrem nächsten Durchlauf auch LastState = Null.

Division durch null

Line in script: 1 Message: Division by zero bedeutet, dass ein Divisor beim Lauf des Skripts genau 0 war — typischerweise ein Gerätewert wie va2 in va1/va2. Teilen Sie nur, wenn der Divisor größer als 0 ist:

IF(va2 > 0, va1/va2, 0);
# Result: 0 when va2 is 0, otherwise va1 divided by va2

Die Funktionsform von IF wertet nur den gewählten Zweig aus und teilt daher nie durch 0. Verwenden Sie va2 <> 0, wenn der Divisor negativ sein kann. Weitere Rezepte unter Beispiele.

Parserfehler

MeldungUrsache und Behebung
Unknown variable or constant 'X'Ein Tippfehler, ein Gerätewert, der dem Skript nicht hinzugefügt wurde, oder ein Wort, das die Sprache nicht kennt: NOT 1 ergibt 'NOT' — die Negation ist !. Außerhalb eines Blocks kann sich ein fehlendes ; in der vorherigen Zeile als der nächste Name zeigen.
Unknown function 'X'Diese Funktion gibt es nicht. MODBUS, TOBYTEARRAY und BYTEARRAY existieren nicht — verwenden Sie MODBUSR oder MODBUSW, TOBYTES und BYTECOLLECTION.
Wrong number of literals and operators in expressionEin Operator ohne Operand, zum Beispiel 1 == 1. Gleichheit ist =, Ungleichheit <>.
Unexpected character 'X' at the end of statement.Das ; vor der nächsten Anweisung fehlt. Innerhalb eines Blocks endet die Meldung mit Expected ';', zum Beispiel Unexpected character 'E' at the end of statement. Expected ';' vor END.
Unexpected character '.'Eine Eigenschaft wird aus einem Funktionsergebnis gelesen, etwa AVG(1, 2).Type. Speichern Sie den Wert zuerst in einer Variablen.
Unexpected character ';' in WHILE statement (oder DO)Ein ; nach einem inneren END oder LOOP innerhalb einer Schleife.
Unexpected keyword 'X' at the end of IF statement.Ein ; nach einem inneren END innerhalb eines IF-Blocks.
Comment must start on a new line and inline comments are not supportedEin # vor dem ; einer Anweisung oder nach einer IF- oder WHILE-Bedingung.
Comparison with NaN is always false. Use the IsNaN method to check for NaN value.x = NaN — verwenden Sie ISNAN(x).
Couldn't unescape XEin einzelner Backslash in einem String; schreiben Sie "C:\\data".
Too many characters in char literalText in einfachen Anführungszeichen, etwa 'ab'; Text braucht doppelte Anführungszeichen.
Variable name must start with letter, Only letters or numbers are allowed in variable nameEin Name wie 1x oder my_value.
Variable must have initial value providedVAR x; — geben Sie einen Wert an oder deklarieren Sie einen Typ: int x;.

Laufzeitfehler

MeldungUrsache und Behebung
Division by zeroSiehe Division durch null.
Specified argument was out of the range of valid values.PARSETEXT hat das linke Muster gefunden, das rechte aber nicht. Prüfen Sie zuerst mit INDEXOF.
PARSEJSON - Element not found: 'X'Der JSONPath hat nichts gefunden. Übergeben Sie TRUE als drittes Argument, um stattdessen Null zu erhalten.
Operator 'X' not defined for 'A' and 'B'Eine Operation mit inkompatiblen Typen, zum Beispiel Arithmetik mit Null. Prüfen Sie zuerst mit ISNULL.
Cannot cast 'A' to 'B'Ein Wert eines Typs, der nicht umgewandelt werden kann, zum Beispiel Text, wo eine Zahl erwartet wird.
Can not directly set value to device variableEine Zuweisung an einen Gerätewert außerhalb einer smart rule Skript.
More than 1 000 000 loops, stopping loopEine WHILE- oder DO-Schleife, die nicht endet.
Cannot use BREAK() outside of WHILE or DO-WHILEBREAK außerhalb einer Schleife; ebenso CONTINUE.
Interval 'X' is out of range (0-10000)SLEEP mit einem negativen Intervall oder länger als 10 000 ms.
Maximum array length is 2048BYTECOLLECTION aus einem hexadezimalen Text mit mehr als 2048 Bytes.
Invalid array length. Must be greater than 0 and less than or equal 2048BYTECOLLECTION mit einer Anzahl von 0 oder mehr als 2048 Bytes.
UINT16COLLECTION: count must be between 1 and 2048UINT16COLLECTION oder BOOLCOLLECTION (mit eigenem Namen in der Meldung) mit einer Anzahl außerhalb von 1 – 2048.
GETBIT - bit must be between 0 and 15Ein Bit oder Byte außerhalb des Typs des Wertes, hier eines 16-Bit-Wertes.
GETBIT - value X is out of the 32-bit range (-2147483648 .. 4294967295)Ein Dezimalwert, der keine 32-Bit-Ganzzahl ist.
Return value 'X' does not match required return type constraint: 'T'Ein Leseskript eines Geräts hat einen Typ zurückgegeben, den der Gerätewert nicht aufnehmen kann.
Response is too long (Nbytes). Maximum supported length is 128KBEine HTTP-Antwort größer als 128 kB.
Invalid register number: XEin Modbus-Register außerhalb von 0 bis 65535.
RegisterValueToWrites: Can't write double.NaN to modbus registerMit MODBUSW geschriebenes NaN.

Kontext- und Versionsfehler

MeldungUrsache und Behebung
X function not supported here.Die Funktion funktioniert in dieser Art von Skript nicht, zum Beispiel ADDERROR function not supported here. in einer smart rule.
SLEEP function not allowed in this context.SLEEP in einer smart rule Skript oder in einem Benachrichtigungsskript.
ModbusFunction - unknown modbus device to work withEine Modbus-Funktion außerhalb eines Modbus-Skripts.
PacketParserFunction - PacketParserContext is nullEine Packet-Parser-Funktion außerhalb eines Packet-Parser-Skripts.
DEBOUNCE - invalid argument, must be a device variableDas erste Argument von DEBOUNCE ist ein Ausdruck, kein Gerätewert.
DEBOUNCE - Function is not availableDEBOUNCE in einem Skript ohne Gerätewerte, die entprellt werden können.
X function not supported. Please update your core unit to be able to use this feature.Die Core-Version ist älter als die Funktion.
Data type 'X' not supported. Please update your core unit to be able to use this feature.Ein Typ-Schlüsselwort, das neuer ist als die Core-Version.
Modbus data type 'X' not supported. Please update your core unit to be able to use this feature.Int64, UInt64 oder Double auf einer Core-Version älter als 2026.1, Build 40595.

Welchen Build jede Funktion benötigt, steht unter Versionsanforderungen.