TapHome

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

RECEIVEDMSG

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ágTípusJelentés
PROTOCOLszöveg"tcp", "udp" vagy "mqtt".
PAYLOADblobNyers payload. Szövegként a TOSTRING(RECEIVEDMSG.PAYLOAD), egyetlen bájtként a GETAT függvénnyel olvashatod ki.
LENGTHszámA payload hossza bájtban.
TOPICszövegMQTT topic.
CONTENTTYPE, CLIENTIDszövegMQTT 5 metaadatok.
PAYLOADFORMATenumMQTT 5 payloadformátum-jelző.
EXPIRYszámMQTT 5 üzenetlejárati intervallum másodpercben.
DUPboolMQTT 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 és MessageExpiryInterval mezőket tartalmazó JSON szöveg, és a 64 kB-nál nagyobb payload leállítja a szkriptet. Inkább a gyorsabb RECEIVEDMSG konstanst 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;
END

Lásd még — Bináris adatok, Elemző függvények.