Funcții Packet parser
Funcțiile Packet parser din scripturile TapHome — HTTPREQUEST, SENDHTTPREQUEST, SENDDATA, MQTTPUBLISH, FTPDOWNLOAD, FTPUPLOAD, COMPLETESERVICEATTRIBUTE și COMPLETESERVICEACTION — pentru HTTP, TCP, UDP, MQTT și FTP.
Funcțiile Packet parser comunică cu dispozitivele prin HTTP, TCP, UDP, MQTT și FTP. Funcționează doar în scripturile unui modul sau dispozitiv Packet parser al cărui protocol corespunde funcției; în rest scriptul se oprește cu PacketParserFunction - PacketParserContext is null. Toate necesită Core 2022.2 sau mai nou. Configurarea unui modul Packet parser este descrisă în Packet parser; mesajele primite se tratează în Scripturi listener, iar dispozitivele Modbus au propriile funcții Modbus.
Protocoale și scripturi
Fiecare protocol are propriile funcții și o împărțire tipică a muncii între scripturi.
| Protocol | Funcții | Scripturi tipice |
|---|---|---|
| HTTP | HTTPREQUEST, SENDHTTPREQUEST | Scriptul de citire al modulului trimite o singură cerere și stochează răspunsul într-o variabilă a modulului; scripturile de citire ale dispozitivelor îl parsează. |
| TCP, UDP | SENDDATA | Scripturile de citire sau de scriere trimit o cerere; răspunsul sosește în scriptul listener. |
| MQTT | MQTTPUBLISH | Scriptul listener prelucrează mesajele primite; scriptul de scriere publică comenzile. |
| FTP | FTPDOWNLOAD, FTPUPLOAD | Scripturile de citire și de scriere transferă fișiere. |
Exemplu — o singură cerere HTTP pentru toate dispozitivele unui modul
VAR response := SENDHTTPREQUEST("/status", "GET");
StatusJson := response.Content;PARSEJSON(StatusJson, "temperature");Primul script este scriptul de citire al modulului, al doilea un script de citire al unui dispozitiv; StatusJson este o variabilă a modulului.
HTTPREQUEST
HTTPREQUEST construiește o valoare httprequest a cărei cale, metodă, corp și antete se pot modifica înainte de trimiterea ei cu SENDHTTPREQUEST.
| |
Observații — Metoda implicită este GET. Proprietățile PATH, METHOD, BODY și HEADERS se pot citi și scrie; HEADERS este o colecție de șiruri "Name: value". Funcția doar creează o valoare, așa că funcționează în orice script.
Exemplu
VAR request := HTTPREQUEST("/api/v1/state", "POST", "{\"on\":true}");
request.HEADERS := {"Content-Type: application/json", "Authorization: Bearer " + token};
VAR response := SENDHTTPREQUEST(request);SENDHTTPREQUEST
SENDHTTPREQUEST trimite o cerere HTTP, așteaptă răspunsul și îl returnează ca valoare httpresponse cu proprietățile Content, StatusCode, ReasonPhrase, IsSuccess și Headers.
| |
| Nume | Tip | Descriere |
|---|---|---|
path | șir de caractere | Calea pe dispozitivul setat în modul, de exemplu "/status". |
method | șir de caractere, opțional | GET (implicit), POST, PUT, … |
body | șir de caractere, opțional | Corpul cererii. |
header1 … | șir de caractere, opțional | Până la 27 de antete în forma "Name: value". |
request | httprequest | O cerere construită cu HTTPREQUEST. |
Returnează — httpresponse:
| Proprietate | Semnificație |
|---|---|
Content | Corpul răspunsului ca text. |
StatusCode | Codul de stare HTTP, de exemplu 200. |
ReasonPhrase | Textul stării, de exemplu OK. |
IsSuccess | TRUE pentru codurile de stare 200 – 299. |
Headers | Antetele răspunsului ca text JSON — un tablou de {"Key": …, "Value": [ … ]} — care se poate citi cu PARSEJSON. |
Observații — Doar pentru un modul cu protocolul HTTP. Răspunsul poate avea cel mult 128 kB.
Exemplu
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");Erori — Response is too long (Nbytes). Maximum supported length is 128KB; PacketParserFunction - unable to use ‘SENDHTTPREQUEST’ with … (modulul folosește alt protocol).
SENDDATA
SENDDATA trimite un șir de caractere sau o colecție de octeți prin TCP sau UDP și returnează TRUE; răspunsul sosește în scriptul listener.
| |
Observații — Un șir de caractere se trimite ca octeți iso-8859-1. O colecție trebuie să fie collection<uint8>. Datele primite se livrează scriptului listener în fragmente de cel mult 4096 de octeți.
Exemplu
SENDDATA(BYTECOLLECTION("0a dd ef a2"));
SENDDATA("STATUS?\r\n");MQTTPUBLISH
MQTTPUBLISH publică un mesaj cu topicul dat către brokerul MQTT al modulului și returnează Null.
| |
Observații — data este un șir de caractere sau o collection<uint8>. O eroare raportată de broker oprește scriptul cu textul ei. Brokerul se configurează în MQTT Broker.
Exemplu
MQTTPUBLISH("shellies/" + plugTopic + "/relay/0/command", IF(St > 0, "on", "off"));FTPDOWNLOAD
FTPDOWNLOAD descarcă un fișier de pe serverul FTP al modulului și returnează conținutul lui ca o colecție de octeți (collection<uint8>).
| |
Exemplu
VAR data := FTPDOWNLOAD("/export/values.csv");
VAR csv := TOSTRING(data, "utf-8");FTPUPLOAD
FTPUPLOAD scrie date într-un fișier de pe serverul FTP al modulului — înlocuiește fișierul cu "write" (implicit) sau adaugă la sfârșitul lui cu "append".
| |
Observații — data este un șir de caractere sau o collection<uint8>. mode trebuie scris cu litere mici.
Exemplu
FTPUPLOAD("/path/to/file", "some data", "write");
FTPUPLOAD("/path/to/file", BYTECOLLECTION("a7 ff e2"), "append");Erori — FTPUPLOAD - invalid argument, upload mode must be ‘append’ or ‘write’.
COMPLETESERVICEATTRIBUTE
COMPLETESERVICEATTRIBUTE livrează aplicației valoarea unui atribut de service dintr-un script listener TCP sau UDP, după ce scriptul atributului a trimis cererea cu SENDDATA.
| |
Observații — name este numele atributului de service. Cu error, atributul afișează textul erorii în loc de o valoare. Returnează Null.
Exemplu
COMPLETESERVICEATTRIBUTE("Uptime", "2d:21h:43m");
COMPLETESERVICEATTRIBUTE("Status", "", "Device is offline");COMPLETESERVICEACTION
COMPLETESERVICEACTION raportează aplicației rezultatul unei acțiuni de service dintr-un script listener TCP sau UDP, după ce scriptul acțiunii a trimis cererea cu SENDDATA.
| |
Exemplu
COMPLETESERVICEACTION("Reboot", "Rebooted successfully");Erori — No service action with name X.
Consultați și — Scripturi listener, Funcții de parsare, Conversii de tipuri de date.