TapHome

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

RECEIVEDMSG

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.

EigenschaftTypBedeutung
PROTOCOLString"tcp", "udp" oder "mqtt".
PAYLOADBlobRohe Nutzdaten. Als Text lesen Sie sie mit TOSTRING(RECEIVEDMSG.PAYLOAD), ein einzelnes Byte mit GETAT.
LENGTHZahlLänge der Nutzdaten in Bytes.
TOPICStringMQTT-Topic.
CONTENTTYPE, CLIENTIDStringMQTT-5-Metadaten.
PAYLOADFORMATEnumMQTT-5-Kennzeichen des Nutzdatenformats.
EXPIRYZahlMQTT-5-Ablaufintervall der Nachricht in Sekunden.
DUPboolMQTT-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, PayloadFormatIndicator und MessageExpiryInterval, und Nutzdaten über 64 kB halten das Skript an. Bevorzugen Sie RECEIVEDMSG, 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;
END

Siehe auch — Binärdaten, Parsing-Funktionen.