Používatelia môžu využiť obrovský výpočtový výkon cloudu a nechať strojové učenie, dolovanie dát a ďalšie technológie pracovať s rozsiahlymi údajmi poskytovanými všetkými zariadeniami IoT, ktoré sú v rámci aplikácie inštalované. Tieto zariadenia však nemusia byť navrhnuté špeciálne pre danú aplikáciu. Cloudové systémy môžu na prepojenie historických údajov a údajov generovaných v reálnom čase z mnohých zdrojov využiť technológie premiešavania údajov, ako sú Spark a Hadoop. To umožňuje vytvárať vzájomné súvislosti medzi mnohými zdrojmi a získavať cenné poznatky.

Kľúčový problém s nasadzovaním IoT aplikácií spočíva v rozmanitosti komponentov, ktoré tvoria každé riešenie. IoT aplikácia musí zbierať signály z rôznych typov snímačov, ako sú napr. teplota, pohyb či kvalita vzduchu. Údaje môžu pochádzať zo zariadení rôznych výrobcov alebo zo staršieho hardvéru, ktorý nebol navrhnutý pre IoT.

Predstavme si napr. projekt IoT, ktorý zahŕňa monitorovanie teploty v každej miestnosti v hoteli. Každá miestnosť by mohla mať tri snímače, z ktorých každý by dokázal monitorovať teplotu. Jeden, umiestnený pri dverách, môže byť zabudovaný v module požiarnej signalizácie, druhý v blízkosti postele môže byť spojený s ovládacími prvkami klimatizácie v miestnosti a tretí v kúpeľni je nainštalovaný ako samostatná jednotka ako súčasť inštalácie IoT. Softvér, ktorý získava údaje z každého typu zariadenia, musí zohľadňovať spôsob, akým je každý snímač kalibrovaný a ako sa z neho údaje získavajú. Niektoré zariadenia môžu odosielať údaje v pravidelných intervaloch, na základe zmeny podmienok nad programovanú hranicu alebo na základe žiadosti cloudovej aplikácie. Každý z nich môže na prenos údajov používať rôzne sieťové pripojenia – niektoré káblové, iné bezdrôtové, napríklad Bluetooth alebo Zigbee. Aplikácia musí zohľadniť túto variabilitu. To však nie je všetko.

Spotreba energie je základným problémom mnohých zariadení internetu vecí. Najbežnejším spôsobom na udržanie dlhej životnosti batérie je minimalizácia aktivity systémov s veľkou spotrebou, ako sú bezdrôtová komunikácia a hlavný mikroprocesor. Tieto subsystémy sú udržiavané v režime nízkej spotreby po väčšinu životnosti systému. Krátkodobo sa prebudia, vykonajú úlohu a potom znova prejdú do režimu spánku. Výsledkom je krátky pracovný cyklus. V úplne prebudenom stave s vysokou spotrebou energie sa tak využíva možno 1 % z celej životnosti systému. Počas zvyšných 99 % sú napájané iba systémy potrebné na udržanie požadovaného stavu systému, napríklad hodiny reálneho času. Pri použití takéhoto vyhotovenia môže IoT uzol prežiť roky na jedno nabitie batérie.

Veľa mikroprocesorov (MCU) teraz obsahuje hardvérové prvky na sledovanie stavu systému, ktoré umožňujú periodické prebúdzanie dôležitých snímačov spúšťaných hodinami reálneho času a získavanie údajov bez prebudenia hlavného mikroprocesora. Niektoré systémy môžu vykonávať vopred stanovenú množinu odpočtov pred prebudením mikroprocesora, ktorý údaje spracúva. Iné môžu programovo zadávať hraničné hodnoty do logiky snímača tak, aby veľké odchýlky vyvolali okamžitú reakciu.
Aplikácia riadenia spustená v cloude si môže zo zariadenia vyžiadať tie údaje, ktoré potrebuje, alebo ich získa pri zmene jeho stavu. No zariadenie nemusí reagovať hneď, pretože potreba zabezpečiť nízky pracovný cyklus bude znamenať, že sa bude nachádzať v stave nízkej spotreby. Aplikácia vyžaduje nejaký mechanizmus, aby sa zabezpečilo, že pochopenie stavu zariadenia je v súlade s realitou.

