# Podaci o lokaciji trgovine ![Sketchnote pregled ove lekcije](../../../../../translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.hr.jpg) > Sketchnote od [Nitya Narasimhan](https://github.com/nitya). Kliknite na sliku za veću verziju. ## Kviz prije predavanja [Kviz prije predavanja](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/23) ## Uvod U prethodnoj lekciji naučili ste kako koristiti GPS senzor za prikupljanje podataka o lokaciji. Da biste te podatke koristili za vizualizaciju lokacije kamiona s hranom i njegovog putovanja, potrebno ih je poslati IoT usluzi u oblaku, a zatim negdje pohraniti. U ovoj lekciji naučit ćete o različitim načinima pohrane IoT podataka i kako pohraniti podatke iz vaše IoT usluge koristeći serverless kod. U ovoj lekciji obradit ćemo: * [Strukturirani i nestrukturirani podaci](../../../../../3-transport/lessons/2-store-location-data) * [Slanje GPS podataka u IoT Hub](../../../../../3-transport/lessons/2-store-location-data) * [Vrući, topli i hladni putevi](../../../../../3-transport/lessons/2-store-location-data) * [Obrada GPS događaja pomoću serverless koda](../../../../../3-transport/lessons/2-store-location-data) * [Azure Storage računi](../../../../../3-transport/lessons/2-store-location-data) * [Povezivanje serverless koda s pohranom](../../../../../3-transport/lessons/2-store-location-data) ## Strukturirani i nestrukturirani podaci Računalni sustavi rade s podacima, a ti podaci dolaze u različitim oblicima i veličinama. Mogu varirati od pojedinačnih brojeva, do velikih količina teksta, do videozapisa i slika, pa sve do IoT podataka. Podaci se obično dijele u dvije kategorije - *strukturirani* podaci i *nestrukturirani* podaci. * **Strukturirani podaci** su podaci s dobro definiranim, krutim strukturama koje se ne mijenjaju i obično se mapiraju na tablice podataka s odnosima. Jedan primjer su detalji osobe, uključujući ime, datum rođenja i adresu. * **Nestrukturirani podaci** su podaci bez dobro definirane, krute strukture, uključujući podatke koji često mijenjaju strukturu. Jedan primjer su dokumenti poput pisanih dokumenata ili proračunskih tablica. ✅ Istražite: Možete li smisliti neke druge primjere strukturiranih i nestrukturiranih podataka? > 💁 Postoje i polustrukturirani podaci koji su strukturirani, ali ne odgovaraju fiksnim tablicama podataka. IoT podaci obično se smatraju nestrukturiranim podacima. Zamislite da dodajete IoT uređaje voznom parku vozila za veliku komercijalnu farmu. Možda biste željeli koristiti različite uređaje za različite vrste vozila. Na primjer: * Za poljoprivredna vozila poput traktora želite GPS podatke kako biste osigurali da rade na ispravnim poljima. * Za dostavne kamione koji prevoze hranu u skladišta želite GPS podatke, kao i podatke o brzini i ubrzanju kako biste osigurali sigurnu vožnju, te identitet vozača i podatke o početku/završetku vožnje kako biste osigurali usklađenost vozača s lokalnim zakonima o radnom vremenu. * Za kamione s hladnjačama također želite podatke o temperaturi kako biste osigurali da hrana ne postane previše topla ili hladna i pokvari se tijekom transporta. Ovi podaci mogu se stalno mijenjati. Na primjer, ako je IoT uređaj u kabini kamiona, podaci koje šalje mogu se mijenjati kako se mijenja prikolica, na primjer, slanjem podataka o temperaturi samo kada se koristi prikolica s hladnjačom. ✅ Koje druge IoT podatke biste mogli prikupljati? Razmislite o vrstama tereta koje kamioni mogu prevoziti, kao i o podacima o održavanju. Ovi podaci variraju od vozila do vozila, ali svi se šalju istoj IoT usluzi na obradu. IoT usluga mora biti sposobna obraditi ove nestrukturirane podatke, pohranjujući ih na način koji omogućuje pretraživanje ili analizu, ali funkcionira s različitim strukturama tih podataka. ### SQL vs NoSQL pohrana Baze podataka su usluge koje omogućuju pohranu i upite podataka. Baze podataka dolaze u dva tipa - SQL i NoSQL. #### SQL baze podataka Prve baze podataka bile su sustavi za upravljanje relacijskim bazama podataka (RDBMS), ili relacijske baze podataka. Također su poznate kao SQL baze podataka prema jeziku Structured Query Language (SQL) koji se koristi za interakciju s njima radi dodavanja, uklanjanja, ažuriranja ili upita podataka. Ove baze podataka sastoje se od sheme - dobro definiranog skupa tablica podataka, sličnog proračunskoj tablici. Svaka tablica ima više imenovanih stupaca. Kada unosite podatke, dodajete redak u tablicu, stavljajući vrijednosti u svaki od stupaca. To održava podatke u vrlo krutoj strukturi - iako možete ostaviti stupce prazne, ako želite dodati novi stupac, morate to učiniti na bazi podataka, popunjavajući vrijednosti za postojeće retke. Ove baze podataka su relacijske - u smislu da jedna tablica može imati odnos prema drugoj. ![Relacijska baza podataka s ID-om tablice korisnika koji se odnosi na stupac ID korisnika tablice kupovina, i ID-om tablice proizvoda koji se odnosi na ID proizvoda tablice kupovina](../../../../../translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.hr.png) Na primjer, ako pohranjujete osobne podatke korisnika u tablicu, imali biste neku vrstu internog jedinstvenog ID-a po korisniku koji se koristi u retku u tablici koja sadrži ime i adresu korisnika. Ako zatim želite pohraniti druge detalje o tom korisniku, poput njegovih kupovina, u drugu tablicu, imali biste jedan stupac u novoj tablici za ID tog korisnika. Kada tražite korisnika, možete koristiti njegov ID za dobivanje osobnih podataka iz jedne tablice i njegovih kupovina iz druge. SQL baze podataka idealne su za pohranu strukturiranih podataka i za osiguranje da podaci odgovaraju vašoj shemi. ✅ Ako niste koristili SQL prije, odvojite trenutak da pročitate o njemu na [SQL stranici na Wikipediji](https://wikipedia.org/wiki/SQL). Neke poznate SQL baze podataka su Microsoft SQL Server, MySQL i PostgreSQL. ✅ Istražite: Pročitajte o nekim od ovih SQL baza podataka i njihovim mogućnostima. #### NoSQL baze podataka NoSQL baze podataka nazivaju se NoSQL jer nemaju istu krutu strukturu kao SQL baze podataka. Također su poznate kao dokumentne baze podataka jer mogu pohranjivati nestrukturirane podatke poput dokumenata. > 💁 Unatoč njihovom nazivu, neke NoSQL baze podataka omogućuju korištenje SQL-a za upite podataka. ![Dokumenti u mapama u NoSQL bazi podataka](../../../../../translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.hr.png) NoSQL baze podataka nemaju unaprijed definiranu shemu koja ograničava način pohrane podataka, umjesto toga možete umetnuti bilo koje nestrukturirane podatke, obično koristeći JSON dokumente. Ovi dokumenti mogu se organizirati u mape, slično datotekama na vašem računalu. Svaki dokument može imati različita polja od drugih dokumenata - na primjer, ako pohranjujete IoT podatke s vaših poljoprivrednih vozila, neki mogu imati polja za podatke akcelerometra i brzine, drugi mogu imati polja za temperaturu u prikolici. Ako biste dodali novu vrstu kamiona, poput onog s ugrađenim vagama za praćenje težine prevezenih proizvoda, vaš IoT uređaj mogao bi dodati ovo novo polje i ono bi se moglo pohraniti bez ikakvih promjena u bazi podataka. Neke poznate NoSQL baze podataka uključuju Azure CosmosDB, MongoDB i CouchDB. ✅ Istražite: Pročitajte o nekim od ovih NoSQL baza podataka i njihovim mogućnostima. U ovoj lekciji koristit ćete NoSQL pohranu za pohranu IoT podataka. ## Slanje GPS podataka u IoT Hub U prethodnoj lekciji ste prikupili GPS podatke s GPS senzora povezanog s vašim IoT uređajem. Da biste pohranili ove IoT podatke u oblaku, morate ih poslati IoT usluzi. Ponovno ćete koristiti Azure IoT Hub, istu IoT uslugu u oblaku koju ste koristili u prethodnom projektu. ![Slanje GPS telemetrije s IoT uređaja u IoT Hub](../../../../../translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.hr.png) ### Zadatak - slanje GPS podataka u IoT Hub 1. Kreirajte novi IoT Hub koristeći besplatni sloj. > ⚠️ Možete se referirati na [upute za kreiranje IoT Hub-a iz projekta 2, lekcija 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#create-an-iot-service-in-the-cloud) ako je potrebno. Zapamtite da kreirate novu Resource Group. Nazovite novu Resource Group `gps-sensor`, a novi IoT Hub jedinstvenim imenom temeljenim na `gps-sensor`, poput `gps-sensor-`. > 💁 Ako još uvijek imate svoj IoT Hub iz prethodnog projekta, možete ga ponovno koristiti. Zapamtite koristiti ime ovog IoT Hub-a i Resource Group u kojoj se nalazi prilikom kreiranja drugih usluga. 1. Dodajte novi uređaj u IoT Hub. Nazovite ovaj uređaj `gps-sensor`. Zabilježite vezni niz za uređaj. 1. Ažurirajte kod vašeg uređaja kako biste poslali GPS podatke u novi IoT Hub koristeći vezni niz uređaja iz prethodnog koraka. > ⚠️ Možete se referirati na [upute za povezivanje vašeg uređaja s IoT-om iz projekta 2, lekcija 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#connect-your-device-to-the-iot-service) ako je potrebno. 1. Kada šaljete GPS podatke, učinite to kao JSON u sljedećem formatu: ```json { "gps" : { "lat" : , "lon" : } } ``` 1. Šaljite GPS podatke svake minute kako ne biste potrošili dnevnu kvotu poruka. Ako koristite Wio Terminal, zapamtite dodati sve potrebne biblioteke i postaviti vrijeme koristeći NTP server. Vaš kod također mora osigurati da je pročitao sve podatke s serijskog porta prije slanja GPS lokacije, koristeći postojeći kod iz prethodne lekcije. Koristite sljedeći kod za konstrukciju JSON dokumenta: ```cpp DynamicJsonDocument doc(1024); doc["gps"]["lat"] = gps.location.lat(); doc["gps"]["lon"] = gps.location.lng(); ``` Ako koristite virtualni IoT uređaj, zapamtite instalirati sve potrebne biblioteke koristeći virtualno okruženje. Za Raspberry Pi i virtualni IoT uređaj, koristite postojeći kod iz prethodne lekcije za dobivanje vrijednosti latitude i longitude, zatim ih pošaljite u ispravnom JSON formatu koristeći sljedeći kod: ```python message_json = { "gps" : { "lat":lat, "lon":lon } } print("Sending telemetry", message_json) message = Message(json.dumps(message_json)) ``` > 💁 Ovaj kod možete pronaći u mapi [code/wio-terminal](../../../../../3-transport/lessons/2-store-location-data/code/wio-terminal), [code/pi](../../../../../3-transport/lessons/2-store-location-data/code/pi) ili [code/virtual-device](../../../../../3-transport/lessons/2-store-location-data/code/virtual-device). Pokrenite kod vašeg uređaja i osigurajte da poruke teku u IoT Hub koristeći CLI naredbu `az iot hub monitor-events`. ## Vrući, topli i hladni putevi Podaci koji teku s IoT uređaja u oblak ne obrađuju se uvijek u stvarnom vremenu. Neki podaci zahtijevaju obradu u stvarnom vremenu, drugi se mogu obraditi malo kasnije, a neki se mogu obraditi mnogo kasnije. Tok podataka prema različitim uslugama koje obrađuju podatke u različitim vremenskim okvirima naziva se vrući, topli i hladni putevi. ### Vrući put Vrući put odnosi se na podatke koji se moraju obraditi u stvarnom vremenu ili gotovo stvarnom vremenu. Koristili biste podatke vrućeg puta za upozorenja, poput dobivanja upozorenja da se vozilo približava skladištu ili da je temperatura u kamionu s hladnjačom previsoka. Za korištenje podataka vrućeg puta, vaš kod bi reagirao na događaje čim ih primi vaše usluge u oblaku. ### Topli put Topli put odnosi se na podatke koji se mogu obraditi malo nakon što su primljeni, na primjer za izvještavanje ili kratkoročnu analitiku. Koristili biste podatke toplog puta za dnevna izvješća o kilometraži vozila, koristeći podatke prikupljene prethodnog dana. Podaci toplog puta pohranjuju se čim ih primi usluga u oblaku unutar neke vrste pohrane koja se može brzo pristupiti. ### Hladni put Hladni put odnosi se na povijesne podatke, pohranjivanje podataka za dugoročno korištenje i obradu kad god je potrebno. Na primjer, mogli biste koristiti hladni put za dobivanje godišnjih izvješća o kilometraži vozila ili za analizu ruta kako biste pronašli najoptimalniju rutu za smanjenje troškova goriva. Podaci hladnog puta pohranjuju se u skladištima podataka - bazama podataka dizajniranim za pohranu velikih količina podataka koji se nikada neće mijenjati i mogu se brzo i jednostavno upititi. Obično biste imali redoviti zadatak u vašoj aplikaciji u oblaku koji bi se pokretao u redovitim intervalima svaki dan, tjedan ili mjesec za premještanje podataka iz pohrane toplog puta u skladište podataka. ✅ Razmislite o podacima koje ste dosad prikupili u ovim lekcijama. Jesu li to podaci vrućeg, toplog ili hladnog puta? ## Obrada GPS događaja pomoću serverless koda Kada podaci teku u vaš IoT Hub, možete napisati serverless kod za slušanje događaja objavljenih na Event-Hub kompatibilnom endpointu. Ovo je topli put - ovi podaci će se pohraniti i koristiti u sljedećoj lekciji za izvještavanje o putovanju. ![Slanje GPS telemetrije s IoT uređaja u IoT Hub, zatim u Azure Functions putem okidača event hub-a](../../../../../translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.hr.png) ### Zadatak - obrada GPS događaja pomoću serverless koda 1. Kreirajte Azure Functions aplikaciju koristeći Azure Functions CLI. Koristite Python runtime i kreirajte je u mapi nazvanoj `gps-trigger`, koristeći isto ime za naziv projekta Functions App. Obavezno kreirajte virtualno okruženje za korištenje. > ⚠️ Možete se referirati na [upute za kreiranje Azure Functions projekta iz projekta 2, lekcije 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-a-serverless-application) ako je potrebno. 1. Dodajte IoT Hub događajni okidač koji koristi kompatibilnu krajnju točku Event Hub-a IoT Hub-a. > ⚠️ Možete se pozvati na [upute za stvaranje IoT Hub događajnog okidača iz projekta 2, lekcija 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-an-iot-hub-event-trigger) ako je potrebno. 1. Postavite niz za povezivanje kompatibilne krajnje točke Event Hub-a u datoteku `local.settings.json` i koristite ključ za taj unos u datoteci `function.json`. 1. Koristite aplikaciju Azurite kao lokalni emulator za pohranu. 1. Pokrenite svoju funkcijsku aplikaciju kako biste osigurali da prima događaje s vašeg GPS uređaja. Provjerite je li vaš IoT uređaj također pokrenut i šalje GPS podatke. ```output Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}} ``` ## Azure Storage računi ![Logo Azure Storage-a](../../../../../translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.hr.png) Azure Storage računi su univerzalna usluga za pohranu koja može pohranjivati podatke na različite načine. Možete pohranjivati podatke kao blobove, u redovima, u tablicama ili kao datoteke, i sve to istovremeno. ### Blob pohrana Riječ *Blob* označava binarne velike objekte, ali se koristi za bilo koje nestrukturirane podatke. U blob pohranu možete pohranjivati bilo koje podatke, od JSON dokumenata koji sadrže IoT podatke, do slika i video datoteka. Blob pohrana ima koncept *kontejnera*, nazvanih spremnika u koje možete pohranjivati podatke, slično tablicama u relacijskim bazama podataka. Ti kontejneri mogu imati jednu ili više mapa za pohranu blobova, a svaka mapa može sadržavati druge mape, slično načinu na koji su datoteke pohranjene na tvrdom disku vašeg računala. U ovoj lekciji koristit ćete blob pohranu za pohranu IoT podataka. ✅ Istražite: Pročitajte više o [Azure Blob Storage](https://docs.microsoft.com/azure/storage/blobs/storage-blobs-overview?WT.mc_id=academic-17441-jabenn) ### Pohrana u tablicama Pohrana u tablicama omogućuje pohranu polustrukturiranih podataka. Pohrana u tablicama zapravo je NoSQL baza podataka, pa ne zahtijeva unaprijed definirani skup tablica, ali je dizajnirana za pohranu podataka u jednoj ili više tablica, s jedinstvenim ključevima za definiranje svakog retka. ✅ Istražite: Pročitajte više o [Azure Table Storage](https://docs.microsoft.com/azure/storage/tables/table-storage-overview?WT.mc_id=academic-17441-jabenn) ### Pohrana u redovima Pohrana u redovima omogućuje pohranu poruka veličine do 64KB u red. Možete dodavati poruke na kraj reda i čitati ih s početka. Redovi pohranjuju poruke neograničeno dugo dok god ima prostora za pohranu, što omogućuje dugoročno pohranjivanje poruka koje se mogu čitati kada je potrebno. Na primjer, ako želite pokrenuti mjesečni zadatak za obradu GPS podataka, možete ih dodavati u red svaki dan tijekom mjeseca, a zatim na kraju mjeseca obraditi sve poruke iz reda. ✅ Istražite: Pročitajte više o [Azure Queue Storage](https://docs.microsoft.com/azure/storage/queues/storage-queues-introduction?WT.mc_id=academic-17441-jabenn) ### Pohrana datoteka Pohrana datoteka omogućuje pohranu datoteka u oblaku, a aplikacije ili uređaji mogu se povezati koristeći standardne industrijske protokole. Možete zapisivati datoteke u pohranu datoteka, a zatim ih montirati kao disk na vašem PC-u ili Mac-u. ✅ Istražite: Pročitajte više o [Azure File Storage](https://docs.microsoft.com/azure/storage/files/storage-files-introduction?WT.mc_id=academic-17441-jabenn) ## Povežite svoj serverless kod s pohranom Vaša funkcijska aplikacija sada treba povezati blob pohranu kako bi pohranjivala poruke iz IoT Hub-a. Postoje dva načina za to: * Unutar koda funkcije, povežite se s blob pohranom koristeći Python SDK za blob pohranu i zapisujte podatke kao blobove. * Koristite izlaznu funkcijsku vezu za povezivanje povratne vrijednosti funkcije s blob pohranom i automatski spremite blob. U ovoj lekciji koristit ćete Python SDK kako biste vidjeli kako raditi s blob pohranom. ![Slanje GPS telemetrije s IoT uređaja na IoT Hub, zatim na Azure Functions putem okidača Event Hub-a, pa spremanje u blob pohranu](../../../../../translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.hr.png) Podaci će biti pohranjeni kao JSON blob u sljedećem formatu: ```json { "device_id": , "timestamp" :