Ručna konfiguracija
Konfigurirajte Packet Parser u sustavu TapHome za povezivanje uređaja trećih strana preko protokola TCP/IP, uključujući HTTP, TCP, UDP, FTP i MQTT.
Primjena u sustavu TapHome
U sustavu TapHome Packet Parser je hardversko sučelje (Postavke → Hardver → Dodajte novo sučelje → Packet parser) koje služi za povezivanje uređaja trećih strana s centralnom jedinicom. Ti uređaji mogu komunicirati s centralnom jedinicom putem WiFi mreže ili LAN-a preko protokola TCP/IP.
Packet Parser koristi vlastiti skriptni jezik razvijen posebno za sustav TapHome. Taj jezik služi za upravljanje spojenim uređajima i njihovom komunikacijom s centralnom jedinicom. Kliknite ovdje za više informacija o skriptnom jeziku TapHome
Hijerarhija
Sustav TapHome koristi hijerarhijsku strukturu za organizaciju spojenih uređaja. U toj strukturi modul djeluje kao nadređeni uređaj i može komunicirati sa svojim podređenim uređajima i upravljati njima.
Modul
Sučelje može sadržavati jedan ili više modula, koji u većini slučajeva služe za komunikaciju s cijelim fizičkim uređajem. S gledišta konfiguracije modul definira:
- IP adresu ili mDNS naziv uređaja
- komunikacijski port
- sigurnu vezu: pogledajte odjeljak Ovjera u servisnim postavkama modula
- Ignorirajte pogreške SSL certifikata
Uređaj
Predstavlja određeni upravljački element ili senzor u sustavu TapHome. Uvijek mora biti dio jednog nadređenog modula.
Podržani uređaji:
- Digitalni izlaz
- Analogni izlaz
- Termostat
- Prekidač s više vrijednosti
- Senzor temperature
- Varijabla
- Tipkalo
- Električno brojilo
- Statusni kontakt
- Rolete, tende, miješajući ventili
- RGB svjetlo
- Podesiva bijela svjetlost
Primjer: Shelly Plug S Modul sadrži podatke o IP adresi i ima skripte za čitanje stanja, postavki i izvođenje servisnih radnji. Pokriva 2 uređaja: digitalni izlaz (relej) i brojilo električne energije koje mjeri potrošnju priključenih uređaja.
Skripte za čitanje i upis
Centralna jedinica TapHome i spojeni uređaji mogu komunicirati pomoću zahtjeva HTTP ili HTTPS GET / POST. Odgovori na te zahtjeve mogu se raščlaniti skupom specijaliziranih funkcija. Na primjer, može postojati funkcija posebno namijenjena raščlambi XML odgovora, druga funkcija za raščlambu JSON odgovora i još jedna funkcija za raščlambu odgovora u obliku polja bajtova. Te funkcije olakšavaju tumačenje i korištenje podataka primljenih u odgovorima te omogućuju učinkovitiju komunikaciju s centralnom jedinicom i spojenim uređajima.
TapHome definira više atributa koji mogu sadržavati skripte:
- Initialize script: pokreće se pri pokretanju uređaja (npr. nakon ponovnog pokretanja centralne jedinice)
- Read script: postavljanje vrijednosti globalnih varijabli ili čitanje stanja pogreške
- Read Value script: skripta za čitanje određene vrijednosti (veličine) iz spojenog uređaja (npr. zadane temperature na termostatu ili izmjerene temperature na termostatu)
- Write Value script: upis vrijednosti u spojeni uređaj
- Listener skripta: izvršava se pri primitku svakog paketa. Više informacija nalazi se u zasebnom odjeljku u nastavku
Kliknite ovdje za više informacija o skriptnom jeziku TapHome
Definiranje stanja pogreške iz skripti
Servisni atributi i radnje
Skripte i pomoćne varijable na modulu
Skripte i pomoćne varijable na uređaju
Više informacija potražite na stranici dokumentacije za Modbus
Podržani protokoli
- HTTP
- TCP
- UDP
- FTP
- MQTT
HTTP
SENDHTTPREQUEST
Šalje HTTP zahtjev u skripti Packet parsera s protokolom HTTP, čeka odgovor i vraća objekt httpresponse sa svojstvima Content, StatusCode, ReasonPhrase, IsSuccess i Headers. Zahtjev s vlastitom metodom, tijelom i zaglavljima stvara se funkcijom HTTPREQUEST — parametri i primjeri: SENDHTTPREQUEST, HTTPREQUEST.
VAR response := SENDHTTPREQUEST("/getValue");
IF(response.IsSuccess, PARSEJSON(response.Content, "value"), NaN)TCP, UDP
SENDDATA
Šalje string ili collection<uint8> preko TCP-a ili UDP-a; odgovor uređaja obrađuje se u listener skripti — SENDDATA.
COMPLETESERVICEATTRIBUTE
U listener skripti dovršava čitanje servisnog atributa čija je skripta poslala zahtjev funkcijom SENDDATA — COMPLETESERVICEATTRIBUTE.
COMPLETESERVICEACTION
U listener skripti dovršava servisnu radnju čija je skripta poslala zahtjev funkcijom SENDDATA — COMPLETESERVICEACTION.
FTP
FTPDOWNLOAD
Vraća sadržaj datoteke na FTP poslužitelju kao collection<uint8> — FTPDOWNLOAD.
FTPUPLOAD
Zapisuje podatke (string ili collection<uint8>) u datoteku na FTP poslužitelju ili ih dodaje na njezin kraj — FTPUPLOAD.
MQTT
Osim prethodno navedenih mogućnosti komunikacije, sustav TapHome omogućuje i komunikaciju s uređajima trećih strana pomoću protokola MQTT. MQTT (Message Queuing Telemetry Transport) je jednostavan protokol za razmjenu poruka po načelu objave i pretplate (publish/subscribe), namijenjen učinkovitoj i pouzdanoj komunikaciji među uređajima u okruženjima komunikacije stroj-stroj (M2M) i interneta stvari (IoT).
Za omogućivanje komunikacije s uređajima trećih strana pomoću protokola MQTT potrebno je izraditi zaseban modul u izborniku Postavke → Hardver → Dodajte novo sučelje → MQTT Broker. Taj modul djeluje kao posrednik između uređaja trećih strana i centralne jedinice i omogućuje im komunikaciju protokolom MQTT. MQTT Broker može raditi samostalno na centralnoj jedinici, što omogućuje neovisnu i učinkovitu komunikaciju između uređaja trećih strana i sustava TapHome.
MQTTPUBLISH
Objavljuje poruku na MQTT broker s uređaja Packet parsera s protokolom MQTT — MQTTPUBLISH.
Listener skripta
Listener skripta poziva se pri primitku svakog paketa. Kod protokola MQTT listener skripta poziva se kada preko MQTT-a stigne bilo koja poruka čija tema (Topic) odgovara filtru tema postavljenom u sustavu TapHome; takvih poruka može biti i nekoliko stotina u minuti. Ovdje je važno spomenuti dvije stvari:
Filtar tema treba postaviti što je moguće restriktivnije, tako da poruke s drugom vrijednošću teme uopće ne stižu i ne aktiviraju listener skriptu. Na primjer, ako nas zanima samo tema a.b.c.d, filtar treba biti a.b.c.d, a ne samo a.b.
Neki uređaji šalju mnogo različitih poruka s istom temom ili ponekad temu moramo postaviti npr. na a.b jer nas zanimaju poruke a.b.c.d, ali i a.b.x.y, zbog čega će naravno stizati i poruke s temom a.b.k.l.m koje nas ne zanimaju. To u načelu nije loše, ali neki uređaji generiraju razna ažuriranja stanja ili poruke koje sadrže opise polja drugih poruka (metapodatke), a one mogu biti duge i nekoliko stotina KB i stizati relativno često, svakih nekoliko sekundi (npr. Zigbee2MQTT).
Zbog navedenih razloga kod protokola MQTT u listener skripti vrlo je važno na temelju vrijednosti teme odlučiti je li poruka relevantna, a ako nije, odmah zaustaviti izvršavanje skripte i u tom trenutku nepotrebno ne analizirati sadržaj poruke. Algoritam u centralnoj jedinici TapHome sadrži mehanizme koji sprječavaju da MQTT bude preopterećen porukama. Ipak se ne može isključiti da preširoko postavljen MQTT filtar tema i mnogo velikih poruka produlje vrijeme odziva centralne jedinice.
Primljena poruka nalazi se u RECEIVEDMSG: Payload je blob (tekst pretvorite funkcijom TOSTRING), Topic je MQTT tema, Protocol protokol, a Length veličina. Čitanje RECEIVEDMSG.Topic brz je način da se odluči je li poruka relevantna, za razliku od starijeg RECEIVEDBYTES. Sva svojstva i primjeri: Listener skripte.
Poboljšanja u verziji 2024.1
Umjesto:
VAR jsonResponse := TOSTRING(RECEIVEDBYTES);
if parsejson(jsonResponse, "Topic") = "my-topic"
Va := todouble(parsejson(jsonResponse, "Payload"));
endmože se napisati ovako:
if RECEIVEDMSG.TOPIC = "my-topic"
Va := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD));
endZašto je to bolje: štedi se jedan poziv funkcije PARSEJSON kojim se doznaje vrijednost teme. Ako stiže mnogo MQTT poruka, a samo su neke zanimljive, prikladnije je koristiti ovaj novi način.
RECEIVEDMSG nadalje sadrži vrijednosti specifične za MQTT, npr. CLIENTID, DUP, CONTENTTYPE, EXPIRY; njihov sadržaj ovisi o tome što šalje MQTT poslužitelj. Stara sintaksa i dalje radi i radit će.
RECEIVEDMSG radi i s protokolima TCP i UDP, ne samo s MQTT-om; tamo nosi Payload, Length i Protocol ("tcp" ili "udp") — RECEIVEDMSG.
Analiza paketa
Podaci u servisnim postavkama modula sučelja Packet Parser sadrže statistiku primljenih i poslanih poruka: broj poruka za zadnjih 5 i 30 minuta, broj primljenih bajtova, a za MQTT su podaci razvrstani po MQTT temama. To bi trebalo pomoći pri otklanjanju pogrešaka u skriptama i postavljanju najprikladnijeg filtra tema, kako bi stizalo što manje poruka koje Core ne obrađuje.