# Ukládání dat o poloze ![Přehled této lekce ve formě sketchnote](../../../../../translated_images/lesson-12.ca7f53039712a3ec14ad6474d8445361c84adab643edc53fa6269b77895606bb.cs.jpg) > Sketchnote od [Nitya Narasimhan](https://github.com/nitya). Klikněte na obrázek pro větší verzi. ## Kvíz před lekcí [Kvíz před lekcí](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/23) ## Úvod V minulé lekci jste se naučili, jak používat GPS senzor k zachycení dat o poloze. Aby bylo možné tato data vizualizovat, například polohu nákladního vozu s potravinami a jeho cestu, je potřeba je odeslat do IoT služby v cloudu a následně někde uložit. V této lekci se naučíte různé způsoby ukládání IoT dat a jak ukládat data z vaší IoT služby pomocí serverless kódu. V této lekci se zaměříme na: * [Strukturovaná a nestrukturovaná data](../../../../../3-transport/lessons/2-store-location-data) * [Odesílání GPS dat do IoT Hubu](../../../../../3-transport/lessons/2-store-location-data) * [Horké, teplé a studené cesty](../../../../../3-transport/lessons/2-store-location-data) * [Zpracování GPS událostí pomocí serverless kódu](../../../../../3-transport/lessons/2-store-location-data) * [Účty Azure Storage](../../../../../3-transport/lessons/2-store-location-data) * [Propojení serverless kódu s úložištěm](../../../../../3-transport/lessons/2-store-location-data) ## Strukturovaná a nestrukturovaná data Počítačové systémy pracují s daty, která mohou mít různé podoby. Mohou to být jednoduchá čísla, velké množství textu, videa, obrázky nebo IoT data. Data lze obvykle rozdělit do dvou kategorií - *strukturovaná* data a *nestrukturovaná* data. * **Strukturovaná data** jsou data s dobře definovanou, pevnou strukturou, která se nemění, a obvykle odpovídají tabulkám dat s vazbami. Příkladem mohou být údaje o osobě, jako je jméno, datum narození a adresa. * **Nestrukturovaná data** jsou data bez pevné, dobře definované struktury, která se může často měnit. Příkladem mohou být dokumenty, jako jsou textové dokumenty nebo tabulky. ✅ Udělejte si průzkum: Napadnou vás další příklady strukturovaných a nestrukturovaných dat? > 💁 Existují také polostrukturovaná data, která mají strukturu, ale neodpovídají pevným tabulkám dat. IoT data jsou obvykle považována za nestrukturovaná data. Představte si, že přidáváte IoT zařízení do flotily vozidel velké komerční farmy. Můžete chtít použít různá zařízení pro různé typy vozidel. Například: * U zemědělských vozidel, jako jsou traktory, chcete GPS data, abyste zajistili, že pracují na správných polích. * U nákladních vozů přepravujících potraviny do skladů chcete GPS data, ale také údaje o rychlosti a zrychlení, abyste zajistili bezpečnou jízdu, a údaje o identitě řidiče a začátku/konce jízdy, abyste zajistili dodržování místních zákonů o pracovní době. * U chladírenských vozů chcete také údaje o teplotě, abyste zajistili, že potraviny během přepravy nezteplají nebo nezmrznou. Tato data se mohou neustále měnit. Například pokud je IoT zařízení v kabině nákladního vozu, může se data, která odesílá, měnit podle připojeného přívěsu, například odesílat údaje o teplotě pouze tehdy, když je připojen chladírenský přívěs. ✅ Jaká další IoT data by mohla být zachycena? Přemýšlejte o typech nákladů, které mohou nákladní vozy přepravovat, a o datech údržby. Tato data se liší podle vozidla, ale všechna jsou odesílána do stejné IoT služby ke zpracování. IoT služba musí být schopna zpracovat tato nestrukturovaná data, uložit je způsobem, který umožňuje jejich vyhledávání nebo analýzu, a zároveň pracovat s různými strukturami těchto dat. ### SQL vs NoSQL úložiště Databáze jsou služby, které umožňují ukládat a dotazovat se na data. Databáze se dělí na dva typy - SQL a NoSQL. #### SQL databáze První databáze byly relační databázové systémy (RDBMS), známé také jako SQL databáze podle jazyka Structured Query Language (SQL), který se používá k interakci s nimi pro přidávání, odstraňování, aktualizaci nebo dotazování na data. Tyto databáze mají schéma - dobře definovanou sadu tabulek dat, podobnou tabulce v Excelu. Každá tabulka má více pojmenovaných sloupců. Při vkládání dat přidáváte řádek do tabulky a vkládáte hodnoty do jednotlivých sloupců. To udržuje data v pevné struktuře - i když můžete nechat sloupce prázdné, pokud chcete přidat nový sloupec, musíte to udělat v databázi a vyplnit hodnoty pro stávající řádky. Tyto databáze jsou relační - jedna tabulka může mít vztah k jiné. ![Relační databáze s ID tabulky uživatelů, které se vztahuje k ID uživatele ve sloupci tabulky nákupů, a ID tabulky produktů, které se vztahuje k ID produktu v tabulce nákupů](../../../../../translated_images/sql-database.be160f12bfccefd3ca718a66468c2c4c89c53e5aad4c295324d576da87f9dfdd.cs.png) Například pokud byste ukládali osobní údaje uživatelů do tabulky, měli byste pro každého uživatele nějaké interní jedinečné ID, které se používá v řádku tabulky obsahující jméno a adresu uživatele. Pokud byste pak chtěli uložit další údaje o tomto uživateli, například jeho nákupy, do jiné tabulky, měli byste v nové tabulce jeden sloupec pro ID tohoto uživatele. Při vyhledávání uživatele můžete použít jeho ID k získání osobních údajů z jedné tabulky a jeho nákupů z jiné. SQL databáze jsou ideální pro ukládání strukturovaných dat a pro situace, kdy chcete zajistit, že data odpovídají vašemu schématu. ✅ Pokud jste SQL ještě nepoužívali, věnujte chvíli přečtení [stránky o SQL na Wikipedii](https://wikipedia.org/wiki/SQL). Mezi známé SQL databáze patří Microsoft SQL Server, MySQL a PostgreSQL. ✅ Udělejte si průzkum: Přečtěte si o některých z těchto SQL databází a jejich schopnostech. #### NoSQL databáze NoSQL databáze se nazývají NoSQL, protože nemají stejnou pevnou strukturu jako SQL databáze. Jsou také známé jako dokumentové databáze, protože mohou ukládat nestrukturovaná data, jako jsou dokumenty. > 💁 Navzdory svému názvu některé NoSQL databáze umožňují používat SQL k dotazování na data. ![Dokumenty ve složkách v NoSQL databázi](../../../../../translated_images/noqsl-database.62d24ccf5b73f60d35c245a8533f1c7147c0928e955b82cb290b2e184bb434df.cs.png) NoSQL databáze nemají předem definované schéma, které by omezovalo způsob ukládání dat. Můžete do nich vkládat jakákoli nestrukturovaná data, obvykle ve formátu JSON. Tyto dokumenty mohou být organizovány do složek, podobně jako soubory na vašem počítači. Každý dokument může mít jiné pole než ostatní dokumenty - například pokud byste ukládali IoT data z vašich zemědělských vozidel, některá mohou mít pole pro data z akcelerometru a rychlosti, jiná mohou mít pole pro teplotu v přívěsu. Pokud byste přidali nový typ nákladního vozu, například s vestavěnými váhami pro sledování hmotnosti přepravovaného zboží, vaše IoT zařízení by mohlo přidat toto nové pole a mohlo by být uloženo bez jakýchkoli změn v databázi. Mezi známé NoSQL databáze patří Azure CosmosDB, MongoDB a CouchDB. ✅ Udělejte si průzkum: Přečtěte si o některých z těchto NoSQL databází a jejich schopnostech. V této lekci budete používat NoSQL úložiště pro ukládání IoT dat. ## Odesílání GPS dat do IoT Hubu V minulé lekci jste zachytili GPS data z GPS senzoru připojeného k vašemu IoT zařízení. Aby bylo možné tato IoT data uložit v cloudu, je potřeba je odeslat do IoT služby. Opět budete používat Azure IoT Hub, stejnou IoT cloudovou službu, kterou jste použili v předchozím projektu. ![Odesílání GPS telemetrie z IoT zařízení do IoT Hubu](../../../../../translated_images/gps-telemetry-iot-hub.8115335d51cd2c1285d20e9d1b18cf685e59a8e093e7797291ef173445af6f3d.cs.png) ### Úkol - odesílání GPS dat do IoT Hubu 1. Vytvořte nový IoT Hub pomocí bezplatné verze. > ⚠️ Můžete se odkazovat na [pokyny pro vytvoření IoT Hubu z projektu 2, lekce 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#create-an-iot-service-in-the-cloud), pokud je to potřeba. Nezapomeňte vytvořit novou Resource Group. Pojmenujte novou Resource Group `gps-sensor` a nový IoT Hub unikátním názvem založeným na `gps-sensor`, například `gps-sensor-`. > 💁 Pokud stále máte svůj IoT Hub z předchozího projektu, můžete jej znovu použít. Nezapomeňte použít název tohoto IoT Hubu a Resource Group, ve které se nachází, při vytváření dalších služeb. 1. Přidejte nové zařízení do IoT Hubu. Pojmenujte toto zařízení `gps-sensor`. Získejte připojovací řetězec pro zařízení. 1. Aktualizujte kód svého zařízení tak, aby odesílal GPS data do nového IoT Hubu pomocí připojovacího řetězce zařízení z předchozího kroku. > ⚠️ Můžete se odkazovat na [pokyny pro připojení vašeho zařízení k IoT z projektu 2, lekce 4](../../../2-farm/lessons/4-migrate-your-plant-to-the-cloud/README.md#connect-your-device-to-the-iot-service), pokud je to potřeba. 1. Při odesílání GPS dat je odesílejte ve formátu JSON následujícím způsobem: ```json { "gps" : { "lat" : , "lon" : } } ``` 1. Odesílejte GPS data každou minutu, abyste nevyčerpali svůj denní limit zpráv. Pokud používáte Wio Terminal, nezapomeňte přidat všechny potřebné knihovny a nastavit čas pomocí NTP serveru. Váš kód také musí zajistit, že přečte všechna data ze sériového portu před odesláním GPS polohy, pomocí stávajícího kódu z minulé lekce. Použijte následující kód pro vytvoření JSON dokumentu: ```cpp DynamicJsonDocument doc(1024); doc["gps"]["lat"] = gps.location.lat(); doc["gps"]["lon"] = gps.location.lng(); ``` Pokud používáte virtuální IoT zařízení, nezapomeňte nainstalovat všechny potřebné knihovny pomocí virtuálního prostředí. Pro Raspberry Pi i virtuální IoT zařízení použijte stávající kód z minulé lekce k získání hodnot zeměpisné šířky a délky a poté je odešlete ve správném formátu JSON pomocí následujícího kódu: ```python message_json = { "gps" : { "lat":lat, "lon":lon } } print("Sending telemetry", message_json) message = Message(json.dumps(message_json)) ``` > 💁 Tento kód najdete ve složce [code/wio-terminal](../../../../../3-transport/lessons/2-store-location-data/code/wio-terminal), [code/pi](../../../../../3-transport/lessons/2-store-location-data/code/pi) nebo [code/virtual-device](../../../../../3-transport/lessons/2-store-location-data/code/virtual-device). Spusťte kód svého zařízení a ujistěte se, že zprávy proudí do IoT Hubu pomocí příkazu CLI `az iot hub monitor-events`. ## Horké, teplé a studené cesty Data, která proudí z IoT zařízení do cloudu, nejsou vždy zpracovávána v reálném čase. Některá data je potřeba zpracovat okamžitě, jiná mohou být zpracována o něco později a další mohou být zpracována až mnohem později. Tok dat do různých služeb, které data zpracovávají v různých časech, se označuje jako horké, teplé a studené cesty. ### Horká cesta Horká cesta se týká dat, která je potřeba zpracovat v reálném čase nebo téměř v reálném čase. Horká data byste použili například pro upozornění, že se vozidlo blíží k depu, nebo že teplota v chladírenském voze je příliš vysoká. Pro použití horkých dat by váš kód reagoval na události ihned po jejich přijetí cloudovými službami. ### Teplá cesta Teplá cesta se týká dat, která mohou být zpracována krátce po přijetí, například pro reporty nebo krátkodobé analýzy. Teplá data byste použili například pro denní reporty o ujetých kilometrech vozidel, využívající data z předchozího dne. Teplá data jsou uložena ihned po přijetí cloudovou službou v nějakém typu úložiště, které lze rychle přistupovat. ### Studená cesta Studená cesta se týká historických dat, která jsou ukládána dlouhodobě a mohou být zpracována kdykoli. Například byste mohli použít studená data pro roční reporty o ujetých kilometrech vozidel nebo pro analýzu tras za účelem nalezení nejoptimálnější trasy pro snížení nákladů na palivo. Studená data jsou ukládána v datových skladech - databázích navržených pro ukládání velkého množství dat, která se nikdy nemění a lze je rychle a snadno dotazovat. Obvykle byste měli pravidelnou úlohu ve své cloudové aplikaci, která by běžela v pravidelných intervalech (denně, týdně nebo měsíčně) a přesouvala data z teplého úložiště do datového skladu. ✅ Přemýšlejte o datech, která jste dosud v těchto lekcích zachytili. Jsou to horká, teplá nebo studená data? ## Zpracování GPS událostí pomocí serverless kódu Jakmile data proudí do vašeho IoT Hubu, můžete napsat serverless kód, který bude naslouchat událostem publikovaným na Event-Hub kompatibilním endpointu. Toto je teplá cesta - tato data budou uložena a použita v další lekci pro reportování cesty. ![Odesílání GPS telemetrie z IoT zařízení do IoT Hubu a poté do Azure Functions pomocí triggeru Event Hub](../../../../../translated_images/gps-telemetry-iot-hub-functions.24d3fa5592455e9f4e2fe73856b40c3915a292b90263c31d652acfd976cfedd8.cs.png) ### Úkol - zpracování GPS událostí pomocí serverless kódu 1. Vytvořte aplikaci Azure Functions pomocí Azure Functions CLI. Použijte runtime Python a vytvořte ji ve složce `gps-trigger`, přičemž použijte stejný název pro projekt aplikace Functions. Ujistěte se, že vytvoříte virtuální prostředí pro použití. > ⚠️ Můžete se odkazovat na [instrukce pro vytvoření projektu Azure Functions z projektu 2, lekce 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-a-serverless-application), pokud to bude potřeba. 1. Přidejte trigger události IoT Hub, který využívá kompatibilní endpoint Event Hubu IoT Hubu. > ⚠️ Pokud potřebujete, můžete se podívat na [instrukce pro vytvoření triggeru události IoT Hub z projektu 2, lekce 5](../../../2-farm/lessons/5-migrate-application-to-the-cloud/README.md#create-an-iot-hub-event-trigger). 1. Nastavte připojovací řetězec kompatibilního endpointu Event Hubu v souboru `local.settings.json` a použijte klíč pro tento záznam v souboru `function.json`. 1. Použijte aplikaci Azurite jako lokální emulátor úložiště. 1. Spusťte aplikaci funkcí, abyste ověřili, že přijímá události z vašeho GPS zařízení. Ujistěte se, že vaše IoT zařízení také běží a odesílá GPS data. ```output Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}} ``` ## Účty Azure Storage ![Logo Azure Storage](../../../../../translated_images/azure-storage-logo.605c0f602c640d482a80f1b35a2629a32d595711b7ab1d7ceea843250615ff32.cs.png) Účty Azure Storage jsou univerzální službou úložiště, která umožňuje ukládat data různými způsoby. Data můžete ukládat jako blob, do front, do tabulek nebo jako soubory, a to vše současně. ### Blob úložiště Slovo *Blob* znamená binární velké objekty, ale stalo se termínem pro jakákoli nestrukturovaná data. V blob úložišti můžete ukládat jakákoli data, od JSON dokumentů obsahujících IoT data až po obrazové a filmové soubory. Blob úložiště má koncept *kontejnerů*, pojmenovaných "bucketů", do kterých můžete ukládat data, podobně jako tabulky v relační databázi. Tyto kontejnery mohou obsahovat jednu nebo více složek pro ukládání blobů, a každá složka může obsahovat další složky, podobně jako jsou soubory ukládány na pevný disk vašeho počítače. V této lekci budete používat blob úložiště k ukládání IoT dat. ✅ Udělejte si průzkum: Přečtěte si o [Azure Blob Storage](https://docs.microsoft.com/azure/storage/blobs/storage-blobs-overview?WT.mc_id=academic-17441-jabenn) ### Tabulkové úložiště Tabulkové úložiště umožňuje ukládat polostrukturovaná data. Tabulkové úložiště je ve skutečnosti NoSQL databáze, takže nevyžaduje předem definovanou sadu tabulek, ale je navrženo pro ukládání dat do jedné nebo více tabulek s unikátními klíči pro definování každého řádku. ✅ Udělejte si průzkum: Přečtěte si o [Azure Table Storage](https://docs.microsoft.com/azure/storage/tables/table-storage-overview?WT.mc_id=academic-17441-jabenn) ### Frontové úložiště Frontové úložiště umožňuje ukládat zprávy o velikosti až 64 KB do fronty. Zprávy můžete přidávat na konec fronty a číst je z jejího začátku. Fronty ukládají zprávy neomezeně dlouho, pokud je stále k dispozici úložný prostor, což umožňuje dlouhodobé ukládání zpráv, které lze číst, když je to potřeba. Například pokud chcete spustit měsíční úlohu na zpracování GPS dat, můžete je každý den přidávat do fronty a na konci měsíce zpracovat všechny zprávy z fronty. ✅ Udělejte si průzkum: Přečtěte si o [Azure Queue Storage](https://docs.microsoft.com/azure/storage/queues/storage-queues-introduction?WT.mc_id=academic-17441-jabenn) ### Souborové úložiště Souborové úložiště umožňuje ukládání souborů v cloudu, ke kterým se mohou připojit aplikace nebo zařízení pomocí standardních průmyslových protokolů. Soubory můžete zapisovat do souborového úložiště a poté je připojit jako disk na vašem PC nebo Macu. ✅ Udělejte si průzkum: Přečtěte si o [Azure File Storage](https://docs.microsoft.com/azure/storage/files/storage-files-introduction?WT.mc_id=academic-17441-jabenn) ## Připojení serverless kódu k úložišti Vaše aplikace funkcí nyní potřebuje připojit blob úložiště, aby mohla ukládat zprávy z IoT Hubu. Existují dva způsoby, jak to udělat: * Uvnitř kódu funkce připojte blob úložiště pomocí Python SDK pro blob úložiště a zapisujte data jako blob. * Použijte výstupní vazbu funkce k propojení návratové hodnoty funkce s blob úložištěm a automaticky uložit blob. V této lekci použijete Python SDK, abyste viděli, jak pracovat s blob úložištěm. ![Odesílání GPS telemetrie z IoT zařízení do IoT Hubu, poté do Azure Functions přes trigger Event Hubu, a následné ukládání do blob úložiště](../../../../../translated_images/save-telemetry-to-storage-from-functions.ed3b1820980097f143d9f0570072da11304c2bc7906359dfa075b4d9b253c20f.cs.png) Data budou uložena jako JSON blob s následujícím formátem: ```json { "device_id": , "timestamp" :