TapHome

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));
END

RECEIVEDMSG

RECEIVEDMSG obsahuje správu, ktorá spustila listener skript, ako hodnotu receivedmessage s payloadom a pri MQTT aj s topicom a metadátami.

VlastnosťTypVýznam
PROTOCOLreťazec"tcp", "udp" alebo "mqtt".
PAYLOADblobSurový payload. Ako text ho prečítate cez TOSTRING(RECEIVEDMSG.PAYLOAD), jednotlivý bajt cez GETAT.
LENGTHčísloDĺžka payloadu v bajtoch.
TOPICreťazecMQTT topic.
CONTENTTYPE, CLIENTIDreťazecMetadáta MQTT 5.
PAYLOADFORMATenumIndikátor formátu payloadu MQTT 5.
EXPIRYčísloInterval expirácie správy MQTT 5 v sekundách.
DUPboolPrí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, PayloadFormatIndicator a MessageExpiryInterval a payload nad 64 kB zastaví skript. Uprednostnite RECEIVEDMSG, 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;
END

Pozrite aj — Binárne dáta, Parsovacie funkcie.