Funkcje Packet parser
Funkcje Packet parser w skryptach TapHome — HTTPREQUEST, SENDHTTPREQUEST, SENDDATA, MQTTPUBLISH, FTPDOWNLOAD, FTPUPLOAD, COMPLETESERVICEATTRIBUTE i COMPLETESERVICEACTION — dla HTTP, TCP, UDP, MQTT i FTP.
Funkcje Packet parser komunikują się z urządzeniami przez HTTP, TCP, UDP, MQTT i FTP. Działają tylko w skryptach modułu lub urządzenia Packet parser, którego protokół pasuje do funkcji; gdzie indziej skrypt zatrzymuje się błędem PacketParserFunction - PacketParserContext is null. Wszystkie wymagają Core 2022.2 lub nowszego. Konfigurację modułu Packet parser opisuje strona Packet parser; wiadomości przychodzące obsługują skrypty listener, a urządzenia Modbus mają własne funkcje Modbus.
Protokoły i skrypty
Każdy protokół ma własne funkcje i typowy podział pracy między skryptami.
| Protokół | Funkcje | Typowe skrypty |
|---|---|---|
| HTTP | HTTPREQUEST, SENDHTTPREQUEST | Skrypt odczytu modułu wysyła jedno żądanie i zapisuje odpowiedź w zmiennej modułu; skrypty odczytu urządzeń ją parsują. |
| TCP, UDP | SENDDATA | Skrypty odczytu lub zapisu wysyłają żądanie; odpowiedź przychodzi w skrypcie listener. |
| MQTT | MQTTPUBLISH | Skrypt listener przetwarza wiadomości przychodzące; skrypt zapisu publikuje polecenia. |
| FTP | FTPDOWNLOAD, FTPUPLOAD | Skrypty odczytu i zapisu przesyłają pliki. |
Przykład — jedno żądanie HTTP dla wszystkich urządzeń modułu
VAR response := SENDHTTPREQUEST("/status", "GET");
StatusJson := response.Content;PARSEJSON(StatusJson, "temperature");Pierwszy skrypt to skrypt odczytu modułu, drugi to skrypt odczytu urządzenia; StatusJson jest zmienną modułu.
HTTPREQUEST
HTTPREQUEST tworzy wartość httprequest, której ścieżkę, metodę, treść i nagłówki można zmienić przed wysłaniem przez SENDHTTPREQUEST.
| |
Uwagi — Domyślna metoda to GET. Właściwości PATH, METHOD, BODY i HEADERS można odczytywać i zapisywać; HEADERS to kolekcja tekstów "Name: value". Funkcja tylko tworzy wartość, więc działa w każdym skrypcie.
Przykład
VAR request := HTTPREQUEST("/api/v1/state", "POST", "{\"on\":true}");
request.HEADERS := {"Content-Type: application/json", "Authorization: Bearer " + token};
VAR response := SENDHTTPREQUEST(request);SENDHTTPREQUEST
SENDHTTPREQUEST wysyła żądanie HTTP, czeka na odpowiedź i zwraca ją jako wartość httpresponse z właściwościami Content, StatusCode, ReasonPhrase, IsSuccess i Headers.
| |
| Nazwa | Typ | Opis |
|---|---|---|
path | tekst | Ścieżka na urządzeniu ustawionym w module, na przykład "/status". |
method | tekst, opcjonalny | GET (domyślnie), POST, PUT, … |
body | tekst, opcjonalny | Treść żądania. |
header1 … | tekst, opcjonalny | Do 27 nagłówków w postaci "Name: value". |
request | httprequest | Żądanie zbudowane przez HTTPREQUEST. |
Zwraca — httpresponse:
| Właściwość | Znaczenie |
|---|---|
Content | Treść odpowiedzi jako tekst. |
StatusCode | Kod statusu HTTP, na przykład 200. |
ReasonPhrase | Tekst statusu, na przykład OK. |
IsSuccess | TRUE dla kodów statusu 200 – 299. |
Headers | Nagłówki odpowiedzi jako tekst JSON — tablica {"Key": …, "Value": [ … ]} — czytelne przez PARSEJSON. |
Uwagi — Tylko dla modułu z protokołem HTTP. Odpowiedź może mieć najwyżej 128 kB.
Przykład
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");Błędy — Response is too long (Nbytes). Maximum supported length is 128KB; PacketParserFunction - unable to use ‘SENDHTTPREQUEST’ with … (moduł używa innego protokołu).
SENDDATA
SENDDATA wysyła tekst lub kolekcję bajtów przez TCP lub UDP i zwraca TRUE; odpowiedź przychodzi w skrypcie listener.
| |
Uwagi — Tekst jest wysyłany jako bajty iso-8859-1. Kolekcja musi być collection<uint8>. Dane przychodzące są dostarczane do skryptu listener w porcjach po najwyżej 4096 bajtów.
Przykład
SENDDATA(BYTECOLLECTION("0a dd ef a2"));
SENDDATA("STATUS?\r\n");MQTTPUBLISH
MQTTPUBLISH publikuje wiadomość z podanym tematem do brokera MQTT modułu i zwraca Null.
| |
Uwagi — data to tekst lub collection<uint8>. Błąd zgłoszony przez broker zatrzymuje skrypt z jego tekstem. Broker konfiguruje się w MQTT Broker.
Przykład
MQTTPUBLISH("shellies/" + plugTopic + "/relay/0/command", IF(St > 0, "on", "off"));FTPDOWNLOAD
FTPDOWNLOAD pobiera plik z serwera FTP modułu i zwraca jego zawartość jako kolekcję bajtów (collection<uint8>).
| |
Przykład
VAR data := FTPDOWNLOAD("/export/values.csv");
VAR csv := TOSTRING(data, "utf-8");FTPUPLOAD
FTPUPLOAD zapisuje dane do pliku na serwerze FTP modułu — zastępując plik przy "write" (domyślnie) lub dopisując na jego końcu przy "append".
| |
Uwagi — data to tekst lub collection<uint8>. mode musi być pisany małymi literami.
Przykład
FTPUPLOAD("/path/to/file", "some data", "write");
FTPUPLOAD("/path/to/file", BYTECOLLECTION("a7 ff e2"), "append");Błędy — FTPUPLOAD - invalid argument, upload mode must be ‘append’ or ‘write’.
COMPLETESERVICEATTRIBUTE
COMPLETESERVICEATTRIBUTE dostarcza wartość atrybutu serwisowego do aplikacji ze skryptu listener TCP lub UDP, po tym jak skrypt atrybutu wysłał żądanie przez SENDDATA.
| |
Uwagi — name to nazwa atrybutu serwisowego. Z error atrybut zamiast wartości wyświetla tekst błędu. Zwraca Null.
Przykład
COMPLETESERVICEATTRIBUTE("Uptime", "2d:21h:43m");
COMPLETESERVICEATTRIBUTE("Status", "", "Device is offline");COMPLETESERVICEACTION
COMPLETESERVICEACTION zgłasza wynik akcji serwisowej do aplikacji ze skryptu listener TCP lub UDP, po tym jak skrypt akcji wysłał żądanie przez SENDDATA.
| |
Przykład
COMPLETESERVICEACTION("Reboot", "Rebooted successfully");Błędy — No service action with name X.
Zobacz też — Skrypty listener, Funkcje parsowania, Konwersje typów danych.