TapHome

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.

ProtokolFunkcijeTipične skripte
HTTPHTTPREQUEST, SENDHTTPREQUESTSkripta za čitanje modula šalje jedan zahtjev i sprema odgovor u varijablu modula; skripte za čitanje uređaja ga raščlanjuju.
TCP, UDPSENDDATASkripte za čitanje ili pisanje šalju zahtjev; odgovor stiže u listener skriptu.
MQTTMQTTPUBLISHListener skripta obrađuje dolazne poruke; skripta za pisanje objavljuje naredbe.
FTPFTPDOWNLOAD, FTPUPLOADSkripte 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.

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

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.

1
2
SENDHTTPREQUEST(path [, method [, body [, header1, header2, …]]])
SENDHTTPREQUEST(request)
NazivTipOpis
pathstringPut na uređaju postavljenom u modulu, na primjer "/status".
methodstring, neobaveznoGET (zadano), POST, PUT, …
bodystring, neobaveznoTijelo zahtjeva.
header1 …string, neobaveznoDo 27 zaglavlja u obliku "Name: value".
requesthttprequestZahtjev stvoren funkcijom HTTPREQUEST.

Vraća — httpresponse:

SvojstvoZnačenje
ContentTijelo odgovora kao tekst.
StatusCodeStatusni kod HTTP, na primjer 200.
ReasonPhraseTekst statusa, na primjer OK.
IsSuccessTRUE za statusne kodove 200 – 299.
HeadersZaglavlja 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 + ")");
END
SENDHTTPREQUEST("/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.

1
SENDDATA(data)

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.

1
MQTTPUBLISH(topic, data)

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>).

1
FTPDOWNLOAD(path)

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".

1
FTPUPLOAD(path, data [, mode])

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.

1
COMPLETESERVICEATTRIBUTE(name, value [, error])

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.

1
COMPLETESERVICEACTION(name, result)

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.