Listener skripty
Listener skripty modulu Packet parser v TapHome — zpracování příchozích zpráv TCP, UDP a MQTT přes RECEIVEDMSG (téma, data zprávy, protokol) a starší kolekci bajtů RECEIVEDBYTES.
Listener skript modulu nebo zařízení Packet parser zpracovává příchozí zprávy — pakety TCP a UDP, včetně odpovědí na požadavek odeslaný přes SENDDATA, a zprávy MQTT. Zpráva je v konstantě RECEIVEDMSG nebo ve starší RECEIVEDBYTES. Požadavky a příkazy se odesílají funkcemi Packet parser.
Listener skript
Listener skript se spustí pro každou zprávu, kterou modul přijme — paket TCP nebo UDP nebo zprávu MQTT, jejíž téma odpovídá filtru tématu zařízení nebo modulu, kterému listener skript patří — a čte ji z RECEIVEDMSG.
Poznámky
- Broker MQTT může doručit stovky zpráv za minutu. Nastavte filtr tématu co nejúžeji, nejprve zkontrolujte téma a zprávy, které nepotřebujete, ukončete přes
RETURN(0). - Prázdné zprávy skript nespustí.
- Více o filtrech témat na stránce Listener skript.
Příklad — listener MQTT 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 zprávu, která listener skript spustila, jako hodnotu receivedmessage s daty zprávy a u MQTT také s tématem a metadaty.
| Vlastnost | Typ | Význam |
|---|---|---|
PROTOCOL | řetězec | "tcp", "udp" nebo "mqtt". |
PAYLOAD | blob | Surová data zprávy. Jako text je čtěte přes TOSTRING(RECEIVEDMSG.PAYLOAD), jeden bajt přes GETAT. |
LENGTH | číslo | Délka dat zprávy v bajtech. |
TOPIC | řetězec | Téma MQTT. |
CONTENTTYPE, CLIENTID | řetězec | Metadata MQTT 5. |
PAYLOADFORMAT | enum | Indikátor formátu dat zprávy MQTT 5. |
EXPIRY | číslo | Interval vypršení zprávy MQTT 5 v sekundách. |
DUP | bool | Příznak duplikátu MQTT. |
Poznámky — U TCP a UDP nesou data jen PROTOCOL, PAYLOAD a LENGTH. Data zprávy jsou blob, který UNPACKVALUE nepřijímá — k tomu použijte RECEIVEDBYTES.
Dostupnost — Core 2024.1 nebo novější.
RECEIVEDBYTES
RECEIVEDBYTES je starší podoba přijaté zprávy: kolekce bajtů (collection<uint8>), která stále funguje a kterou UNPACKVALUE a GETAT čtou přímo.
Poznámky
- U TCP a UDP jsou to surová data zprávy.
- U MQTT je to text JSON s
Topic,Payload,PayloadRaw,Dup,ContentType,PayloadFormatIndicatoraMessageExpiryIntervala data zprávy nad 64 kB zastaví skript. Dejte přednostRECEIVEDMSG, který je rychlejší.
Příklad — odpověď TCP na požadavek odeslaný přes SENDDATA
VAR cmd := GETAT(RECEIVEDBYTES, 0);
IF cmd = 0
Rc := (GETAT(RECEIVEDBYTES, 1) & 0x01) > 0;
ENDViz také — Binární data, Funkce pro parsování.