TapHome

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

RECEIVEDMSG

RECEIVEDMSG conține mesajul care a pornit scriptul listener, ca valoare receivedmessage cu payload-ul și, la MQTT, topicul și metadatele.

ProprietateTipSemnificație
PROTOCOLșir de caractere"tcp", "udp" sau "mqtt".
PAYLOADblobPayload-ul brut. Se citește ca text cu TOSTRING(RECEIVEDMSG.PAYLOAD), un singur octet cu GETAT.
LENGTHnumărLungimea payload-ului în octeți.
TOPICșir de caractereTopicul MQTT.
CONTENTTYPE, CLIENTIDșir de caractereMetadate MQTT 5.
PAYLOADFORMATenumerareIndicatorul de format al payload-ului MQTT 5.
EXPIRYnumărIntervalul de expirare a mesajului MQTT 5 în secunde.
DUPboolIndicatorul 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 și MessageExpiryInterval, iar payload-urile de peste 64 kB opresc scriptul. Preferați RECEIVEDMSG, 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;
END

Consultați și — Date binare, Funcții de parsare.