TapHome

Skrypty listener

Skrypty listener modułu Packet parser w TapHome — przetwarzanie przychodzących wiadomości TCP, UDP i MQTT przez RECEIVEDMSG (temat, treść, protokół) i starszą kolekcję bajtów RECEIVEDBYTES.

Skrypt listener modułu lub urządzenia Packet parser przetwarza wiadomości przychodzące — pakiety TCP i UDP, w tym odpowiedzi na żądanie wysłane przez SENDDATA, oraz wiadomości MQTT. Wiadomość znajduje się w stałej RECEIVEDMSG lub w starszej RECEIVEDBYTES. Żądania i polecenia wysyłają funkcje Packet parser.

Skrypt listener

Skrypt listener uruchamia się dla każdej wiadomości, którą moduł odbierze — pakietu TCP lub UDP albo wiadomości MQTT, której temat pasuje do filtra tematów urządzenia lub modułu będącego właścicielem skryptu listener — i odczytuje ją z RECEIVEDMSG.

Uwagi

  • Broker MQTT może dostarczać setki wiadomości na minutę. Ustaw filtr tematów tak wąsko, jak to możliwe, najpierw sprawdź temat, a wiadomości, których nie potrzebujesz, zakończ przez RETURN(0).
  • Puste wiadomości nie uruchamiają skryptu.
  • Więcej o filtrach tematów w Skrypt listener.

Przykład — listener MQTT gniazdka 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 przechowuje wiadomość, która uruchomiła skrypt listener, jako wartość receivedmessage z treścią oraz, dla MQTT, tematem i metadanymi.

WłaściwośćTypZnaczenie
PROTOCOLtekst"tcp", "udp" lub "mqtt".
PAYLOADblobSurowa treść. Odczytasz ją jako tekst przez TOSTRING(RECEIVEDMSG.PAYLOAD), pojedynczy bajt przez GETAT.
LENGTHliczbaDługość treści w bajtach.
TOPICtekstTemat MQTT.
CONTENTTYPE, CLIENTIDtekstMetadane MQTT 5.
PAYLOADFORMATenumWskaźnik formatu treści MQTT 5.
EXPIRYliczbaCzas wygaśnięcia wiadomości MQTT 5 w sekundach.
DUPboolFlaga duplikatu MQTT.

Uwagi — Dla TCP i UDP dane niosą tylko PROTOCOL, PAYLOAD i LENGTH. Treść jest blobem, którego UNPACKVALUE nie akceptuje — do tego użyj RECEIVEDBYTES.

Dostępność — Core 2024.1 lub nowszy.

RECEIVEDBYTES

RECEIVEDBYTES to starsza forma odebranej wiadomości: kolekcja bajtów (collection<uint8>), która nadal działa i którą UNPACKVALUE i GETAT mogą odczytywać bezpośrednio.

Uwagi

  • Dla TCP i UDP jest to surowa treść.
  • Dla MQTT jest to tekst JSON z Topic, Payload, PayloadRaw, Dup, ContentType, PayloadFormatIndicator i MessageExpiryInterval, a treść powyżej 64 kB zatrzymuje skrypt. Wybieraj RECEIVEDMSG, który jest szybszy.

Przykład — odpowiedź TCP na żądanie wysłane przez SENDDATA

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

Zobacz też — Dane binarne, Funkcje parsowania.