TapHome

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"));
end

može se napisati ovako:

if RECEIVEDMSG.TOPIC = "my-topic"
  Va := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD));
end

Zaš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.