1. februarja, 2019

Tehnologije Interneta stvari

Slike LOGOTIPI Svet elektronike color 300x92 - Tehnologije Interneta stvariAvtorja: Grega Močnik in Danilo Zimšek
2019_271_34

Napredek v senzorskih tehnologijah in elektroniki z nizko porabo, je omogočil realizacijo Interneta stvari (v nadaljevanju IoT). S konceptom IoT in 4. industrijsko revolucijo smo priča izjemno hitremu razvoju naprav, ki so povezane v internet. Imamo naprave, ki merijo temperaturo, vlago, kakovost zraka, osvetljenost prostora, obstajajo tudi najrazličnejši aktuatorji, pametne klimatske naprave, ključavnice, radiatorski ventili. Vsem naštetim napravam je skupno to, da so se sposobne povezati v internet.

Pri razvoju rešitev in postavitev omrežij IoT je potrebno upoštevati številne omejitve senzorjev in samih elementov omrežij. Tukaj gre predvsem za potrebe po nizki porabi vozlišč in robustnem delovanju.

Pristopov za implementacijo omrežij IoT je veliko. Obstajajo rešitve, ki so sicer hitre in enostavne za implementacijo, a velikokrat niso primerne za določen primer uporabe omrežja.

V nadaljevanju opišemo najbolj uveljavljene standardne protokole za implementacijo omrežij IoT ter operacijske sisteme, ki se uporabljajo za implementacijo funkcionalnosti na gradnikih omrežij IoT.

Aplikacijski sloj
Ključno za naprave Interneta stvari, je njihovo medsebojno delovanje. To se doseže z uporabo standardnih protokolov, ki predpisujejo način komunikacije med gradniki omrežja – stvarmi. Dva najbolj pogosto uporabljena protokola aplikacijskega sloja v Internetu stvari sta MQTT in CoAP. Oba sta javno dostopna in odprta standarda. Ker imajo naprave IoT omejene vire, sicer široko uporabljeni protokoli aplikacijskega sloja, kot je HTTP za uporabo v omrežjih IoT niso primerni Za naprave IoT sta na aplikacijskem sloju bolj primerna protokola MQTT in CoAP.

Oba protokola vključujeta mehanizme za asinhrono komunikacijo. MQTT ponuja fleksibilnost glede komunikacijskih vzorcev in se obnaša kot podatkovni cevovod za binarne podatke. Medtem ko je CoAP ustvarjen za interoperabilnost s spletom.
Oba uporabljata protokolni sklad IP, pogosteje 6LowPAN kot IPv4 in IPv6. Na transportnem sloju se uporabi TCP ali UDP.

Na fizičnem sloju se pogosto uporabi 802.15.4 ali 802.15.1. Njihovo vlogo v protokolnem skladu ponazarja slika 1. V nadaljevanju na kratko opišemo vsakega od omenjenih protokolov.

MQTT

Protokol MQTT je namenjen prenosu sporočil med večimi klienti preko osrednjega posrednika. Protokol loči med senzorji, ki zajemajo podatke iz okolja in jih pošiljajo v omrežje (založniki – ang. publisher) in aktuatorji, ki na podlagi prejetega podatka izvedejo neko dejanje (naročniki – ang. subscriber). Osrednja entiteta omrežja je posrednik (ang. broker), ki usmerja promet med vozlišči omrežja. Kljub temu, da MQTT podpira dostop do preteklih informacij in delo s sejami, se najbolje obnese kot komunikacijsko vodilo za realno časovne podatke.

MQTT ne nudi podpore označevanju sporočil z informacijami o tipu sporočila, kar pomeni, da morajo vsi klienti za medsebojno komunikacijo vnaprej poznati formate zapisa sporočil.

Arhitektura omrežja MQTT
Protokol MQTT deluje po modelu klient-strežnik, kjer je vsak senzor/aktuator klient in se povezuje na strežnik (posrednik). MQTT je sporočilni protokol, vsako sporočilo je kos podatkov, katerega pomen posredniku ni znan. Poslano sporočilo, ki ga posrednik prejme se objavi na naslov, ki mu pravimo tema. Klienti se lahko prijavijo na več tem. Vsak klient, ki je prijavljen na določeno temo, prejme vsa sporočila, ki so objavljena na prijavljeno temo. Na sliki 2 je prikazan primer, kjer se klienta B in C prijavita na temo “temperatura”. Klient A objavi vrednost “22.5” na temo temperatura. Posrednik posreduje sporočilo vsem prijavljenim klientom.

