TapHome

Funzioni Packet parser

Funzioni Packet parser degli script TapHome — HTTPREQUEST, SENDHTTPREQUEST, SENDDATA, MQTTPUBLISH, FTPDOWNLOAD, FTPUPLOAD, COMPLETESERVICEATTRIBUTE e COMPLETESERVICEACTION — per HTTP, TCP, UDP, MQTT e FTP.

Le funzioni Packet parser comunicano con i dispositivi tramite HTTP, TCP, UDP, MQTT e FTP. Funzionano solo negli script di un modulo o di un dispositivo Packet parser il cui protocollo corrisponde alla funzione; altrove lo script si interrompe con PacketParserFunction - PacketParserContext is null. Tutte richiedono Core 2022.2 o più recente. La configurazione di un modulo Packet parser è descritta in Packet parser; i messaggi in arrivo vengono gestiti negli script listener, e i dispositivi Modbus hanno le proprie funzioni Modbus.

Protocolli e script

Ogni protocollo ha le proprie funzioni e una tipica suddivisione del lavoro tra gli script.

ProtocolloFunzioniScript tipici
HTTPHTTPREQUEST, SENDHTTPREQUESTLo script di lettura del modulo invia una richiesta e salva la risposta in una variabile del modulo; gli script di lettura dei dispositivi la analizzano.
TCP, UDPSENDDATAGli script di lettura o scrittura inviano una richiesta; la risposta arriva nello script listener.
MQTTMQTTPUBLISHLo script listener elabora i messaggi in arrivo; lo script di scrittura pubblica i comandi.
FTPFTPDOWNLOAD, FTPUPLOADGli script di lettura e scrittura trasferiscono i file.

Esempio — una sola richiesta HTTP per tutti i dispositivi di un modulo

VAR response := SENDHTTPREQUEST("/status", "GET");
StatusJson := response.Content;
PARSEJSON(StatusJson, "temperature");

Il primo script è lo script di lettura del modulo, il secondo uno script di lettura del dispositivo; StatusJson è una variabile del modulo.

HTTPREQUEST

HTTPREQUEST costruisce un valore httprequest il cui percorso, metodo, corpo e intestazioni si possono modificare prima di inviarlo con SENDHTTPREQUEST.

1
HTTPREQUEST(path [, method [, body]])

Note — Il metodo predefinito è GET. Le proprietà PATH, METHOD, BODY e HEADERS si possono leggere e scrivere; HEADERS è una collezione di stringhe "Name: value". La funzione crea solo un valore, quindi funziona in ogni script.

Esempio

VAR request := HTTPREQUEST("/api/v1/state", "POST", "{\"on\":true}");
request.HEADERS := {"Content-Type: application/json", "Authorization: Bearer " + token};
VAR response := SENDHTTPREQUEST(request);

SENDHTTPREQUEST

SENDHTTPREQUEST invia una richiesta HTTP, attende la risposta e la restituisce come valore httpresponse con le proprietà Content, StatusCode, ReasonPhrase, IsSuccess e Headers.

1
2
SENDHTTPREQUEST(path [, method [, body [, header1, header2, …]]])
SENDHTTPREQUEST(request)
NomeTipoDescrizione
pathstringPercorso sul dispositivo impostato nel modulo, ad esempio "/status".
methodstring, facoltativoGET (predefinito), POST, PUT, …
bodystring, facoltativoCorpo della richiesta.
header1 …string, facoltativoFino a 27 intestazioni nella forma "Name: value".
requesthttprequestUna richiesta costruita con HTTPREQUEST.

Valore restituito — httpresponse:

ProprietàSignificato
ContentIl corpo della risposta come testo.
StatusCodeCodice di stato HTTP, ad esempio 200.
ReasonPhraseTesto di stato, ad esempio OK.
IsSuccessTRUE per i codici di stato 200 – 299.
HeadersIntestazioni della risposta come testo JSON — un array di {"Key": …, "Value": [ … ]} — leggibili con PARSEJSON.

Note — Solo per un modulo con il protocollo HTTP. La risposta può avere al massimo 128 kB.

Esempio

VAR response := SENDHTTPREQUEST("/status", "GET");
IF response.IsSuccess
    StatusJson := response.Content;
ELSE
    ADDERROR(response.StatusCode + " (" + response.ReasonPhrase + ")");
END
SENDHTTPREQUEST("/doSomething", "POST", "someData", "header1: value1", "header2: value2");

Errori — Response is too long (Nbytes). Maximum supported length is 128KB; PacketParserFunction - unable to use ‘SENDHTTPREQUEST’ with … (il modulo usa un altro protocollo).

SENDDATA

SENDDATA invia una stringa o una collezione di byte tramite TCP o UDP e restituisce TRUE; la risposta arriva nello script listener.

1
SENDDATA(data)

Note — Una stringa viene inviata come byte iso-8859-1. Una collezione deve essere una collection<uint8>. I dati in arrivo vengono consegnati allo script listener in blocchi di al massimo 4096 byte.

Esempio

SENDDATA(BYTECOLLECTION("0a dd ef a2"));
SENDDATA("STATUS?\r\n");

MQTTPUBLISH

MQTTPUBLISH pubblica un messaggio con il topic indicato sul broker MQTT del modulo e restituisce Null.

1
MQTTPUBLISH(topic, data)

Note — data è una stringa o una collection<uint8>. Un errore segnalato dal broker interrompe lo script con il suo testo. Il broker si configura in MQTT Broker.

Esempio

MQTTPUBLISH("shellies/" + plugTopic + "/relay/0/command", IF(St > 0, "on", "off"));

FTPDOWNLOAD

FTPDOWNLOAD scarica un file dal server FTP del modulo e ne restituisce il contenuto come collezione di byte (collection<uint8>).

1
FTPDOWNLOAD(path)

Esempio

VAR data := FTPDOWNLOAD("/export/values.csv");
VAR csv := TOSTRING(data, "utf-8");

FTPUPLOAD

FTPUPLOAD scrive dati in un file sul server FTP del modulo — sostituendo il file con "write" (predefinito) o aggiungendoli in coda con "append".

1
FTPUPLOAD(path, data [, mode])

Note — data è una stringa o una collection<uint8>. mode deve essere in minuscolo.

Esempio

FTPUPLOAD("/path/to/file", "some data", "write");
FTPUPLOAD("/path/to/file", BYTECOLLECTION("a7 ff e2"), "append");

Errori — FTPUPLOAD - invalid argument, upload mode must be ‘append’ or ‘write’.

COMPLETESERVICEATTRIBUTE

COMPLETESERVICEATTRIBUTE consegna all’app il valore di un attributo di servizio da uno script listener TCP o UDP, dopo che lo script dell’attributo ha inviato la richiesta con SENDDATA.

1
COMPLETESERVICEATTRIBUTE(name, value [, error])

Note — name è il nome dell’attributo di servizio. Con error l’attributo mostra il testo dell’errore invece di un valore. Restituisce Null.

Esempio

COMPLETESERVICEATTRIBUTE("Uptime", "2d:21h:43m");
COMPLETESERVICEATTRIBUTE("Status", "", "Device is offline");

COMPLETESERVICEACTION

COMPLETESERVICEACTION comunica all’app il risultato di un’azione di servizio da uno script listener TCP o UDP, dopo che lo script dell’azione ha inviato la richiesta con SENDDATA.

1
COMPLETESERVICEACTION(name, result)

Esempio

COMPLETESERVICEACTION("Reboot", "Rebooted successfully");

Errori — No service action with name X.

Vedi anche — Script listener, Funzioni di parsing, Conversioni tra tipi di dati.