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.
| Protocollo | Funzioni | Script tipici |
|---|---|---|
| HTTP | HTTPREQUEST, SENDHTTPREQUEST | Lo 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, UDP | SENDDATA | Gli script di lettura o scrittura inviano una richiesta; la risposta arriva nello script listener. |
| MQTT | MQTTPUBLISH | Lo script listener elabora i messaggi in arrivo; lo script di scrittura pubblica i comandi. |
| FTP | FTPDOWNLOAD, FTPUPLOAD | Gli 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.
| |
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.
| |
| Nome | Tipo | Descrizione |
|---|---|---|
path | string | Percorso sul dispositivo impostato nel modulo, ad esempio "/status". |
method | string, facoltativo | GET (predefinito), POST, PUT, … |
body | string, facoltativo | Corpo della richiesta. |
header1 … | string, facoltativo | Fino a 27 intestazioni nella forma "Name: value". |
request | httprequest | Una richiesta costruita con HTTPREQUEST. |
Valore restituito — httpresponse:
| Proprietà | Significato |
|---|---|
Content | Il corpo della risposta come testo. |
StatusCode | Codice di stato HTTP, ad esempio 200. |
ReasonPhrase | Testo di stato, ad esempio OK. |
IsSuccess | TRUE per i codici di stato 200 – 299. |
Headers | Intestazioni 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 + ")");
ENDSENDHTTPREQUEST("/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.
| |
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.
| |
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>).
| |
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".
| |
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.
| |
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.
| |
Esempio
COMPLETESERVICEACTION("Reboot", "Rebooted successfully");Errori — No service action with name X.
Vedi anche — Script listener, Funzioni di parsing, Conversioni tra tipi di dati.