Model naročanja in objavljanja omogoča realizacijo komunikacije med klienti na naslednje načine: en z enim, en z več in več z enim. Slednje nam nudi veliko meri fleksibilnosti, saj lahko natančno določimo kliente, ki jim je informacija namenjena.

Specifikacija Razred 0 Razred 1 Razred 2
RAM << 10 KB ~ 10 KB ~ 50 KB in več
Flash << 100 KB ~ 100 KB ~ 250 KB in več
RTOS Brez podpore S podporo Polna podpora
Komunikacijski protokoli Brez implementiranega protokola, uporablja prehod za komunikacijo Komunikacija prek enostavnih protokolov, kot je CoAP. Možnost komuniciranja z ostalimi napravami brez prehoda Komunikacija prek zahtevnih protokolov kot je denimo HTTP
Vrsta grožnje Osnovna grožnja Srednja grožnja Srednja/Visoka grožnja
Tabela 1: Vrste naprav in njihove specifikacije

CoAP
CoAP je primarno protokol ena na ena za prenos informacij o stanju med klientom in strežnikom. Čeprav ima podporo za nadzor virov, je najbolj primeren za model prenosa stanj, ne pa za model dogodkov, za katerega je primernejši MQTT.

CoAP v nasprotju z MQTT nudi podporo za označevanje sporočil s tipi in drugimi meta podatki, kar pomaga klientom, da te podatke razumejo. Ti podatki se v implementacijah pogosto uporabljajo v kombinaciji s standardom LwM2M, ki omogoča preslikavo med napravami in podatki, ki jih obvladujejo. Tako se omogoči medsebojna komunikacija med IoT napravami različnih proizvajalcev.

CoAP ima vgrajeno podporo za pogajanje in odkrivanje vsebin, kar napravam omogoča, da poiščejo načine za medsebojno izmenjavo podatkov.

Arhitektura omrežja CoAP
V grobem lahko o protokolu CoAP razmišljamo podobno kot o protokolu HTTP, oba sta protokola za prenos dokumentov, le da je CoAP izdelan za naprave z omejenimi viri.

Paketi CoAP so veliko manjši kot podatkovni tokovi HTTP preko TCP. Za zmanjšanje velikosti se v veliki meri uporabljajo preslikave med stringi in celimi števili. Paketi so preprosti za generiranje in za razčlembo, kar zmanjša potrebe po pomnilniku.

V večini primerov CoAP uporablja brezpovezavni protokol UDP. V aplikacijskem sloju protokola so že implementirani mehanizmi za ponovno pošiljanje in spreminjanje vrstnega reda prispelih podatkov, kar znatno zmanjša potrebo po uporabi protokola TCP.

Operacijski sistem Vrsta podprtih naprav [razred] Povezljivost
mbedOS Vsi NB-IoT, BLE, 6LoWPAN, Thread, Ethernet, WiFi
Contiki Vsi BLE, 6LoWPAN, Thread, Ethernet, WiFi
RIOT Vsi BLE, 6LoWPAN, Thread, Ethernet, WiFi
Windows 10 IoT 2 Ethernet, WiFi
Ubuntu core 2 Ethernet, WiFi
FREE RTOS 1, 2 BLE, 6LoWPAN, Thread, Ethernet, WiFi
TinyOS 0, 1 BLE, Ethernet, WiFi
uC/OS 1, 2 BLE, Ethernet, WiFi
LiteOS 1 (delno), 2 BLE, Ethernet, WiFi
AndroidThings 2 WiFi
OpenWSN 1, 2 BLE, Ethernet, WiFi
NutOS 1 (delno), 2 BLE, Ethernet, WiFi
Tabela 2.: Seznam nekaterih operacijskih sistemov

Za naslavljanje lahko pri CoAP uporabljamo naslove tipa en z vsakim (broadcast) in vsak z vsakim (multicast), tako dosežemo pošiljanje sporočil večjemu številu klientov, kar nam omogoči vsaj omejeno funkcionalnost pošiljanja sporočil večim klientom.

