TapHome

Logica e diagnostica

Funzioni degli script TapHome per i valori sconosciuti e la diagnostica dei dispositivi: ISNULL, ISNAN, EQUALS, SLEEP, ADDERROR, ADDWARNING, ADDINFO e DEBOUNCE.

Queste funzioni verificano i valori Null e NaN, confrontano numeri decimali con una tolleranza, mettono in pausa uno script del dispositivo e segnalano messaggi su un dispositivo. NaN è un numero sconosciuto, Null è un valore mancante — vedi Tipi di dati. La versione minima del Core di ogni funzione è in Requisiti di versione.

ISNULL

ISNULL restituisce TRUE quando un valore è Null, cioè mancante — per esempio LastState alla prima esecuzione di una smart rule Formula, oppure PARSEJSON con l’opzione di ignorare gli errori quando il percorso non viene trovato.

1
ISNULL(value)

Valore restituito — bool. È accettato un valore di qualsiasi tipo. NaN è un numero, non un valore mancante, quindi ISNULL(NaN) è FALSE.

Esempio

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

Vedi anche — ISNAN, Script nelle smart rule.

ISNAN

ISNAN restituisce TRUE quando un numero è NaN, cioè un valore sconosciuto — per esempio il valore di un dispositivo in errore o non ancora letto.

1
ISNAN(number)

Valore restituito — bool.

Note — NaN non è mai uguale a nulla. Un confronto con il letterale NaN, come x = NaN, viene rifiutato al salvataggio dello script. L’argomento deve essere un numero: ISNAN(Null) interrompe lo script con un errore di esecuzione, quindi verifica prima ISNULL quando un valore può anche mancare.

Esempio — scrivere 0 quando un dispositivo è in errore o restituisce NaN

Usa IF(ISNAN(x), 0, x) per passare un numero anche mentre il dispositivo sorgente è in errore:

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

Quando il valore può essere anche Null, controllalo prima — OR non valuta il lato destro quando il lato sinistro è già TRUE:

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

Errori — Comparison with NaN is always false. Use the IsNaN method to check for NaN value. (al salvataggio dello script).

Vedi anche — ISNULL, EQUALS.

EQUALS

EQUALS restituisce TRUE quando due numeri differiscono al massimo di una tolleranza (epsilon, 0.005 per impostazione predefinita); usalo al posto di = per valori decimali come le temperature.

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

Parametri

NomeTipoDescrizione
number1, number2numeroValori da confrontare.
epsilonnumero, facoltativoDifferenza massima ancora considerata uguaglianza. Predefinito 0.005.

Valore restituito — bool. Due valori NaN sono considerati uguali, quindi EQUALS(NaN, NaN) è TRUE. Un argomento Null è un errore di esecuzione.

Esempio

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

SLEEP

SLEEP mette in pausa uno script Modbus o Packet parser per il numero di millisecondi indicato (0 – 10 000) e restituisce quel numero.

1
SLEEP(milliseconds)

Note — Mentre lo script attende, il modulo non interroga i suoi dispositivi, quindi mantieni la pausa breve, di solito l’intervallo di cui un dispositivo ha bisogno tra due scritture.

Esempio

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

Errori

  • SLEEP function not allowed in this context. — lo script appartiene a una smart rule (Equazione, Formula o Script) o a una notifica; non può essere salvato.
  • Interval ‘X’ is out of range (0-10000) — durante l’esecuzione.

Disponibile — script Modbus e Packet parser.

ADDERROR, ADDWARNING, ADDINFO

ADDERROR, ADDWARNING e ADDINFO mostrano sul dispositivo nell’app TapHome un messaggio di errore, di avviso o di informazione e restituiscono TRUE.

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

Parametri

NomeTipoDescrizione
codenumero intero, facoltativoIdentifica il messaggio. I messaggi con codici diversi vengono mostrati uno accanto all’altro; un nuovo messaggio con lo stesso codice, o un secondo messaggio senza codice, sostituisce il precedente.
textstringMessaggio mostrato nell’app.

Note — I messaggi vengono valutati a ogni esecuzione: un messaggio scompare non appena un’esecuzione dello script non lo genera più.

Esempio

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"));

Errori — ADDERROR function not supported here. (oppure ADDWARNING, ADDINFO) in qualsiasi script non elencato in Disponibile.

Disponibile — script di lettura dei moduli e dei dispositivi Modbus; script di lettura, di scrittura e script listener del Packet parser. Non negli script di scrittura e di inizializzazione Modbus, negli attributi di servizio e nelle azioni di servizio di entrambe le integrazioni, nelle smart rule né nelle notifiche.

Vedi anche — Funzioni Modbus, Funzioni Packet parser.

DEBOUNCE

DEBOUNCE ignora i valori di un valore del dispositivo letti dal dispositivo per il numero di millisecondi indicato e controlla di nuovo il valore allo scadere di quel tempo; le scritture verso il dispositivo non ne sono influenzate.

1
DEBOUNCE(deviceVariable, milliseconds)

Parametri

NomeTipoDescrizione
deviceVariablevariabile del dispositivoAbbreviazione del valore del dispositivo, per esempio St. Un’espressione non è accettata.
millisecondsnumeroDurata della finestra, 0 o più.

Valore restituito — l’intervallo. Su un valore del dispositivo senza filtro antirimbalzo la chiamata non fa nulla.

Esempio

DEBOUNCE(St, 500);

Errori

  • DEBOUNCE - Function is not available — lo script non è uno script del dispositivo elencato in Disponibile.
  • DEBOUNCE - invalid argument, must be a device variable

Disponibile — Core 2026.1, build 36599 e successivi · script di lettura e scrittura dei dispositivi Modbus, script di lettura, di scrittura e script listener del Packet parser.