Listener-Skripte
Listener-Skripte des TapHome Packet Parsers — eingehende TCP-, UDP- und MQTT-Nachrichten mit RECEIVEDMSG (Topic, Nutzdaten, Protokoll) und der älteren Bytesammlung RECEIVEDBYTES verarbeiten.
Ein Listener-Skript eines Packet-Parser-Moduls oder -Geräts verarbeitet eingehende Nachrichten — TCP- und UDP-Pakete, einschließlich Antworten auf eine mit SENDDATA gesendete Anfrage, sowie MQTT-Nachrichten. Die Nachricht steht in der Konstante RECEIVEDMSG oder in der älteren RECEIVEDBYTES. Anfragen und Befehle werden mit den Packet-Parser-Funktionen gesendet.
Listener-Skript
Das Listener-Skript läuft für jede Nachricht, die das Modul empfängt — ein TCP- oder UDP-Paket oder eine MQTT-Nachricht, deren Topic zum Topic-Filter des Geräts oder Moduls passt, dem das Listener-Skript gehört — und liest sie aus RECEIVEDMSG.
Hinweise
- Ein MQTT-Broker kann Hunderte von Nachrichten pro Minute zustellen. Stellen Sie den Topic-Filter so eng wie möglich ein, prüfen Sie zuerst das Topic und beenden Sie das Skript bei Nachrichten, die Sie nicht brauchen, mit
RETURN(0). - Leere Nachrichten starten das Skript nicht.
- Mehr zu Topic-Filtern unter Listener-Skript.
Beispiel — MQTT-Listener einer Shelly-Steckdose
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 enthält die Nachricht, die das Listener-Skript gestartet hat, als receivedmessage-Wert mit den Nutzdaten und bei MQTT mit dem Topic und den Metadaten.
| Eigenschaft | Typ | Bedeutung |
|---|---|---|
PROTOCOL | String | "tcp", "udp" oder "mqtt". |
PAYLOAD | Blob | Rohe Nutzdaten. Als Text lesen Sie sie mit TOSTRING(RECEIVEDMSG.PAYLOAD), ein einzelnes Byte mit GETAT. |
LENGTH | Zahl | Länge der Nutzdaten in Bytes. |
TOPIC | String | MQTT-Topic. |
CONTENTTYPE, CLIENTID | String | MQTT-5-Metadaten. |
PAYLOADFORMAT | Enum | MQTT-5-Kennzeichen des Nutzdatenformats. |
EXPIRY | Zahl | MQTT-5-Ablaufintervall der Nachricht in Sekunden. |
DUP | bool | MQTT-Duplikat-Flag. |
Hinweise — Bei TCP und UDP enthalten nur PROTOCOL, PAYLOAD und LENGTH Daten. Die Nutzdaten sind ein Blob, den UNPACKVALUE nicht akzeptiert — verwenden Sie dafür RECEIVEDBYTES.
Verfügbar — Core 2024.1 oder neuer.
RECEIVEDBYTES
RECEIVEDBYTES ist die ältere Form der empfangenen Nachricht: eine Bytesammlung (collection<uint8>), die weiterhin funktioniert und die UNPACKVALUE und GETAT direkt lesen können.
Hinweise
- Bei TCP und UDP sind es die rohen Nutzdaten.
- Bei MQTT ist es ein JSON-Text mit
Topic,Payload,PayloadRaw,Dup,ContentType,PayloadFormatIndicatorundMessageExpiryInterval, und Nutzdaten über 64 kB halten das Skript an. Bevorzugen SieRECEIVEDMSG, das schneller ist.
Beispiel — TCP-Antwort auf eine mit SENDDATA gesendete Anfrage
VAR cmd := GETAT(RECEIVEDBYTES, 0);
IF cmd = 0
Rc := (GETAT(RECEIVEDBYTES, 1) & 0x01) > 0;
ENDSiehe auch — Binärdaten, Parsing-Funktionen.