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));
ENDRECEIVEDMSG
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à | Tipo | Significato |
|---|---|---|
PROTOCOL | string | "tcp", "udp" o "mqtt". |
PAYLOAD | blob | Payload grezzo. Leggilo come testo con TOSTRING(RECEIVEDMSG.PAYLOAD), un singolo byte con GETAT. |
LENGTH | numero | Lunghezza del payload in byte. |
TOPIC | string | Topic MQTT. |
CONTENTTYPE, CLIENTID | string | Metadati MQTT 5. |
PAYLOADFORMAT | enum | Indicatore del formato del payload MQTT 5. |
EXPIRY | numero | Intervallo di scadenza del messaggio MQTT 5 in secondi. |
DUP | bool | Flag 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,PayloadFormatIndicatoreMessageExpiryInterval, e i payload oltre 64 kB interrompono lo script. PreferisciRECEIVEDMSG, 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;
ENDVedi anche — Dati binari, Funzioni di parsing.