Protokol CoAP sledi modelu klient strežnik. Klienti lahko prožijo zahteve do strežnikov, ti pošiljajo nazaj odgovore. Klienti pri tem uporabljajo naslednje metode: GET, PUT, POST in DELETE, ki so poznane že iz protokola HTTP. Tako lahko z uporabo preprostih proxy strežnikov CoAP medsebojno deluje s storitvami zasnovanimi na HTTP in Restfull, zaradi česar se preprosto povezuje v oblačne storitve.

Oba protokola delujeta po modelu klient-strežnik, zato je pri implementaciji obeh potrebno predvideti vsaj eno vozlišče, ki prevzame vlogo strežnika. Ker je delovanje takega vozlišča kritičnega pomena za celotno omrežje IoT se v implementacijah pogosto predvidi možnost prevzema vloge strežnika ob izpadu primarnega strežnika s strani drugega vozlišča v omrežju. Tako se zagotovi večja robustnost delovanja omrežja IoT.

Prav tako je pri implementaciji potrebno predvideti tudi možnost izpada internetne povezave. Hrambo in kasnejše pošiljanje podatkov je potrebno zagotoviti predvsem za kritične podatke, pri določenih implementacijah se lahko podatki tudi zanemarijo. Za implementacijo hrambe podatkov ima MQTT že implementirane funkcionalnosti, medtem, ko CoAP ne poskrbi za primerno hrambo in je ta mehanizem prepuščen razvijalcem strojne in programske opreme naprave IoT.

Transportni sloj
Na transportnem sloju se pri implementacijah IoT uporablja TCP ali UDP. Ker je protokol TCP široko razširjen pri človeški interakciji s svetovnim spletom, je splošno prepričanje, da je ta primernejši tudi za omrežja Interneta stvari.

TCP zagotavlja logično povezavo, potrjevanje prenesenih paketov in ponovno pošiljanje izgubljenih paketov ter nadzor toka. Vendar je za vgrajen sistem protokol TCP pogosto preveč zahteven za njegove omejene vire. Velikost glave paketa je pri TCP precej večja kot pri UDP. Za realno časovni prenos podatkov je bolj primeren UDP, zato se v senzorskih omrežjih vse bolj uveljavlja.

Omrežni sloj
Na omrežnem sloju se tipičnouporablja protokol IP verzije 4 ali verzije 6. Eden od glavnih gonil pri uvajanju protokola IPv6 je potencialno veliko število naprav IoT. Vendar protokol IPv6 ni primeren naprave za IoT, ki razpolagajo z omejenimi viri, zato se v omrežjih IoT uporablja 6LowPAN. Gre za adaptacijski sloj, ki omogoča prenašanje paketov IPv6 preko povezav 802.15.4 in BLE.

6LoWPAN vključuje dodatne funkcionalnosti namenjene omrežjem z nizko porabo, kot so podpora za kompresijo glave paketa IPv6 in UDP, samodejna konfiguracija omrežja in odkrivanje sosednjih naprav, podpora multicast, unicast in broadcast prometu ter podpora za fragmentacijo paketov. Z vsem naštetim je 6LowPAN eden izmed protokolov omrežnega sloja, ki je najbolje prilagojen za omrežja IoT.

Sloj podatkovne povezave in fizični sloj
Za brezžično povezovanje se široko uporablja povezava WiFi 802.11a/b/g/n/ac. Vendar pa ta tehnologija ni najprimernejša za omrežja IoT. Če naprave v omrežju IoT lahko priključimo na stalen vir napajanja, potem je uporaba WiFi smiselna, saj omrežja WiFi v domovih in drugod pogosto že obstajajo in tako znižamo stroške implementacije.

V večini primerov so naprave Interneta stvari odvisne od baterijskega napajanja in je njihova poraba bistvenega pomena. Zato za omrežja IoT pogosto uporabljamo baterijskemu napajanju prilagojene komunikacijske kanale.

IEEE 802.15.4
je standard, ki specificira fizični nivo in nivo podatkovne povezave za brezžična osebna omrežja z nizko porabo energije. Predstavlja osnovo za ZigBee, Z-Wave, WirelessHART in 6LoWPAN, zaradi česar je široko uporabljen v implementacijah omrežij IoT. Deluje na frekvenci 868 MHz (EU) in 915 MHz (ZDA).

