V TapHome je Packet Parser hardvérové rozhranie (Nastavenia → Hardware → Pridať nové rozhranie → Packet parser), ktoré sa používa na pripojenie zariadení tretích strán k riadiacej jednotke. Tieto zariadenia môžu komunikovať s riadiacou jednotkou pomocou WiFi alebo LAN prostredníctvom protokolu TCP/IP. Packet Parser používa proprietárny skriptovací jazyk, ktorý je špeciálne navrhnutý pre systém TapHome. Tento jazyk sa používa na riadenie a správu pripojených zariadení a ich komunikáciu s riadiacou jednotkou.
Na konfiguráciu pripojenia k zariadeniu tretej strany pomocou Packet parsera postupujte nasledovne:
Pozor: šablóny nedefinujú žiadne automatické akcie (Smart Rules).
Systém TapHome používa hierarchickú štruktúru na organizovanie pripojených zariadení. V tejto štruktúre Modul funguje ako nadradené zariadenie a môže komunikovať s a ovládať svoje podradené zariadenia.
Rozhranie môže obsahovať jeden alebo viac modulov, ktoré vo väčšine prípadov pokrývajú komunikáciu s celým fyzickým zariadením. Z konfiguračného hľadiska Modul definuje:
Predstavuje špecifický riadiaci prvok alebo senzor v systéme TapHome. Musí byť vždy súčasťou jedného nadradeného Modulu.
Modul obsahuje informácie o IP adrese, má skripty na čítanie stavu, nastavenia a vykonávanie servisných akcií. Pokrýva 2 zariadenia: digitálny výstup (relé) a elektromer merajúci dodávané zariadenia.
Riadiaca jednotka TapHome a pripojené zariadenia môžu komunikovať pomocou HTTP alebo HTTPS GET / POST požiadaviek. Odpovede na tieto požiadavky môžu byť parsované pomocou špecializovaných funkcií:
TapHome definuje viacero atribútov, ktoré môžu obsahovať skriptovací jazyk:
Odošle HTTP požiadavku so špecifikovanými parametrami, počká na odpoveď a vráti JSON reťazec obsahujúci hodnoty ako Content, Headers, HTTP result code.
SENDHTTPREQUEST( path, method, body, header1, header2… )
SENDHTTPREQUEST( HttpRequest )
SENDHTTPREQUEST("/getValue")
Result:
{
"Headers": [
{
"Key": "Content-Type", "Value": ["application/json"]
},
{
"Key": "Content-Length", "Value": ["1007"]
}
],
"Content": "{\"value\":31}",
"ReasonPhrase": "OK",
"StatusCode": 200,
"IsSuccess": true
}
SENDHTTPREQUEST("/doSomething", “POST”, “someData”, “header1:value1”, “header2:value2”, “header3:value3”)
VAR request := HTTPREQUEST(“/path”, “PUT”, “someData”);
request.Headers := { “name1: value1”, “name2: value2” … };
request.Method := “POST”;
VAR response := SENDHTTPREQUEST(request);
IF response.IsSuccess
VAR content := response.Content;
…
END
Odošle zadané dáta (reťazec alebo Collection UInt8) pomocou TCP alebo UDP protokolu. Ak sú dáta objekt typu string, implicitne sa konvertujú na bajty pomocou ISO-8859-1 kódovania. Táto funkcia je podporovaná iba v skriptoch Packet parsera s TCP alebo UDP protokolom. Prijaté bajty môžu byť spracované v Listener skripte.
SENDDATA( string/Collection )
Examples:
SENDDATA(BYTECOLLECTION("0a dd ef a2"))
SENDDATA("{\"value\":212}")
Funkcia sa používa v skriptoch Listener v Packet parseri s protokolom TCP/UDP na oznámenie dokončenia požiadavky hodnoty atribútu služby. Napr. vytvoríte požiadavku v skripte atribútu služby pomocou funkcie SENDDATA a po prijatí dát v skripte listenera dokončíte čítanie atribútu služby.
COMPLETESERVICEATTRIBUTE( attributeName, value, error )
Examples:
COMPLETESERVICEATTRIBUTE(“Uptime”, “2d:21h:43m”)
COMPLETESERVICEATTRIBUTE(“Status”, “”, “Device is offline”)
Funkcia sa používa v skriptoch Listener v Packet parseri s protokolom TCP/UDP na oznámenie dokončenia požiadavky akcie služby.
Napr. vytvoríte požiadavku v skripte akcie služby pomocou funkcie SENDDATA a po prijatí dát v Listener skripte, dokončíte akciu služby.
COMPLETESERVICEACTION( actionName, result )
Examples:
COMPLETESERVICEACTION(“Reboot”, “Rebooted successfully”)
COMPLETESERVICEACTION(“Enable cloud”, “Device is offline”)
Vráti dáta súboru (ako Collection UInt8) z FTP servera. Funkcia je podporovaná iba v Packet parser skriptoch s FTP protokolom.
FTPDOWNLOAD( pathToFile )
Examples:
FTPDOWNLOAD(“/path/to/file”) (Result is Collection)
Nahrá dáta (Collection UInt8 alebo string) do súboru na FTP server.
FTPUPLOAD( pathToFile, data, mode )
Examples:
FTPUPLOAD(“/path/to/file”, “some data”, “write”)
FTPUPLOAD(“/path/to/file”, BYTECOLLECTION(“a7 ff e2”), “append”)
Okrem vyššie uvedených možností komunikácie systém TapHome umožňuje aj komunikáciu so zariadeniami tretích strán pomocou protokolu MQTT. MQTT, alebo Message Queuing Telemetry Transport, je odľahčený publish/subscribe messaging protokol, ktorý je navrhnutý pre efektívnu a spoľahlivú komunikáciu medzi zariadeniami v kontextoch machine-to-machine (M2M) a Internet of Things (IoT) contexts.
Pre umožnenie komunikácie so zariadeniami tretích strán pomocou MQTT je potrebné vytvoriť samostatný modul v Nastavenia → Hardware → Pridať nové rozhranie → MQTT Broker. Tento modul funguje ako sprostredkovateľ medzi zariadeniami tretích strán a riadiacou jednotkou, čo im umožňuje komunikovať pomocou protokolu MQTT. MQTT Broker môže bežať autonómne na riadiacej jednotke, čo umožňuje nezávislú a efektívnu komunikáciu medzi zariadeniami tretích strán a systémom TapHome.
Funkcia sa používa na zariadeniach PacketParser s protokolom MQTT na publikovanie správy do MQTT brokera.
MQTTPUBLISH( topic, message )
Príklad:
MQTTPUBLISH(“shellies/deviceid/relay/0/command”, “off”)
Skript poslucháča sa vyvolá pri prijatí každého paketu, konkrétne pre MQTT sa skript poslucháča vyvolá, keď príde akákoľvek správa cez MQTT, ktorej téma (Topic) zodpovedá filtru tém nastavenému v TapHome;; týchto správ môžu byť stovky za minútu. Dve veci sú dôležité:
Prijatý paket sa nachádza v premennej (štruktúre) RECEIVEDMSG. Prijaté dáta môžu byť čítané v premennej RECEIVEDMSG.Payload. Payload má dátový typ BLOB (veľký binárny objekt), nie je to reťazec ani pole bajtov. Ak je payload typu reťazec, musí sa použiť funkcia TOSTRING, ale vo všeobecnosti môže byť payload čokoľvek. RECEIVEDMSG obsahuje aj protokolovo špecifické dáta, napr. RECEIVEDMSG.Topic pre MQTT. Použitie RECEIVEDMSG.TOPIC je veľmi rýchly a efektívny spôsob, ako zistiť hodnotu témy, na rozdiel od starého spôsobu, keď sa používalo RECEIVEDBYTES.
Namiesto:
VAR jsonResponse := TOSTRING(RECEIVEDBYTES);
if parsejson(jsonResponse, "Topic") = "my-topic"
Va := todouble(parsejson(jsonResponse, "Payload"));
end
sa to dá napísať takto:
if RECEIVEDMSG.TOPIC = "my-topic"
Va := todouble(TOSTRING(RECEIVEDMSG.PAYLOAD));
end
Čím je to lepšie - ušetrí sa jedno volanie PARSEJSON na zistenie hodnoty témy. Ak prichádza veľa mqtt správ a iba niektoré z nich sú zaujímavé, je výhodnejšie použiť túto novú metódu.
RECEIVEDMSG ďalej obsahuje mqtt špecifické hodnoty - napr. CLIENTID, DUP, CONTENTTYPE, EXPIRY - ich obsah závisí od toho, čo posiela mqtt server. Stará syntax stále funguje a bude fungovať.
RECEIVEDMSG funguje aj s TCP a UDP, nielen s MQTT. V takom prípade poskytuje iba vlastnosti PAYLOAD a LENGTH.
Informácie v Service Settings modulov Packet Parser obsahujú štatistické údaje o prijatých a odoslaných správach - počty za posledných 5 a 30 minút, počet prijatých bajtov, a pre MQTT, informácie sú zoradené podľa MQTT tém. To by malo pomôcť pri ladení skriptov a nastavení najvhodnejšieho filtra tém, aby sa zabezpečilo, že sa doručí čo najmenej správ, ktoré nie sú spracované Core.
TapHome umožňuje sťahovanie bezplatných údajov o počasí do aplikácie.
MQTT Broker je služba pre správu MQTT komunikácie medzi zariadeniami. Broker môže byť spustený na externej mašine alebo priamo na TapHome kontroléri.