Listener skripty
Listener skripty Packet parsera TapHome — spracovanie prichádzajúcich TCP, UDP a MQTT správ cez RECEIVEDMSG (topic, payload, protokol) a staršiu bajtovú kolekciu RECEIVEDBYTES.
Listener skript modulu alebo zariadenia Packet parsera spracúva prichádzajúce správy — TCP a UDP pakety vrátane odpovedí na požiadavku odoslanú funkciou SENDDATA a MQTT správy. Správa je v konštante RECEIVEDMSG alebo v staršej RECEIVEDBYTES. Požiadavky a príkazy sa posielajú funkciami Packet parsera.
Listener skript
Listener skript sa spustí pre každú správu, ktorú modul prijme — TCP alebo UDP paket alebo MQTT správu, ktorej topic vyhovuje filtru topicov zariadenia alebo modulu, ktorému listener skript patrí — a číta ju z RECEIVEDMSG.
Poznámky
- MQTT broker môže doručiť stovky správ za minútu. Filter topicov nastavte čo najužší, najprv skontrolujte topic a pri správach, ktoré nepotrebujete, skončite príkazom
RETURN(0). - Prázdne správy skript nespustia.
- Viac o filtroch topicov v časti Listener skript.
Príklad — MQTT listener zásuvky 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 obsahuje správu, ktorá spustila listener skript, ako hodnotu receivedmessage s payloadom a pri MQTT aj s topicom a metadátami.
| Vlastnosť | Typ | Význam |
|---|---|---|
PROTOCOL | reťazec | "tcp", "udp" alebo "mqtt". |
PAYLOAD | blob | Surový payload. Ako text ho prečítate cez TOSTRING(RECEIVEDMSG.PAYLOAD), jednotlivý bajt cez GETAT. |
LENGTH | číslo | Dĺžka payloadu v bajtoch. |
TOPIC | reťazec | MQTT topic. |
CONTENTTYPE, CLIENTID | reťazec | Metadáta MQTT 5. |
PAYLOADFORMAT | enum | Indikátor formátu payloadu MQTT 5. |
EXPIRY | číslo | Interval expirácie správy MQTT 5 v sekundách. |
DUP | bool | Príznak duplikátu MQTT. |
Poznámky — Pri TCP a UDP nesú dáta iba PROTOCOL, PAYLOAD a LENGTH. Payload je blob, ktorý UNPACKVALUE neprijíma — na to použite RECEIVEDBYTES.
Dostupnosť — Core 2024.1 alebo novší.
RECEIVEDBYTES
RECEIVEDBYTES je staršia podoba prijatej správy: bajtová kolekcia (collection<uint8>), ktorá stále funguje a ktorú UNPACKVALUE aj GETAT dokážu čítať priamo.
Poznámky
- Pri TCP a UDP je to surový payload.
- Pri MQTT je to text JSON s položkami
Topic,Payload,PayloadRaw,Dup,ContentType,PayloadFormatIndicatoraMessageExpiryIntervala payload nad 64 kB zastaví skript. UprednostniteRECEIVEDMSG, ktorý je rýchlejší.
Príklad — TCP odpoveď na požiadavku odoslanú funkciou SENDDATA
VAR cmd := GETAT(RECEIVEDBYTES, 0);
IF cmd = 0
Rc := (GETAT(RECEIVEDBYTES, 1) & 0x01) > 0;
ENDPozrite aj — Binárne dáta, Parsovacie funkcie.