Na začiatku rozvoja týchto aplikácií integrátori IoT zistili, že treba vybudovať vlastnú softvérovú infraštruktúru na integráciu do cloudu pomocou vlastných protokolov alebo techník vzdialeného volania procedúr (RPC). Spravidla na to používali svoje vlastné dátové centrá alebo prenajaté servery, ktoré prijímali údaje z pripojených zabudovaných zariadení, prenášali informácie do centrálnej databázy a spúšťali aplikácie, ktoré by dáta prezentovali používateľom a vykonávali analýzu vzorov.
Integrátori by boli zodpovední za zabezpečenie odolnosti a vysokej dostupnosti a za riešenie zložitosti prostredia, v ktorom zariadenia nie sú trvalo pripojené k sieti. Jedným zo spôsobov, ako to dosiahnuť, je použitie konceptu tieňových zariadení. Ide o dokumenty uložené v cloude, ktoré obsahujú informácie o stave zariadenia z jeho posledných správ a všetkých prebehnutých zmenách.

Aj keď aplikácie môžu riadiť tieňové zariadenia samy, je to úloha, ktorá sa ľahšie spravuje, ak sa prenesie na vrstvu služieb, ktorá dokáže ponúknuť štandardizované rozhranie pre mnoho typov zariadení. To je jedna z mnohých funkcií, ktorá je súčasťou ponuky cloudových infraštruktúr, ako sú Amazon Web Services, IBM Watson IoT a Google Cloud.

Ďalšou službou, ktorú vykonávajú platformy cloudovej infraštruktúry, je mapovanie protokolov. Cloud sa vyvinul okolo rozsiahleho využívania protokolu TCP/IP a služieb, ktoré tento protokol dokáže prenášať. Aj keď ide o bezstavový protokol, protokol HyperText Transport Protocol (HTTP) používaný v mnohých cloudových službách beží na vrchole stavovo orientovanej TCP vrstvy, a to hlavne kvôli širokej podpore protokolu TCP. Máloktoré zariadenie IoT však má zdroje na implementáciu úplného protokolu TCP/IP, ktorý umožňuje priamu komunikáciu s cloudovými aplikáciami. IETF (Internet Engineering Task Force) dala do pripomienkového konania protokol CoAP (Constrained Application Protocol), ktorý zjednodušuje protokol HTTP tak, aby bol kompatibilnejší so zariadeniami s obmedzenými prostriedkami, pričom odstraňuje potrebu používať vrstvu TCP.

CoAP využíva štvorbajtovú hlavičku s kompaktným kódovaním na podporu protokolov s oveľa kratšou dĺžkou paketov, ako sú tie, ktoré bežne poskytujú hlavné ethernetové siete. Bežnou alternatívou k CoAP, ktorá má atribúty považované za vhodnejšie na mnoho implementácií IoT, je protokol Message Queuing Telemetry Transport (MQTT) vyvinutý spoločnosťou IBM. Ten môže využívať rôzne formáty paketov, ako sú Bluetooth a Zigbee, ako aj TCP/IP. Na rozdiel od modelu klient – server tradičných webových služieb postavených na http model MQTT podporuje publikovanie a odber (pub/sub). To má výhodu v minimalizácii jednotlivých požiadaviek na IoT zariadenie.