WiFi HaLow
Standard IEEE 802.11ah definira WiFi HaLow, ki je namenjen posebej za omrežja IoT. Implementacija takega omrežja zahteva ločeno infrastrukturo od že poznanega omrežja WiFi, ki ga uporabljamo za povezavo prenosnih naprav (mobilni telefon in osebni računalnik), podobno kot velja za ostale IoT rešitve. Glavna razlika med WiFi in WiFi HaLow je drugačen frekvenčni pas in sicer namesto 2.4 GHz je uporabljen 900 MHz. Poleg spremembe frekvence je tudi implementiram mehanizem za način spanja. Osnoven standard, ki definira WiFi, kot ga poznamo takšnega mehanizma v osnovi nima vključenega.

BLE v5.0
Bluetooth low energy je brezžično osebno omrežje, ki se pogosto uporablja v implementacijah IoT. Najbolj se tehnologija uveljavlja za sledenje oseb po prostoru, kar se izvaja s tako imenovanimi napravami tipa beacon (svetilnik). Prednost tehnologije je, da jo podpira velika večina mobilnih operacijskih sistemov. Seveda pa tudi to omrežje IoT ni združljivo s prejšnjimi verzijami omrežij Bluetooth.

Operacijski sistem
Za napredno upravjanje z napravami IoT je bistvenega pomena njihova povezanost v internet. Prav ta povezljivost naprav z internetom pa je glavni razlog za rast velikosti programske opreme, ki skrbi za pravilno delovanje naprav IoT. Slika 3 prikazuje splošno strukturo programske opreme. V splošnem je programska oprema v napravah IoT sestavljena iz operacijskega sistema, ki omogoča razvoj lastne aplikacije znotraj okolja operacijskega sistema. Navadno v takem okolju najdemo sistem za sočasno izvajanje (angl. Real Time Operating system – RTOS). V vsakem operacijskem sistemu, namenjenem napravam IoT, je prisoten programski vmesnik za povezljivost. Razvoj operacijskih sistemov je naredil tuadi velik korak k temu, da so v samo strukturo operacijskega sistema implementirani tudi gonilniki za najrazličnejšo strojno opremo. S tem so omogočili hiter razvoj aplikacije, kar pomeni, da se lahko razvojni inženir osredotoči v večini primerov samo na razvoj aplikacije.

Razvojni inženir v specifikacijah zahtev za lastno strojno opremo lahko zagotovi funkcionalnosti, ki jih operacijski sistem omogoča. V skladu s specifikacijami zahtev izbere operacijski sistem, ki je optimalen glede na aplikacijo. Izbran operacijski sistem mora zagotavljati podporo za tip povezave prek katere se bo naprava povezovala z drugimi, in podporo izbrani strojni opremi na napravi.

Splošen operacijski sistem omogoča tudi razvoj novih gonilnikov za strojno opremo. Skupine razvojnih inženirjev operacijskih sistemov so razvile različne spletne skupnosti, prek katerih je mogoče novo programsko opremo, ki je bila razvita konkretno za neko strojno opremo objaviti v skupno rabo. S takim načinom so si zagotovili hiter razvoj programske opreme, ki predstavlja stanje tehnike.

Zakaj izbrati operacijski sistem
Glavni razlog za uporabo operacijskega sistema pri implementaciji naprave IoT je možnost hitre menjave posameznega sloja v strukturi sistema. To pomeni, da lahko razvojni inženir, ki načrtuje tiskano vezje za napravo predvidi modul, ki omogoča povezljivost na 2.4 GHz in pod GHz (868 MHz), kar omogoči programsko izbiro fizične povezljivosti. Operacijski sistem mu omogoča hitro menjavo programskega vmesnika za povezljivost. Z minimalnim vložkom bo lahko razvil naprave, ki bodo povezljive prek omrežja WiFi, naprave povezljive prek BLE, ter naprave za povezljivost preko 6LoWPAN na frekvenci 868 MHz. S tem bodo naprave imele različne povezljivostne funkcionalnosti, šlo pa bo za eno napravo. Tak pristop poceni razvoj in proizvodnjo naprav.

