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.
| Protokoll | Függvények | Jellemző szkriptek |
|---|---|---|
| HTTP | HTTPREQUEST, SENDHTTPREQUEST | A 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, UDP | SENDDATA | Az olvasó vagy író szkriptek kérést küldenek; a válasz a listener szkriptbe érkezik. |
| MQTT | MQTTPUBLISH | A listener szkript feldolgozza a bejövő üzeneteket; az író szkript közzéteszi a parancsokat. |
| FTP | FTPDOWNLOAD, FTPUPLOAD | Az 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.
| |
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.
| |
| Név | Típus | Leírás |
|---|---|---|
path | szöveg | Útvonal a modulban beállított eszközön, például "/status". |
method | szöveg, opcionális | GET (alapértelmezett), POST, PUT, … |
body | szöveg, opcionális | A kérés törzse. |
header1 … | szöveg, opcionális | Legfeljebb 27 fejléc "Name: value" alakban. |
request | httprequest | A HTTPREQUEST függvénnyel összeállított kérés. |
Visszatérési érték — httpresponse:
| Tulajdonság | Jelentés |
|---|---|
Content | A válasz törzse szövegként. |
StatusCode | HTTP állapotkód, például 200. |
ReasonPhrase | Az állapot szövege, például OK. |
IsSuccess | TRUE a 200 – 299 állapotkódoknál. |
Headers | A 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 + ")");
ENDSENDHTTPREQUEST("/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.
| |
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.
| |
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.
| |
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.
| |
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.
| |
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.
| |
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.