TapHome

Errori degli script e risoluzione dei problemi

Messaggi di errore degli script TapHome citati alla lettera — Division by zero, errori di parsing, errori in fase di esecuzione ed errori di contesto o di versione — con la causa e la soluzione di ciascuno.

Uno script TapHome può fallire in due modi. Un errore di parsing viene rilevato durante la lettura del testo dello script: l’editor degli script lo mostra e lo script non viene eseguito. Un errore in fase di esecuzione interrompe uno script già in esecuzione. I messaggi qui sotto sono citati alla lettera; X, A, B e N indicano il nome, il tipo o il numero nel messaggio.

Come vengono segnalati gli errori

Un errore in fase di esecuzione riporta la riga dello script e il messaggio:

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

Dove l’interruzione di riga non viene mostrata, lo stesso errore si legge Line in script: 7 Message: Division by zero. Uno script interrotto da un errore in fase di esecuzione non restituisce alcun valore (Null); una smart rule Formula ha quindi anche LastState = Null alla sua esecuzione successiva.

Divisione per zero

Line in script: 1 Message: Division by zero significa che un divisore era esattamente 0 quando lo script è stato eseguito — tipicamente un valore di un dispositivo, come va2 in va1/va2. Dividi solo quando il divisore è maggiore di 0:

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

La forma a funzione di IF valuta solo il ramo scelto, quindi non divide mai per 0. Usa va2 <> 0 quando il divisore può essere negativo. Altre ricette in Esempi.

Errori di parsing

MessaggioCausa e soluzione
Unknown variable or constant 'X'Un errore di battitura, un valore di dispositivo non aggiunto allo script o una parola che il linguaggio non ha: NOT 1 dà 'NOT' — la negazione è !. Fuori da un blocco, un ; mancante sulla riga precedente può comparire come il nome successivo.
Unknown function 'X'La funzione non esiste. MODBUS, TOBYTEARRAY e BYTEARRAY non esistono — usa MODBUSR o MODBUSW, TOBYTES e BYTECOLLECTION.
Wrong number of literals and operators in expressionUn operatore senza operando, ad esempio 1 == 1. L’uguaglianza è =, la disuguaglianza <>.
Unexpected character 'X' at the end of statement.Manca il ; prima dell’istruzione successiva. All’interno di un blocco il messaggio termina con Expected ';', ad esempio Unexpected character 'E' at the end of statement. Expected ';' prima di END.
Unexpected character '.'Una proprietà letta dal risultato di una funzione, come AVG(1, 2).Type. Salva prima il valore in una variabile.
Unexpected character ';' in WHILE statement (o DO)Un ; dopo un END o LOOP interno all’interno di un ciclo.
Unexpected keyword 'X' at the end of IF statement.Un ; dopo un END interno all’interno di un blocco IF.
Comment must start on a new line and inline comments are not supportedUn # prima del ; di un’istruzione, oppure dopo una condizione IF o WHILE.
Comparison with NaN is always false. Use the IsNaN method to check for NaN value.x = NaN — usa ISNAN(x).
Couldn't unescape XUna barra rovesciata singola in una stringa; scrivi "C:\\data".
Too many characters in char literalTesto tra virgolette singole, come 'ab'; il testo richiede le virgolette doppie.
Variable name must start with letter, Only letters or numbers are allowed in variable nameUn nome come 1x o my_value.
Variable must have initial value providedVAR x; — assegna un valore o dichiara un tipo: int x;.

Errori in fase di esecuzione

MessaggioCausa e soluzione
Division by zeroVedi Divisione per zero.
Specified argument was out of the range of valid values.PARSETEXT ha trovato il modello sinistro ma non quello destro. Verifica prima con INDEXOF.
PARSEJSON - Element not found: 'X'Il JSONPath non ha trovato nulla. Passa TRUE come terzo argomento per ottenere invece Null.
Operator 'X' not defined for 'A' and 'B'Un’operazione su tipi incompatibili, ad esempio aritmetica con Null. Verifica prima con ISNULL.
Cannot cast 'A' to 'B'Un valore di un tipo che non si può convertire, ad esempio testo dove serve un numero.
Can not directly set value to device variableUn’assegnazione a un valore di dispositivo al di fuori di una smart rule Script.
More than 1 000 000 loops, stopping loopUn ciclo WHILE o DO che non termina.
Cannot use BREAK() outside of WHILE or DO-WHILEBREAK fuori da un ciclo; lo stesso vale per CONTINUE.
Interval 'X' is out of range (0-10000)SLEEP con un intervallo negativo o più lungo di 10 000 ms.
Maximum array length is 2048BYTECOLLECTION da un testo esadecimale di più di 2048 byte.
Invalid array length. Must be greater than 0 and less than or equal 2048BYTECOLLECTION con un numero di byte pari a 0 o superiore a 2048.
UINT16COLLECTION: count must be between 1 and 2048UINT16COLLECTION, oppure BOOLCOLLECTION con il proprio nome, con un numero di elementi fuori da 1 – 2048.
GETBIT - bit must be between 0 and 15Un bit o un byte fuori dal tipo del valore, qui un valore a 16 bit.
GETBIT - value X is out of the 32-bit range (-2147483648 .. 4294967295)Un valore decimale che non è un numero intero a 32 bit.
Return value 'X' does not match required return type constraint: 'T'Uno script di lettura del dispositivo ha restituito un tipo che il valore del dispositivo non può contenere.
Response is too long (Nbytes). Maximum supported length is 128KBUna risposta HTTP più grande di 128 kB.
Invalid register number: XUn registro Modbus fuori dall’intervallo da 0 a 65535.
RegisterValueToWrites: Can't write double.NaN to modbus registerNaN scritto con MODBUSW.

Errori di contesto e di versione

MessaggioCausa e soluzione
X function not supported here.La funzione non funziona in questo tipo di script, ad esempio ADDERROR function not supported here. in una smart rule.
SLEEP function not allowed in this context.SLEEP in una smart rule Script o in uno script di notifica.
ModbusFunction - unknown modbus device to work withUna funzione Modbus fuori da uno script Modbus.
PacketParserFunction - PacketParserContext is nullUna funzione Packet parser fuori da uno script Packet parser.
DEBOUNCE - invalid argument, must be a device variableIl primo argomento di DEBOUNCE è un’espressione, non un valore di dispositivo.
DEBOUNCE - Function is not availableDEBOUNCE in uno script senza valori di dispositivo a cui si possa applicare il debounce.
X function not supported. Please update your core unit to be able to use this feature.Il Core è più vecchio della funzione.
Data type 'X' not supported. Please update your core unit to be able to use this feature.Una parola chiave di tipo più recente del Core.
Modbus data type 'X' not supported. Please update your core unit to be able to use this feature.Int64, UInt64 o Double su un Core più vecchio di 2026.1, build 40595.

Quale build richiede ciascuna funzione è indicato in Requisiti di versione.