Scripturi listener
Scripturile listener Packet parser TapHome — prelucrarea mesajelor TCP, UDP și MQTT primite cu RECEIVEDMSG (topic, payload, protocol) și cu colecția de octeți mai veche RECEIVEDBYTES.
Scriptul listener al unui modul sau dispozitiv Packet parser prelucrează mesajele primite — pachetele TCP și UDP, inclusiv răspunsurile la o cerere trimisă cu SENDDATA, și mesajele MQTT. Mesajul se află în constanta RECEIVEDMSG sau în mai vechea RECEIVEDBYTES. Cererile și comenzile se trimit cu funcțiile Packet parser.
Script listener
Scriptul listener rulează pentru fiecare mesaj primit de modul — un pachet TCP sau UDP sau un mesaj MQTT al cărui topic se potrivește cu filtrul de topic al dispozitivului sau modulului care deține scriptul listener — și îl citește din RECEIVEDMSG.
Observații
- Un broker MQTT poate livra sute de mesaje pe minut. Setați filtrul de topic cât mai îngust, verificați mai întâi topicul și încheiați cu
RETURN(0)pentru mesajele de care nu aveți nevoie. - Mesajele goale nu pornesc scriptul.
- Mai multe despre filtrele de topic în Script listener.
Exemplu — script listener MQTT al unei prize 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 conține mesajul care a pornit scriptul listener, ca valoare receivedmessage cu payload-ul și, la MQTT, topicul și metadatele.
| Proprietate | Tip | Semnificație |
|---|---|---|
PROTOCOL | șir de caractere | "tcp", "udp" sau "mqtt". |
PAYLOAD | blob | Payload-ul brut. Se citește ca text cu TOSTRING(RECEIVEDMSG.PAYLOAD), un singur octet cu GETAT. |
LENGTH | număr | Lungimea payload-ului în octeți. |
TOPIC | șir de caractere | Topicul MQTT. |
CONTENTTYPE, CLIENTID | șir de caractere | Metadate MQTT 5. |
PAYLOADFORMAT | enumerare | Indicatorul de format al payload-ului MQTT 5. |
EXPIRY | număr | Intervalul de expirare a mesajului MQTT 5 în secunde. |
DUP | bool | Indicatorul de duplicat MQTT. |
Observații — La TCP și UDP doar PROTOCOL, PAYLOAD și LENGTH conțin date. Payload-ul este un blob, pe care UNPACKVALUE nu îl acceptă — pentru aceasta folosiți RECEIVEDBYTES.
Disponibilitate — Core 2024.1 sau mai nou.
RECEIVEDBYTES
RECEIVEDBYTES este forma mai veche a mesajului primit: o colecție de octeți (collection<uint8>) care funcționează în continuare și pe care UNPACKVALUE și GETAT o pot citi direct.
Observații
- La TCP și UDP este payload-ul brut.
- La MQTT este un text JSON cu
Topic,Payload,PayloadRaw,Dup,ContentType,PayloadFormatIndicatorșiMessageExpiryInterval, iar payload-urile de peste 64 kB opresc scriptul. PreferațiRECEIVEDMSG, care este mai rapid.
Exemplu — răspuns TCP la o cerere trimisă cu SENDDATA
VAR cmd := GETAT(RECEIVEDBYTES, 0);
IF cmd = 0
Rc := (GETAT(RECEIVEDBYTES, 1) & 0x01) > 0;
ENDConsultați și — Date binare, Funcții de parsare.