TapHome

Listener skripte

Listener skripte Packet parsera u sustavu TapHome — obrada dolaznih poruka TCP, UDP i MQTT pomoću RECEIVEDMSG (tema, sadržaj, protokol) i starije zbirke bajtova RECEIVEDBYTES.

Listener skripta modula ili uređaja Packet parsera obrađuje dolazne poruke — pakete TCP i UDP, uključujući odgovore na zahtjev poslan funkcijom SENDDATA, i MQTT poruke. Poruka je u konstanti RECEIVEDMSG ili u starijoj RECEIVEDBYTES. Zahtjevi i naredbe šalju se funkcijama Packet parsera.

Listener skripta

Listener skripta izvršava se za svaku poruku koju modul primi — paket TCP ili UDP, ili MQTT poruku čija tema odgovara filtru tema uređaja ili modula kojemu listener skripta pripada — i čita je iz RECEIVEDMSG.

Napomene

  • MQTT broker može isporučiti stotine poruka u minuti. Filtar tema postavite što uže, najprije provjerite temu i za poruke koje vam nisu potrebne završite s RETURN(0).
  • Prazne poruke ne pokreću skriptu.
  • Više o filtrima tema u odjeljku Listener skripta.

Primjer — MQTT listener utičnice 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 sadrži poruku koja je pokrenula listener skriptu, kao vrijednost receivedmessage sa sadržajem poruke te, kod MQTT-a, temom i metapodacima.

SvojstvoTipZnačenje
PROTOCOLstring"tcp", "udp" ili "mqtt".
PAYLOADblobSirovi sadržaj poruke. Kao tekst ga čitajte s TOSTRING(RECEIVEDMSG.PAYLOAD), pojedinačni bajt s GETAT.
LENGTHbrojDuljina sadržaja u bajtovima.
TOPICstringMQTT tema.
CONTENTTYPE, CLIENTIDstringMetapodaci MQTT 5.
PAYLOADFORMATenumOznaka formata sadržaja MQTT 5.
EXPIRYbrojInterval isteka poruke MQTT 5 u sekundama.
DUPboolOznaka duplikata MQTT.

Napomene — Kod TCP-a i UDP-a podatke nose samo PROTOCOL, PAYLOAD i LENGTH. Sadržaj poruke je blob, koji UNPACKVALUE ne prihvaća — za to koristite RECEIVEDBYTES.

Dostupno — Core 2024.1 ili noviji.

RECEIVEDBYTES

RECEIVEDBYTES je stariji oblik primljene poruke: zbirka bajtova (collection<uint8>) koja i dalje radi i koju UNPACKVALUE i GETAT mogu izravno čitati.

Napomene

  • Kod TCP-a i UDP-a to je sirovi sadržaj poruke.
  • Kod MQTT-a to je tekst JSON s poljima Topic, Payload, PayloadRaw, Dup, ContentType, PayloadFormatIndicator i MessageExpiryInterval, a sadržaj veći od 64 kB zaustavlja skriptu. Prednost dajte konstanti RECEIVEDMSG, koja je brža.

Primjer — TCP odgovor na zahtjev poslan funkcijom SENDDATA

VAR cmd := GETAT(RECEIVEDBYTES, 0);
IF cmd = 0
    Rc := (GETAT(RECEIVEDBYTES, 1) & 0x01) > 0;
END

Vidi također — Binarni podaci, Funkcije za raščlambu.