Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
SVEUČILIŠTE U ZAGREBU
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA
ZAVRŠNI RAD br. 5377
UPRAVLJANJE STVARIMA KORIŠTENJEM
PLATFORME AWS IOT SERVICES
Ivan Štignedec
Zagreb, lipanj 2018.
SADRŽAJ
1. UVOD ................................................................................................................... 1
2. ARHITEKTURA SUSTAVA INTERNETA STVARI ....................................... 2
3. RAČUNALO RASPBERRY PI ........................................................................... 4
4. PLATFORMA AMAZON AWS IOT .................................................................. 6
4.1. Amazon DynamoDB usluga ......................................................................... 7
4.2. Usluga Amazon Elasticsearch i Kibana Dashboard aplikacija ..................... 8
4.3. Usluga Amazon Simple Notification Service (SNS) .................................... 9
5. OSTVARENJE PRIMJERA SUSTAVA INTERNETA STVARI .................... 10
5.1. Postavljanje računala Raspberry Pi ............................................................. 10
5.2. Povezivanje platforme AWS IoT s računalom Raspberry Pi ...................... 12
5.3. Spajanje senzora DHT11 i svjetleće diode na Raspberry Pi ....................... 14
5.4. Programiranje u Pythonu ............................................................................. 15
5.5. Postavke DynamoDB baze podataka .......................................................... 18
5.6. Postavke usluge AWS Elasticsearch ........................................................... 19
5.7. Postavke Kibana Dashboard aplikacije ....................................................... 21
5.8. Postavke usluge SNS i upravljanja LED diodom ....................................... 22
6. DODATNE MOGUĆNOSTI AMAZONOVIH USLUGA U OBLAKU .......... 25
7. ZAKLJUČAK ..................................................................................................... 27
LITERATURA .......................................................................................................... 28
SAŽETAK ................................................................................................................. 29
SUMMARY ............................................................................................................... 30
1
1. UVOD
Internet stvari (engl. Internet of Things, IoT) termin je koji označava povezivanje
uređaja putem Interneta. To mogu biti razni uređaji koje svakodnevno koristimo, od
perilica i hladnjaka, do TV prijemnika i termostata. Internet stvari proširuje se i na
ostale objekte iz fizičkog svijeta, kao što je plastična ambalaža nekog napitka, koja
ugradnjom čipa također postaje povezana. Svaki uređaj, odnosno stvar, mora imati
jedinstveni identifikator kako bi se mogao povezati na mrežu. On može komunicirati
s ostalim elementima u mreži te izvršavati određene aktivnosti, kao i slati podatke u
računalni oblak. Postoje razne usluge u oblaku preko kojih upravljamo stvarima, a u
ovom će se radu koristiti softverska platforma AWS IoT razvijena od tvrtke Amazon.
Jedni od najznačajnijih dijelova sustava Interneta stvari su senzori, koji se preko raznih
računala mogu povezati i koristiti kao automatizirani sustav bez djelovanja čovjeka.
Senzori mogu biti različito izvedena tipkala, prekidači, senzori infracrvenog zračenja,
senzori temperature, pokreta… U ovom radu koristimo senzor temperature i vlage
DHT11, koji je preko malog računala Raspberry Pi spojen na Internet, odnosno
softversku platformu AWS IoT koja nudi upravljanje stvarima koje prethodno
umrežimo.
Glavna je svrha ovog rada prikaz značajki raznih usluga AWS IoT kroz izgradnju
sustava Interneta stvari - nadzora temperature u prostoriji. Korištenjem senzora
spojenih na ugrađeno računalo Raspberry Pi, biti će pokazane mogućnosti usluga AWS
IoT za pohranu i obradu prikupljenih podataka. Također će biti prikazano upravljanje
napravama spojenim na ugrađeno računalo korištenjem usluge AWS IoT.
U narednim poglavljima biti će opisana arhitektura sustava Interneta stvari i načini
povezivanja s uslugama u oblaku, svojstva računala Raspberry Pi i korištenog senzora,
sama izgradnja sustava nadzora temperature uz detaljni pregled korištenih usluga te
dodatne mogućnosti Amazonovih usluga u oblaku.
2
2. ARHITEKTURA SUSTAVA INTERNETA STVARI
Internet stvari je skup stvari (naprava, uređaja) opremljenih senzorima kako bi
međusobno izmjenjivali podatke ostvarivanjem interakcije. Prilikom povezivanja
različitih vrsta naprava, teži se korištenju bežičnih i internetskih tehnologija
(prvenstveno usluga u oblaku).
Prikaz arhitekture sustava Interneta stvari prikazan je na slici Sl. 2.1. Na slici je
prikazan korisnik koji koristi usluge u oblaku koje su spojene s računalom Raspberry
Pi, a na računalo su preko ulazno-izlaznih priključaka (GPIO) spojene razne naprave
(stvari). Pritom korisnik ne komunicira izravno s napravama, nego s uslugom u oblaku.
Naprave komuniciraju s uslugom u oblaku putem određenog protokola. U ovom se
slučaju koristi protokol MQTT.
Slika 2.1. Arhitektura sustava Interneta stvari
Protokol MQTT (Message Queue Telemetry Transport) razvijen je 1999. godine sa
ciljem razvoja protokola koji bi omogućio efikasnu brzinu prijenosa podataka uz malu
potrošnju energije i nisku cijenu. Ovaj je protokol zamijenio do tada korišteni HTTP
(HyperText Transfer Protocol) za slične svrhe, koji je koristio model zahtjeva i
odgovora. Arhitektura MQTT protokola naziva se uvelike prihvaćenim terminom
„objavi-pretplati“. Model arhitekture MQTT protokola pogonjen je događajima i
omogućava klijentima da objavljuju poruke bez brige o njihovoj posljednjoj
destinaciji. Posljednju destinaciju objavljene poruke određuje MQTT posrednik (engl.
broker) koji na osnovu klijentskih pretplata (engl. subscriptions) prosljeđuje poruke
3
oslobađajući klijenta od slanja zahtjeva za porukama, za razliku od protokola HTTP
kod kojega klijenti moraju tražiti informacije od poslužitelja. Također, protokol
MQTT koristi puno manje zaglavlje što dodatno smanjuje opterećenje mreže.
Komunikacija između klijenata ostvarena je modelom „objavi-pretplati“ uz središnju
ulogu MQTT posrednika, koji prati poruke klijenata i prosljeđuje ih drugim klijentima
u ovisnosti o pretplatama. Kada klijent šalje (engl. publish) poruku posredniku, on
mora navesti i temu (engl. topic) na koju želi objaviti poruku. Kada se klijenti
pretplaćuju (engl. subscribe), moraju navesti temu na koju se žele pretplatiti kako bi
dobivali poruke koje drugi klijenti na tu temu šalju. Ovaj je model grafički prikazan
na slici Sl. 2.2.
Slika 2.2. Princip rada MQTT posrednika
Kao što je ranije navedeno, klijenti se kod ovakvog načina komunikacije ne trebaju
međusobno poznavati, te mogu komunicirati samo preko odabranih tema, što uvelike
povećava učinkovitost sustava bez obzira na povećanje broja klijenata ili broja poruka.
Sve usluge u oblaku za upravljanje stvarima u sustavu Interneta stvari koriste ovakav
način komunikacije, pa tako i AWS IoT korištena u ovom radu, te će sama prilagodba
biti objašnjena u narednim poglavljima prilikom izgradnje sustava.
4
3. RAČUNALO RASPBERRY PI
Računalo Raspberry Pi je veličine kreditne kartice, razvijeno u Ujedinjenom
Kraljevstvu od strane organizacije Raspberry Pi Foundation u svrhu promoviranja
učenja osnova računarske znanosti u školama. Originalna svrha postala je mnogo
raširenija od predviđene, pa se ovo računalo koristi i za potrebe upravljanja robota u
industriji.
Prva generacija ovog računala izašla je na tržište u veljači 2012. godine (Raspberry Pi
1). U ovom je radu korištena treća generacija ovog računala – Raspberry Pi 3 Model
B V1.2. Računalo Raspberry PI 3 odlikuje se brojnim svojstvima kakva poznajemo i
na stolnim osobnim računalima, uz osjetno nižu cijenu (oko 40 USD, odnosno nešto
ispod 300 kn). Računalo ima 1 GB radne memorije, 4 USB 2.0 priključka, integrirane
Wi-Fi i Bluetooth module, jedan Ethernet port, 3.5 mm priključak za audio izlaz,
HDMI, CSI te DSI priključke. Na ovom je modelu 40 ulazno-izlaznih GPIO (General-
purpose input/output) pinova za spajanje dodatnih uređaja (senzora i slično). Pogoni
ga četverojezgreni ARM Cortex-A53 procesor, radnog takta 1.2GHz s 32 kB Level 1
i 512 kB Level 2 priručne memorije, dok je GPU jedinica Broadcom VideoCore IV.
Operacijski sustav koji koristi ovo računalo spremljen je na vanjsku memoriju –
microSD karticu koju je potrebno umetnuti u odgovarajući utor s donje strane računala.
Kako bi se računalo Raspberry Pi moglo koristiti, potrebno je na njega spojiti ulazne i
izlazne uređaje (miš, tipkovnica, monitor). Kako bi se izbjeglo nepotrebno korištenje
dodatnih resursa, razvijen je način udaljenog povezivanja na Raspberry Pi preko
protokola SSH – engl. headless setup. Detaljnije će ovakav pristup biti prikazan u
nastavku, kao i potrebne postavke računala.
Na slici Sl. 3.1. prikazano je računalo Raspberry Pi, dok je na slici Sl. 3.2. vidljiv
raspored GPIO pinova.
5
Slika 3.1. Računalo Raspberry Pi 3 Model B V1.2
Slika 3.2. Prikaz prvih 20 GPIO pinova
6
4. PLATFORMA AMAZON AWS IOT
Amazon.com, Inc., američka je tvrtka koja od početka osnivanja 1994. godine posluje
kao elektronička trgovina, ali i kao predvodnik u uslugama za razvoj računarstva u
oblaku (engl. cloud computing).
Amazon Web Services (AWS) podružnica je tvrtke Amazon.com koja krajnjim
korisnicima ili tvrtkama pruža usluge na zahtjev (engl. on-demand) na temelju plaćene
pretplate. Tehnologija omogućava pretplatnicima punopravni skup virtualnih računala
dostupnih u bilo koje vrijeme na Internetu. Virtualna računala imaju identične svojstva
kao i stvarna računala, sklopovlje i programsku potporu, a također se nudi i veliki broj
već pripremljenih aplikacija kao što su mrežni poslužitelji, baze podataka i drugo.
Svako virtualno računalo također virtualizira svoje ulazno-izlazne jedinice (miš,
tipkovnica, monitor), omogućujući pretplatnicima povezivanje s AWS sustavom
koristeći mrežni preglednik. Preglednik radi kao prozor u virtualno računalo kroz koji
je moguće raditi različita postavljanja kao i na stvarnom fizičkom računalu.
AWS IoT je upravljačka platforma predstavljena 2015. godine. Ona omogućava
jednostavno i sigurno povezivanje s napravama i njihovo upravljanje u oblaku. Postoje
različite usluge koje korisnici platforme imaju na raspolaganju za upravljanje
napravama u sustavu Interneta stvari, kao što su prikupljanje i vizualizacija podataka,
pokretanje dodatnih aplikacija u ovisnosti o prikupljenim podacima i razne druge
opcije, pri čemu će neke od njih biti prikazane kroz praktični primjer u narednim
poglavljima.
Slika 4.1. Prikaz osnovnih mogućnosti platforme AWS IoT
7
AWS IoT podržava različite protokole za prijenos podataka između entiteta, kao što
su HTTP, WebSocket i MQTT. MQTT je jednostavni komunikacijski protokol
posebno osmišljen za privremeno povezivanje te smanjenje opterećenja mreže. AWS
IoT također podržava komunikaciju između naprava ako koriste različite protokole.
Na slici Sl. 4.1. prikazan je osnovni model koji koristi MQTT protokol. Razne naprave
mogu slati poruke ili se pretplatiti na određene teme, a AWS IoT omogućava tim
napravama međusobnu komunikaciju, odnosno s ostalim uslugama platforme AWS
IoT.
AWS IoT omogućava provjeru autentičnosti i enkripciju kroz sve točke povezivanja,
tako da podaci nikada nisu poslani/primljeni bez dokazanog identiteta. Također,
moguće je osigurati pristup napravama primjenom razdvojenih prava pristupa.
Podaci se mogu filtrirati na temelju pravila (engl. rule). Pravila se mogu ažurirati u
bilo kojem trenutku, a preko njih se pokreću dodatne usluge za upravljanje podacima
i napravama. Pravila se mogu stvarati unutar upravljačke konzole ili pisati koristeći
sintaksu jezika SQL. Tako se ona mogu prilagođavati u ovisnosti o dobivenim
podacima.
Najnovije stanje naprave ostaje pohranjeno tako da se ono može postavljati bilo kad,
što znači da se napravama može upravljati i kad su odspojene, a promjene će biti
ostvarene prilikom ponovnog povezivanja naprave.
U slijedećim potpoglavljima opisani su dodatne usluge koje u ovisnosti o postavljenim
pravilima pružaju interakciju s platformom AWS IoT.
4.1. Amazon DynamoDB usluga
Amazon DynamoDB brza je i fleksibilna usluga nerelacijske (noSQL) baze podataka.
Vrlo je konzistentan i prilagodljiv veličini upisanih podataka koristeći automatsku
podjelu memorije za pohranu. Stvaranje nove tablice je jednostavno, usluga pruža i
vraćanje na neku točku u prošlosti kako bi svi podaci bili lako dostupni. Ostale
mogućnosti korištenja DynamoDB usluge biti će opisane u poglavlju o ostvarenju
sustava Interneta stvari u narednim poglavljima.
8
4.2. Usluga Amazon Elasticsearch i Kibana Dashboard
aplikacija
Amazon Elasticsearch je pretraživač (engl. search engine) koji olakšava stvaranje,
upravljanje i nadziranje aplikacija. Elasticsearch pruža aplikacijska programska
sučelja (API) za analizu rada sustava u stvarnom vremenu. Postavljanje Elasticsearch
usluge je jednostavno, pri čemu se na početku stvara domena kojoj se može pristupiti
ovisno o postavljenim dozvolama. Ova usluga nudi ugrađene integracije s uslugama
Kibana, Logstash, VPC (Virtual Private Cloud), KMS (Key Management Service) i
drugim. U ovom radu koristiti će se aplikacija Kibana Dashboard.
Kibana Dashboard aplikacija je otvorenog koda za vizualizaciju podataka. To je
popularna usluga zbog svojih snažnih značajki kao što su histogrami, više vrsta
grafikona, pa čak i mape topline te geografske mape. Slika 4.2.1. prikazuje odabir
raznih vrsta prikaza podataka. Kibana nudi interaktivno kretanje po prikazu podataka,
dinamičke radnje nad grafikonima (povlačenje, zumiranje), razne vrste filtera i još
mnogo toga. Aplikaciji Kibana pristupamo preko Elasticsearch domene. Više o ovoj
aplikaciji biti će navedeno u poglavlju o izgradnji sustava.
Slika 4.2.1. Odabir načina prikaza podataka u aplikaciji Kibana Dashboard
9
4.3. Usluga Amazon Simple Notification Service (SNS)
Simple Notification Service (SNS) je usluga za automatsko slanje poruka obavijesti
preko postavljenog pravila, okidača. S ovom uslugom obavijesti se mogu slati velikom
broju pretplatnika, uključujući raspodijeljene sustave i usluge te mobilne uređaje.
Slanje poruke bez specifičnog zahtjeva od strane primatelja, tzv. push notifikacije
moguće je postići preko različitih usluga: Amazon Device Messaging (ADM), Baidu
Cloud Push (Baidu), Google Cloud Messaging for Android (GCM), Windows Push
Notification Services (WNS) i drugih. Također, SNS uslugu je moguće konfigurirati i
za slanje poruka na krajnje točke poput elektroničke pošte, SMS-a, HTTP-a i drugih.
Nakon što vlasnik stvori temu, korisnici se na nju mogu pretplatiti preko poruke koju
su dobili, kako bi i dalje nastavljali dobivati obavijesti vezane za tu temu. Takav će se
način rada koristiti i u ostvarenju ovog sustava Interneta stvari. Model je prikazan na
slici Sl. 4.3.1.
Slika 4.3.1. Princip rada usluge Amazon SNS
10
5. OSTVARENJE PRIMJERA SUSTAVA INTERNETA STVARI
5.1. Postavljanje računala Raspberry Pi
Prvi korak postavljanja računala Raspberry Pi je instaliranje operacijskog sustava na
SD karticu koja će biti korištena kao stalna memorija. Na službenoj stranici Raspberry
Pi-a potrebno je preuzeti ISO sliku OS-a Raspbian (razvijen na bazi Debiana, UNIX
operacijskog sustava). U ovom slučaju korišten je Raspbian Stretch with Desktop,
kojega je moguće preuzeti s poveznice [1].
Nakon što je ISO datoteka preuzeta, potrebno je umetnuti SD karticu (preporučuje se
da ne bude kapaciteta manjeg od 8 GB) u korisnikovo računalo koje posjeduje čitač
kartica, formatirati ju (najlakši je način za to alatom Diskpart već ugrađenim u
Windows računala) i programom Etcher snimiti prethodno preuzetu ISO datoteku na
SD karticu.
Kako je navedeno u prethodnom poglavlju o računalu Raspberry Pi, razvijen je način
udaljenog povezivanja s Raspberry Pi preko protokola SSH (Secure Shell). To je
protokol koji korisnicima omogućava uspostavu sigurnog komunikacijskog kanala
između dva računala putem nesigurne računalne mreže.
Kako bismo mogli spojiti osobno računalo s računalom Raspberry Pi mrežnim UTP
kabelom moramo poznavati IP adrese. Kada se dva računala izravno spajaju UTP
kabelom koriste se tzv. privatne adrese prefiksa 169.254. Za Raspberry Pi odabere se
jedna takva adresa i upiše u datoteku “cmdline.txt“ koja se nalazi na SD kartici. Na
sam kraj te datoteke otvorene u nekom uređivaču teksta, treba dodati
“ip=169.254.1.1“. Tako pripremljenu SD karticu umetnemo u računalo Raspberry Pi.
Potrebno je uključiti Raspberry Pi kabelom za napajanje (microUSB), te spojiti
Raspberry Pi i računalo korisnika UTP kabelom (preko Ethernet priključaka). Sljedeći
je korak instalacija programa PuTTY na osobno računalo koji koristi SSH protokol za
spajanje na udaljeno računalo preko mreže, kako bismo mogli koristiti terminal
računala Raspberry PI. Unutar okvira Host Name (or IP adress) potrebno je upisati IP
adresu odredišta, koju smo prethodno postavili (169.254.1.1), stisnuti Enter na
11
tipkovnici i biti će pokrenut novi prozor u kojemu je ostvarena udaljena veza s
računalom Raspberry PI. Prozor programa PuTTY prikazan je na slici Sl. 5.1.1.
Slika 5.1.1. Program PuTTY
Korisničko ime je “pi“, a lozinka “raspberry“, što je moguće promijeniti.
Program PuTTY ne može koristiti grafičko korisničko sučelje (GUI), nego samo
komandnu liniju, stoga ako je potrebno koristiti grafičko korisničko sučelje, treba
instalirati TightVNC program, koji također služi za komunikaciju s udaljenim
računalima preko mreže. Za većinu korisnika, kao i za ovaj projekt, korištenje ovog
programa neće biti potrebno.
Kako bismo mogli slati podatke na platformu AWS IoT i obrađivati ih, Raspberry Pi
mora biti spojen na Internet. Računalo Raspberry Pi koje koristimo ima integriran Wi-
Fi modul za bežično povezivanje na mrežu. Postavke mreže treba napraviti preko
datoteke interfaces.txt, koju je potrebno otvoriti nekim od uređivača teksta (npr. nano).
12
Uporabom naredbe “sudo nano /etc/network/interfaces“, otvara se datoteka koju je
potrebno urediti kako bi se računalo spojilo na postojeću bežičnu mrežu. Tekst unutar
datoteke mora biti oblika prikazanog unutar isječka koda, s tim da je “Your Network
SSID“ potrebno zamijeniti s nazivom bežične mreže na koju se spaja, a “Your
Password“ s lozinkom mreže.
Isječak koda 5.1.1. Tekst datoteke interfaces.txt
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ssid “Your Network SSID“
wpa-psk “Your Password“
Nakon što je datoteka uređena i spremljena te Raspberry Pi ponovno pokrenut (reboot),
naredbom “ifconfig“ može se provjeriti ispravnost postavki bežične mreže. Ispod retka
koji počinje s “wlan0“ trebala bi pisati IP adresa “inet addr“ koja je dodijeljena
računalu, i s time je uspješno završeno postavljanje računala Raspberry Pi.
5.2. Povezivanje platforme AWS IoT s računalom Raspberry Pi
Prvi je korak registracija na poveznici [2] stvaranjem besplatnog korisničkog računa.
Nakon uspješne registracije, potrebno je odabrati uslugu koji će se koristiti – AWS
IoT. Prikazuje se mrežna stranica kao na slici Sl. 5.2.1.
13
Slika 5.2.1. Početna stranica AWS IoT platforme
Kako bismo povezali Raspberry Pi sa uslugom AWS IoT, kliknemo na “Get started“
prilikom čega se pokreće stvaranje novog entiteta – stvari, koje ćemo nadzirati.
Upišemo ime “RaspberryPI“ i kliknemo “Create“ za dovršetak postupka.
AWS IoT podržava isključivo sigurnu vezu, koristeći datoteke certifikata koje je
potrebno stvoriti, aktivirati i staviti na računalo Raspberry Pi. Najlakši način je klikom
na Onboard => Get Started => Get Started. Potrebno je odabrati operacijski sustav koji
se koristi na računalu (Linux) i skup alata (SDK) koji će biti korišten. Odabrati ćemo
Python jer je to najpristupačniji programski jezik za izradu ovakvog rada. Potrebno je
kliknuti “Next“ i kliknuti na “Linux/OSX“ kako bi preuzeli sve potrebne certifikate (u
zip formatu). Dodatnim klikom na “Next“ postavljanje je dovršeno.
Sada se preuzeti certifikati moraju prebaciti na računalo Raspberry Pi. To je najlakše
napraviti preko naredbe “scp“ u komandnoj liniji Windows operacijskog sustava.
Podaci se šalju protokolom SSH. Na računalu Raspberry Pi mora se napraviti direktorij
u koji će datoteka sa certifikatima biti smještena, npr. /home/pi/deviceSDK, unutar
glavnog direktorija stvara se direktorij deviceSDK. Potrebno je preuzeti datoteku
“pscp.exe“ i staviti ju u direktorij gdje se nalazi zip datoteka sa certifikatima koju
šaljemo, te otvoriti komandnu liniju u tom direktoriju. Za slanje datoteke potrebno je
upisati naredbu:
pscp -scp connect_device_package.zip [email protected]:deviceSDK/
14
Time će datoteka biti premještena. Na Raspberry Pi ona se mora raspakirati naredbom
unzip connect_device_package.zip. Time su certifikati stvoreni i aktivirani, te je
moguće početi samu izgradnju sustava.
5.3. Spajanje senzora DHT11 i svjetleće diode na Raspberry Pi
DHT11 očitava temperaturu i vlažnost zraka. Postoje dva tipa ovog senzora, s 3 i 4
pina. U ovom slučaju koristi se senzor s 3 pina: GND (uzemljenje), +5V (naponski
pin) i pin za podatke. Senzor je malih dimenzija i potrošnje, napaja se s naponom 3.5
5V, maksimalne struje 2.5 mA, raspona mjerenja vlažnosti zraka od 20 do 90% s
pogreškom od ±5%, a temperature od 0 do 50 °C, s pogreškom od ±2 °C. Senzor se na
Raspberry Pi spaja preko GPIO pinova, pri čemu se koriste 3 pina : #02 (DC napajanje
5V), #07 (GPIO04, GPIO_GCLK, podatkovni) i #06 (uzemljenje).
Slika 5.3.1. prikazuje shemu spajanja senzora DHT11 i računala Raspberry Pi koristeći
eksperimentalnu pločicu. Prije spajanja senzora, obavezno je isključiti računalo iz
napajanja.
Slika 5.3.1. Spajanje senzora DHT11 na Raspberry Pi
Kako bismo pokazali povezivanje naprava s protokolom MQTT u oba smjera (s
platforme AWS IoT na Raspberry Pi i obrnuto), potrebno je spojiti i LED diodu koja
15
će se uključivati u ovisnosti o podacima dobivenih sa senzora, neizravno preko
platforme AWS IoT. LED dioda je spojena na GPIO 18 (pin broj 12) računala
Raspberry Pi, preko otpornika vrijednosti 1000 Ω. Potrebno je paziti na polaritet diode,
pri čemu je pozitivna strana preko otpornika spojena na pin 12, dok je negativna strana
spojena na uzemljenje, npr. pin 14.
5.4. Programiranje u Pythonu
Python je programski jezik opće namjene, interpretiran i visoke razine, a stvoren je
1990. godine. Vrlo je fleksibilan i jednostavne sintakse pa je pogodan za ovakve
sustave.
Kako bismo mogli očitavati podatke sa senzora, potrebno je preuzeti biblioteku (engl.
library) za taj senzor. Upisom slijedeće naredbe u terminal Raspberry PI računala,
stvara se direktorij “DHT11_Python“ koji sadrži nužne datoteke i u tom se direktoriju
može napisati skripta koja očitava podatke dobivene sa senzora i šalje ih na AWS IoT.
git clone https://github.com/szazo/DHT11_Python
cd DHT11_Python
sudo nano read_and_publish.py
Tako je stvorena Python skripta naziva “read_and_publish“ koja će pokrenuti
očitavanje senzora i slanje podataka na uslugu AWS IoT, kao i upravljanje LED
diodom.
Isječak koda 5.4.1. Sadržaj Python skripte za pokretanje sustava
import RPi.GPIO as GPIO 1
import dht11 2
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient 3
from time import sleep 4
from datetime import date, datetime 5
6
7
16
# inicijalizacija GPIO 8
GPIO.setwarnings(False) 9
GPIO.setmode(GPIO.BCM) 10
GPIO.cleanup() 11
GPIO.setup(18, GPIO.OUT) 12
GPIO.output(18, GPIO.LOW) 13
14
# AWS IoT povezivanje sa certifikatima 15
myMQTTClient = AWSIoTMQTTClient("stignedec") 16
myMQTTClient.configureEndpoint("a3qabghlncz005.iot.eu-central- 17
1.amazonaws.com", 8883) 18
myMQTTClient.configureCredentials("/home/pi/deviceSDK/root-CA.crt", 19
"/home/pi/deviceSDK/RaspberryPI.private.key", 20
"/home/pi/deviceSDK/RaspberryPI.cert.pem") 21
myMQTTClient.configureOfflinePublishQueueing(-1) 22
myMQTTClient.configureDrainingFrequency(2) 23
myMQTTClient.configureConnectDisconnectTimeout(10) 24
myMQTTClient.configureMQTTOperationTimeout(5) 25
26
# poruka prilikom povezivanja 27
myMQTTClient.connect() 28
myMQTTClient.publish("thing01/info", "connected", 0) 29
30
# callback funkcija za ukljucivanje diode 31
def switch(client, userdata, message): 32
print("***WARNING***\n") 33
GPIO.output(18, GPIO.HIGH) 34
35
# pretplata za LED 36
myMQTTClient.subscribe("thing01/led", 0, switch) 37
38
#citanje senzora i slanje na AWS IoT 39
while 1: 40
now = datetime.utcnow() 41
#format u obliku 2016-04-18T06:12:25.877Z 42
17
now_str = now.strftime('%Y-%m-%dT%H:%M:%SZ') 43
#pin GPIO04 za podatke 44
instance = dht11.DHT11(pin = 4) 45
result = instance.read() 46
GPIO.output(18, GPIO.LOW) 47
if result.is_valid(): 48
payload = ' "timestamp": "' + now_str + '","temperature": ' 49
+ str(result.temperature) + ',"humidity": ' + 50
str(result.humidity) + ' ' 51
print payload 52
myMQTTClient.publish("thing01/data", payload, 0) 53
sleep(10) 54
Na početku je potrebno dohvaćanje potrebnih modula i inicijalizacija GPIO pinova
računala Raspberry Pi te povezivanje s AWS IoT certifikatima. Kao što je opisano
ranije, podaci se šalju protokolom MQTT, koji radi na principu “objavi-pretplati“ uz
središnju ulogu posrednika koji prati pretplate i ovisno o njima delegira poruke. U
ovom se slučaju poruke obavijesti povezivanja šalju na temu “thing01/info“ (linije 27-
29), a podaci sa senzora na “thing01/data“ (linija 53). S druge strane, sama je naprava
(računalo Raspberry Pi) pretplaćena na temu “thing01/led“ i kada s nje dobije određene
podatke, poziva se funkcija povratnog poziva (engl. callback function) za upravljanje
LED diodom (linije 31-37). Kako bi se podaci slali na tu temu, potrebno je postaviti
pravilo koje će raditi kao okidač za neki skup podataka, što će biti objašnjeno u
narednim poglavljima. Time je ostvarena obostrana komunikacija preko AWS IoT
opcije postavljanja pravila kao okidača.
Usluga AWS IoT sadrži testnu konzolu preko koje je moguće provjeriti ispravnost rada
očitavanja senzora, odnosno slanja podataka na mrežu. Odabirom opcije “Test“ na
lijevom izborniku, te odabirom “Subscribe to topic“, moguće je oponašati klijenta koji
je pretplaćen na određenu temu. Ako hoćemo dobivati poruke sa svih postojećih tema,
dovoljno je pod “Subscription topic“ upisati simbol ljestvi (#) i kliknuti “Subscribe to
topic“.
18
Sada možemo pokrenuti skriptu na računalu Raspberry Pi naredbom “python
read_and_publish.py“. Podaci se ispisuju i šalju na uslugu AWS IoT prethodno
opisanim postupkom. Na AWS IoT testnoj konzoli moguće je vidjeti sve podatke koje
šalje računalo Raspberry Pi, prikazano na slici Sl. 5.4.1.
Slika 5.4.1. Testiranje simulacijom MQTT klijenta
5.5. Postavke DynamoDB baze podataka
Amazon DynamoDB je usluga za stvaranje i upravljanje bazama podataka. Pokreće se
iz AWS IoT platforme (upisom unutar tražilice). Klikom na “Create table“ stvaramo
novu tablicu te u polja upisujemo naziv tablice i primarni ključ. Kao primarni ključ,
najbolje je uzeti vrijeme očitanja podatka koje se sprema u varijablu timestamp.
Klikom na “Create“ stvorena je tablica, koja je trenutno prazna.
Sada je potrebno unutar usluge AWS IoT postaviti pravilo koje će prosljeđivati
podatke u bazu. Klikom na “Act“ te “Create“ otvara se prozor za stvaranje okidača.
Unutar ponuđenih polja je potrebno upisati ime pravila i opis po želji. Također treba
postaviti pravilo u obliku SQL upita kako bi se svi podaci s određene teme slali u bazu.
SQL upit će izgledati kao “SELECT * FROM 'thing01/data'“. Dodavanjem akcije
(klikom na “Add action“) i odabirom “Split message into multiple columns of a
19
database table (DynamoDBv2)“ podaci će se raspodijeliti u različite stupce tablice
(atribute). Unutar polja “Table name“ treba odabrati prethodno stvorenu tablicu i
stvoriti ulogu (engl. role) kako bi AWS IoT dobio pristup usluzi DynamoDB. Klikom
na “Create rule“ stvoreno je pravilo i sada ponovno možemo pokrenuti uslugu
DynamoDB. Klikom na stvorenu tablicu i odabirom izbornika “Items“ dobili smo
tablicu popunjenu podacima sa senzora, po atributima vlažnosti, temperature i
vremena očitanja. Podatke je moguće jednostavno sortirati i filtrirati. Slika 5.5.1.
prikazuje filtriranje podataka iz tablice koji su se dogodili nakon 17:39:00 dana 2.
lipnja 2018. godine.
Slika 5.5.1. Prikaz filtriranja podataka iz baze
5.6. Postavke usluge AWS Elasticsearch
Kako je navedeno u prethodnim poglavljima, postavljanje usluge Elasticsearch vrlo je
jednostavno, pri čemu se na početku stvara domena kojoj se može pristupiti ovisno o
postavljenim dozvolama. Kako bismo započeli postavljanje, potrebno je otvoriti
Elasticsearch Service konzolu i stvoriti novu domenu te joj dodijeliti ime. Sve do
koraka pod brojem 3 potrebno je kliknuti “Next“. Korak 3 je dodjela prava pristupa
podacima. Potrebno je pod “Network configuration“ odabrati “Public access“ i unutar
“Access policy“ odabrati “Allow open access to the domain“. Ovim smo izborom
omogućili svima pristup stvorenoj domeni. Moguće je napraviti i zabrane pristupa
prema IP adresama korisnika, ali to u ovom slučaju neće biti potrebno. Nakon klika na
20
“Next“ postupak je završen i nakon nekoliko minuta vrijednost entiteta “Domain
status“ će se promijeniti u “Active“.
Sljedeći je korak postavljanje pravila tako da sve dolazne poruke/podaci budu
proslijeđeni na ElasticSearch domenu. Unutar konzole usluge AWS IoT potrebno je
odabrati “Act“ pa “Create a rule“, te dodijeliti pravilu ime, u ovom slučaju
“publishtoelasticsearch“. Unutar postavke pravila potrebno je odabrati podatke koji će
biti potrebni za daljnju obradu, uporabom SQL izraza, npr. “SELECT * FROM
'thing01/data'“. Potrebno je dodati akciju “Send messages to the Amazon ElasticSearch
Service“ te odabrati prethodno stvorenu domenu. Ostale potrebne postavke prikazane
su na slici Sl. 5.6.1. (treba i kreirati ulogu klikom na “Create a new role“).
Slika 5.6.1. Postavljanje pravila za uslugu Elasticsearch
Klikom na “Create“ stvoreno je pravilo i sada se može postaviti aplikacija Kibana
Dashboard za vizualni prikaz podataka dobivenih sa senzora.
21
5.7. Postavke Kibana Dashboard aplikacije
Kibana Dashboard je aplikacija unutar usluge Elasticsearch za vizualizaciju podataka.
Podatke dobiva preko uzorka indeksa, kojega je potrebno stvoriti.
Aplikacija Kibana pokreće se klikom na poveznicu unutar domene usluge
ElasticSearch (uz oznaku “Kibana“). Prilikom prvog pokretanja, automatski će biti
odabran izbornik “Management“ u kojem se stvara uzorak indeksa. Potrebno je
označiti stavku “Index contains time-based events“ jer će se podaci prikazivati u
ovisnosti o vremenu. Unutar polja “Index name or pattern“ upisati “thing01“, to je
naziv teme na koju se pretplaćujemo. U polju “Time-field name“ biti će stvoreno
“timestamp“. Klikom na “Create“, dovršena je prilagodba uzorka indeksa, te je sljedeći
korak postavljanje prikaza podataka dobivenih preko tog indeksa.
Klikom na “Discover“ u lijevom izborniku vidljivi su podaci koji su primljeni preko
indeksa. Klikom na “Visualize“ => “+“ => “Line“ => “From a new search“ dobiti
ćemo grafički prikaz vrijednosti podataka u ovisnosti o vremenu očitanja.
Postavke prikaza grafa ćemo podesiti prema slici Sl. 5.7.1., na x-os će biti varijabla
timestamp (vrijeme), a na y-os temperatura i vlažnost (uzima se prosjek ako se dogodi
više očitanja u jednom trenutku).
Slika 5.7.1. Podešavanje prikaza grafa
22
Klikom na “Save“ prikaz je spremljen, a klikom na “Refresh“ prikaz će se osvježavati
novim podacima koji dolaze tijekom vremena. Pored gumba “Refresh“ moguće je
birati vremenski period prikaza podataka. Također je moguće klikom na “Add a filter“
filtrirati podatke po nekom uvjetu. Dobiveni prikaz tijekom testiranja sustava prikazan
je na slici Sl. 5.7.2.
Slika 5.7.2. Prikaz dobivenih podataka sa senzora u posljednjih sat vremena
5.8. Postavke usluge SNS i upravljanja LED diodom
Amazon AWS Simple Notification Service (SNS), jednostavna je usluga za slanje
poruka obavijesti automatski preko stvorenog okidača. Potrebno je pokrenuti uslugu
SNS te kliknuti na “Create topic“. Pritom se stvara tema na koju će korisnik biti
pretplaćen i preko koje će dobivati obavijesti. Potrebno joj je dodijeliti naziv i naslov
poruke koji će biti prikazan prilikom dobivanja obavijesti, npr. “Upozorenje“. Klikom
na “Create topic“ stvorena je tema.
23
Sada se na stvorenu temu potrebno pretplatiti, klikom na “Create Subscription“.
Koristiti ćemo obavještavanje korisnika putem elektroničke pošte, pa je unutar stavke
“Protocol“ potrebno odabrati “Email“, te upisati adresu elektroničke pošte korisnika
koji želi dobivati obavijesti. Klikom na “Create Subscription“ šalje se potvrdna poruka
elektroničke pošte korisniku, koju je potrebno potvrditi kako bi se dovršio postupak,
prikazana na slici Sl. 5.8.1.
Slika 5.8.1. Potvrdna poruka pretplate na temu
Nakon uspješne potvrde, usluga SNS nudi mogućnost slanja testne poruke, odnosno
objavljivanja na temu. Odabirom teme, te klikom na “Publish to topic“ otvara se prozor
unutar kojega je potrebno upisati naslov poruke (engl. subject) i sam tekst poruke
(engl. message). Klikom na “Publish message“ poruka je objavljena i korisnici koji su
se na nju pretplatili dobili su je u svom sandučiću elektroničke pošte.
Kako bi se poruke obavijesti slale automatski, potrebno je stvoriti novo pravilo unutar
AWS IoT konzole. Ime pravila može biti “sendnotifications“. SQL upit oblikuje se
ovisno o potrebi obavještavanja, npr. ako želimo dobivati obavijesti ukoliko je
temperatura koju očitava senzor veća od 28 °C, SQL upit će izgledati ovako :
SELECT temperature FROM 'thing01/data' WHERE temperature>28
24
Prilikom odabira akcije ukoliko je uvjet u SQL upitu ispunjen, odabire se “Send a
message as an SNS push notification“. Također je potrebno kreirati novu ulogu i
dovršiti klikom na “Allow“.
Uz to, potrebno je i poslati poruku na temu “thing01/led“ kako bi se uključila svjetleća
dioda ako je uvjet unutar SQL upita ispunjen. Stoga je još potrebno stvoriti akciju
“Republish messages to an AWS IoT topic“. Unutar prozora akcije upisuje se naziv
teme na koju se poruka šalje (koja je u obliku “temperature : value“) i stvara se nova
uloga za pristup. Nakon stvaranja ove akcije, postavljanje sustava Interneta stvari uz
pregled značajki platforme AWS IoT je u potpunosti završeno i testiranjem je moguće
utvrditi njegovu ispravnost. Prelaskom temperature izvan granične vrijednosti,
korisnik u stvarnom vremenu dobiva poruku elektroničke pošte o trenutnoj vrijednosti
temperature potpuno automatski (prikazano na slici Sl. 5.8.2.), kao i vizualnu obavijest
preko svjetleće diode.
Slika 5.8.2. Poruka obavijesti korisniku putem e-pošte
25
6. DODATNE MOGUĆNOSTI AMAZONOVIH USLUGA U
OBLAKU
Postoji još mnogo različitih usluga koje nudi Amazon kako bi olakšao upravljanje
napravama u oblaku i rukovanje podacima. Kao što smo vidjeli, taj skup usluga mora
se međusobno povezati tako da čini jednu funkcionalnu cjelinu.
Dvije najvažnije usluge koja nisu toliko značajna za Internet stvari, ali se često koriste
u praksi, su Elastic Compute Cloud (EC2) i Simple Storage Service (S3).
EC2 je usluga u oblaku koja pruža mogućnost rezerviranja virtualnih računala koje
imaju jednaka svojstva kao i stvarna fizička računala. To je usluga opće namjene, na
koju se nadovezuju ostale usluge (npr. Relational Database Service (RDS) – usluga
relacijske baze podataka). Jedna instanca virtualnog računala ima svoja svojstva, kao
što su snaga procesora, radna memorija, dodijeljeni prostor na disku, instalirani
operacijski sustav… Ova se usluga naplaćuje po radnom satu i prema hardverskoj
snazi računala. Sustav koji se koristi na virtualnom računalu je Amazon Machine
Image (AMI), prethodno prilagođena slika virtualnog stroja koja se koristi za stvaranje
samog virtualnog stroja tako da nije potrebno raditi instalaciju i postavljanje
cjelokupnog sustava. Kada se AMI pokrene prvi puta, dobije se izbor više operacijskih
sustava, na koji se nakon odabira povezuje preko SSH protokola. Postoje brojne opcije
koje omogućavaju upravljanje instancama, od kopiranja do čuvanja cijelih slika diska,
pa i stvaranje novih virtualnih sustava unutar navedenog. Svaka instanca dobiva svoju
IP adresu na unutarnjoj Amazonovoj mreži, te javnu dinamičku IP adresu dostupnu
svima, kao i potpuno kvalificirano domensko ime (engl. Fully Qualified Domain
Name, FQDN) oblika “ec2-xxx-yyy-zzz-ppp.compute-1.amazonaws.com“ koja je
također dinamička.
S3 je usluga za čuvanje velikih količina podataka. Može se predočiti kao veliki tvrdi
disk unutar kojega su podaci raspoređeni u kante (engl. buckets) i direktorije. U
pozadini direktoriji ne postoje, nego se sve datoteke nalaze na istoj razini i dostupne
su po svom imenu. Usluga S3 omogućava specifične opcije za upravljanje datotekama,
kao što je brisanje datoteke nakon određenog vremena. Također se jamči i za sigurnost
podataka, jer se oni inicijalno spremaju kao dvije identične kopije.
26
Povezanost prethodno navedenih usluga očituje se u tome da su sami AMI spremljeni
na usluzi S3. Također, neke od poznatih platformi koje koriste S3 su Tumblr, Netflix,
Dropbox i druge.
Sve prethodno navedene usluge svakim se danom nadograđuju novim značajkama.
Najčešće je to povećanje mogućnosti upravljanja i razne opcije unutar usluga, kao i
povećanje lakoće postavljanja pojedinih usluga. Tako su i unutar ovog rada korišteni
gotovi alati koji su imali za cilj olakšati postavljanje usluga novim korisnicima (npr.
zip datoteka sa certifikatima koji se automatski stvaraju).
Ostvareni se sustav može koristiti u kućanstvima za nadzor temperature u prostoriji,
ali i u industrijskim postrojenjima za nadzor određenih strojeva i alata kako bi se
spriječila šteta uzrokovana pregrijavanjem. Postoji mnogo drugih sustava Interneta
stvari koji koriste sličnu arhitekturu, a uglavnom su svi izvedeni iz ovakvog sustava,
koristeći neke od usluga u oblaku.
27
7. ZAKLJUČAK
Internet stvari vrlo je značajna tema koja se sve češće spominje unutar krugova koji se
bave računarstvom, ali i šire u ostalim granama ljudskog društva. U današnje se
vrijeme svaki uređaj na neki način povezuje s drugim kako bi dobili dodatne
funkcionalnosti uz što manje troškove. Raspberry Pi jedno je od najkorištenijih
računala razvijenih za potrebe učenja računarske znanosti kroz praktične projekte te je
zainteresirao velik broj ljudi koji tek počinju učiti osnove računarstva. Postoje brojne
usluge koje nude upravljanje podacima dobivenih od nekih komponenata koje su
povezane na Internet. Usluga korištena u ovom radu je AWS IoT razvijena od tvrtke
Amazon, koja se još uvijek razvija dodajući brojne mogućnosti uz postizanje znatnije
lakoće korištenja.
Rezultat ovog rada je zaokruženi sustav za upravljanje napravama putem Interneta uz
pregled značajki različitih usluga u oblaku. Ostvarena je dvosmjerna veza između
ugrađenog računala Raspberry Pi usluga u oblaku koristeći MQTT protokol.
Korištenjem senzora DHT11 prikazane su mogućnosti obrade prikupljenih podataka
preko usluga u oblaku, kao i upravljanje svjetlećom diodom korištenjem usluge AWS
IoT.
Opisane se usluge neprestano nadograđuju raznim značajkama kako bi se novim
korisnicima olakšalo korištenje. Također, cilj je ovog rada bio zainteresirati što veći
broj ljudi za Internet stvari i razvoj sličnih sustava pomoću usluga u oblaku, kako bi
se ljudski život učinio što jednostavnijim uz maksimalnu iskoristivost dostupnih
tehnologija.
28
LITERATURA
[1] Preuzimanje slike operacijskog sustava Raspbian, 15. 3. 2018.,
https://www.raspberrypi.org/downloads/raspbian/
[2] Početna stranica Amazon AWS usluga u oblaku, 18. 3. 2018.,
https://aws.amazon.com/
[3] Headless Raspberry PI Setup, 22. 3. 2018.,
https://hackernoon.com/raspberry-pi-headless-install-462ccabd75d0
[4] How to set up the DHT11 humidity sensor on the Raspberry Pi, 2. 4. 2018.,
http://www.circuitbasics.com/how-to-set-up-the-dht11-humidity-sensor-on-the-
raspberry-pi/
[5] DHT11 Temperature and Humidity Sensor, 6. 4. 2018.,
https://www.raspberrypi-spy.co.uk/2017/09/dht11-temperature-and-humidity-
sensor-raspberry-pi/
[6] Streaming Sensor Data (Raspberry PI) to AWS IoT, 12. 4. 2018.,
http://techblog.calvinboey.com/raspberrypi-aws-iot-python/
[7] Creating and Configuring Amazon Elasticsearch Service Domains, 20. 4. 2018.,
http://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-
createupdatedomains.html
[8] Visualizing sensor data on AWS IoT, 1. 5. 2018.,
https://onion.io/2bt-aws-iot-visualizing-sensor-data/
[9] Using AWS IoT and JS SDK (Node.js) to control LED, 7. 5. 2018.,
https://medium.com/@rohanmaheshwari/using-aws-iot-with-the-js-sdk-node-to-
turn-an-led-on-and-off-with-a-raspberry-pi-be43346a5bd4
29
SAŽETAK
Upravljanje stvarima korištenjem platforme AWS IoT Services
Ovaj se rad bavi proučavanjem mogućnosti korištenja platforme AWS IoT kao i
povezanih usluga u oblaku, uz izgradnju jednostavnog sustava Interneta stvari.
Korišteno je računalo Raspberry Pi na koje je spojeno nekoliko jedinica kojima
upravljamo preko usluga u oblaku. Ostvarena je obostrana komunikacija između
naprava i usluga u oblaku preko protokola MQTT, uz pregled mogućnosti
najkorištenijih usluga koje pruža platforma AWS IoT.
Ključne riječi : Internet stvari, platforma AWS IoT, Raspberry Pi, protokol MQTT
30
SUMMARY
Internet of Things Device Control with AWS IoT Services
The subject of this paper is the study of the ability to use the AWS IoT Services, as
well as related cloud services, through implementation of a simple Internet of Things
system. Raspberry Pi was used to connect several units that are managed through the
cloud service. Mutual communication was accomplished between cloud services and
devices using MQTT protocol, with an overview of the most used services provided
by the AWS IoT Services.
Keywords: Internet of Things, AWS IoT Services, Raspberry Pi, MQTT protocol