Razlog za uporabo operacijskega sistema pri implementaciji naprav IoT je tudi varnost. Glede na to, da bo v naslednjih letih zaznati velik porast števila naprav, bodo v porastu tudi kibernetski napadi na naprave, kraja podatkov in vohljanje za podatki (angl. data sniffing). Zaradi tega se bo potrebno z razvojem novih varnostnih protokolov obraniti napadov. Hiter odziv na napad pa omogoča vpeljava operacijskega sistema, s katerimi lahko neodvisno od druge programske opreme, zamenjamo verzijo ali vrsto varnostnega protokola.

Z izbiro operacijskega sistema razvojniki vstopijo v svet skupnosti uporabnikov in avtorjev operacijskega sistema. To jim omogoči izmenjavo programske opreme, testiranje in izmenjavo rešitev ali idej.

Seznam operacijskih sistemov
Trenutno je na trgu kar nekaj operacijskih sistemov, med seboj se razlikujejo po namembnosti za različne vrste naprav IoT. Naprave IoT lahko razvrstimo v različne skupine. Vsaka skupina ima različne funkcionalnosti.. Vrste naprav so prikazane v tabeli 1.

Funkcionalnosti posameznega operacijskega sistema se razlikujejo v implementaciji protokolov za komunikacijo in implementaciji strojnih komunikacijskih vmesnikov ter podpori za strojno opremo. Na sliki 4 je podrobna struktura povezljivostnega sloja v operacijskem sistemu. Operacijski sistemi se lahko med seboj razlikujejo v implementaciji različnih komunikacijskih protokolov.

Poleg tega se operacijski sistemi razlikujejo tudi po gonilnikih za strojno opremo. Na sliki 5 je podrobna struktura sloja za gonilnike za strojno opremo. Struktura gonilnikov za strojno opremo se ponavadi razdeli na komunikacijske vmesnike (SPI, UART, …), ki so namenjeni posamezni strojni opremi, v nekaterih operacijskih sistemih pa so v tej strukturi že zajeti gonilniki za točno določen kos strojne opreme, na primer grafični LCD določenega proizvajalca. Na tak način se lahko razvojni inženir posveti razvoju lastne aplikacije, ki predstavlja najvišji sloj v operacijskem sistemu.

Primer uporabe operacijskega sistema pri razvoju naprav IoT
Razvojni inženir bo izbral operacijski sistem X. V sklopu aplikacije bo nastavil parametre za povezljivost, kjer bo izbral komunikacijski protokol (npr. MQTT), kar pomeni, da se bo med prevajanjem uporabil sloj TCP ali UDP, nato IP, kasneje pa protokol uporabljen v fizičnem sloju. S parametri za povezljivost bo nastavil fizični sloj za povezovanje naprave (npr. IEEE 802.15.4). Za povezavo med aplikacijo in nižje ležečim slojem (povezljivost, gonilnik za strojno opremo) skrbi aplikacijski programski vmesnik (angl. API). Določi lahko tudi verzijo varnostnega protokola.. Kasneje se lahko izvede tudi zamenjava varnostnega protokola, kar ne vpliva na ostale sloje.

V nadaljevanju je prikazana tabela nekaj aktualnih operacijskih sistemov, ki predstavljajo stanje tehnike. Nabor operacijskih sistemov je precej širši, vendar se je razvoj nekaterih zaradi neznanih razlogov ustavil. Operacijski sistemi, ki niso v aktivnem razvoju predstavljajo določeno stopnjo grožnje za uporabnike. Takšni operacijski sistemi niso deležni varnostnih posodobitev s strani razvijalcev, kar pomeni, da uporabniki niso deležni popravkov ranljivosti v programski opremi. Tabela 2 prikazuje seznam operacijskih sistemov z njihovimi glavnimi lastnostmi.

Zaključek
Pri implementaciji naprav IoT je bistvenega pomena pravilna izbira operacijskega sistema, komunikacijskih protokolov in strojne opreme – senzorjev. Veliko obstoječih implementacij naprav IoT je slabo konstruiranih in ne ponujajo zadostne varnosti, kar utegne v prihodnosti ob naraščajoči uporabi naprav IoT postati velika težava. Hkrati slednje predstavlja velik izziv predvsem za razvijalce operacijskih sistemov. Pri operacijskih sistemih namenjenih osebnim računalnikom smo vajeni modela zagotavljanja varnostnih posodobitev določeno število let. Tak model bi bilo koristno prenesti tudi na operacijske sisteme za naprave IoT, saj le tako lahko pripomoremo k večji varnosti končnih uporabnikov.

Tags: