TapHome

Packet parser függvények

TapHome szkript Packet parser függvények — HTTPREQUEST, SENDHTTPREQUEST, SENDDATA, MQTTPUBLISH, FTPDOWNLOAD, FTPUPLOAD, COMPLETESERVICEATTRIBUTE és COMPLETESERVICEACTION — HTTP, TCP, UDP, MQTT és FTP kommunikációhoz.

A Packet parser függvények HTTP-n, TCP-n, UDP-n, MQTT-n és FTP-n kommunikálnak az eszközökkel. Csak olyan Packet parser modul vagy eszköz szkriptjeiben működnek, amelynek protokollja megfelel a függvénynek; máshol a szkript a PacketParserFunction - PacketParserContext is null hibával leáll. Mindegyik Core 2022.2 vagy újabb verziót igényel. A Packet parser modul beállítását a Packet parser oldal írja le; a bejövő üzeneteket a listener szkriptek kezelik, a Modbus eszközöknek pedig saját Modbus függvényeik vannak.

Protokollok és szkriptek

Minden protokollnak saját függvényei vannak, és jellemző módon oszlik meg a munka a szkriptek között.

ProtokollFüggvényekJellemző szkriptek
HTTPHTTPREQUEST, SENDHTTPREQUESTA modul olvasó szkriptje elküld egy kérést, és a választ egy modulváltozóban tárolja; az eszközök olvasó szkriptjei elemzik.
TCP, UDPSENDDATAAz olvasó vagy író szkriptek kérést küldenek; a válasz a listener szkriptbe érkezik.
MQTTMQTTPUBLISHA listener szkript feldolgozza a bejövő üzeneteket; az író szkript közzéteszi a parancsokat.
FTPFTPDOWNLOAD, FTPUPLOADAz olvasó és író szkriptek fájlokat visznek át.

Példa — egyetlen HTTP-kérés a modul összes eszközéhez

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

Az első szkript a modul olvasó szkriptje, a második egy eszköz olvasó szkriptje; a StatusJson modulváltozó.

HTTPREQUEST

A HTTPREQUEST egy httprequest értéket hoz létre, amelynek útvonala, metódusa, törzse és fejlécei módosíthatók, mielőtt a SENDHTTPREQUEST elküldi.

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

Megjegyzések — Az alapértelmezett metódus a GET. A PATH, METHOD, BODY és HEADERS tulajdonságok olvashatók és írhatók; a HEADERS "Name: value" alakú szövegek gyűjteménye. A függvény csak egy értéket hoz létre, ezért minden szkriptben működik.

Példa

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

SENDHTTPREQUEST

A SENDHTTPREQUEST elküld egy HTTP-kérést, megvárja a választ, és httpresponse értékként adja vissza a Content, StatusCode, ReasonPhrase, IsSuccess és Headers tulajdonságokkal.

1
2
SENDHTTPREQUEST(path [, method [, body [, header1, header2, …]]])
SENDHTTPREQUEST(request)
NévTípusLeírás
pathszövegÚtvonal a modulban beállított eszközön, például "/status".
methodszöveg, opcionálisGET (alapértelmezett), POST, PUT, …
bodyszöveg, opcionálisA kérés törzse.
header1 …szöveg, opcionálisLegfeljebb 27 fejléc "Name: value" alakban.
requesthttprequestA HTTPREQUEST függvénnyel összeállított kérés.

Visszatérési érték — httpresponse:

TulajdonságJelentés
ContentA válasz törzse szövegként.
StatusCodeHTTP állapotkód, például 200.
ReasonPhraseAz állapot szövege, például OK.
IsSuccessTRUE a 200 – 299 állapotkódoknál.
HeadersA válasz fejlécei JSON szövegként — {"Key": …, "Value": [ … ]} elemek tömbje —, amely a PARSEJSON függvénnyel olvasható.

Megjegyzések — Csak HTTP protokollt használó modulhoz. A válasz legfeljebb 128 kB lehet.

Példa

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");

Hibák — Response is too long (Nbytes). Maximum supported length is 128KB; PacketParserFunction - unable to use ‘SENDHTTPREQUEST’ with … (a modul más protokollt használ).

SENDDATA

A SENDDATA szöveget vagy bájtgyűjteményt küld TCP-n vagy UDP-n, és TRUE értéket ad vissza; a válasz a listener szkriptbe érkezik.

1
SENDDATA(data)

Megjegyzések — A szöveg iso-8859-1 bájtokként kerül elküldésre. A gyűjteménynek collection<uint8> típusúnak kell lennie. A bejövő adatok legfeljebb 4096 bájtos darabokban jutnak el a listener szkripthez.

Példa

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

MQTTPUBLISH

Az MQTTPUBLISH a megadott topickal közzétesz egy üzenetet a modul MQTT brókerén, és Null értéket ad vissza.

1
MQTTPUBLISH(topic, data)

Megjegyzések — A data szöveg vagy collection<uint8>. A bróker által jelentett hiba a hiba szövegével leállítja a szkriptet. A brókert az MQTT Broker oldal szerint állíthatod be.

Példa

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

FTPDOWNLOAD

Az FTPDOWNLOAD letölt egy fájlt a modul FTP-kiszolgálójáról, és a tartalmát bájtgyűjteményként (collection<uint8>) adja vissza.

1
FTPDOWNLOAD(path)

Példa

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

FTPUPLOAD

Az FTPUPLOAD adatokat ír egy fájlba a modul FTP-kiszolgálóján — a "write" móddal (alapértelmezett) lecseréli a fájlt, az "append" móddal a végéhez fűzi.

1
FTPUPLOAD(path, data [, mode])

Megjegyzések — A data szöveg vagy collection<uint8>. A mode értékét kisbetűvel kell írni.

Példa

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

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

COMPLETESERVICEATTRIBUTE

A COMPLETESERVICEATTRIBUTE egy TCP vagy UDP listener szkriptből juttatja el egy szolgáltatási attribútum értékét az alkalmazáshoz, miután az attribútum szkriptje a SENDDATA függvénnyel elküldte a kérést.

1
COMPLETESERVICEATTRIBUTE(name, value [, error])

Megjegyzések — A name a szolgáltatási attribútum neve. Az error megadásakor az attribútum érték helyett a hiba szövegét mutatja. Null értéket ad vissza.

Példa

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

COMPLETESERVICEACTION

A COMPLETESERVICEACTION egy TCP vagy UDP listener szkriptből jelenti az alkalmazásnak egy szolgáltatási művelet eredményét, miután a művelet szkriptje a SENDDATA függvénnyel elküldte a kérést.

1
COMPLETESERVICEACTION(name, result)

Példa

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

Hibák — No service action with name X.

Lásd még — Listener szkriptek, Elemző függvények, Adattípus-konverziók.