Skrypty listener
Skrypty listener modułu Packet parser w TapHome — przetwarzanie przychodzących wiadomości TCP, UDP i MQTT przez RECEIVEDMSG (temat, treść, protokół) i starszą kolekcję bajtów RECEIVEDBYTES.
Skrypt listener modułu lub urządzenia Packet parser przetwarza wiadomości przychodzące — pakiety TCP i UDP, w tym odpowiedzi na żądanie wysłane przez SENDDATA, oraz wiadomości MQTT. Wiadomość znajduje się w stałej RECEIVEDMSG lub w starszej RECEIVEDBYTES. Żądania i polecenia wysyłają funkcje Packet parser.
Skrypt listener
Skrypt listener uruchamia się dla każdej wiadomości, którą moduł odbierze — pakietu TCP lub UDP albo wiadomości MQTT, której temat pasuje do filtra tematów urządzenia lub modułu będącego właścicielem skryptu listener — i odczytuje ją z RECEIVEDMSG.
Uwagi
- Broker MQTT może dostarczać setki wiadomości na minutę. Ustaw filtr tematów tak wąsko, jak to możliwe, najpierw sprawdź temat, a wiadomości, których nie potrzebujesz, zakończ przez
RETURN(0). - Puste wiadomości nie uruchamiają skryptu.
- Więcej o filtrach tematów w Skrypt listener.
Przykład — listener MQTT gniazdka Shelly
IF INDEXOF(RECEIVEDMSG.TOPIC, "shellies/" + plugTopic) <> 0
RETURN(0);
END
IF RECEIVEDMSG.TOPIC = "shellies/" + plugTopic + "/relay/0"
VAR value := TOSTRING(RECEIVEDMSG.PAYLOAD);
IF value = "on"
St := 1;
ELSEIF value = "off"
St := 0;
END
ELSEIF RECEIVEDMSG.TOPIC = "shellies/" + plugTopic + "/temperature"
internalTemp := TODOUBLE(TOSTRING(RECEIVEDMSG.PAYLOAD));
ENDRECEIVEDMSG
RECEIVEDMSG przechowuje wiadomość, która uruchomiła skrypt listener, jako wartość receivedmessage z treścią oraz, dla MQTT, tematem i metadanymi.
| Właściwość | Typ | Znaczenie |
|---|---|---|
PROTOCOL | tekst | "tcp", "udp" lub "mqtt". |
PAYLOAD | blob | Surowa treść. Odczytasz ją jako tekst przez TOSTRING(RECEIVEDMSG.PAYLOAD), pojedynczy bajt przez GETAT. |
LENGTH | liczba | Długość treści w bajtach. |
TOPIC | tekst | Temat MQTT. |
CONTENTTYPE, CLIENTID | tekst | Metadane MQTT 5. |
PAYLOADFORMAT | enum | Wskaźnik formatu treści MQTT 5. |
EXPIRY | liczba | Czas wygaśnięcia wiadomości MQTT 5 w sekundach. |
DUP | bool | Flaga duplikatu MQTT. |
Uwagi — Dla TCP i UDP dane niosą tylko PROTOCOL, PAYLOAD i LENGTH. Treść jest blobem, którego UNPACKVALUE nie akceptuje — do tego użyj RECEIVEDBYTES.
Dostępność — Core 2024.1 lub nowszy.
RECEIVEDBYTES
RECEIVEDBYTES to starsza forma odebranej wiadomości: kolekcja bajtów (collection<uint8>), która nadal działa i którą UNPACKVALUE i GETAT mogą odczytywać bezpośrednio.
Uwagi
- Dla TCP i UDP jest to surowa treść.
- Dla MQTT jest to tekst JSON z
Topic,Payload,PayloadRaw,Dup,ContentType,PayloadFormatIndicatoriMessageExpiryInterval, a treść powyżej 64 kB zatrzymuje skrypt. WybierajRECEIVEDMSG, który jest szybszy.
Przykład — odpowiedź TCP na żądanie wysłane przez SENDDATA
VAR cmd := GETAT(RECEIVEDBYTES, 0);
IF cmd = 0
Rc := (GETAT(RECEIVEDBYTES, 1) & 0x01) > 0;
ENDZobacz też — Dane binarne, Funkcje parsowania.