TapHome

Script listener

Script listener del Packet parser TapHome — elaborano i messaggi TCP, UDP e MQTT in arrivo con RECEIVEDMSG (topic, payload, protocollo) e con la collezione di byte più vecchia RECEIVEDBYTES.

Uno script listener di un modulo o dispositivo Packet parser elabora i messaggi in arrivo — pacchetti TCP e UDP, comprese le risposte a una richiesta inviata con SENDDATA, e messaggi MQTT. Il messaggio si trova nella costante RECEIVEDMSG, oppure nella più vecchia RECEIVEDBYTES. Richieste e comandi si inviano con le funzioni Packet parser.

Script listener

Lo script listener viene eseguito per ogni messaggio ricevuto dal modulo — un pacchetto TCP o UDP, oppure un messaggio MQTT il cui topic corrisponde al filtro dei topic del dispositivo o del modulo a cui appartiene lo script listener — e lo legge da RECEIVEDMSG.

Note

  • Un broker MQTT può consegnare centinaia di messaggi al minuto. Imposta il filtro dei topic il più ristretto possibile, controlla prima il topic e termina con RETURN(0) per i messaggi che non ti servono.
  • I messaggi vuoti non avviano lo script.
  • Maggiori informazioni sui filtri dei topic in Script listener.

Esempio — listener MQTT di una presa 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 contiene il messaggio che ha avviato lo script listener, come valore receivedmessage con il payload e, per MQTT, il topic e i metadati.

ProprietàTipoSignificato
PROTOCOLstring"tcp", "udp" o "mqtt".
PAYLOADblobPayload grezzo. Leggilo come testo con TOSTRING(RECEIVEDMSG.PAYLOAD), un singolo byte con GETAT.
LENGTHnumeroLunghezza del payload in byte.
TOPICstringTopic MQTT.
CONTENTTYPE, CLIENTIDstringMetadati MQTT 5.
PAYLOADFORMATenumIndicatore del formato del payload MQTT 5.
EXPIRYnumeroIntervallo di scadenza del messaggio MQTT 5 in secondi.
DUPboolFlag di duplicato MQTT.

Note — Per TCP e UDP contengono dati solo PROTOCOL, PAYLOAD e LENGTH. Il payload è un blob, che UNPACKVALUE non accetta — per questo usa RECEIVEDBYTES.

Disponibile — Core 2024.1 o più recente.

RECEIVEDBYTES

RECEIVEDBYTES è la forma più vecchia del messaggio ricevuto: una collezione di byte (collection<uint8>) che funziona ancora e che UNPACKVALUE e GETAT possono leggere direttamente.

Note

  • Per TCP e UDP è il payload grezzo.
  • Per MQTT è un testo JSON con Topic, Payload, PayloadRaw, Dup, ContentType, PayloadFormatIndicator e MessageExpiryInterval, e i payload oltre 64 kB interrompono lo script. Preferisci RECEIVEDMSG, che è più veloce.

Esempio — risposta TCP a una richiesta inviata con SENDDATA

VAR cmd := GETAT(RECEIVEDBYTES, 0);
IF cmd = 0
    Rc := (GETAT(RECEIVEDBYTES, 1) & 0x01) > 0;
END

Vedi anche — Dati binari, Funzioni di parsing.