Komunikacija sa uređajima
Komunikacija se vrši korištenjem MQTT protokola.
Format MQTT teme
Svaka tema treba da bude sljedećeg formata:
lokacija/serialNo/poruka
Jedini izuzetak je zahtjev za konekciju.
Pri tome lokacija uređaja može predstavljati na primjer naziv sobe, a polje
serialNo je jedinstveni serijski broj uređaja. Polje poruka predstavlja
naziv naziv funkcije koju uređaj treba izvršiti, ili
podatka koji se čita sa uređaja.
Zahtjev za konekciju
Uređaji se periodično pokušavaju povezati na sistem pametne kuće, šaljući zahtjev za konekciju preko MQTT. Kada sistem primi zahtjev, korisniku se prikaže opcija da doda taj uređaj.
Zahtjev za konekciju se šalje preko sljedeće MQTT teme:
lokacija/_/requestConnection
Payload poruke je sljedeći:
[ serialNo, model ]
Pri tome je serialNo jedinstvena identifikacija konkretnog uređaja i zadaje se
kroz datoteku user_device.json, dok se model zadaje
kroz datoteku factory_device.json. String
serialNo mora biti nul-terminiran, dok za model to nije neophodno.
Ako je konekcija uspješna, smart-home sistem treba da pošalje povratnu poruku uređaju:
lokacija/serialNo/approveConnection
Ako neki uređaj modela MDL-123 ima serijski broj 001-2340 i nalazi se u sobi
dnevni_boravak, zahtjev za konekciju će biti na temu:
dnevni_boravak/_/requestConnection
sa payload-om
[ MDL-123, 001-2340 ]
Pri uspješnoj konekciji, povratna informacija iz smart-home sistema će biti na temu:
dnevni_boravak/001-2340/approveConnection
sa praznim payload-om.
Aktivacija funkcije uređaja
Da bi se na uređaju aktivirala neka funkcija sa nazivom fun (koja je
definirana u datoteci factory_device.json) potrebno
je poslati poruku na sljedećoj temi:
lokacija/serialNo/fun
Ako neki uređaj ima serijski broj 001-2340 i nalazi se u sobi
dnevni_boravak, te je potrebno izvršiti funkciju:
{
"name": "setTemperature", "friendly": "Set temperature", "valueType":
"float", "valueRange": [20, 30], "unit": "C"
}
onda će odgovarajuća tema biti:
dnevni_boravak/001-2340/setTemperature
Poslani payload treba da sadrži float iz intervala [20, 30] koji predstavlja
zadanu vrijednost temperature.
Prijem podatka sa uređaja
Da bi se sa uređaja dobio neki podatak sa nazivom dat (koji je definiran u
datoteci factory_device.json) potrebno je poslati
zahtjev za taj podatak na sljedećoj temi:
lokacija/serialNo/dat
bez payload-a.
Uređaj će polati povratnu informaciju na temi:
lokacija/serialNo/dat/response
sa payload-om koji sadrži traženi podatak.
Ako neki uređaj ima serijski broj 001-2340 i nalazi se u sobi
dnevni_boravak, a zanima nas sljedeći podatak sa uređaja:
{
"name": "getEnergyConsumption", "friendly": "Energy consumption",
"valueType": "float", "unit": "kWh"
}
onda smart-home sistem treba poslati poruku na temi:
dnevni_boravak/001-2340/getEnergyConsumption
Uređaj će poslati odgovor na temi:
dnevni_boravak/001-2340/getEnergyConsumption/response
a payload će sadržavati float koji sadrži traženu vrijednost.