TapHome

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

RECEIVEDMSG

RECEIVEDMSG obsahuje zprávu, která listener skript spustila, jako hodnotu receivedmessage s daty zprávy a u MQTT také s tématem a metadaty.

VlastnostTypVýznam
PROTOCOLřetězec"tcp", "udp" nebo "mqtt".
PAYLOADblobSurová data zprávy. Jako text je čtěte přes TOSTRING(RECEIVEDMSG.PAYLOAD), jeden bajt přes GETAT.
LENGTHčísloDélka dat zprávy v bajtech.
TOPICřetězecTéma MQTT.
CONTENTTYPE, CLIENTIDřetězecMetadata MQTT 5.
PAYLOADFORMATenumIndikátor formátu dat zprávy MQTT 5.
EXPIRYčísloInterval vypršení zprávy MQTT 5 v sekundách.
DUPboolPří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, PayloadFormatIndicator a MessageExpiryInterval a data zprávy nad 64 kB zastaví skript. Dejte přednost RECEIVEDMSG, 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;
END

Viz také — Binární data, Funkce pro parsování.