Funkcije Packet parsera
Funkcije Packet parsera u skripti TapHome — HTTPREQUEST, SENDHTTPREQUEST, SENDDATA, MQTTPUBLISH, FTPDOWNLOAD, FTPUPLOAD, COMPLETESERVICEATTRIBUTE i COMPLETESERVICEACTION — za HTTP, TCP, UDP, MQTT i FTP.
Funkcije Packet parsera komuniciraju s uređajima preko HTTP-a, TCP-a, UDP-a, MQTT-a i FTP-a. Rade samo u skriptama modula ili uređaja Packet parsera čiji protokol odgovara funkciji; drugdje se skripta zaustavlja pogreškom PacketParserFunction - PacketParserContext is null. Sve zahtijevaju Core 2022.2 ili noviji. Postavljanje modula Packet parsera opisano je na stranici Packet parser; dolazne poruke obrađuju se u listener skriptama, a uređaji Modbus imaju vlastite funkcije Modbus.
Protokoli i skripte
Svaki protokol ima vlastite funkcije i tipičnu podjelu posla između skripti.
| Protokol | Funkcije | Tipične skripte |
|---|---|---|
| HTTP | HTTPREQUEST, SENDHTTPREQUEST | Skripta za čitanje modula šalje jedan zahtjev i sprema odgovor u varijablu modula; skripte za čitanje uređaja ga raščlanjuju. |
| TCP, UDP | SENDDATA | Skripte za čitanje ili pisanje šalju zahtjev; odgovor stiže u listener skriptu. |
| MQTT | MQTTPUBLISH | Listener skripta obrađuje dolazne poruke; skripta za pisanje objavljuje naredbe. |
| FTP | FTPDOWNLOAD, FTPUPLOAD | Skripte za čitanje i pisanje prenose datoteke. |
Primjer — jedan HTTP zahtjev za sve uređaje modula
VAR response := SENDHTTPREQUEST("/status", "GET");
StatusJson := response.Content;PARSEJSON(StatusJson, "temperature");Prva skripta je skripta za čitanje modula, druga skripta za čitanje uređaja; StatusJson je varijabla modula.
HTTPREQUEST
HTTPREQUEST stvara vrijednost httprequest čiji se put, metoda, tijelo i zaglavlja mogu promijeniti prije slanja funkcijom SENDHTTPREQUEST.
| |
Napomene — Zadana metoda je GET. Svojstva PATH, METHOD, BODY i HEADERS mogu se čitati i zapisivati; HEADERS je zbirka stringova "Name: value". Funkcija samo stvara vrijednost, pa radi u svakoj skripti.
Primjer
VAR request := HTTPREQUEST("/api/v1/state", "POST", "{\"on\":true}");
request.HEADERS := {"Content-Type: application/json", "Authorization: Bearer " + token};
VAR response := SENDHTTPREQUEST(request);SENDHTTPREQUEST
SENDHTTPREQUEST šalje HTTP zahtjev, čeka odgovor i vraća ga kao vrijednost httpresponse sa svojstvima Content, StatusCode, ReasonPhrase, IsSuccess i Headers.
| |
| Naziv | Tip | Opis |
|---|---|---|
path | string | Put na uređaju postavljenom u modulu, na primjer "/status". |
method | string, neobavezno | GET (zadano), POST, PUT, … |
body | string, neobavezno | Tijelo zahtjeva. |
header1 … | string, neobavezno | Do 27 zaglavlja u obliku "Name: value". |
request | httprequest | Zahtjev stvoren funkcijom HTTPREQUEST. |
Vraća — httpresponse:
| Svojstvo | Značenje |
|---|---|
Content | Tijelo odgovora kao tekst. |
StatusCode | Statusni kod HTTP, na primjer 200. |
ReasonPhrase | Tekst statusa, na primjer OK. |
IsSuccess | TRUE za statusne kodove 200 – 299. |
Headers | Zaglavlja odgovora kao tekst JSON — polje {"Key": …, "Value": [ … ]} — čitljiva funkcijom PARSEJSON. |
Napomene — Samo za modul s protokolom HTTP. Odgovor smije imati najviše 128 kB.
Primjer
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");Pogreške — Response is too long (Nbytes). Maximum supported length is 128KB; PacketParserFunction - unable to use ‘SENDHTTPREQUEST’ with … (modul koristi drugi protokol).
SENDDATA
SENDDATA šalje string ili zbirku bajtova preko TCP-a ili UDP-a i vraća TRUE; odgovor stiže u listener skriptu.
| |
Napomene — String se šalje kao bajtovi iso-8859-1. Zbirka mora biti collection<uint8>. Dolazni podaci predaju se listener skripti u dijelovima od najviše 4096 bajtova.
Primjer
SENDDATA(BYTECOLLECTION("0a dd ef a2"));
SENDDATA("STATUS?\r\n");MQTTPUBLISH
MQTTPUBLISH objavljuje poruku sa zadanom temom na MQTT broker modula i vraća Null.
| |
Napomene — data je string ili collection<uint8>. Pogreška koju javi broker zaustavlja skriptu s njezinim tekstom. Broker se postavlja na stranici MQTT Broker.
Primjer
MQTTPUBLISH("shellies/" + plugTopic + "/relay/0/command", IF(St > 0, "on", "off"));FTPDOWNLOAD
FTPDOWNLOAD preuzima datoteku s FTP poslužitelja modula i vraća njezin sadržaj kao zbirku bajtova (collection<uint8>).
| |
Primjer
VAR data := FTPDOWNLOAD("/export/values.csv");
VAR csv := TOSTRING(data, "utf-8");FTPUPLOAD
FTPUPLOAD zapisuje podatke u datoteku na FTP poslužitelju modula — zamjenjuje datoteku s "write" (zadano) ili dodaje na njezin kraj s "append".
| |
Napomene — data je string ili collection<uint8>. mode mora biti napisan malim slovima.
Primjer
FTPUPLOAD("/path/to/file", "some data", "write");
FTPUPLOAD("/path/to/file", BYTECOLLECTION("a7 ff e2"), "append");Pogreške — FTPUPLOAD - invalid argument, upload mode must be ‘append’ or ‘write’.
COMPLETESERVICEATTRIBUTE
COMPLETESERVICEATTRIBUTE iz listener skripte za TCP ili UDP predaje aplikaciji vrijednost servisnog atributa, nakon što je skripta atributa poslala zahtjev funkcijom SENDDATA.
| |
Napomene — name je naziv servisnog atributa. S argumentom error atribut umjesto vrijednosti prikazuje tekst pogreške. Vraća Null.
Primjer
COMPLETESERVICEATTRIBUTE("Uptime", "2d:21h:43m");
COMPLETESERVICEATTRIBUTE("Status", "", "Device is offline");COMPLETESERVICEACTION
COMPLETESERVICEACTION iz listener skripte za TCP ili UDP javlja aplikaciji rezultat servisne radnje, nakon što je skripta radnje poslala zahtjev funkcijom SENDDATA.
| |
Primjer
COMPLETESERVICEACTION("Reboot", "Rebooted successfully");Pogreške — No service action with name X.
Vidi također — Listener skripte, Funkcije za raščlambu, Pretvorbe tipova podataka.