primjer temeljne arhitekture za izgradnju sustava internet ... · 0x62 slovo b, oktet 0x63 slovo c,...
TRANSCRIPT
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
Zagreb, lipanj 2015.
DIPLOMSKI RAD br. 1050
Primjer temeljne arhitekture za izgradnju
sustava Internet stvari
Nikola Sekulić
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
Zagreb, lipanj 2015. Nikola Sekulić
Zahvaljujem se svom mentoru doc. dr. sc. Leonardu Jelenkoviću za prijedloge i savjete
prilikom izrade rada.
Zahvaljujem se svojoj sestri, svojim roditeljima i mojim kolegama koji su me podupirali
tijekom cijelog mog školovanja.
i
SADRŽAJ
1. Uvod ............................................................................................................................. 1
2. Arhitektura sustava ................................................................................................... 2
2.1. Naprava ................................................................................................................... 3
2.2. Pristupnik ................................................................................................................ 3
2.3. Servis u oblaku ........................................................................................................ 3
2.4. Korisnička aplikacija .............................................................................................. 4
2.5. Primjer rada sustava ................................................................................................ 4
3. Komunikacija naprava i pristupnika ....................................................................... 6
3.1. Pozdravna poruka.................................................................................................... 8
3.2. Informacijska poruka .............................................................................................. 9
3.3. Zahtjev .................................................................................................................... 9
3.4. Odgovor ................................................................................................................ 10
4. Ostvarenje sustava ................................................................................................... 11
4.1. Implementacija servisa u oblaku ........................................................................... 12
4.1.1. Baza podataka .......................................................................................................... 12
4.1.2. Korisničko sučelje .................................................................................................... 15
4.1.3. Administratorsko sučelje .......................................................................................... 15
4.1.4. Sučelje za pristupnike ............................................................................................... 16
4.2. Implementacija naprava ........................................................................................ 17
4.2.1. Implementacija termometra ...................................................................................... 17
4.2.2. Implementacija klima ureĎaja .................................................................................. 18
4.2.3. Implementacija brave ............................................................................................... 20
4.3. Implementacija pristupnika ................................................................................... 21
4.4. Implementacija korisničke aplikacije ................................................................... 21
5. Zaključak .................................................................................................................. 30
Literatura ........................................................................................................................... 31
Sažetak ................................................................................................................................ 32
Summary ............................................................................................................................ 32
PRIVITAK A: Korisničko sučelje servisa u obalku ....................................................... 33
PRIVITAK B: Administratorsko sučelje servisa u obalku ........................................... 40
1
1. UVOD
Internet stvari (engl. Internet Of Things, IoT) počiva na konvergenciji bežičnih,
mrežnih i internetskih tehnologija (prvenstveno tehnologija u oblaku), elektromehaničkih
sustava, i njihovoj koheziji k jedinstvenom, samo-upravljajućem, pametnom sustavu.
Jednostavnije rečeno, Internet stvari je koncept ljudskog okruženja u kojem senzorima
opremljene stvari, strojevi, vozila, pa čak i živa bića izmjenjuju podatke i ostvaruju
interakciju.
Problem Interneta stvari je adresiranje velikog broja naprava. Drugi problem
Interneta stvari je i skladištenje velikih količina podataka koje pametne naprave proizvode.
Zato Internet stvari ovisi i o servisima u oblaku za pohranjivanje i analizu velikih količina
podataka. Rješavanje sigurnosti Interneta stvari predstavlja veliki izazov, jer stvarima
može pristupati bilo tko, i bilo tko može prisluškivati komunikaciju izmeĎu naprava.
Na CES-u (engl. The Consumer Electronics Show) 2015, Internet stvari je
predstavljen kao plodno i obećavajuće područje za industriju [1]. No sajam je pokazao
kako u stvarnosti postojeći sustavi na tragu Interneta stvari još uvijek koegzistiraju kao
zasebne jedinke, koje teže prema Internetu stvari, ali za sada to još uvijek nisu.
Ipak, primjeri kao Savez za inovacije Interneta stvari (engl. Alliance for Internet of
Things Innovation, AIOTI) [2] i projekti u okviru FP7 (7 th Framework Programme for
Research and Technological Development) pokazuju da potreba i napori za
konkretizacijom i rješavanjem problema Interneta stvari postoje. Primjerice IoT-A (engl.
Internet of Things Architecture) projekt [3] pokušava definirati i ponuditi referentni model
arhitekture za Internet stvari koji će omogućiti lakšu implementaciju interoperabilnosti i
skalabilnosti. Open IoT projekt [4] je pak primjer projekta koji na sasvim praktičnoj razini,
pokušava ponuditi rješenje otvorenog koda radnog okvira za dinamičko stvaranje okolina u
oblaku, u okviru sustava Internet stvari.
Cilj ovog rada je jednostavna implementacija sustava Internet stvari. U drugom
poglavlju ovog rada opisana je arhitektura ostvarenog sustava. Treće poglavlje opisuje
način komuniciranja naprava u sustavu. Četvrto poglavlje opisuje implementaciju i
komunikaciju komponenti sustava.
2
2. ARHITEKTURA SUSTAVA
U ovom radu opisuje se ostvarenje arhitekture koja bi mogla služiti za razvijanje
usluga u domeni Interneta stvari. Sustav Interneta stvari sastoji se od pametnih naprava
kojima korisnik upravlja putem interneta. Zbog toga korisnik treba imati neku vrstu
aplikacije, npr. aplikaciju za pametni mobitel. Aplikacija ne mora komunicirati izravno s
napravama, nego sa servisom koji upravlja napravama, te skladišti i obraĎuje podatke s
naprava.
Prikaz arhitekture prikazan je na slici 2.1. Na slici su prikazani servis u oblaku,
pristupnik za upravljanje napravama, tri naprave te korisnička aplikacija. Naprave
komuniciraju s pristupnikom, te njemu šalju poruke ili poruke primaju od njega. Pristupnik
komunicira sa servisom u oblaku. Korisnička aplikacija ne komunicira izravno s
napravama niti s pristupnikom, nego sa servisom u oblaku.
Slika 2.1: Arhitektura sustava
3
2.1. Naprava
Naprava predstavlja pametni ureĎaj kojime se može upravljati udaljeno, tj. pomoću
nekog komunikacijskog protokola koji naprava podržava. Naprave mogu imat razne
primjene te raznu složenost. Npr. naprava može biti jednostavan termometar koji u
odreĎenim vremenskim razmacima šalje očitanu temperaturu, a može biti i klimatski
ureĎaj, koji se može upravljati udaljeno putem interneta. U ovom radu, pretpostavka je da
naprava ne zna niti jednu adresu ostalih komponenti sustava. Naprava može samo poslati
poruku u mrežu, te primiti poruku iz mreže. Zbog toga naprave šalju poruke putem
razašiljanja (engl. broadcast). U ovom radu, svaka naprava u sustavu mora imati
jedinstveni identifikator veličine 8 okteta. Svaka naprava primljenu poruku ponovno šalje u
mrežu ukoliko se poruka ne odnosi na nju i ukoliko istu poruku već nije primila.
2.2. Pristupnik
Pristupnik je ureĎaj koji povezuje naprave sa servisom u oblaku. Skuplja sve
poruke iz lokalne mreže naprava, te ih prosljeĎuje servisu u oblaku. TakoĎer poruke sa
servisa u oblaku prosljeĎuje u lokalnu mrežu naprava. Pristupnik mora znati protokol i
adresu koju servis u oblaku koristi.
2.3. Servis u oblaku
Servis u oblaku je servis koji obraĎuje i skladišti podatke o napravama i
pristupnicima. Za svaku napravu servis mora znati s kojim pristupnikom naprava
komunicira, te kakve poruke naprava može poslati i kakve poruke naprava može primiti.
Sve poruke i podatke koje je naprava poslala ili koji su napravi poslani, servis sprema u
bazu podataka. Servis u oblaku sadrži i podatke o korisnicima i korisničkim aplikacijama.
Servis u oblaku ima definirana tri sučelja. Prvo sučelje koristi pristupnik, te
pomoću njega prosljeĎuje poruke izmeĎu naprava i servisa. Drugo sučelje koristi
korisnička aplikacija za upravljanje napravama. Treće sučelje je sučelje koje koristi
administrator servisa u oblaku.
4
2.4. Korisnička aplikacija
Korisnička aplikacija je aplikacija pomoću koje korisnik upravlja napravama.
Aplikacija ne komunicira izravno s napravama, nego sa servisom u oblaku. Putem
aplikacije korisnik može pročitati neki podatak s naprave, poslati neku naredbu napravi, ili
analizirati podatke spremljene u oblaku. Aplikacija mora znati protokol koji servis koristi,
te sučelje koje servis podržava za aplikacije.
2.5. Primjer rada sustava
Na slici 2.2 prikazan je sekvencijski dijagram slanja zahtjeva napravi. Korisnik pomoću
korisničke aplikacija servisu u oblaku šalje zahtjev za napravu B. Servis u oblaku
autentificira korisnika, te provjerava ima li pravo poslati zahtjev napravi. Zatim prosljeĎuje
zahtjev pristupniku koji u svojoj lokalnoj mreži naprava sadrži napravu B. Pristupnik u
lokalnu mrežu šalje zahtjev. Naprava B nije u dometu pristupnika, pa ne prima odmah
zahtjev. Zahtjev je primila naprava A koja zahtjev ponovno šalje. Naprava B zatim prima
zahtjev te šalje odgovor. Odgovor je primila naprava A, te ga ponovno poslala u lokalnu
mrežu. Zatim je odgovor primio pristupnik i poslao ga servisu u oblaku. Servis u oblaku
sprema podatke odgovora u bazu podataka, te zatim korisniku šalje obavijest o primljenom
odgovoru.
Slika 2.2: Slanje zahtjeva napravi
5
Naprava ne mora podatke slati samo kada primi zahtjev. Podatke može slati i
periodički u odreĎenom vremenskom intervalu. Na slici 2.3 prikazan je sekvencijski
dijagram takvog slučaja. Naprava termometar šalje podatak u lokalnu mrežu naprava.
Pristupnik taj podatak prosljeĎuje servisu u oblaku. Servis u oblaku sprema podatak u bazu
i korisniku šalje obavijest o primljenom podatku.
Slika 2.3: Slanje podatka s naprave
6
3. KOMUNIKACIJA NAPRAVA I PRISTUPNIKA
U ovom radu naprava ne mora imati IP adresu. Naprave u lokalnoj mreži naprava
meĎusobno komuniciraju razašiljanjem poruka u sloju podatkovne poveznice. Pristupnik
sve poruke iz lokalne mreže naprava prosljeĎuje u javnu internet mrežu.
Naprave meĎusobno i s pristupnikom komuniciraju putem posebno definiranog
aplikacijskog protokola. Svaka poruka u protokolu sadrži zaglavlje konstantne veličine od
32 okteta. Struktura zaglavlja prikazana je na slici 3.1.
Verzija Vrsta poruke Zastavice Veličina poruke TTL
Identifikator primatelja
Identifikator pošiljatelja
Identifikator poruke
Slika 3.1: Zaglavlje poruke
Prva dva okteta zaglavlja predstavljaju verziju protokola. Verzija služi kako bi se
poruke naprava mogle razlikovati od ostalih poruka u mreži. Prvi oktet verzije ima
vrijednost 0, a drugi oktet ima vrijednost 1.
Treći oktet u zaglavlju predstavlja vrstu poruke. Protokol podržava četiri vrste
poruka: zahtjev, odgovor, pozdravnu poruku i informacijsku poruku.
Četvrti oktet u zaglavlju predstavlja zastavice. Od osam bita u tom oktetu, prvih
šest ih se koristi za zastavice.
Peti i šesti oktet predstavljaju veličinu tijela poruke. Tijelo poruke je promjenjive
veličine.
Sedmi i osmi oktet čine polje naziva TTL (engl. Time To Live). To je polje u
kojemu piše maksimalni broj prosljeĎivanja poruke. Svaka naprava ili pristupnik koji
proslijedi poruku, smanjuje vrijednost u tom polju za 1.
Sljedećih osam okteta čine identifikator primatelja, tj. jedinstveni identifikator
naprave kojoj je poruka namijenjena. Ukoliko svi okteti imaju vrijednost 0, primatelj nije
definiran, te se poruka samo šalje dok joj vrijednost u TTL-u ne padne na 0.
7
Sljedećih osam okteta čine jedinstveni identifikator naprave koja je poruku prva
poslala.
Zadnjih osam okteta predstavlja identifikator poruke. Svaka naprava koja šalje
poruku u to polje upisuje jedinstveni identifikator poruke. Identifikator je jedinstven samo
za pošiljatelja. Dvije naprave mogu poslati različite poruke s istim identifikatorom. Zbog
toga je svaka poruka jednoznačno označena s identifikatorom poruke i identifikatorom
pošiljatelja. Najčešće naprave za svaku poruku koju generiraju, povećavaju identifikator
poruke za 1. Svaka naprava pamti zadnjih nekoliko poruka. Ukoliko naprava ponovno
primi poruku s već postojećim identifikatorom poruke i pošiljatelja, poruku neće ponovno
proslijediti.
Redoslijed zastavica u zaglavlju prikazan je na slici 3.2. Prvih šest bitova u
četvrtom oktetu predstavlja šest zastavica. Zastavica se smatra postavljenom ukoliko njen
odgovarajući bit ima logičku vrijednost 1.
P T E C R S
Slika 3.2: Zastavice u zaglavlju
Zastavica P signalizira može li se poruka proslijediti. Ukoliko neki ureĎaj primi poruku
koja nije adresirana za njega, poruku prosljeĎuje ukoliko je zastavica P postavljena.
Zastavica T signalizira je li poruka ponovno poslana. Neki ureĎaj ukoliko nije dobio
odgovor na neku poruku, poruku može ponovno poslati s drugim identifikatorom. Tada u
zaglavlju postavlja zastavicu T.
Zastavica E signalizira pogrešku. Ukoliko neka naprava ne može obraditi zahtjev, u
odgovoru postavlja zastavicu E.
Zastavica C signalizira napravi kojoj je zahtjev poslan da pošiljatelj želi potvrdu o obradi
zahtjeva.
Zastavica R signalizira je li poruka zahtjev. Ukoliko je postavljena, poruka predstavlja
zahtjev.
Zastavica S je postavljena ukoliko je tijelo poruke kriptirano.
Tijelo poruke sastoji se od nizova znakova. Ispred svakog niza nalaze se dva okteta
u kojima se nalazi veličina niza u oktetima. Ukupna duljina niza s dva okteta za veličinu
8
niza mora biti djeljiva s 4. Ukoliko to nije slučaj na kraj niza se dodaju okteti s vrijednošću
0. Npr. niz znakova abcć kodiran UTF-8 kodnom stranicom u tijelu poruke je prikazan kao
sljedeći niz okteta: 0x00, 0x05, 0x61, 0x62, 0x63, 0xC4, 0x87, 0x00. Prva dva okteta
predstavljaju veličinu. Veličina niza je pet okteta. Oktet 0x61 predstavlja slovo a, oktet
0x62 slovo b, oktet 0x63 slovo c, a okteti 0xc4 i 0x87 slovo ć. Na kraju je dodan još jedan
oktet 0x00 kako bi ukupna duljina niza bila djeljiva s 4.
Ukoliko je poruka kriptirana, zaglavlje se ne kriptira, a tijelo poruke se sastoji od
dva niza znakova. Prvi niz je kriptirano tijelo originalne poruke, a drugi niz je SHA-256
sažetak poruke. Nizovi znakova kriptirane poruke i sažetka su kodirani pomoću BASE64
koda [5]. Poruke se kriptiraju simetričnim algoritmom AES s PKCS#7 [6] nadopunom.
Primatelj poruke mora znati ključ kojim je poruka kriptirana. Naprava koja šalje i prima
kriptirane poruke ima svoju lozinku. Ključ za kriptiranje se računa tako da se znakovi
lozinke pretvore u niz okteta UTF-8 kodnom stranicom. Zatim se od tog niza okteta računa
MD5 sažetak. Sažetak sadrži šesnaest okteta koji se koriste kao ključ kriptiranja.
3.1. Pozdravna poruka
Pozdravna poruka u trećem oktetu zaglavlja ima upisanu vrijednost 1. Pomoću
pozdravne poruke naprava javlja mreži svoje postojanje. Poruku ureĎaj šalje kada se prvi
put spoji na mrežu. TakoĎer poruku može periodički slati u nekom vremenskom intervalu.
U tijelu pozdravne poruke nalaze se osnovne informacije o ureĎaju.
Primjer pozdravne poruke:
U prethodnom primjeru prikazana je pozdravna poruka za ureĎaj s imenom Air
conditioner.
VERZIJA = 1
TIP PORUKE = 1
VELIČINA = 108
ZASTAVICE: P = 1, T = 0, E = 0, C = 0, R = 0, S = 0
TTL = 64
ID PRIMATELJA= 0
ID POŠILJATELJA = 2
ID PORUKE = 11
[34 | 'DEVICE_DESCRIPTION=Air conditioner']
[43 | 'DEVICE_DATA=temperature,desired_temperature\0']
[26 | 'DEVICE_COMMANDS=start,stop']
9
3.2. Informacijska poruka
Informacijska poruka u trećem oktetu zaglavlja ima upisanu vrijednost 2.
Informacijsku poruku naprava šalje kada želi poslati svoje podatke bez prethodnog upita.
Primjer naprave koja šalje informacijske poruke je termometar koji u odreĎenim
vremenskim intervalima šalje temperaturu. Podaci u tijelu poruke su zapisani u nizovima
znakova. Svaki niz sadrži jedan podatak. Format niza je <ime podatka>=<vrijednost>.
Primjer informacijske poruke:
3.3. Zahtjev
Zahtjev u trećem oktetu zaglavlja ima upisanu vrijednost 3. Zahtjevima se naprava
upravlja, ili se dohvaćaju podaci s naprave. Nizovi znakova u zahtjevu su naredbe. Format
naredbe je:<ime naredbe>:<ime podatka>:<vrijednost>. Npr. niz set:temperature:21
predstavlja naredbu imena set, koja radi s podatkom temperature. Vrijednost podatka je 21.
Ukoliko naprava ne očekuje jedan parametar iz naredbe, onda se on izostavlja. Npr.
naredba get:temperature: ne zahtjeva vrijednost podatka.
Ukoliko je u zaglavlju zahtjeva postavljena zastavica C, od naprave koja obraĎuje
zahtjev očekuje se slanje odgovora.
Primjer zahtjeva:
Prethodni primjer predstavlja zahtjev s kojim se pokušava pročitati vrijednost podataka
VERZIJA = 1
TIP PORUKE = 2
VELIČINA = 16
ZASTAVICE: P = 1, T = 0, E = 0, C = 0, R = 0, S = 0
TTL = 64
ID PRIMATELJA= 0
ID POŠILJATELJA = 2
ID PORUKE = 347
[14 | 'temperature=21']
VERZIJA = 1
TIP PORUKE = 3
VELIČINA = 20
ZASTAVICE: P = 1, T = 0, E = 0, C = 1, R = 1, S = 0
TTL = 64
ID PRIMATELJA= 2
ID POŠILJATELJA = 999999
ID PORUKE = 47
[16 | 'get:temperature:\0\0']
10
temperature s naprave. Sljedeći primjer predstavlja zahtjev s kojim se u napravu želi
upisati podatak desired_temperature.
Primjer zahtjeva:
3.4. Odgovor
Odgovor u trećem oktetu ima upisanu vrijednost 4. Odgovor šalje ureĎaj kao
rezultat zahtjeva. Prvi niz u odgovoru mora sadržavati identifikator poruke (zahtjeva) za
koju se šalje odgovor. Odgovor može imati postavljenu zastavicu E koja signalizira
pogrešku jer se zahtjev ne može obraditi.
Primjer odgovora:
VERZIJA = 1
TIP PORUKE = 3
VELIČINA = 28
ZASTAVICE: P = 1, T = 0, E = 0, C = 1, R = 1, S = 0
TTL = 64
ID PRIMATELJA= 2
ID POŠILJATELJA = 999999
ID PORUKE = 48
[28 | 'set:desired_temperature:17']
VERZIJA = 1
TIP PORUKE = 4
VELIČINA = 40
ZASTAVICE: P = 1, T = 0, E = 0, C = 0, R = 0, S = 0
TTL = 64
ID PRIMATELJA= 999999
ID POŠILJATELJA = 2
ID PORUKE = 2526
[13 | 'MESSAGE_ID=48\0']
[22 | 'desired_temperature=17']
11
4. OSTVARENJE SUSTAVA
U ovom radu sustav čine servis u oblaku, jedan pristupnik i tri ureĎaja. Servis u
oblaku je implementiran kao Java Web aplikacija. Pristupnik i ureĎaji su implementirani za
operacijske sustave s Linux jezgrom. UreĎaji u sustavu su brava, klima ureĎaj i
termometar. Dijagram razmještaja sustava prikazan je na slici 4.1.
Slika 4.1: Dijagram razmještaja sustava
12
Na dijagramu se nalazi sedam komponenti. Prva komponenta je Tomcat Server.
Ona predstavlja server s dvije aplikacije. Prva aplikacija je korisnička aplikacija. Korisnik
s korisničkom aplikacijom upravlja preko web preglednika. Druga aplikacija je servis u
oblaku. Servis u oblaku komunicira sa bazom podataka. Korisnička aplikacija i servis u
oblaku ne moraju se nalaziti na istom serveru, jer su to dva odvojena sustava koja
komuniciraju HTTP protokolom.
Komponente termometar, klima ureĎaj i brava predstavljaju naprave u sustavu.
Naprave i pristupnik sadrže aplikacije send i recv, imenovane cjevovode input i output, te
JAR izvršnu datoteku. Aplikacija recv prima sve Ethernet pakete sa lokalne mreže. Ako
paket sadrži poruku za napravu, zapisuje poruku u imenovani cjevovod input. Aplikacija
send čita poruke iz imenovanog cjevovoda output te ih prosljeĎuje u lokalnu mrežu u
Ethernet paketima. JAR izvršne datoteke simuliraju rad naprave. Poruke primaju iz
imenovanog cjevovoda input, a šalju u imenovani cjevovod output.
Pristupnik sadrži aplikaciju Gateway.jar koja komunicira sa servisom u oblaku
HTTP protokolom. S termometrom, klima ureĎajem i bravom, pristupnik komunicira
Ethernet protokolom.
Implementacija sustava i upute za pokretanje sustava su priložene uz ovaj rad na
DVD optičkom mediju.
4.1. Implementacija servisa u oblaku
Servis u oblaku se sastoji od baze podataka i tri sučelja za komunikaciju sa
servisom. Protokol koji se koristi za komunikaciju je HTTP protokol verzije 1.1. Jedno
sučelje je skup HTTP zahtjeva koje servis može obraditi. Sučelja koje servis podržava su:
korisničko sučelje, administratorsko sučelje i sučelje za pristupnike. Komunikacija se vrši
tako da klijenti servisa šalju zahtjeve, a servis vraća odgovore. Većina odgovora se vraća u
JSON [7] formatu. Servis mora imati svoj jedinstveni identifikator od osam okteta kao i
svaka naprava, kako bi mogao slati poruke napravama. Identifikator servisa u ovom radu je
9223372036854775806.
4.1.1. Baza podataka
Servis u oblaku sadrži bazu podataka za podatke o ureĎajima i korisnicima. Baza
podataka korištena u ovom radu je PostgreSQL 9.3.9 [8]. Relacijski model baze je prikazan
13
na slici 4.2. Ukoliko tablica na slici ima primarni ključ, on je označen s ikonom ključa koja
se nalazi lijevo od imena atributa. Obavezni atributi u entitetima na slici su označeni
podebljanim fontom.
Slika 4.2: Model baze podataka
Tablica iot_user predstavlja korisnika sustava. Tablica ima strani ključ role_id na
tablicu role. Atribut username je jedinstven za svakog korisnika. Atribut role_id nije
obavezan. Atribut password_hash sadrži SHA-256 sažetak lozinke koju pristupnik koristi
14
za autorizaciju na servisu u oblaku. Sažetak je zapisan kao niz okteta u heksadecimalnom
formatu.
Tablica role predstavlja ulogu korisnika. Atribut name sadrži naziv uloge. Sustav
razlikuje samo ulogu s nazivom admin.
Tablica user_agent predstavlja aplikaciju pomoću koje korisnik koristi servis u
oblaku. Atribut username je strani ključ na entitet iz tablice iot_user. Vrijednost ostalih
atributa je proizvoljna.
Tablica gateway predstavlja pristupnik. Atribut owner je strani ključ koji
referencira atribut username u tablici iot_user. Atribut password_hash sadrži SHA-256
sažetak lozinke koju pristupnik koristit za autorizaciju na servisu u oblaku. Sažetak je
zapisan kao niz okteta u heksadecimalnom formatu.
Tablica device predstavlja napravu. Atribut owner je strani ključ koji referencira
atribut username u tablici iot_user. Atribut password je lozinka koju naprava koristi za
kriptiranje poruka.
Tablica device_gateway predstavlja binarnu vezu više-prema-više izmeĎu tablica
device i gateway. Atribut device_id je strani ključ na istoimeni atribut u tablici device, a
atribut gateway_id je strani ključ na istoimeni atribut u tablici gateway.
Tablica data predstavlja jedan podatak koji naprava može poslati ili primiti. Atribut
device_id u tablici je strani ključ na istoimeni atribut u tablici device. Atribut name je ime
podatka.
Tablica command predstavlja naredbu koju naprava može izvesti. Naredba ima
strani ključ data_id koji se referencira na tablicu data. Jedna naredba može kao parametar
koristiti samo jedan podatak. Atribut command je ime naredbe. Atribut command_type
može poprimiti vrijednosti READ, WRITE ili ACTION. Naredbe tipa READ mogu samo
čitati podatke s naprave. Naredbe tipa WRITE podatke na napravi mogu i mijenjati.
Naredbe tipa ACTION su naredbe koje osim mijenjanja podataka upravljaju napravom.
Tablica data_history predstavlja vrijednost podataka. Vrijednost podataka sadrži
strani ključ data_id koji se referencira na tablicu data. Atribut value je vrijednost podatka,
a atribut timestamp je vrijeme u kojem je podatak poprimio tu vrijednost.
Tablica data_permission predstavlja dozvolu koju korisnik ima za odreĎeni
podatak. Tablica role_data_permission predstavlja sve dozvole koje imaju svi korisnici s
15
odreĎenom ulogom. U obje tablice atribut data_id je strani ključ koji odreĎuje podataka na
koji se dozvola odnosi. Atribut type odreĎuje vrstu dozvole, te može poprimiti vrijednosti
r, w i rw. Ukoliko atribut ima vrijednost r, korisnik može izvršavati samo naredbe koje ne
mijenjaju vrijednost podatka. Ukoliko atribut ima vrijednost w, korisnik može izvršavati
samo one naredbe koje mijenjaju vrijednost podataka. Za vrijednost rw korisnik može
izvršavati sve naredbe koje kao parametar koriste referencirani podatak. Tablica
data_permission sadrži strani ključ username koji se referencira na istoimeni atribut u
tablici iot_user. Tablica role_data_permission sadrži strani ključ role koji se referencira na
atribut name u tablici role.
Tablica notification_handler predstavlja upravitelja obavijestima. Upravitelj
obavijestima je mehanizam koji korisniku šalje obavijest kada se neki podatak ažurira.
Tablica sadrži dva strana ključa. Prvi stani ključ je atribut data_id koji se referencira na
podatak. Drugi strani ključ je atribut user_agent koji se referencira na korisničku
aplikaciju. U ovom radu sustav podržava slanje obavijesti samo putem elektroničke pošte.
Tada entitet u tablici notification_handler za atribut method ima upisanu adresu
elektroničke pošte, a za atribut type ima upisanu vrijednost email.
4.1.2. Korisničko sučelje
Svi zahtjevi u korisničkom sučelju koriste Basic access authentication [9] metodu
autentifikacije. Ukoliko poruka zahtjeva sadrži ulazne podatke u tijelu poruke, oni su
kodirani pomoću x-www-form-urlencoded [10] metode. Ulazni podaci se mogu nalaziti i u
putanji zahtjeva. Korisničko sučelje čini 25 zahtjeva. Svi zahtjevi korisničkog sučelja
navedeni su u dodatku A. Ukoliko neki zahtjev ulazni podatak čita iz putanje zahtjeva, u
dodatku je taj podatak u putanji označen u sljedećem formatu: {ime podatka}. Npr. putanja
/DiplomskiRadCloud/users/device/{id} sadrži ulazni podatak imena id. Ako je stvarna
putanja zahtjeva /DiplomskiRadCloud/users/device/123, vrijednost parametra id je 123.
4.1.3. Administratorsko sučelje
Administratorsko sučelje koriste korisnici koji imaju administratorsku ulogu.
Korisnik ima administratorsku ulogu ako njegov entitet u bazi sadrži strani ključ na ulogu s
imenom admin. Sučelje se koristi za dohvaćanje i pisanje podataka o drugim korisnicima.
Autentifikacija korisnika se vrši kao i u korisničkom sučelju. Administratorsko sučelje čini
15 zahtjeva. Svi zahtjevi administratorskog sučelja opisani su u dodatku B.
16
4.1.4. Sučelje za pristupnike
Sučelje za pristupnike sastoji se od dva HTTP zahtjeva. Autentifikacija pristupnika
se vrši pomoću Basic access authentication [9] metode. Kao korisničko ime koristi se
identifikator pristupnika.
Prvi zahtjev koristi HTTP metodu GET i parametriziranu putanju
/DiplomskiRadCloud/gatewayinterface/{gatewayId}. Parametar gatewayId je identifikator
pristupnika koji šalje zahtjev. Svaki pristupnik u servisu ima svoj red zahtjeva. Kada
korisnik pošalje zahtjev napravi, poruka zahtjeva za napravu se sprema u sve redove
pristupnika koji imaju pridruženu tu napravu. Kada pristupnik servisu pošalje HTTP
zahtjev za dohvaćanje poruka, servis mu u odgovoru vraća sve zahtjeve iz njegovog reda.
HTTP odgovor je formatiran kao JSON [7] niz koji sadrži poruke. Poruke su kodirane
pomoću BASE64 koda [5].
Primjer HTTP zahtjeva za dohvaćanje poruka je:
Primjer HTTP odgovora na prethodni zahtjev je:
U tijelu odgovora se nalaze dvije poruke za naprave. Znakovi u tijelu poruke su kordirani
UTF-8 kodnom stranicom.
Drugi zahtjev koristi HTTP metodu POST i putanju
/DiplomskiRadCloud/gatewayinterface. Zahtjev pristupnik koristi kako bi proslijedio
poruku servisu u oblaku. Zahtjev sadrži tri parametra. Prvi parametar je gatewayId te
odreĎuje identifikator pristupnika. Drugi parametar je deviceId te odreĎuje identifikator
naprave. Treći parametar je message te odreĎuje poruku koju je neka naprava poslala.
Poruka u zahtjevu je kodirana BASE64 [5] kodom. Parametri se nalaze u tijelu zahtjeva
kodirani x-www-form-urlencoded [10] metodom. Prilikom posluživanja svakog zahtjeva,
GET /DiplomskiRadCloud/gatewayinterface/9999HTTP/1.1 Host: localhost:8080 Authorization: Basic OTk5OToxMTAyMTk5MA==
HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/html;charset=UTF-8 Content-Length: 131 ["AAEDmAAMAP8AAAAAAAAIrn/////////+AAAAAAAAAAMACWdldDp0ZW1wOgA=","AAEDmAAQAP8AAAAAAAAIrn/////////+AAAAAAAAAAQADXN0b3A6c3RhcnRlZDoA"]
17
servis ažurira atribut last_gateway_id u tablici device. UreĎaj za ažuriranje je odreĎen
parametrom deviceId a vrijednost atributa last_gateway_id parametrom gatewayId.
Ukoliko je poslana poruka odgovor naprave na zahtjev ili informacijska poruka naprave,
servis u tablicu data_history sprema podatke koje je naprava poslala.
Primjer HTTP zahtjeva za prosljeĎivanje poruka je:
Ako je zahtjev uspješno poslužen, HTTP status odgovora je 200, a tijelo poruke je
prazno. U suprotnom HTTP status odgovora je 400, a tijelo odgovora sadrži samo opis
greške.
4.2. Implementacija naprava
Naprave meĎusobno i s pristupnikom komuniciraju pomoću Ethernet protokola.
Standard korištenog protokola je 802.3. Protokol pripada sloju podatkovne poveznice.
Razlog korištenja protokola niske razine je u tome što naprave mogu biti jednostavni
senzori, bez implementiranog cijelog komunikacijskog stoga. Zbog korištenog protokola,
maksimalna veličina poruke koju naprava šalje je 1500 okteta. Rad naprava je simuliran na
Raspberry Pi računalu.
U sustavu su implementirane tri naprave: termometar, klima ureĎaj i brava. Sve
naprave u sustavu moraju imati jedinstveni identifikator. Identifikator termometra je 1111,
identifikator klima ureĎaja je 2222 a identifikator brave je 3333.
4.2.1. Implementacija termometra
Termometar je naprava koja svake minute šalje informacijsku poruku s očitanom
temperaturom. Kada se termometar uključi šalje pozdravnu poruku. Informacijsku poruku
šalje svakih pet minuta.
Primjer pozdravne poruke termometra:
POST /DiplomskiRadCloud/gatewayinterface HTTP/1.1 Host: localhost:8080 Authorization: Basic OTk5OTowMDAwMDAwMA== Content-Type: application/x-www-form-urlencoded gatewayId=9999&deviceId=2222&message=AAEDmAAYAP8AAAAAAAAIrn%2F%2F%2F%2F%2F%2F%2F%2F%2F%2BAAAAAAAAAAUAE3NldDpkZXNpcmVkX3RlbXA6MTIAAAA%3D
18
U primjeru identifikator primatelja nije poznat. Identifikator termometra je 1111.
Identifikator poruke je 1. Za svaku sljedeću poruku koju termometar pošalje, identifikator
je uvećan za 1. U tijelu poruke se nalaze osnovne informacije o napravi: ime naprave, opis
naprave i podaci koje naprava može poslati.
Sljedeća poruka koju termometar pošalje nakon paljenja je informacijska poruka.
Identifikator poruke je 2. U tijelu poruke se nalazi vrijednost očitane temperature.
Primjer informacijske poruke:
4.2.2. Implementacija klima ureĎaja
Klima ureĎaj sadrži tri podatka: temp, desired_temp i started. Podatak temp je
temperatura prostora u kojem se klima nalazi. Podatak desired_temp je željena temperatura
prostora, tj. temperatura na koju klima ureĎaj treba rashladiti ili ugrijati prostor. Ukoliko
ureĎaj hladi ili grije prostoriju, vrijednost podatka started je true,u suprotnom vrijednost
podatka je false. Klima ureĎaj svakih pet minuta šalje pozdravnu poruku. Primjer
pozdravne poruke je:
VERZIJA = 1 TIP PORUKE = 1 VELIČINA = 136 ZASTAVICE: P = 1, T = 0, E = 0, C = 0, R = 0, S = 0 TTL = 255 ID PRIMATELJA= 0 ID POŠILJATELJA = 1111 ID PORUKE = 1 DEVICE_NAME=thermometer
DEVICE_DESCRIPTION=thermometer that broadcasts temperature every minute DEVICE_DATA=temperature
VERZIJA = 1 TIP PORUKE = 2 VELIČINA = 48 ZASTAVICE: P = 1, T = 0, E = 0, C = 0, R = 0, S = 0 TTL = 255 ID PRIMATELJA= 0 ID POŠILJATELJA = 1111 ID PORUKE = 2
temperature=18
VERZIJA = 1 TIP PORUKE = 1 VELIČINA = 148 ZASTAVICE: P = 1, T = 0, E = 0, C = 0, R = 0, S = 0 TTL = 255 ID PRIMATELJA= 0 ID POŠILJATELJA = 2222 ID PORUKE = 1
DEVICE_NAME=air conditioner DEVICE_DESCRIPTION=simple airconditioner DEVICE_DATA=temp, desired_temp, started DEVICE_COMMANDS=get, set, start, stop
19
Naredbe koje ureĎaj podržava su:
1. get:desired_temp:,
2. set:desired_temp:<value>,
3. get:temp:,
4. start:started:,
5. stop:started:.
Prva naredba dohvaća vrijednost željene temperature. Primjeri zahtjeva i odgovora naredbe
su:
Druga naredba postavlja željenu temperaturu. Naredba zahtjeva vrijednost podatka.
Podatak se nalazi na kraju naredbe. Primjeri zahtjeva i odgovora naredbe su:
Treća naredba dohvaća očitanu temperaturu u prostoriji. Primjeri zahtjeva i odgovora
naredbe su:
VERZIJA = 1 TIP PORUKE = 4 VELIČINA = 36 ZASTAVICE: P = 1, T = 0, E = 0, C = 0, R = 0, S = 0 TTL = 255 ID PRIMATELJA= 9223372036854775806 ID POŠILJATELJA = 2222 ID PORUKE = 2
MESSAGE_ID=7
desired_temp=19
VERZIJA = 1 TIP PORUKE = 3 VELIČINA = 20 ZASTAVICE: P = 1, T = 0, E = 0, C = 1, R = 1, S = 0 TTL = 255 ID PRIMATELJA= 2222 ID POŠILJATELJA = 9223372036854775806 ID PORUKE = 7
get:desired_temp:
VERZIJA = 1 TIP PORUKE = 3 VELIČINA = 24 ZASTAVICE: P = 1, T = 0, E = 0, C = 1, R = 1, S = 0 TTL = 255 ID PRIMATELJA= 2222 ID POŠILJATELJA = 9223372036854775806 ID PORUKE = 8
set:desired_temp:17
VERZIJA = 1 TIP PORUKE = 4 VELIČINA = 36 ZASTAVICE: P = 1, T = 0, E = 0, C = 0, R = 0, S = 0 TTL = 255 ID PRIMATELJA= 9223372036854775806 ID POŠILJATELJA = 2222 ID PORUKE = 3
MESSAGE_ID=8
desired_temp=17
VERZIJA = 1 TIP PORUKE = 3 VELIČINA = 12 ZASTAVICE: P = 1, T = 0, E = 0, C = 1, R = 1, S = 0 TTL = 255 ID PRIMATELJA= 2222 ID POŠILJATELJA = 9223372036854775806 ID PORUKE = 9
get:temp:
VERZIJA = 1 TIP PORUKE = 4 VELIČINA = 28 ZASTAVICE: P = 1, T = 0, E = 0, C = 0, R = 0, S = 0 TTL = 255 ID PRIMATELJA= 9223372036854775806 ID POŠILJATELJA = 2222 ID PORUKE = 4
MESSAGE_ID=9
temp=14
20
Četvrta naredba pali klima ureĎaj. Primjeri zahtjeva i odgovora naredbe su:
Peta naredba gasi klima ureĎaj. Primjeri zahtjeva i odgovora naredbe su:
4.2.3. Implementacija brave
Brava je naprava koja sadrži jedan podatak, locked. Vrijednost podatka može biti
true ili false. Brava komunicira samo kriptiranim porukama. Zato svaka poruka koju brava
pošalje, ili koja je namijenjena bravi ima postavljenu zastavicu S.
Brava podržava tri naredbe:
1. get:locked:, 2. lock:locked:, 3. unlock:locked:.
Prva naredba provjerava je li brava zaključana. Druga naredba zaključava bravu. Treća
naredba otključava bravu. Odgovor svih triju naredbi vraća podatak locked. Vrijednost
podataka je true ako je brava zaključana nakon izvršavanja naredbe. U suprotnom
vrijednost podatka je false.
I zahtjev i odgovor imaju dva niza u tijelu poruke. Prvi niz je kriptirano tijelo
originalne poruke. Drugi niz SHA-256 sažetak originalne poruke. Okteti kriptirane poruke
i sažetka kodirani su BASE64 [5] kodom.
VERZIJA = 1 TIP PORUKE = 3 VELIČINA = 16 ZASTAVICE: P = 1, T = 0, E = 0, C = 1, R = 1, S = 0 TTL = 255 ID PRIMATELJA= 2222 ID POŠILJATELJA = 9223372036854775806 ID PORUKE = 10
start:started:
VERZIJA = 1 TIP PORUKE = 4 VELIČINA = 32 ZASTAVICE: P = 1, T = 0, E = 0, C = 0, R = 0, S = 0 TTL = 255 ID PRIMATELJA= 9223372036854775806 ID POŠILJATELJA = 2222 ID PORUKE = 5
MESSAGE_ID=10
started=true
VERZIJA = 1 TIP PORUKE = 3 VELIČINA = 16 ZASTAVICE: P = 1, T = 0, E = 0, C = 1, R = 1, S = 0 TTL = 255 ID PRIMATELJA= 2222 ID POŠILJATELJA = 9223372036854775806 ID PORUKE = 11
stop:started:
VERZIJA = 1 TIP PORUKE = 4 VELIČINA = 32 ZASTAVICE: P = 1, T = 0, E = 0, C = 0, R = 0, S = 0 TTL = 255 ID PRIMATELJA= 9223372036854775806 ID POŠILJATELJA = 2222 ID PORUKE = 6
MESSAGE_ID=11
started=true
21
Primjer zahtjeva i odgovora za bravu su:
4.3. Implementacija pristupnika
Pristupnik kao i sve ostale naprave mora imati svoj jedinstveni identifikator.
Identifikator implementiranog pristupnika je 9999. Svaku poruku koju pristupnik primi iz
mreže lokalnih naprava, prosljeĎuje servisu u oblaku. Pristupnik svakih deset sekundi sa
servisa u oblaku preuzima poruke za naprave u njegovoj mreži. Način komuniciranja
pristupnika i servisa u oblaku je opisan u poglavlju 4.1.4.
4.4. Implementacija korisničke aplikacije
U ovom radu korisnička aplikacija je implementirana kao WEB aplikacija. Korisnik
aplikaciji pristupa pomoću preglednika. Da bi korisnik imao pristup servisu, prvo se mora
registrirati. Prilikom registracije aplikacija u servisu u oblaku stvara novog korisnika i
novog agenta za tog korisnika. Aplikacija za stvaranje korisnika i agenta koristi
administratorsko sučelje servisa u oblaku. Zbog toga je i aplikacija korisnik servisa u
oblaku s administratorskim ovlastima. Za sve ostale zahtjeve korisnika aplikacija koristi
korisničko sučelje servisa u oblaku.
Početno sučelje aplikacije prikazano je na slici 4.3. Korisnik se pomoću tog sučelja
može registrirati, ili prijaviti ukoliko je već registriran.
VERZIJA = 1 TIP PORUKE = 3 VELIČINA = 96 ZASTAVICE: P = 1, T = 0, E = 0, C = 1, R = 1, S = 1 TTL = 255 ID PRIMATELJA= 3333 ID POŠILJATELJA = 9223372036854775806 ID PORUKE = 47
f8OqDyzkySj9TV8ikNteMMhvscEO3dmdC9EZdMVqAd0= VmGQ65aELdrlytYjmx51rTpDs59BcF1ktYKFfO4P3oQ=
VERZIJA = 1 TIP PORUKE = 4 VELIČINA = 32 ZASTAVICE: P = 1, T = 0, E = 0, C = 0, R = 0, S = 1 TTL = 255 ID PRIMATELJA= 9223372036854775806 ID POŠILJATELJA = 3333 ID PORUKE = 34
70cZSepYmJwCr7PKEw40WC52S2TEzIxQucN6UJQdHgDI
b7HBDt3ZnQvRGXTFagHd
AOhL4qltT8K9sE+swzZItuvBw/R4eg95DiEIdFFP0AQ=
22
Slika 4.3: Početno sučelje aplikacije
Na slici 4.4 nalazi se korisničko sučelje nakon prijave ili registracije korisnika. Na
sučelju se nalazi pet poveznica. Poveznica Pristupnici otvara sučelje za prikazivanje i
stvaranje pristupnika. Poveznica Uređaji otvara sučelje za prikazivanje i stvaranje ureĎaja.
Poveznica Podaci otvara sučelje za prikaz svih podataka za koje korisnik ima dozvolu.
Poveznica Dozvole otvara sučelje koje prikazuje sve dozvole za podatke koje su dane
drugim korisnicima sustava. Poveznica Notifikacije otvara sučelje koje prikazuje sve
podatke za koje je registrirano slanje obavijesti putem elektroničke pošte.
Odabirom poveznice Pristupnici prikazuje se sučelje sa svim pristupnicima u
vlasništvu korisnika. Prikaz tog sučelja prikazan je na slici 4.5. Pristupnici su prikazani u
tablici. Na dnu sučelja nalazi se poveznica za stvaranje novog pristupnika. Sučelje za
stvaranje novog pristupnika je prikazano na slici 4.6. Sučelje sadrži polja za unos
identifikatora, imena, opisa i lozinke. Za uspješno stvaranje pristupnika korisnik mora
unijeti sve tražene podatke.
23
Slika 4.4: Korisničko sučelje
Slika 4.5: Pristupnici
Ukoliko korisnik klikne na identifikator u tablici pristupnika, otvara se sučelje za
prikaz pristupnika prikazano na slici 4.7. Sučelje sadržava gumb za brisanje pristupnika.
24
Slika 4.6: Sučelje za stvaranje pristupnika
Slika 4.7: Prikaz pristupnika
Odabirom poveznice Uređaji otvara se sučelje za prikaz svih naprava u vlasništvu
korisnika. Primjer tog sučelja prikazan je na slici 4.8. Naprave su prikazane u tablici. Ispod
tablice nalazi se poveznica za stvaranje novog sučelja. Ukoliko korisnik klikne na
identifikator naprave u tablici otvara se sučelje za prikaz pojedine naprave.
25
Slika 4.8: Prikaz naprava
Prikaz pojedine naprave prikazan je na slici 4.9. Na početku sučelja nalazi se
tablica za prikaz naprave. Ispod tablice se nalazi gumb koji briše napravu iz sustava. Ispod
gumba nalazi se polje za unos identifikatora pristupnika. Pomoću tog polja napravi se
pridružuje pristupnik, tako da servis u oblaku može komunicirati s tom napravom preko
pridruženog pristupnika. Ispod polja za pridruživanje pristupnika nalazi se tablica sa svim
pridruženim pristupnicima. Svaki redak tablice sadrži gumb koji uklanja pristupnik iz
pridruženih pristupnika. Ispod tablice pristupnika nalazi se tablica podataka s kojima
naprava radi. Zadnji element sučelja je poveznica za stvaranje novog ureĎaja.
Na slici 4.10 je prikazano sučelje za stvaranje nove naprave. Obvezni podaci za
stvaranje naprave su identifikator, ime, opis i definicija. Lozinku korisnik mora unijeti ako
ureĎaj koristi lozinku za kriptiranje poruka. U polje za definiciju ureĎaja korisnik unosi
poveznicu na kojoj je moguće dohvatiti dio definicije ureĎaja za stvaranje podataka i
naredbi koje ureĎaj podržava. Sama korisnička aplikacija podržava tri poveznice za
definiciju:
1. /DiplomskiRadAplikacija/definitions/thermometer,
2. /DiplomskiRadAplikacija/definitions/airconditioner,
3. /DiplomskiRadAplikacija/definitions/lock.
26
Slika 4.9: Prikaz naprave
Prva poveznica putem HTTP odgovora vraća definiciju termometra. Druga poveznica
vraća definiciju klima ureĎaja, a treća definiciju brave. Opis definicije ureĎaja je opisan u
dodatku A (četvrti zahtjev u tablici).
27
Slika 4.10: Sučelje za stvaranje nove naprave
Na slici 4.11 prikazano je sučelje za rad s podatkom naprave. Na vrhu sučelja nalazi
se tablica s identifikatorom podatka, imenom podatka i identifikatorom ureĎaja koji sadrži
navedeni podatak. Ispod tablice nalaze se naredbe za rad s podatkom. Svaka naredba ima
gumb za izvršavanje naredbe. Ukoliko naredba može primiti ulazni parametar (vrsta
naredbe je WRITE), pored gumba se nalazi i polje za unos parametra. Naredbe mogu
upravljati ureĎajem, dohvaćati podatke s ureĎaja ili upisivati podatke u ureĎaj.
Za svaki podatak se može dodati adresa elektroničke pošte za primanje obavijesti
kada se vrijednost podataka promijeni, tj. kada naprava pošalje poruku na navedenim
podatkom. Za odreĎeni podatak se može dodijeliti pravo pristupa nekom drugom
korisniku. Na dnu sučelja prikazana je tablica sa zadnjim vrijednostima podataka koje je
naprava poslala.
28
Slika 4.11: Sučelje za rad s podacima naprave
Dodane adrese elektroničke pošte korisnik može vidjeti na poveznici Notifikacije u
korisničkom sučelju aplikacije. Dodane adrese su prikazane na slici 4.12. Pokraj svake
adrese se nalazi i gumb za njeno brisanje.
29
Slika 4.12: Adrese elektroničke pošte za primanje obavijesti
Dodijeljena prava pristupa drugim korisnicima prikazana su na slici 4.13. Svako
pravo pristupa ima gumb za njegovo brisanje.
Slika 4.13: Dodijeljena prava pristupa
30
5. ZAKLJUČAK
U radu je definirana programska i mrežna arhitektura za jednostavni sustav Internet
stvari. Komponente arhitekture su korisnička aplikacija, servis u oblaku, pristupnik te
naprave. U implementiranom sustavu korisnik lako može upravljati svim napravama putem
interneta iako naprave nemaju svoju IP adresu. Korisnik putem korisničke aplikacije
komunicira sa servisom u oblaku. Pristupnik služi kao posrednik izmeĎu servisa u oblaku i
naprava. Naprave komuniciraju meĎusobno i s pristupnikom.
Komunikacija izmeĎu naprava i pristupnika implementirana je u sloju podatkovne
poveznice Ethernet protokolom. Takva komunikacija omogućuje da naprave budu krajnje
jednostavni ureĎaji. S druge pak strane, komunikacija naprava u sloju podatkovne
poveznice predstavlja ograničenje s obzirom na maksimalnu veličinu poruke. Zbog toga
maksimalna veličina poruke koju naprava može poslati ili primiti je 1500 okteta.
Sve naprave u sustavu moraju komunicirati istim vrstama poruka. Naprava koja
ima implementirano nekakvo sučelje za upravljanje putem interneta, ali ne podržava
aplikacijski protokol definiran u ovom radu, nije upotrebljiva u sustavu.
Servis u oblaku ne mora znati adresu pristupnika. Kada servis ima poruku koju
treba proslijediti pristupniku, čuva je u redu poruka. Tek kada pristupnik preda HTTP
zahtjev za dohvaćanje poruka, servis mu u odgovoru zahtjeva predaje poruku. MeĎutim
ukoliko korisnik generira zahtjev napravi, a naprava ili pristupnik nisu aktivni, korisnik
neće dobiti obavijest o grešci u sustavu.
Sljedeći bi korak bio uvesti podršku za rad s napravama koje imaju svoju IP adresu.
Baza podataka i sučelje servisa za stvaranje naprava već imaju podršku za stvaranje
naprava s adresama. Ukoliko neka naprava ima implementiran cijeli komunikacijski stog,
naredbe može primati izravno s korisničke aplikacije. Za takvu napravu pristupnik uopće
ne bi bio potreban. Drugi korak bi bio uvoĎenje sučelja u servisu u oblaku za generiranje i
slanje zahtjeva napravama koje ne podržavaju aplikacijski protokol definiran u ovom radu.
Potpis: __________________________
31
LITERATURA
[1] Takahashi D., The top 11 tech trends of the Consumer Electronics Show, 12. siječnja
2015., http://venturebeat.com/2015/01/12/the-top-11-tech-trends-of-the-consumer-
electronics-show/, 14. lipnja 2015.
[2] The Internet of Things, 12. lipnja 2015., https://ec.europa.eu/digital-
agenda/en/internet-things, 14. lipnja 2015.
[3] Interent of Things Architecture, http://www.iot-a.eu/public, 14. lipnja 2015.
[4] OpenIoT, http://openiot.eu , 14. lipnja 2015.
[5] Josefsson S., The Base16, Base32 and Base64 Data Encodings, listopad 2006.,
https://tools.ietf.org/html/rfc4648, 20. svibnja 2015.
[6] Kaliski B., PKCS #7: Cryptographics Message Syntax, ožujak 1998.,
https://tools.ietf.org/html/rfc2315, 14. lipnja 2015.
[7] Crockford D., The application/json Media Type for JavaScript Object Anotation,
Lipanj 2006., https://tools.ietf.org/html/rfc4627, 14. lipnja 2015.
[8] PostgreSQL, http://www.postgresql.org/docs, 14. lipnja 2015.
[9] Franks J, Hallam-Baker P., Hostetler J., Lawrence S., Leach P., Loutonen A., Stewart
L., HTTP Authentication: Basic and Digest Access Authentication, lipanj 1999.,
http://tools.ietf.org/html/rfc2617#section-2, 14. lipnja 2015.
[10] URL Standard, 18. lipnja 2015., https://url.spec.whatwg.org/#application/x-www-
form-urlencoded, 19. lipnja 2015.
32
SAŽETAK
Primjer temeljne arhitekture za izgradnju sustava Internet stvari
Ovaj rad opisuje implementaciju jednostavne arhitekture sustava Interneta stvari.
Najprije se opisuju komponente arhitekture. Komponente arhitekture su korisnička
aplikacija, servisu u oblaku, pristupnik i naprave. Zatim se opisuje aplikacijski protokol
koji naprave u sustavu koriste. Nakon toga opisuje se implementacija i komunikacija
komponenti sustava.
Ključne riječi: Internet stvari, adresiranje, servis u oblaku
SUMMARY
Title: Example of underlying architecture for Internet of Things
Summary
This thesis describes the implementation of a simple Internet of Things
architecture. At the beginning, components of the architecture are described. Components
of the system are user application, cloud service, gateway and devices. Following that, the
communication protocol used by smart devices in the system is explained. In the end,
implementation and communication of system components is described.
Keywords: Internet of Things, addressing, Cloud service
33
PRIVITAK A: KORISNIČKO SUČELJE SERVISA U OBALKU
Tablica 1: Korisničko sučelje servisa u oblaku
Metoda GET
Putanja /DiplomskiRadCloud/users/devices
Ulazni podaci
Opis Dohvaća sve naprave u vlasništvu korisnika.
Primjer odgovora
[{"owner":"user1","name":"Klima","description":"Klima","id":2222},{"owner":"us
er1","name":"Termometar","description":"termometar","id":1111},{"owner":"us
er1","name":"Lock","description":"Brava","id":3333}]
Metoda GET
Putanja /DiplomskiRadCloud/users/device/{id}
Ulazni podaci id: identifikator naprave
Opis Dohvaća napravu ako je naprava u vlasništvu korisnika. Ukoliko korisnik nije
vlasnik naprave sa zadanim identifikatorom, status odgovora je 404.
Primjer odgovora {"owner":"nsekulic","name":"Klima","description":"Klima","id":2222}
Metoda DELETE
Putanja /DiplomskiRadCloud/users/device/{id}
Ulazni podaci Identifikator naprave.
Opis
Briše napravu ako je naprava u vlasništvu korisnika. Ukoliko je naprava
uspješno obrisana vraća status 204. Ukoliko naprava ne postoji ili nije u
vlasništvu korisnika vraća status 404.
Primjer odgovora
Metoda POST
Putanja /DiplomskiRadCloud/users/device
Ulazni podaci
id: identifikator naprave, name: ime naprave, description: opis naprave,
additional_data: dodatne inforamcije o napravi, address: adresa naprave,
port: port naprave, address_type: vrsta adrese, password: lozinka, data:
podatak, command: naredba
Opis Stvara novu napravu u bazi. Osim naprave u bazu upisuje: podatke koje
34
naprava koristi, naredbe za upravljanje napravom, rw dozvole za korisnika i
upisane podatke. Ukoliko je naprava uspješno upisana u bazu vraća status
201. Obavezni parametri su id i name. Definicija podataka i naredbi se sastoji
od parametara data i command.
Format naredbe je <ime>:<tip naredbe>:<podatak>:<opis>
Primjer tijela zahtjeva:
id=111&name=primjer&description=primjerNaprave&password=pass1&data
=d1&data=d2&command=get:READ:d1:readsD1&command=set:WRITE:d2
:setsD2
Primjer odgovora {"owner":"user1","name":"Brava","id":3333}
Metoda POST
Putanja /DiplomskiRadCloud/users/device/{device_id}/gateway
Ulazni podaci device_id: identifikator naprave, gateway_id: identifikator pristupnika
Opis Pridružuje napravi pristupnik. U tablicu device_gateway stvara novi entitet s
predanim podacima. Vraća status 200 ako je pridruživanje uspješno izvedeno.
Primjer odgovora
Metoda DELETE
Putanja /DiplomskiRadCloud/users/device/{device_id}/gateway/{gateway_id}
Ulazni podaci device_id: identifikator naprave, gateway_id: identifikator pristupnika
Opis Iz tablice device_gateway briše entitet s predanim podacima. Ukoliko je
brisanje uspješno provedeno vraća status 204.
Primjer odgovora
Metoda GET
Putanja /DiplomskiRadCloud/users/gateways
Ulazni podaci
Opis Dohvaća pristupnike u vlasništvu korisnika.
Primjer odgovora
[{"owner":"nsekulic",":"Gateway1","description":"prvi_gateway","id":100},{"own
er":"nsekulic","name":"Gateway2","description":"drugi_gateway","id":101},{"o
wner":"nsekulic","name":"Gateway","description":"test gateway","id":9999}]
35
Metoda GET
Putanja /DiplomskiRadCloud/users/gateways/{id}
Ulazni podaci id: identifikator pristupnika
Opis
Dohvaća pristupnik sa zadanim identifikatorom ako je pristupnik u vlasništvu
korisnika. Status odgovora je 200 ako pristupnik postoji. Ukoliko pristupnik
ne postoji ili nije u vlasništvu korisnika status odgovora je 404.
Primjer odgovora
[{"owner":"nsekulic",":"Gateway1","description":"prvi_gateway","id":100},{"own
er":"nsekulic","name":"Gateway2","description":"drugi_gateway","id":101},{"o
wner":"nsekulic","name":"Gateway","description":"test gateway","id":9999}]
Metoda DELETE
Putanja /DiplomskiRadCloud/users/gateways/{id}
Ulazni podaci id: identifikator pristupnika
Opis
Briše pristupnik sa zadanim identifikatorom ako je pristupnik u vlasništvu
korisnika. Status odgovora je 204 ako je pristupnik uspješno obrisan. Ako
pristupnik ne postoji ili nije u vlasništvu korisnika status odgovora je 404.
Primjer odgovora
Metoda POST
Putanja /DiplomskiRadCloud/users/gateways
Ulazni podaci
id: identifikator pristupnika, name: ime pristupnika, desciption: opis
pristupnika, password: lozinka pristupnika, additional_data: dodatni podaci,
address: adresa pristupnika, port: port pristupnika, address_type: tip adrese
Opis
Stvara novi pristupnik u bazi. Identifikator, ime, opis i lozinka su obvezni
podaci. Ako je pristupnik stvoren, status odgovora je 201. U tijelu odgovora
se nalazi stvoreni pristupnik.
Primjer odgovora {"owner":"nsekulic","address":"","addressType":"","name":"Pristupnik","descrip
tion":"test","id":987,"additionalData":""}
Metoda GET
Putanja /DiplomskiRadCloud/users/device/{id}/gateways
Ulazni podaci id: identifikator naprave
Opis Dohvaća sve pristupnike kojima je naprava pridružena.
Primjer odgovora [{"owner":"nsekulic","name":"Gateway","description":"test
36
gateway","id":9999},{"owner":"nsekulic","name":"Pristupnik","description":"test
","id":987}]
Metoda GET
Putanja /DiplomskiRadCloud/users/data/{id}
Ulazni podaci id: identifikator podatka
Opis
Dohvaća opis podatka iz tablice data. Ukoliko korisnik nema dozvolu za
traženi podatak, status odgovora je 403. Ukoliko podatak ne postoji, status
odgovora je 404. Status uspješnog dohvaćanja je 200.
Primjer odgovora {"device_id":1111,"name":"temperature","id":54}
Metoda GET
Putanja /DiplomskiRadCloud/users/data/device
Ulazni podaci
Opis Dohvaća opis podataka iz tablice data za sve ureĎaje koji su u vlasništvu
korisnika. Status uspješnog dohvaćanja je 200.
Primjer odgovora
[{"device_id":1111,"name":"temperature","id":54},{"device_id":2222,"name":"d
esired_temp","id":72},{"device_id":2222,"name":"temp","id":73},{"device_id":2
222,"name":"started","id":74},{"device_id":3333,"name":"locked","id":80}]
Metoda GET
Putanja /DiplomskiRadCloud/users/data/device/{device_id}
Ulazni podaci device_id: identifikator naprave
Opis Dohvaća opis podataka iz tablice data za zadanu napravu. Status uspješnog
dohvaćanja je 200.
Primjer odgovora [{"device_id":2222,"name":"desired_temp","id":72},{"device_id":2222,"name":"
temp","id":73},{"device_id":2222,"name":"started","id":74}]
Metoda GET
Putanja /DiplomskiRadCloud/users/data/permission
Ulazni podaci
Opis Dohvaća opis podataka iz tablice data za sve podatke za koje korisnik ima
dozvolu dodijeljenu od drugog korisnika. Status uspješnog dohvaćanja je 200.
37
Primjer odgovora [{"device_id":347,"name":"pressure","id":109},{"device_id":303,"name":"temp",
"id":220}]
Metoda GET
Putanja /DiplomskiRadCloud/users/data/role
Ulazni podaci
Opis
Dohvaća opis podataka iz tablice data za sve podatke za koje korisnikova
uloga ima dozvolu dodijeljenu od drugog korisnika. Status uspješnog
dohvaćanja je 200.
Primjer odgovora [{"device_id":347,"name":"pressure","id":109}]
Metoda GET
Putanja /DiplomskiRadCloud/users/data/{id}/{count}
Ulazni podaci id: identifikator opisa podatka, count: broj vrijednosti
Opis Dohvaća zadnjih n vrijednosti podatka iz tablice data_history. Broj
vrijednosti zadan je podatkom count.
Primjer odgovora
[{"data_id":44,"data_history_id":25,"value":"21","timestamp":"2015-04-12
16:05:06.000"},{"data_id":44,"data_history_id":24,"value":"22","timestamp":"2
015-04-12 15:05:06.000"},{"data_id":44,"data_history_id":23,"value":"22",
"timestamp":"2015-04-12 14:05:06.000"},{"data_id":44,"data_history_id":22,
"value":"23","timestamp":"2015-04-12 13:05:06.000"},{"data_id":44,
"data_history_id":21,"value":"24","timestamp":"2015-04-12 12:05:06.000"}]
Metoda GET
Putanja /DiplomskiRadCloud/users/data/{id}/commands
Ulazni podaci id: identifikator opisa podatka
Opis Dohvaća sve naredbe za zadani podatak iz tablice command.
Primjer odgovora
[{"command_id":63,"command_type":"READ","data_id":72,"description":"gets
desiredtemp","command":"get"},{"command_id":64,
"command_type":"WRITE","data_id":72,"description":"setsdesiredtemp","com
mand":"set"}]
Metoda GET
Putanja /DiplomskiRadCloud/users/granteduserspermissions
38
Ulazni podaci
Opis Dohvaća sve dozvole koje je korisnik dodijelio drugim korisnicima.
Primjer odgovora [{"data":{"device_id":3333,"name":"locked","id":80},"id":84,"type":"r","user":{"u
sername":"nsekulic2"}}]
Metoda POST
Putanja /DiplomskiRadCloud/users/data/{id}/userpermission
Ulazni podaci id: identifikator podatka, username: korisničko ime, type: wrsta dozvole (r, w,
rw)
Opis
Dodaje korisniku dozvolu na odreĎeni podatak. Podatak je odreĎen
parametrom id, korisnik je odreĎene parametrom username, a vrsta dozvole
je odreĎena parametrom type. Ako podatak ne postoji, status odgovora je 404.
Ako ureĎaj s predanim podatkom nije u vlasništvu korisnika, status odgovora
je 403. Ako je zahtjev uspješno obraĎen, status odgovora je 200.
Primjer odgovora [{"data":{"device_id":3333,"name":"locked","id":80},"id":84,"type":"r","user":{"u
sername":"nsekulic2"}}]
Metoda DELETE
Putanja /DiplomskiRadCloud/users/datapermission/{id}
Ulazni podaci id: identifikator dozvole za odreĎeni podatak
Opis
Briše dozvolu koju je korisnik dodijelio drugom korisniku. Parametar id je
identifikator dozvole. Ukoliko je dozvola uspješno obrisana status odgovora
je 200.
Primjer odgovora DELETED
Metoda POST
Putanja /DiplomskiRadCloud/users/notification/email
Ulazni podaci email: adresa elektroničke pošte, userAgentId: identifikator aplikacije, dataId:
identifikator podatka, name: ime primatelja obavijesti
Opis
Dodaje novu adresu elektroničke pošte za primanje obavijesti. Ukoliko je
dodavanje uspješno izvršeno, status odgovora je 200. Podatak za koji se
obavijesti šalju je definiran ulaznim parametrom dataId. Parametar email je
adresa elektroničke pošte. Parametar userAgentId je identifikator korisničke
aplikacije koja izvršava zahtjev.
Primjer odgovora {"method":"[email protected]","data_id":72,"name":"test","id":26,"type
":"email","user_agent_id":35}
Metoda GET
Putanja /DiplomskiRadCloud/users/notification/email
39
Ulazni podaci
Opis Dohvaća sve primatelje obavijesti koje je korisnik stvorio.
Primjer odgovora
[{"method":"[email protected]","data_id":81,"name":"nikola.sekulic","id":22
,"type":"email","user_agent_id":35},{"method":"[email protected]"
,"data_id":54,"name":"nikola.sekulic347","id":25,"type":"email","user_agent_id
":35},{"method":"[email protected]","data_id":72,"name":"test","id":26
,"type":"email","user_agent_id":35}]
Metoda DELETE
Putanja /DiplomskiRadCloud/users/notification/email/{id}
Ulazni podaci id: identifikator primatelja obavijesti
Opis Briše primatelja obavijesti. Primatelj obavijesti je odreĎen podatkom id.
Ukoliko je primatelj obavijesti uspješno obrisan, status odgovora je 200.
Primjer odgovora
Metoda POST
Putanja /DiplomskiRadCloud/users/command
Ulazni podaci command_id: identifikator naredbe, value: parametar naredbe
Opis
Generira naredbu za neki ureĎaj te je stavlja u sve redove pristupnika koji su
pridruženi ureĎaju kojem naredba pripada. Naredba je odreĎena parametrom
command_id. Ukoliko naredba treba neki parametar, on je definiran
parametrom value.
Primjer odgovora Message added to queue
40
PRIVITAK B: ADMINISTRATORSKO SUČELJE SERVISA U
OBALKU
Tablica 2: Administratorsko sučelje servisa u oblaku
Metoda GET
Putanja /DiplomskiRadCloud/user
Ulazni podaci
Opis Dohvaća sve postojeće korisnike. Lozinke u odgovoru nisu prisutne, samo
korisnička imena i uloge.
Primjer odgovora
[{"role":"admin","username":"aplikacija"},{"username":"kknezevic"},{"usernam
e":"nsekulic"},{"username":"nsekulic2"},{"username":"nsekulic3"},{"username
":"test12"},{"username":"testuser"},{"role":"user","username":"user"},{"userna
me":"user12345"},{"username":"user2"}]
Metoda GET
Putanja /DiplomskiRadCloud/user/{username}
Ulazni podaci username: korisničko ime
Opis Dohvaća korisnika. Ako korisnik ne postoji status odgovora je 404.
Primjer odgovora {"role":"admin","username":"aplikacija"}
Metoda POST
Putanja /DiplomskiRadCloud/user/
Ulazni podaci username: korisničko ime, password: lozinka, role: uloga
Opis
Stvara novog korisnika. Parametar role nije obvezan. Ako korisnik već s
predanim korisničkim imenom već postoji status odgovora je 400. Ako
predana uloga ne postoji status odgovora je 400. Status odgovora je 201 ako
je korisnik uspješno stvoren.
Primjer odgovora {"username":"korisnik1"}
Metoda POST
Putanja /DiplomskiRadCloud/user/check
Ulazni podaci username: korisničko ime, password: lozinka
Opis Provjerava postoji li korisnik sa zadanim korisničkim imenom i lozinkom.
Ako korisnik postoji, odgovor je niz znakova true, u suprotnom false
Primjer odgovora false
41
Metoda PUT
Putanja /DiplomskiRadCloud/user/{username}
Ulazni podaci username: korisničko ime, password: lozinka, role: uloga
Opis Ažurira postojećeg korisnika. Mijenja lozinku ili ulogu. Ukoliko je uloga
ima vrijednost null (niz znakova 'null'), briše korisniku ulogu.
Primjer odgovora {"role":"admin","username":"korisnik1111"}
Metoda DELETE
Putanja /DiplomskiRadCloud/user/{username}
Ulazni podaci username: korisničko ime
Opis Briše postojećeg korisnika. Status odgovora je 204 ako je korisnik uspješno
obrisan.
Primjer odgovora
Metoda GET
Putanja /DiplomskiRadCloud/role/{name}
Ulazni podaci name: ime uloge
Opis Dohvaća ulogu sa zadanim imenom. Status odgovora je 404 ako uloga ne
postoji.
Primjer odgovora {"name":"admin"}
Metoda GET
Putanja /DiplomskiRadCloud/role
Ulazni podaci
Opis Dohvaća sve postojeće uloge.
Primjer odgovora [{"name":"admin"},{"name":"role1"},{"name":"user"}]
Metoda POST
Putanja /DiplomskiRadCloud/role/
Ulazni podaci name: ime uloge
Opis Stvara novu ulogu. Status odgovor je 201 ako je uloga stvorena. Ako uloga
već postoji status odgovora je 500.
Primjer odgovora {"name":"student"}
42
Metoda DELETE
Putanja /DiplomskiRadCloud/role/{name}
Ulazni podaci name: ime uloge
Opis Briše ulogu sa zadanim imenom. Status odgovora je 204.
Primjer odgovora
Metoda GET
Putanja /DiplomskiRadCloud/user_agent
Ulazni podaci
Opis Dohvaća sve korisničke agente za pristup servisu u oblaku.
Primjer odgovora
[{"name":"DiplomskiRadAplikacija","id":35,"type":"webapp","username":"nsek
ulic"},{"name":"DiplomskiRadAplikacija","id":39,"type":"webapp","username":"
kknezevic"}]
Metoda GET
Putanja /DiplomskiRadCloud/user_agent/{id}
Ulazni podaci id: identifikator korisničkog agenta
Opis Dohvaća korisničkog agenta sa zadanim identifikatorom.
Primjer odgovora {"name":"DiplomskiRadAplikacija","id":35,"type":"webapp","username":"nsek
ulic"}
Metoda POST
Putanja /DiplomskiRadCloud/user_agent/
Ulazni podaci name: ime korisničkog agent, type: vrsta korisničkog agenta,
additional_data: dodatni podaci, username: korisničko ime korisnika
Opis
Stvara novog agenta. Trebutno podržava vrsta korisničkog agenta je
webapp. Parametar additinal_datamora biti u formatu '(key:value)*'.
Npr. Ako su dodatni podaci ime aplikacije=WebAPP i adresa
aplikacije=localhost, parametar additional_data će biti:
ime:WebAPP;adresa:localhost;
Ako je agent uspješno stvoren, status odgovora je 201.
Primjer odgovora {"name":"WebAplikacija","id":43,"additionalData":"email:[email protected]
;","type":"webapp","username":"nsekulic"}
Metoda PUT
43
Putanja /DiplomskiRadCloud/user_agent/{id}
Ulazni podaci id: identifikator agenta, name: ime korisničkog agent, type: vrsta korisničkog
agenta, additional_data: dodatni podaci, username: korisničko ime korisnika
Opis
Ažurira postojećeg agenta sa zadanim identifikatorom. Ako je vrijednost
parametra additional_data null (niz znakova null), briše dodatne podatke.
Status uspješnog ažuriranja je 200.
Primjer
odgovora
{"name":"WebApp","id":43,"additionalData":"email:[email protected];","
type":"webapp","username":"nsekulic"}
Metoda DELETE
Putanja /DiplomskiRadCloud/user_agent/{id}
Ulazni podaci id: identifikator agenta
Opis Briše korisničkog agenta sa zadanim identifikatorom. Ako je agent obrisan,
vraća status 204.
Primjer odgovora