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:
| |
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 va2Die 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
| Meldung | Ursache 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 expression | Ein 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 supported | Ein # 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 X | Ein einzelner Backslash in einem String; schreiben Sie "C:\\data". |
Too many characters in char literal | Text 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 name | Ein Name wie 1x oder my_value. |
Variable must have initial value provided | VAR x; — geben Sie einen Wert an oder deklarieren Sie einen Typ: int x;. |
Laufzeitfehler
| Meldung | Ursache und Behebung |
|---|---|
Division by zero | Siehe 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 variable | Eine Zuweisung an einen Gerätewert außerhalb einer smart rule Skript. |
More than 1 000 000 loops, stopping loop | Eine WHILE- oder DO-Schleife, die nicht endet. |
Cannot use BREAK() outside of WHILE or DO-WHILE | BREAK 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 2048 | BYTECOLLECTION aus einem hexadezimalen Text mit mehr als 2048 Bytes. |
Invalid array length. Must be greater than 0 and less than or equal 2048 | BYTECOLLECTION mit einer Anzahl von 0 oder mehr als 2048 Bytes. |
UINT16COLLECTION: count must be between 1 and 2048 | UINT16COLLECTION oder BOOLCOLLECTION (mit eigenem Namen in der Meldung) mit einer Anzahl außerhalb von 1 – 2048. |
GETBIT - bit must be between 0 and 15 | Ein 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 128KB | Eine HTTP-Antwort größer als 128 kB. |
Invalid register number: X | Ein Modbus-Register außerhalb von 0 bis 65535. |
RegisterValueToWrites: Can't write double.NaN to modbus register | Mit MODBUSW geschriebenes NaN. |
Kontext- und Versionsfehler
| Meldung | Ursache 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 with | Eine Modbus-Funktion außerhalb eines Modbus-Skripts. |
PacketParserFunction - PacketParserContext is null | Eine Packet-Parser-Funktion außerhalb eines Packet-Parser-Skripts. |
DEBOUNCE - invalid argument, must be a device variable | Das erste Argument von DEBOUNCE ist ein Ausdruck, kein Gerätewert. |
DEBOUNCE - Function is not available | DEBOUNCE 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.