Listener szkriptek
TapHome Packet parser listener szkriptek — a bejövő TCP, UDP és MQTT üzenetek feldolgozása a RECEIVEDMSG (topic, payload, protokoll) és a régebbi RECEIVEDBYTES bájtgyűjtemény segítségével.
A Packet parser modul vagy eszköz listener szkriptje a bejövő üzeneteket dolgozza fel — a TCP és UDP csomagokat, köztük a SENDDATA függvénnyel küldött kérésekre érkező válaszokat, valamint az MQTT üzeneteket. Az üzenet a RECEIVEDMSG konstansban, vagy a régebbi RECEIVEDBYTES konstansban található. A kéréseket és parancsokat a Packet parser függvények küldik.
Listener szkript
A listener szkript minden olyan üzenetre lefut, amelyet a modul fogad — egy TCP vagy UDP csomagra, vagy egy olyan MQTT üzenetre, amelynek topicja illeszkedik a listener szkriptet birtokló eszköz vagy modul topicszűrőjére —, és az üzenetet a RECEIVEDMSG konstansból olvassa ki.
Megjegyzések
- Egy MQTT bróker percenként több száz üzenetet is kézbesíthet. A topicszűrőt állítsd a lehető legszűkebbre, először a topicot ellenőrizd, és a nem szükséges üzeneteknél fejezd be a szkriptet
RETURN(0)hívással. - Az üres üzenetek nem indítják el a szkriptet.
- A topicszűrőkről bővebben a Listener szkript részben olvashatsz.
Példa — Shelly okoscsatlakozó MQTT listener szkriptje
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
A RECEIVEDMSG a listener szkriptet elindító üzenetet tartalmazza receivedmessage értékként, a payloaddal és MQTT esetén a topickal és a metaadatokkal.
| Tulajdonság | Típus | Jelentés |
|---|---|---|
PROTOCOL | szöveg | "tcp", "udp" vagy "mqtt". |
PAYLOAD | blob | Nyers payload. Szövegként a TOSTRING(RECEIVEDMSG.PAYLOAD), egyetlen bájtként a GETAT függvénnyel olvashatod ki. |
LENGTH | szám | A payload hossza bájtban. |
TOPIC | szöveg | MQTT topic. |
CONTENTTYPE, CLIENTID | szöveg | MQTT 5 metaadatok. |
PAYLOADFORMAT | enum | MQTT 5 payloadformátum-jelző. |
EXPIRY | szám | MQTT 5 üzenetlejárati intervallum másodpercben. |
DUP | bool | MQTT duplikátumjelző. |
Megjegyzések — TCP és UDP esetén csak a PROTOCOL, a PAYLOAD és a LENGTH hordoz adatot. A payload blob, amelyet az UNPACKVALUE nem fogad el — ehhez a RECEIVEDBYTES konstanst használd.
Elérhetőség — Core 2024.1 vagy újabb.
RECEIVEDBYTES
A RECEIVEDBYTES a fogadott üzenet régebbi formája: bájtgyűjtemény (collection<uint8>), amely továbbra is működik, és amelyet az UNPACKVALUE és a GETAT közvetlenül olvashat.
Megjegyzések
- TCP és UDP esetén ez a nyers payload.
- MQTT esetén
Topic,Payload,PayloadRaw,Dup,ContentType,PayloadFormatIndicatorésMessageExpiryIntervalmezőket tartalmazó JSON szöveg, és a 64 kB-nál nagyobb payload leállítja a szkriptet. Inkább a gyorsabbRECEIVEDMSGkonstanst használd.
Példa — TCP válasz a SENDDATA függvénnyel küldött kérésre
VAR cmd := GETAT(RECEIVEDBYTES, 0);
IF cmd = 0
Rc := (GETAT(RECEIVEDBYTES, 1) & 0x01) > 0;
ENDLásd még — Bináris adatok, Elemző függvények.