Fakultet organizacionih nauka, Univerzitet u Beogradu

Katedra za elektronsko poslovanje

Home > Praktikum iz Interneta inteligentnih uređaja > PRIMER 29. IOT PLATFORME ZA UPRAVLjANjE IOT PROJEKTIMA

PRIMER 29. IOT PLATFORME ZA UPRAVLjANjE IOT PROJEKTIMA

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:

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.

2
Slika 3.246: Model podataka Elab IoT platforme Slučajevi korišćenja

 

Slučajevi korišćenja Elab IoT platforme prikazani su na slici 3.247.

3
Slika 3.247: Slučajevi korišćenja Elab IoT platforme

 

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).

4
Slika 3.248: Početna strana

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.

5
Slika 3.249: Forma za dodavanje projekta

Stranica projekat
Prikaz stranice na kojoj se može kreirati, menjati i brisati projekat prikazan je slici 3.250.

6
Slika 3.250: Prikaz stranice za kreiranje, izmenu i brisanje projekata

 

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.

7
Slika 3.251: Informacije o projektu

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).

8
Slika 3.252: Breadcrumbs
9
Slika 3.253: Prečice

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.

10
Slika 3.254: Dodavanje i uklanjanje korisnika

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.

11
Slika 3.255: Prikaz uređaja

Jedan od elemenata stranice je forma za dodavanje novih uređaja (slika 3.256). Sva polja na formi su obavezna.

12
Slika 3.256: Dodavanje uređaja

Stranica uređaj
Kompletan prikaz stranice za upravljanje uređajima u okviru platfome dat je na slici 3.257.

13
Slika 3.257: Stranica uređaj

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).

14
Slika 3.258: Senzori i aktuatori

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.

15
Slika 3.259: Stranica senzor

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.

16
Slika 3.260: Stranica aktuator

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.

17
Slika 3.261: Dodaj novu akciju

Kada korisnik odluči da pošalje neku vrednost, tj pokrene akciju, pojavljuje se forma prikazana na slici 3.262.

Slika 3.262: Forma za pokretanje akcije
Slika 3.262: Forma za pokretanje akcije

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.

Slika 3.263: Prikaz poruke
Slika 3.263: Prikaz poruke

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).

Slika 3.264: Pretraga projekata po kriterijumima
Slika 3.264: Pretraga projekata po kriterijumima

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).

Slika 3.265: Pretraga uređaja po kriterijumima
Slika 3.265: Pretraga uređaja po kriterijumima

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).

Slika 3.266: Pretraga senzora po kriterijumima
Slika 3.266: Pretraga senzora po kriterijumima

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).

25

24

23
Slika 3.267: Praćenje logova za projekte, uređaje i senzore

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.

Slika 3.268: Generisanje API ključa
Slika 3.268: Generisanje API ključa

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).

Slika 3.269: Poruka o isteku API ključa
Slika 3.269: Poruka o isteku API ključa

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”}