TapHome

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ółFunkcjeTypowe skrypty
HTTPHTTPREQUEST, SENDHTTPREQUESTSkrypt odczytu modułu wysyła jedno żądanie i zapisuje odpowiedź w zmiennej modułu; skrypty odczytu urządzeń ją parsują.
TCP, UDPSENDDATASkrypty odczytu lub zapisu wysyłają żądanie; odpowiedź przychodzi w skrypcie listener.
MQTTMQTTPUBLISHSkrypt listener przetwarza wiadomości przychodzące; skrypt zapisu publikuje polecenia.
FTPFTPDOWNLOAD, FTPUPLOADSkrypty 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.

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

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.

1
2
SENDHTTPREQUEST(path [, method [, body [, header1, header2, …]]])
SENDHTTPREQUEST(request)
NazwaTypOpis
pathtekstŚcieżka na urządzeniu ustawionym w module, na przykład "/status".
methodtekst, opcjonalnyGET (domyślnie), POST, PUT, …
bodytekst, opcjonalnyTreść żądania.
header1 …tekst, opcjonalnyDo 27 nagłówków w postaci "Name: value".
requesthttprequestŻądanie zbudowane przez HTTPREQUEST.

Zwraca — httpresponse:

WłaściwośćZnaczenie
ContentTreść odpowiedzi jako tekst.
StatusCodeKod statusu HTTP, na przykład 200.
ReasonPhraseTekst statusu, na przykład OK.
IsSuccessTRUE dla kodów statusu 200 – 299.
HeadersNagłó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 + ")");
END
SENDHTTPREQUEST("/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.

1
SENDDATA(data)

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.

1
MQTTPUBLISH(topic, data)

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

1
FTPDOWNLOAD(path)

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

1
FTPUPLOAD(path, data [, mode])

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.

1
COMPLETESERVICEATTRIBUTE(name, value [, error])

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.

1
COMPLETESERVICEACTION(name, result)

Przykład

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

Błędy — No service action with name X.

Zobacz też — Skrypty listener, Funkcje parsowania, Konwersje typów danych.