TapHome

Chyby skriptu a riešenie problémov

Chybové hlásenia skriptov TapHome citované doslovne — Division by zero, chyby pri parsovaní, chyby pri vykonávaní a chyby kontextu či verzie — s príčinou a riešením každej z nich.

Skript TapHome môže zlyhať dvoma spôsobmi. Chyba pri parsovaní sa nájde už pri čítaní textu skriptu: zobrazí ju editor skriptu a skript sa nespustí. Chyba pri vykonávaní zastaví skript, ktorý už beží. Hlásenia nižšie sú citované doslovne; X, A, B a N zastupujú meno, typ alebo číslo v hlásení.

Ako sa chyby hlásia

Chyba pri vykonávaní nesie riadok skriptu a hlásenie:

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

Kde sa zalomenie riadku nezobrazí, tá istá chyba znie Line in script: 7 Message: Division by zero. Skript zastavený chybou pri vykonávaní nevráti žiadnu hodnotu (Null); smart rule Vzorec má potom pri ďalšom spustení aj LastState = Null.

Delenie nulou

Line in script: 1 Message: Division by zero znamená, že deliteľ bol pri behu skriptu presne 0 — typicky hodnota zariadenia, napríklad va2 vo výraze va1/va2. Deľte, len keď je deliteľ väčší ako 0:

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

Funkčný tvar IF vyhodnotí iba zvolenú vetvu, takže nulou nikdy nedelí. Keď môže byť deliteľ záporný, použite va2 <> 0. Ďalšie postupy sú v Príkladoch.

Chyby pri parsovaní

HláseniePríčina a riešenie
Unknown variable or constant 'X'Preklep, hodnota zariadenia, ktorá nebola pridaná do skriptu, alebo slovo, ktoré jazyk nepozná: NOT 1 dá 'NOT' — negácia je !. Mimo bloku sa chýbajúca ; na predchádzajúcom riadku môže prejaviť ako nasledujúce meno.
Unknown function 'X'Taká funkcia neexistuje. MODBUS, TOBYTEARRAY ani BYTEARRAY jazyk nemá — použite MODBUSR alebo MODBUSW, TOBYTES a BYTECOLLECTION.
Wrong number of literals and operators in expressionOperátor bez operandu, napríklad 1 == 1. Rovnosť je =, nerovnosť <>.
Unexpected character 'X' at the end of statement.Pred nasledujúcim príkazom chýba ;. Vnútri bloku správa končí Expected ';', napríklad Unexpected character 'E' at the end of statement. Expected ';' pred END.
Unexpected character '.'Vlastnosť čítaná z výsledku funkcie, napríklad AVG(1, 2).Type. Hodnotu najprv uložte do premennej.
Unexpected character ';' in WHILE statement (alebo DO); za vnoreným END alebo LOOP vnútri cyklu.
Unexpected keyword 'X' at the end of IF statement.; za vnoreným END vnútri bloku IF.
Comment must start on a new line and inline comments are not supported# pred ; príkazu alebo za podmienkou IF či WHILE.
Comparison with NaN is always false. Use the IsNaN method to check for NaN value.x = NaN — použite ISNAN(x).
Couldn't unescape XJedna spätná lomka v reťazci; napíšte "C:\\data".
Too many characters in char literalText v jednoduchých úvodzovkách, napríklad 'ab'; text patrí do dvojitých úvodzoviek.
Variable name must start with letter, Only letters or numbers are allowed in variable nameMeno ako 1x alebo my_value.
Variable must have initial value providedVAR x; — zadajte hodnotu alebo deklarujte typ: int x;.

Chyby pri vykonávaní

HláseniePríčina a riešenie
Division by zeroPozri Delenie nulou.
Specified argument was out of the range of valid values.PARSETEXT našiel ľavý vzor, ale nie pravý. Najprv to overte cez INDEXOF.
PARSEJSON - Element not found: 'X'JSONPath nič nenašiel. Ak chcete namiesto chyby dostať Null, zadajte ako tretí argument TRUE.
Operator 'X' not defined for 'A' and 'B'Operácia s nekompatibilnými typmi, napríklad aritmetika s Null. Najprv to overte cez ISNULL.
Cannot cast 'A' to 'B'Hodnota typu, ktorý sa nedá previesť, napríklad text tam, kde je potrebné číslo.
Can not directly set value to device variablePriradenie do hodnoty zariadenia mimo smart rule Skript.
More than 1 000 000 loops, stopping loopCyklus WHILE alebo DO, ktorý neskončí.
Cannot use BREAK() outside of WHILE or DO-WHILEBREAK mimo cyklu; rovnako CONTINUE.
Interval 'X' is out of range (0-10000)SLEEP so záporným intervalom alebo dlhším ako 10 000 ms.
Maximum array length is 2048BYTECOLLECTION zo šestnástkového textu s viac ako 2048 bajtmi.
Invalid array length. Must be greater than 0 and less than or equal 2048BYTECOLLECTION s počtom bajtov 0 alebo viac ako 2048.
UINT16COLLECTION: count must be between 1 and 2048UINT16COLLECTION, alebo BOOLCOLLECTION s vlastným menom, s počtom mimo 1 – 2048.
GETBIT - bit must be between 0 and 15Bit alebo bajt mimo typu hodnoty, tu 16-bitovej hodnoty.
GETBIT - value X is out of the 32-bit range (-2147483648 .. 4294967295)Desatinné číslo, ktoré nie je 32-bitovým celým číslom.
Return value 'X' does not match required return type constraint: 'T'Skript na čítanie zariadenia vrátil typ, ktorý hodnota zariadenia nedokáže uložiť.
Response is too long (Nbytes). Maximum supported length is 128KBHTTP odpoveď väčšia ako 128 kB.
Invalid register number: XRegister Modbus mimo rozsahu 0 až 65535.
RegisterValueToWrites: Can't write double.NaN to modbus registerNaN zapisované cez MODBUSW.

Chyby kontextu a verzie

HláseniePríčina a riešenie
X function not supported here.Funkcia v tomto druhu skriptu nefunguje, napríklad ADDERROR function not supported here. v smart rule.
SLEEP function not allowed in this context.SLEEP v smart rule Skript alebo v skripte notifikácie.
ModbusFunction - unknown modbus device to work withFunkcia Modbus mimo skriptu Modbus.
PacketParserFunction - PacketParserContext is nullFunkcia Packet parser mimo skriptu Packet parser.
DEBOUNCE - invalid argument, must be a device variablePrvý argument DEBOUNCE je výraz, nie hodnota zariadenia.
DEBOUNCE - Function is not availableDEBOUNCE v skripte bez hodnôt zariadení, na ktoré sa dá DEBOUNCE použiť.
X function not supported. Please update your core unit to be able to use this feature.Core je starší ako funkcia.
Data type 'X' not supported. Please update your core unit to be able to use this feature.Kľúčové slovo typu, ktoré je novšie ako Core.
Modbus data type 'X' not supported. Please update your core unit to be able to use this feature.Int64, UInt64 alebo Double na Core staršom ako 2026.1, build 40595.

Ktorý build potrebuje každá funkcia, nájdete v Požiadavkách na verziu.