1. Projektni zadatak
Potrebno je projektovati i implementirati platformu za upravljanje projektima interneta inteligentnih uređaja. Platforma treba da sadrži sledeće delove:
■ Administratorski deo IoT platforme. Administratorski deo IoT platforme treba da omogući upravljanje:
- Projektima. Korisnik IoT platforme u zavisnosti od privilegija može da izlista sve projekte, doda, izmeni ili obriše projekat.
- Uređajima. Korisnik IoT platforme ima pregled, mogućnost dodavanja, menjanja ili brisanja uređaja, senzora i aktuatora u okviru projekta.
- U okviru svakog administratorskog projekta, potrebno je omogućiti CRUD operacije nad kanalima. Kanali u okviru administratorskih projekta su specifični u odnosu na standardne kanale, jer imaju četiri statusa:
• javni: svi studentski projekti i korisnici portala imaju pristup kanalu,
• privatni: samo određeni studentski projekti imaju pristup kanalu,
• admin: samo korisnici sa admin privilegijama imaju pristup kanalu,
• onemogućen: niko nema pristup kanalu.
■ Korisnički deo IoT platforme. Korisnik koji ima kreiran projekat teba da ima uvid u svoj API ključ, učesnike na projektu i mogućnost pregleda opisa projekta. U okviru svakog projekta, potrebno je implementirati mogućnost ubacivanja dodatnih članova tima. Korisnici treba da izaberu da li je kanal privatan ili javan. Privatni kanal omogućava samo članovima tima projekta prikaz vrednosti sa senzora, postavljanje vrednosti sa senzora i upravljanje aktuatorima (prikaz trenutnog stanja aktuatora i promena stanja). Javni kanal omogućava svim korisnicima IoT platforme prikaz podataka sa senzora i očitavanje trenutnih stanja sa aktuatora, ali ne i postavljanje vrednosti sa senzora i upravljanje aktuatorima (read only).
Potrebno je implementirati vizuelizaciju podataka sa senzora u realnom vremenu. Omogućiti praćenje kretanja vrednosti senzora u odnosu na vreme i na izabrani vremenski period. Omogućiti Rawdata points za kratke intervale i agregirane podatke, tj. prosečne vrednosti za duže intervale.
Potrebno je implementirati API koji omogućava:
* prikaz poslednje očitane vrednosti sa senzora,
* dodavanje nove vrednosti očitane sa senzora sa trenutnim timestamp-om,
* prikaz istorijskih vrednosti podataka sa senzora u obliku niza za postavljen početni i krajnji timestamp i definisan minimalni interval između dve vrednosti,
* očitavanje stanja aktuatora,
* prikaz istorijskih vrednosti stanja aktuatora u obliku niza za postavljen početni i krajnji timestamp i definisan minimalni interval između dve vrednosti,
* promenu stanja aktuatora,
* promenu stanja aktuatora za definisan timestamp u budućnosti.
Za API funkcionalnosti takođe važe pravila definisana za kanale (da li je javni ili privatni).
Platformu treba razviti po uzoru na neku od dostupnih IoT platformi:
- https://www.xively.com
- http://exosite.com/
- https://www.paraimpu.com/
- http://open.sen.se/
- https://thingspeak.com/
- http://www.nimbits.com/index.jsp
- http://www.digi.com/cloud-overview
- http://www.sensorcloud.com/
- http://www.thingworx.com/
- https://www.carriots.com/
2. Projektovanje
U ovom primeru biće opisan razvoj Elab IoT platfome. Platforma je namenjena studentima Fakulteta organizacionih nauka, Univerziteta u Beogradu. Osnovna svrha je realizacija projekata iz oblasti interneta inteligentnih uređaja.
Model podataka
Relacioni model podataka za Elab IoT platformu prikazan je na slici 3.246. Deo podataka se čuva u relacionoj MySQL bazi, dok se izmerene vrednosti sa senzora čuvaju u nerelacionoj MongoDB bazi.
Slučajevi korišćenja Elab IoT platforme prikazani su na slici 3.247.
Prikaz Elab IoT platfome
Početna strana
Ova strana je zadužena za izlistavanje svih projekata dostupnih trenutnom korisniku. Na samoj strani postoje dva taba, prvi sa nazivom „Privatni“ koji prikazuje samo projekte u kojima je korisnik označen kao učesnik, i drugi „Javni“ gde su prikazani projekti kojima korisnik može da pristupi ali ne može da ih menja (slika 3.248).
Na stranici postoji i forma za dodavanje novih projekata. Od korisnika se traži da definiše naziv, opis i dostupnost kanala (privatan, javni, administratorski). Polja „Naziv“ i „Opis“ su obavezna polja forme a validacija se vrši pomoću HTML5 funkcija. Na osnovu atributa privatnost definiše se ko sve sme pristupiti projektu, a podrazumevana vrednost je „Privatan“. Ukoliko je trenutni korisnik administrator on će imati opciju da projekat postavi kao „Administratorski“. Ova opcija neće biti dostupna drugim korisnicima. Primer forme je dat na slici 3.249.
Stranica projekat
Prikaz stranice na kojoj se može kreirati, menjati i brisati projekat prikazan je slici 3.250.
Kada korisnik doda novi ili izabere postojeći projekat, upućuje se na stranu namenjenu prikazu projekta. Ova strana se sastoji od više delova. Prvi deo je namenjen prikazu informacija o projektu (slika 3.251). Ovde korisnik ima uvid u svoj API ključ, učesnike na projektu i opis projekta.
U gornjem delu strane korisnik ima uvid u takozvani „breadcrumbs“ odnosno putanju na kojoj se nalazi. Ovaj deo je isti za sve stranice, tako da korisnik može da vidi gde se nalazi u sistemu i da se brzo vrati nazad (slika 3.252). Na desnoj strani se nalaze prečice za dodavanje uređaja, izmenu i brisanje projekta. Ove opcije su dostupne samo onim korisnicima koji učestvuju u projektu (slika 3.253).
Sledeći deo stranice je deo za upravljanje učesnicima na projektu. Ovaj deo je dostupan administratorima i učesnicima na projektu. Na projekat korisnik može da doda maksimalno 3 osobe a ukoliko je potrebno administrator može da doda više osoba. Dodatno ograničenje je da korisnik ne može da izbaci sam sebe sa projekta. Kako bi se olakšalo dodavanje korisnika omogućena je pretraga po imenu, prezimenu ili broju indeksa. Ovaj deo je prikazan na slici 3.254.
Treći deo stranice (slika 3.255) namenjen je prikazu uređaja vezanih za projekat. Ove uređaje može da doda administrator ili učesnik projekta. Pored prikaza uređaja korisnik može da vidi i kratak pregled sadržaja svakog od uređaja, odnosno da vidi naziv, opis, IP adresu uređaja, listu senzora i listu aktuatora. Svaki uređaj korisnik može da izmeni ili obriše direktno sa ove stranice.
Jedan od elemenata stranice je forma za dodavanje novih uređaja (slika 3.256). Sva polja na formi su obavezna.
Stranica uređaj
Kompletan prikaz stranice za upravljanje uređajima u okviru platfome dat je na slici 3.257.
Ova stranica je namenjena prikazu uređaja, senzora i aktuatora povezanih na uređaj. Za uređaj možemo da vidimo naziv, opis i IP adresu. Uređaj se lako može izmeniti i obrisati sa ove stranice. Pored ovog na stranici je moguće dodati nove senzore i aktuatore. Ove akcije se ostvaruju pomoću modalnog prozora kako bi se izbeglo preusmeravanje na druge stranice. U delu za senzore i aktuatore korisnik ima uvid u listu aktuatora i ukoliko želi može da vidi više informacija za konkretni senzor. Takođe, korisnik može da izmeni ili obriše uređaj (slika 3.258).
Jedna od glavnih uloga ove stranice je prikaz lokacije senzora. Za svaki senzor se dodaje marker na mapu. Klikom na marker se prikazuje naziv senzora koji je ujedno i link ka konkretnom senzoru.
Stranica senzor
Kompletan prikaz stranice na kojoj se može videti opis senzora i merenja sa senzora dat je na slici 3.259.
Korisnik, na ovoj stranici, može da vidi informacije o senzoru, kretanje izmerene vrednosti kroz vreme i lokaciju senzora. Od informacija korisnik može da vidi opis, identifikator senzora i API ključ. Središnji deo stranice namenjen je prikazu vrednosti. Ovde korisnik ima mogućnost da definiše interval za koji želi da vidi vrednosti. Ukoliko korisnik ne definiše interval, prikazuju se vrednosti senzora za poslednja 24 časa. Grafik je realizovan pomoću AJAX-a. Osvežavanje grafika se vrši automatski na 3 sekunde, pa ukoliko dođe do promene vrednosti senzora korisnik može to da vidi bez osvežavanja stranice. U poljima iznad grafika se nalazi dodatni opis senzora, prosečna vrednost za dati interval, pouzdanost senzora i merna jedinica, minimalna, maksimalna i poslednja očitana vrednost. Na mapi na dnu stanice korisnik može da vidi tačnu lokaciju senzora.
Stranica aktuator
Kompletan prikaz stranice sa opisom aktuatora dat je na slici 3.260.
Ovde korisnik ima uvid u aktuator i za njega vezane akcija. Od informacija korisnik može da vidi API ključ, IP adresu uređaja za koji je aktuator vezan, naziv i opis aktuatora. Korisnik može da izmeni i obriše aktuator sa ove stranice. Glavna funkcija ove stranice je definisanje akcija za aktuator (slika 3.261). Akcije su osmišljene kao CURL zahtev koji će se poslati na definisani URL. Na dnu stranice korisnik ima uvid u poslednjih 20 stanja aktuatora. Svaki put kada korisnik pozove neku akciju, stanje aktuatora se menja.
Kada korisnik odluči da pošalje neku vrednost, tj pokrene akciju, pojavljuje se forma prikazana na slici 3.262.
Ovde se od korisnika traži da unese vrednost koja se šalje. Ukoliko nije potreba vrednost korisnik može ovo polje da ostavi prazno. Nakon uspešnog slanja korisniku se pojavljuje poruka prikazana na slici 3.263.
Administratorska stranica
Administratorska stranica se nalazi na ruti administracija/iot. Ruta je zaštićena i samo korisnici sa administratorskim privilegijama joj mogu pristupiti. Administratorski deo se sastoji iz nekoliko tabova koji omogućavaju upravljanje projektima, uređajima i senzorima. Takođe, iz administratorskog dela mogu se pratiti izmene projekata, uređaja i senzora. Postoji mogućnost pretrage svih navedenih entiteta.
Administracija projekata
Upravljanje projektima se nalazi na prvom tabu administratorske stranice. Administrator ima uvid u sve projekte, mogućnost da određene projekte zaključa i onemogući im pristup i da briše projekte bez obzira da li je učesnik na njima ili ne. Administratorskim projektima mogu pristupiti samo administratori. Onemogućenim projektima ne mogu pristupati ni administratori, ali ih u svakom treutku mogu omogućiti. Prilikom izlistavanja projekta prikazuju se osnovne informacije o projektu, uređaji i učesnici na projektu. Pored svakog projekta nalazi se kolona sa akcijama za administratora a to su: prikaži projekat, obriši projekat i onemogući projekat. Omogućena je pretraga projekata po svim kriterijumima (slika 3.264).
Administracija uređaja
Upravljanje uređajima se vrši iz drugog taba administratorske stranice. U tabeli se prikazuju osnovne informacije o uređajima: ime, opis, na kom projektu su dodati i lista senzora. Akcije nad uređajima su obriši i prikaži. Ova tabela sadrži pretragu po svim kriterijumima (slika 3.265).
Administracija senzora
Upravljanje senzorima se vrši iz trećeg taba administratorske stranice. U tabeli su prikazani senzori sa osnovnim informacijama, kao i akcije koje se mogu izvršiti: prikaži i obriši (slika 3.266).
Administracija akcija na portalu
Sve promene vezane za entitete projekat, uređaj i senzor se beleže i daju na uvid administratoru. Bilo da je u pitanju kreiranje, izmena ili brisanje ovih entiteta ta akcija će biti zabeležena. Beleži se vreme akcije, vrsta akcije, entitet nad kojim je izvršena akcija i korisnik koji je izvršio akciju. Pored ovoga, ukoliko je reč o kreiranju, beleže se podaci o entitetu koji su postavljeni prilikom kreiranja. Ukoliko je reč o izmeni, beleže se vrednosti pre izmene i vrednosti nakon izmene entiteta, a ukoliko je akcija brisanje beleži se naziv entiteta koji je obrisan kao i korisnik koji ga je obrisao. Ova funkcionalnost je podeljena na tri taba, kao i prethodno opisano upravljanje entitetima. Tako da se na prvom tabu nalaze logovi za projekte, na drugom za uređaje a na trećem za senzore. Svaki tip aktivnosti je posebno obojen u tabeli radi lakšeg snalaženja (kreiranje zelenom, izmena žutom a brisanje crvenom bojom). U ovoj tabeli postoji mogućnost pretrage logova (slika 3.267).
API
Pri svakom REST API pozivu platforme se očekuje da korisnik pošalje i svoj API ključ u okviru header-a. API ključ se generiše kada korisnik prvi put pristupi glavnoj strani platforme. Generisanje se vrši na osnovu CHAL algoritma. Korisnik dobija poruku prikazanu na slici 3.268.
Svaki API ključ važi tačno tri meseca od trenutka generisanja. Nakon isteka ključ se ponovo generiše a korisnik obaveštava o promeni ključa (slika 3.269).
Poslednja očitana vrednost
Ova funkcija ima zadatak da za konkretni senzor vrati poslednju očitanu vrednost. Korisnik šalje API zahtev, aplikacija pronalazi poslednju vrednost u bazi podataka i vraća JSON odgovor.
Od korisnika se zahteva da u header-u pošalje svoj API ključ.
Format ulaznog JSON-a:
{“senzorID”:”3” } |
Primer odgovora platforme:
{“vrednost”:[{
“vrednost”:18, “vreme”:”2015-07-10 16:57:40” } ], “kod”:”200” } |
Dodaj vrednost
Ova funkcija ima zadatak da sačuva vrednost senzora. Korisnik šalje API zahtev u kome se nalazi id senzora i vrednost, aplikacija upisuje vrednost sa trenutnim timestamp-om u MongoDB bazu i obaveštava korisnika JSON odgovorom.
Format ulaznog JSON-a:
{“senzorID”:”3”, “vrednost”:”18”} |
{“rezultat”:”Vrednost uspesno sacuvana!”, “kod”:”200”} |
Vrednosti za interval
Ova funkcija ima zadatak da pročita i vrati vrednosti za definisani interval. Korisnik ima opciju da pošalje datum od i do kog želi da vidi vrednosti. Platforma pronalazi vrednosti u datom intervalu i korisniku vraća JSON odgovor. Ukoliko korisnik ne pošalje datum od i datum do kao interval će se posmatrati poslednja 24 časa.
Format ulaznog JSON-a:
{“senzorID”:”2”,“datumOd”:”1431436551”, “datumDo”:”1436436551”
} |
Primer odgovora platforme:
{ “interval”:”Poslednja 24h!”,“vrednosti”:[{ “vrednost”:18, “vreme”:”2015-07-13 18:16:36”
}, { “vrednost”:18, “vreme”:”2015-07-13 18:17:42” } ], “kod”:”200” } |
Stanja aktuatora
Ova funkcija ima zadatak da pročita i vrati stanja aktuatora za definisani interval. Korisnik ima opciju da pošalje datum od i do kog želi da vidi vrednosti. Platforma pronalazi stanja u datom intervalu i korisniku vraća JSON odgovor. Ukoliko korisnik ne pošalje datum od i datum do kao interval će se posmatrati poslednja 24 časa.
Format ulaznog JSON-a:
{“senzorID”:”2”,“datumOd”:”1431436551”,
“datumDo”:”1436436551” } |
Primer odgovora platforme:
{ “interval”: “Poslednja 24h!”, “vrednosti”: [{ “url”: “172.20.221.155/pokreni/motor”,“vrednost”: 56, “vreme”: “2015-07-14 16:02:52”
}, |
{ “url”: “172.20.221.155/pokreni/motor”,“vrednost”: 95, “vreme”: “2015-07-14 16:05:21”},
{ “url”: “172.20.221.155/pokreni/motor”, “vrednost”: 21, “vreme”: “2015-07-14 16:07:32” }, { “url”: “172.20.221.155/pokreni/motor”, “vrednost”: 23, “vreme”: “2015-07-14 16:08:18” }, { “url”: “172.20.221.155/pokreni/motor”, “vrednost”: 156, “vreme”: “2015-07-14 16:08:51” } ], “kod”: “200” } |
Greške
Pre nego što sistem pošalje odgovor vrše se određene provere. U tabeli 3.34 date su greške, poruke i kodovi.
Tabela 3.34: Greške, poruke i kodovi
GREŠKA |
PORUKA |
KOD |
Korisnik nije poslao API ključ |
Niste ovlašćeni za korišćenje servisa. Parametar API ključ nije postavljen. |
151 |
Korisnik nije poslao identifikator senzora ili ta vrednost nije celobrojna | Niste prosledili parametar senzor ID, ili on nije u dobrom formatu. |
152 |
Ne postoji API ključ u bazi |
API ključ nije dobar! | 153 |
Za dati ključ ne postoji korisnik | Za dati API ključ, korisnik nije pronađen. |
154 |
Korisnik nije jedan od učesnika na privatnom projektu | Nemate pravo pristupa datom senzoru! |
155 |
Korisnik nije poslao vrednost id ili ta vrednost nije celobrojna | Niste prosledili parametar vrednost ili on nije u dobrom formatu! |
156 |
Primer odgovora gde je nastala greška:
{“greska”:”Api kljuc nije dobar!”, “kod”:”153”} |