Aby sa zabezpečila konzistencia prenosu údajov medzi rôznymi platformami, používajú cloudové platformy formát JSON (JavaScript Object Notation). Ak chcete odoslať údaje do cloudu, zariadenie musí najskôr zakódovať údaje, ktoré má, do reprezentácie JSON, a potom ich použiť na správy CoAP, HTTP alebo MQTT. Implementátori majú na výber: nechajú, aby túto úlohu vykonali koncové zariadenia, alebo sa o proces postarajú prostredníctvom brán. V systémoch s rozsiahlym starým hardvérom bude často preferovanou voľbou brána. Tá môže zhromažďovať údaje pomocou proprietárnych alebo IoT štandardov používaných zariadeniami a prevádzať dáta do/z reprezentácie JSON. Alebo môže fungovať aj ako proxy pre všetky príkazy prijaté z cloudu. Implementácia brány určí, či treba tieto príkazy konvertovať a prenášať v podobe, ktorej zariadenie rozumie.

Zariadenia navrhnuté pre IoT môžu obsahovať vlastné softvérové zásobníky, ktoré sa postarajú o konverziu JSON a prepojenie s cloudom. Podporu JSON a sieťových rozhraní možno začleniť do základného operačného systému reálneho času (RTOS) a získať k nim prístup pomocou programovacích jazykov, ako je C. Jedným z prístupov, ktorý používajú niektorí integrátori IoT a ktorý podporujú poskytovatelia cloudovej infraštruktúry, je implementácia virtuálneho stroja na každé koncové zariadenie optimalizované na prepojenie cloudu a IoT.

Ovládače zariadení implementované na každej platforme zariadení IoT sa používajú na preklad príkazov z virtuálneho stroja do tvaru, ktorému rozumie nasadený RTOS a firmvér. Firmvér sa stará o optimalizáciu spotreby energie a časovanie na nižšej úrovni a poskytuje štandardizovaný súbor služieb, na ktoré sa môže cloudová vrstva spoľahnúť.

Vývoj v prostredí cloudových riešení poskytuje v porovnaní s tradičným zabudovaným prostredím bohatšiu škálu programovacích nástrojov. Dnes sa jazyky používané na programovanie v cloude zvyknú navrhovať tak, aby fungovali v prostredí manažovaného programu vytvoreného v jednom z vyšších programovacích jazykov a spúšťaného v. NET. Namiesto kompilácie sa kód interpretuje za behu programu, alebo, ak ponúka vyšší výkon, kompiluje sa just-in-time (JIT). Zatiaľ čo vývojári zabudovaných riešení majú zvyčajne obmedzený výber jazykov, predovšetkým jazykov C a C++, vývojári cloudových aplikácií majú prístup k bohatej škále jazykov, z ktorých mnohé sú optimalizované pre konkrétne potreby. Kým Java a Python podporujú veľa aplikačných požiadaviek, Hadoop rozširuje Javu tak, aby sa zabezpečilo rozloženie záťaže spracovania údajov na mnoho výpočtových jadier (uzlov).

Aj keď programovanie zabudovaných aj cloudových aplikácií predpokladá použitie prostriedkov na krížový vývoj, vývojári píšuci programy pre servery môžu často použiť technológiu virtuálneho stroja na vytvorenie zmenšenej verzie cieľového prostredia na svojich vlastných strojoch. Vývojári zabudovaných systémov musia zvyčajne vyvíjať program oddelene od cieľa a spúšťať testy po každej sekvencii úprav, kompilácií a sťahovaní, čo zvyšuje čas potrebný na spracovanie. Prostredie middlewaru podporujúce vyššie programovacie jazyky pomáha zefektívniť vývoj tým, že umožňuje vytvárať program na lokálnom virtuálnom stroji a tak prináša podobné výhody, aké majú vývojári v cloude.

Vďaka dostupnosti služieb cloudovej infraštruktúry majú teraz integrátori prístup k širokej škále nástrojov, ktoré výrazne uľahčujú vytváranie úplných IoT riešení. Tieto cloudovo orientované služby, ktoré siahajú až po vrstvu zariadenia, zaisťujú, že sa výrazne zníži zložitosť nasadenia a integrátori môžu využívať plný výkon internetu vecí.

Cliff Ortmeyer
globálny vedúci technického marketingu
Farnell Inc.
www.farnell.com