33 KiB
Przechowywanie danych o lokalizacji
Szkic autorstwa Nitya Narasimhan. Kliknij obraz, aby zobaczyć większą wersję.
Quiz przed wykładem
Wprowadzenie
W poprzedniej lekcji nauczyłeś się, jak korzystać z czujnika GPS do zbierania danych o lokalizacji. Aby wykorzystać te dane do wizualizacji lokalizacji ciężarówki przewożącej żywność i jej trasy, dane te muszą zostać przesłane do usługi IoT w chmurze, a następnie gdzieś przechowywane.
W tej lekcji dowiesz się o różnych sposobach przechowywania danych IoT oraz jak przechowywać dane z usługi IoT za pomocą kodu bezserwerowego.
W tej lekcji omówimy:
- Dane strukturalne i niestrukturalne
- Wysyłanie danych GPS do IoT Hub
- Ścieżki gorące, ciepłe i zimne
- Obsługa zdarzeń GPS za pomocą kodu bezserwerowego
- Konta magazynu Azure
- Połączenie kodu bezserwerowego z magazynem
Dane strukturalne i niestrukturalne
Systemy komputerowe przetwarzają dane, które mogą przybierać różne formy i rozmiary. Mogą to być pojedyncze liczby, duże ilości tekstu, filmy, obrazy czy dane IoT. Dane te można zazwyczaj podzielić na dwie kategorie - strukturalne i niestrukturalne.
-
Dane strukturalne to dane o dobrze zdefiniowanej, sztywnej strukturze, która się nie zmienia i zazwyczaj odpowiada tabelom danych z relacjami. Przykładem mogą być dane osobowe, takie jak imię, data urodzenia i adres.
-
Dane niestrukturalne to dane bez dobrze zdefiniowanej, sztywnej struktury, które mogą często zmieniać swoją formę. Przykładem mogą być dokumenty, takie jak teksty pisane czy arkusze kalkulacyjne.
✅ Zrób małe badanie: Czy potrafisz wymyślić inne przykłady danych strukturalnych i niestrukturalnych?
💁 Istnieją również dane półstrukturalne, które mają strukturę, ale nie pasują do sztywnych tabel danych.
Dane IoT są zazwyczaj uważane za dane niestrukturalne.
Wyobraź sobie, że dodajesz urządzenia IoT do floty pojazdów dużego gospodarstwa rolnego. Możesz chcieć używać różnych urządzeń dla różnych typów pojazdów. Na przykład:
- Dla pojazdów rolniczych, takich jak traktory, chcesz zbierać dane GPS, aby upewnić się, że pracują na właściwych polach.
- Dla ciężarówek dostawczych przewożących żywność do magazynów chcesz zbierać dane GPS, a także dane o prędkości i przyspieszeniu, aby upewnić się, że kierowca jeździ bezpiecznie, oraz dane o tożsamości kierowcy i rozpoczęciu/zakończeniu pracy, aby zapewnić zgodność z lokalnymi przepisami dotyczącymi godzin pracy.
- Dla ciężarówek chłodniczych chcesz również zbierać dane o temperaturze, aby upewnić się, że żywność nie przegrzewa się ani nie zamarza podczas transportu.
Te dane mogą się stale zmieniać. Na przykład, jeśli urządzenie IoT znajduje się w kabinie ciężarówki, dane, które wysyła, mogą się zmieniać w zależności od zmiany przyczepy, np. wysyłając dane o temperaturze tylko wtedy, gdy używana jest przyczepa chłodnicza.
✅ Jakie inne dane IoT mogłyby być zbierane? Pomyśl o rodzajach ładunków, które mogą przewozić ciężarówki, a także o danych dotyczących konserwacji.
Te dane różnią się w zależności od pojazdu, ale wszystkie są przesyłane do tej samej usługi IoT w celu przetworzenia. Usługa IoT musi być w stanie przetwarzać te niestrukturalne dane, przechowując je w sposób umożliwiający ich wyszukiwanie lub analizę, ale jednocześnie obsługując różne struktury tych danych.
Magazyn SQL vs NoSQL
Bazy danych to usługi umożliwiające przechowywanie i przeszukiwanie danych. Bazy danych dzielą się na dwa typy - SQL i NoSQL.
Bazy danych SQL
Pierwsze bazy danych to Relacyjne Systemy Zarządzania Bazami Danych (RDBMS), znane również jako bazy danych SQL, od języka Structured Query Language (SQL), który służy do interakcji z nimi w celu dodawania, usuwania, aktualizowania lub przeszukiwania danych. Te bazy danych składają się ze schematu - dobrze zdefiniowanego zestawu tabel danych, podobnych do arkusza kalkulacyjnego. Każda tabela ma wiele nazwanych kolumn. Wstawiając dane, dodajesz wiersz do tabeli, umieszczając wartości w każdej z kolumn. To utrzymuje dane w bardzo sztywnej strukturze - chociaż możesz pozostawić kolumny puste, jeśli chcesz dodać nową kolumnę, musisz to zrobić w bazie danych, uzupełniając wartości dla istniejących wierszy. Te bazy danych są relacyjne - jedna tabela może mieć relację z inną.
Na przykład, jeśli przechowujesz dane osobowe użytkowników w tabeli, miałbyś jakiś wewnętrzny unikalny identyfikator dla każdego użytkownika, który jest używany w wierszu tabeli zawierającej imię i adres użytkownika. Jeśli chciałbyś przechowywać inne szczegóły dotyczące tego użytkownika, takie jak jego zakupy, w innej tabeli, miałbyś jedną kolumnę w nowej tabeli dla identyfikatora tego użytkownika. Gdy wyszukujesz użytkownika, możesz użyć jego identyfikatora, aby uzyskać jego dane osobowe z jednej tabeli i jego zakupy z innej.
Bazy danych SQL są idealne do przechowywania danych strukturalnych i do sytuacji, gdy chcesz zapewnić zgodność danych ze schematem.
✅ Jeśli nigdy wcześniej nie korzystałeś z SQL, poświęć chwilę, aby przeczytać o nim na stronie SQL w Wikipedii.
Niektóre znane bazy danych SQL to Microsoft SQL Server, MySQL i PostgreSQL.
✅ Zrób małe badanie: Przeczytaj o niektórych z tych baz danych SQL i ich możliwościach.
Bazy danych NoSQL
Bazy danych NoSQL nazywane są NoSQL, ponieważ nie mają tej samej sztywnej struktury co bazy danych SQL. Są również znane jako bazy dokumentów, ponieważ mogą przechowywać dane niestrukturalne, takie jak dokumenty.
💁 Pomimo swojej nazwy, niektóre bazy danych NoSQL pozwalają na użycie SQL do przeszukiwania danych.
Bazy danych NoSQL nie mają z góry zdefiniowanego schematu, który ogranicza sposób przechowywania danych. Możesz wstawiać dowolne dane niestrukturalne, zazwyczaj w formacie JSON. Dokumenty te mogą być organizowane w foldery, podobnie jak pliki na komputerze. Każdy dokument może mieć inne pola niż inne dokumenty - na przykład, jeśli przechowujesz dane IoT z pojazdów rolniczych, niektóre mogą mieć pola dla danych z akcelerometru i prędkości, inne mogą mieć pola dla temperatury w przyczepie. Jeśli dodałbyś nowy typ ciężarówki, na przykład z wbudowanymi wagami do śledzenia wagi przewożonych produktów, urządzenie IoT mogłoby dodać to nowe pole, a dane mogłyby być przechowywane bez żadnych zmian w bazie danych.
Niektóre znane bazy danych NoSQL to Azure CosmosDB, MongoDB i CouchDB.
✅ Zrób małe badanie: Przeczytaj o niektórych z tych baz danych NoSQL i ich możliwościach.
W tej lekcji będziesz używać magazynu NoSQL do przechowywania danych IoT.
Wysyłanie danych GPS do IoT Hub
W poprzedniej lekcji zebrałeś dane GPS z czujnika GPS podłączonego do urządzenia IoT. Aby przechowywać te dane IoT w chmurze, musisz je przesłać do usługi IoT. Ponownie użyjesz Azure IoT Hub, tej samej usługi IoT w chmurze, której używałeś w poprzednim projekcie.
Zadanie - wysyłanie danych GPS do IoT Hub
-
Utwórz nowy IoT Hub, korzystając z darmowego poziomu.
⚠️ Możesz odwołać się do instrukcji tworzenia IoT Hub z projektu 2, lekcja 4, jeśli to konieczne.
Pamiętaj, aby utworzyć nową grupę zasobów. Nazwij nową grupę zasobów
gps-sensor
, a nowy IoT Hub unikalną nazwą opartą nagps-sensor
, na przykładgps-sensor-<twoje imię>
.💁 Jeśli nadal masz swój IoT Hub z poprzedniego projektu, możesz go ponownie użyć. Pamiętaj, aby użyć nazwy tego IoT Hub i grupy zasobów, w której się znajduje, podczas tworzenia innych usług.
-
Dodaj nowe urządzenie do IoT Hub. Nazwij to urządzenie
gps-sensor
. Pobierz łańcuch połączenia dla urządzenia. -
Zaktualizuj kod urządzenia, aby wysyłał dane GPS do nowego IoT Hub, używając łańcucha połączenia urządzenia z poprzedniego kroku.
⚠️ Możesz odwołać się do instrukcji łączenia urządzenia z IoT z projektu 2, lekcja 4, jeśli to konieczne.
-
Podczas wysyłania danych GPS, zrób to w formacie JSON w następujący sposób:
{ "gps" : { "lat" : <latitude>, "lon" : <longitude> } }
-
Wysyłaj dane GPS co minutę, aby nie przekroczyć dziennego limitu wiadomości.
Jeśli używasz Wio Terminal, pamiętaj, aby dodać wszystkie niezbędne biblioteki i ustawić czas za pomocą serwera NTP. Twój kod musi również upewnić się, że odczytał wszystkie dane z portu szeregowego przed wysłaniem lokalizacji GPS, używając istniejącego kodu z poprzedniej lekcji. Użyj poniższego kodu, aby skonstruować dokument JSON:
DynamicJsonDocument doc(1024);
doc["gps"]["lat"] = gps.location.lat();
doc["gps"]["lon"] = gps.location.lng();
Jeśli używasz Wirtualnego urządzenia IoT, pamiętaj, aby zainstalować wszystkie potrzebne biblioteki, korzystając z wirtualnego środowiska.
Dla Raspberry Pi i Wirtualnego urządzenia IoT użyj istniejącego kodu z poprzedniej lekcji, aby uzyskać wartości szerokości i długości geograficznej, a następnie wyślij je w odpowiednim formacie JSON za pomocą poniższego kodu:
message_json = { "gps" : { "lat":lat, "lon":lon } }
print("Sending telemetry", message_json)
message = Message(json.dumps(message_json))
💁 Ten kod znajdziesz w folderze code/wio-terminal, code/pi lub code/virtual-device.
Uruchom kod urządzenia i upewnij się, że wiadomości trafiają do IoT Hub, używając polecenia CLI az iot hub monitor-events
.
Ścieżki gorące, ciepłe i zimne
Dane przesyłane z urządzenia IoT do chmury nie zawsze są przetwarzane w czasie rzeczywistym. Niektóre dane wymagają przetwarzania w czasie rzeczywistym, inne mogą być przetwarzane z niewielkim opóźnieniem, a jeszcze inne mogą być przetwarzane znacznie później. Przepływ danych do różnych usług przetwarzających dane w różnym czasie określa się jako ścieżki gorące, ciepłe i zimne.
Ścieżka gorąca
Ścieżka gorąca odnosi się do danych, które muszą być przetwarzane w czasie rzeczywistym lub niemal w czasie rzeczywistym. Używałbyś danych ze ścieżki gorącej do alertów, takich jak powiadomienia o zbliżaniu się pojazdu do magazynu lub o zbyt wysokiej temperaturze w ciężarówce chłodniczej.
Aby korzystać z danych ze ścieżki gorącej, twój kod reagowałby na zdarzenia natychmiast po ich odebraniu przez usługi w chmurze.
Ścieżka ciepła
Ścieżka ciepła odnosi się do danych, które mogą być przetwarzane krótko po ich odebraniu, na przykład do raportowania lub krótkoterminowej analizy. Używałbyś danych ze ścieżki ciepłej do codziennych raportów o przebiegu pojazdów, korzystając z danych zebranych poprzedniego dnia.
Dane ze ścieżki ciepłej są przechowywane zaraz po ich odebraniu przez usługę w chmurze w jakimś rodzaju magazynu, który można szybko uzyskać.
Ścieżka zimna
Ścieżka zimna odnosi się do danych historycznych, przechowywanych długoterminowo, które mogą być przetwarzane w dowolnym momencie. Na przykład, możesz użyć ścieżki zimnej do uzyskania rocznych raportów o przebiegu pojazdów lub przeprowadzenia analizy tras w celu znalezienia najbardziej optymalnej trasy zmniejszającej koszty paliwa.
Dane ze ścieżki zimnej są przechowywane w hurtowniach danych - bazach danych zaprojektowanych do przechowywania dużych ilości danych, które nigdy się nie zmieniają i mogą być szybko i łatwo przeszukiwane. Zazwyczaj w aplikacji chmurowej uruchamiałbyś regularne zadanie, które w określonym czasie każdego dnia, tygodnia lub miesiąca przenosi dane z magazynu ścieżki ciepłej do hurtowni danych.
✅ Pomyśl o danych, które zebrałeś do tej pory w tych lekcjach. Czy są to dane ze ścieżki gorącej, ciepłej czy zimnej?
Obsługa zdarzeń GPS za pomocą kodu bezserwerowego
Gdy dane trafiają do IoT Hub, możesz napisać kod bezserwerowy, który będzie nasłuchiwał zdarzeń publikowanych na zgodnym z Event-Hub punkcie końcowym. To jest ścieżka ciepła - te dane zostaną przechowane i wykorzystane w następnej lekcji do raportowania trasy.
Zadanie - obsługa zdarzeń GPS za pomocą kodu bezserwerowego
- Utwórz aplikację Azure Functions za pomocą CLI Azure Functions. Użyj środowiska wykonawczego Python i utwórz ją w folderze o nazwie
gps-trigger
, używając tej samej nazwy dla projektu aplikacji Functions. Upewnij się, że tworzysz wirtualne środowisko do tego celu.
⚠️ Możesz odwołać się do instrukcji dotyczących tworzenia projektu Azure Functions z projektu 2, lekcji 5, jeśli zajdzie taka potrzeba.
-
Dodaj wyzwalacz zdarzeń IoT Hub, który korzysta z punktu końcowego zgodnego z Event Hub w IoT Hub.
⚠️ Możesz odwołać się do instrukcji tworzenia wyzwalacza zdarzeń IoT Hub z projektu 2, lekcja 5, jeśli będzie to potrzebne.
-
Ustaw łańcuch połączenia punktu końcowego zgodnego z Event Hub w pliku
local.settings.json
i użyj klucza dla tego wpisu w plikufunction.json
. -
Użyj aplikacji Azurite jako lokalnego emulatora pamięci.
-
Uruchom aplikację funkcji, aby upewnić się, że odbiera zdarzenia z Twojego urządzenia GPS. Upewnij się, że Twoje urządzenie IoT również działa i wysyła dane GPS.
Python EventHub trigger processed an event: {"gps": {"lat": 47.73481, "lon": -122.25701}}
Konta magazynu Azure
Konta magazynu Azure to uniwersalna usługa przechowywania danych, która umożliwia przechowywanie danych na różne sposoby. Możesz przechowywać dane jako obiekty blob, w kolejkach, w tabelach lub jako pliki – wszystko jednocześnie.
Magazyn obiektów blob
Słowo Blob oznacza duże obiekty binarne, ale stało się określeniem dla wszelkich danych niestrukturalnych. W magazynie obiektów blob możesz przechowywać dowolne dane, od dokumentów JSON zawierających dane IoT, po pliki graficzne i wideo. Magazyn obiektów blob wprowadza pojęcie kontenerów, czyli nazwanych zbiorników, w których można przechowywać dane, podobnie jak tabele w relacyjnej bazie danych. Kontenery mogą zawierać jeden lub więcej folderów do przechowywania obiektów blob, a każdy folder może zawierać inne foldery, podobnie jak pliki są przechowywane na dysku twardym komputera.
W tej lekcji użyjesz magazynu obiektów blob do przechowywania danych IoT.
✅ Zrób badania: Przeczytaj o Azure Blob Storage
Magazyn tabel
Magazyn tabel pozwala przechowywać dane półstrukturalne. Jest to w rzeczywistości baza danych NoSQL, więc nie wymaga z góry zdefiniowanego zestawu tabel, ale jest zaprojektowany do przechowywania danych w jednej lub więcej tabelach, z unikalnymi kluczami definiującymi każdy wiersz.
✅ Zrób badania: Przeczytaj o Azure Table Storage
Magazyn kolejek
Magazyn kolejek pozwala przechowywać wiadomości o rozmiarze do 64 KB w kolejce. Możesz dodawać wiadomości na końcu kolejki i odczytywać je z przodu. Kolejki przechowują wiadomości bezterminowo, o ile jest dostępne miejsce w magazynie, co pozwala na ich długoterminowe przechowywanie i odczyt w razie potrzeby. Na przykład, jeśli chcesz uruchamiać miesięczne zadanie przetwarzania danych GPS, możesz codziennie dodawać je do kolejki, a na koniec miesiąca przetworzyć wszystkie wiadomości z kolejki.
✅ Zrób badania: Przeczytaj o Azure Queue Storage
Magazyn plików
Magazyn plików umożliwia przechowywanie plików w chmurze, a aplikacje lub urządzenia mogą się z nim łączyć za pomocą standardowych protokołów. Możesz zapisywać pliki w magazynie plików, a następnie zamontować go jako dysk na swoim komputerze PC lub Mac.
✅ Zrób badania: Przeczytaj o Azure File Storage
Połącz swój kod bezserwerowy z magazynem
Twoja aplikacja funkcji musi teraz połączyć się z magazynem obiektów blob, aby przechowywać wiadomości z IoT Hub. Istnieją dwa sposoby, aby to zrobić:
- Wewnątrz kodu funkcji, połącz się z magazynem obiektów blob za pomocą SDK dla Pythona i zapisz dane jako obiekty blob.
- Użyj powiązania wyjściowego funkcji, aby powiązać wartość zwracaną funkcji z magazynem obiektów blob i automatycznie zapisać obiekt blob.
W tej lekcji użyjesz SDK dla Pythona, aby zobaczyć, jak pracować z magazynem obiektów blob.
Dane zostaną zapisane jako obiekt JSON w następującym formacie:
{
"device_id": <device_id>,
"timestamp" : <time>,
"gps" :
{
"lat" : <latitude>,
"lon" : <longitude>
}
}
Zadanie - połącz swój kod bezserwerowy z magazynem
-
Utwórz konto magazynu Azure. Nazwij je np.
gps<twoje_imie>
.⚠️ Możesz odwołać się do instrukcji tworzenia konta magazynu z projektu 2, lekcja 5, jeśli będzie to potrzebne.
Jeśli masz już konto magazynu z poprzedniego projektu, możesz je ponownie wykorzystać.
💁 Będziesz mógł użyć tego samego konta magazynu do wdrożenia aplikacji Azure Functions później w tej lekcji.
-
Uruchom następujące polecenie, aby uzyskać łańcuch połączenia dla konta magazynu:
az storage account show-connection-string --output table \ --name <storage_name>
Zamień
<storage_name>
na nazwę konta magazynu, które utworzyłeś w poprzednim kroku. -
Dodaj nowy wpis do pliku
local.settings.json
dla łańcucha połączenia konta magazynu, używając wartości z poprzedniego kroku. Nazwij goSTORAGE_CONNECTION_STRING
. -
Dodaj następujące wpisy do pliku
requirements.txt
, aby zainstalować pakiety Pip dla magazynu Azure:azure-storage-blob
Zainstaluj pakiety z tego pliku w swoim wirtualnym środowisku.
Jeśli pojawi się błąd, zaktualizuj wersję Pip w swoim wirtualnym środowisku do najnowszej wersji za pomocą następującego polecenia, a następnie spróbuj ponownie:
pip install --upgrade pip
-
W pliku
__init__.py
dlaiot-hub-trigger
dodaj następujące instrukcje importu:import json import os import uuid from azure.storage.blob import BlobServiceClient, PublicAccess
Moduł systemowy
json
będzie używany do odczytu i zapisu JSON, modułos
do odczytu łańcucha połączenia, a modułuuid
do generowania unikalnego identyfikatora dla odczytu GPS.Pakiet
azure.storage.blob
zawiera SDK dla Pythona do pracy z magazynem obiektów blob. -
Przed metodą
main
dodaj następującą funkcję pomocniczą:def get_or_create_container(name): connection_str = os.environ['STORAGE_CONNECTION_STRING'] blob_service_client = BlobServiceClient.from_connection_string(connection_str) for container in blob_service_client.list_containers(): if container.name == name: return blob_service_client.get_container_client(container.name) return blob_service_client.create_container(name, public_access=PublicAccess.Container)
SDK dla obiektów blob w Pythonie nie ma metody pomocniczej do tworzenia kontenera, jeśli nie istnieje. Ten kod załaduje łańcuch połączenia z pliku
local.settings.json
(lub ustawień aplikacji po wdrożeniu w chmurze), a następnie utworzy klasęBlobServiceClient
, aby współpracować z kontem magazynu obiektów blob. Następnie przechodzi przez wszystkie kontenery w koncie magazynu obiektów blob, szukając takiego o podanej nazwie – jeśli znajdzie, zwróci klasęContainerClient
, która może współpracować z kontenerem w celu tworzenia obiektów blob. Jeśli nie znajdzie, kontener zostanie utworzony, a klient dla nowego kontenera zostanie zwrócony.Po utworzeniu nowego kontenera, przyznawany jest publiczny dostęp do zapytań o obiekty blob w kontenerze. Będzie to używane w następnej lekcji do wizualizacji danych GPS na mapie.
-
W przeciwieństwie do wilgotności gleby, w tym kodzie chcemy przechowywać każde zdarzenie, więc dodaj następujący kod wewnątrz pętli
for event in events:
w funkcjimain
, poniżej instrukcjilogging
:device_id = event.iothub_metadata['connection-device-id'] blob_name = f'{device_id}/{str(uuid.uuid1())}.json'
Ten kod pobiera identyfikator urządzenia z metadanych zdarzenia, a następnie używa go do utworzenia nazwy obiektu blob. Obiekty blob mogą być przechowywane w folderach, a identyfikator urządzenia będzie używany jako nazwa folderu, więc każde urządzenie będzie miało wszystkie swoje zdarzenia GPS w jednym folderze. Nazwa obiektu blob to ten folder, a następnie nazwa dokumentu, oddzielone ukośnikami, podobnie jak ścieżki w systemach Linux i macOS (podobnie jak w Windows, ale Windows używa odwrotnych ukośników). Nazwa dokumentu to unikalny identyfikator generowany za pomocą modułu
uuid
w Pythonie, z rozszerzeniem plikujson
.Na przykład, dla identyfikatora urządzenia
gps-sensor
, nazwa obiektu blob może wyglądać tak:gps-sensor/a9487ac2-b9cf-11eb-b5cd-1e00621e3648.json
. -
Dodaj następujący kod poniżej tego:
container_client = get_or_create_container('gps-data') blob = container_client.get_blob_client(blob_name)
Ten kod pobiera klienta kontenera za pomocą klasy pomocniczej
get_or_create_container
, a następnie uzyskuje obiekt klienta obiektu blob za pomocą nazwy obiektu blob. Klienci obiektów blob mogą odnosić się do istniejących obiektów blob lub, jak w tym przypadku, do nowych obiektów blob. -
Dodaj następujący kod po tym:
event_body = json.loads(event.get_body().decode('utf-8')) blob_body = { 'device_id' : device_id, 'timestamp' : event.iothub_metadata['enqueuedtime'], 'gps': event_body['gps'] }
Ten kod buduje treść obiektu blob, który zostanie zapisany w magazynie obiektów blob. Jest to dokument JSON zawierający identyfikator urządzenia, czas wysłania telemetrii do IoT Hub oraz współrzędne GPS z telemetrii.
💁 Ważne jest, aby używać czasu zakolejkowania wiadomości zamiast bieżącego czasu, aby uzyskać czas, w którym wiadomość została wysłana. Może ona znajdować się w hubie przez jakiś czas, zanim zostanie odebrana, jeśli aplikacja funkcji nie działa.
-
Dodaj następujący kod poniżej tego:
logging.info(f'Writing blob to {blob_name} - {blob_body}') blob.upload_blob(json.dumps(blob_body).encode('utf-8'))
Ten kod loguje, że obiekt blob ma zostać zapisany wraz z jego szczegółami, a następnie przesyła treść obiektu blob jako zawartość nowego obiektu blob.
-
Uruchom aplikację funkcji. Zobaczysz, że obiekty blob są zapisywane dla wszystkich zdarzeń GPS w wyjściu:
[2021-05-21T01:31:14.325Z] Python EventHub trigger processed an event: {"gps": {"lat": 47.73092, "lon": -122.26206}} ... [2021-05-21T01:31:14.351Z] Writing blob to gps-sensor/4b6089fe-ba8d-11eb-bc7b-1e00621e3648.json - {'device_id': 'gps-sensor', 'timestamp': '2021-05-21T00:57:53.878Z', 'gps': {'lat': 47.73092, 'lon': -122.26206}}
💁 Upewnij się, że nie uruchamiasz jednocześnie monitora zdarzeń IoT Hub.
💁 Ten kod znajdziesz w folderze code/functions.
Zadanie - zweryfikuj przesłane obiekty blob
-
Aby zobaczyć utworzone obiekty blob, możesz użyć Azure Storage Explorer, darmowego narzędzia umożliwiającego przeglądanie i zarządzanie kontami magazynu, lub CLI.
-
Aby użyć CLI, najpierw potrzebujesz klucza konta. Uruchom następujące polecenie, aby uzyskać ten klucz:
az storage account keys list --output table \ --account-name <storage_name>
Zamień
<storage_name>
na nazwę konta magazynu.Skopiuj wartość
key1
. -
Uruchom następujące polecenie, aby wyświetlić listę obiektów blob w kontenerze:
az storage blob list --container-name gps-data \ --output table \ --account-name <storage_name> \ --account-key <key1>
Zamień
<storage_name>
na nazwę konta magazynu, a<key1>
na wartośćkey1
, którą skopiowałeś w poprzednim kroku.To wyświetli listę wszystkich obiektów blob w kontenerze:
Name Blob Type Blob Tier Length Content Type Last Modified Snapshot ---------------------------------------------------- ----------- ----------- -------- ------------------------ ------------------------- ---------- gps-sensor/1810d55e-b9cf-11eb-9f5b-1e00621e3648.json BlockBlob Hot 45 application/octet-stream 2021-05-21T00:54:27+00:00 gps-sensor/18293e46-b9cf-11eb-9f5b-1e00621e3648.json BlockBlob Hot 45 application/octet-stream 2021-05-21T00:54:28+00:00 gps-sensor/1844549c-b9cf-11eb-9f5b-1e00621e3648.json BlockBlob Hot 45 application/octet-stream 2021-05-21T00:54:28+00:00 gps-sensor/1894d714-b9cf-11eb-9f5b-1e00621e3648.json BlockBlob Hot 45 application/octet-stream 2021-05-21T00:54:28+00:00
-
Pobierz jeden z obiektów blob za pomocą następującego polecenia:
az storage blob download --container-name gps-data \ --account-name <storage_name> \ --account-key <key1> \ --name <blob_name> \ --file <file_name>
Zamień
<storage_name>
na nazwę konta magazynu, a<key1>
na wartośćkey1
, którą skopiowałeś w poprzednim kroku.Zamień
<blob_name>
na pełną nazwę z kolumnyName
w wyjściu poprzedniego kroku, włącznie z nazwą folderu. Zamień<file_name>
na nazwę lokalnego pliku, do którego chcesz zapisać obiekt blob.
Po pobraniu możesz otworzyć plik JSON w VS Code i zobaczysz obiekt blob zawierający szczegóły lokalizacji GPS:
{"device_id": "gps-sensor", "timestamp": "2021-05-21T00:57:53.878Z", "gps": {"lat": 47.73092, "lon": -122.26206}}
-
Zadanie - wdroż swoją aplikację funkcji w chmurze
Teraz, gdy Twoja aplikacja funkcji działa, możesz ją wdrożyć w chmurze.
-
Utwórz nową aplikację Azure Functions, używając konta magazynu, które utworzyłeś wcześniej. Nazwij ją np.
gps-sensor-
i dodaj unikalny identyfikator na końcu, np. losowe słowa lub swoje imię.⚠️ Możesz odwołać się do instrukcji tworzenia aplikacji Functions z projektu 2, lekcja 5, jeśli będzie to potrzebne.
-
Prześlij wartości
IOT_HUB_CONNECTION_STRING
iSTORAGE_CONNECTION_STRING
do ustawień aplikacji.⚠️ Możesz odwołać się do instrukcji przesyłania ustawień aplikacji z projektu 2, lekcja 5, jeśli będzie to potrzebne.
-
Wdróż swoją lokalną aplikację Functions w chmurze.
⚠️ Możesz odwołać się do instrukcji wdrażania aplikacji Functions z projektu 2, lekcji 5, jeśli zajdzie taka potrzeba.
🚀 Wyzwanie
Dane GPS nie są idealnie dokładne, a wykrywane lokalizacje mogą być przesunięte o kilka metrów, a nawet więcej, szczególnie w tunelach i obszarach z wysokimi budynkami.
Zastanów się, jak nawigacja satelitarna mogłaby sobie z tym poradzić? Jakie dane posiada Twój system nawigacji, które pozwoliłyby mu lepiej przewidywać Twoją lokalizację?
Quiz po wykładzie
Przegląd i samodzielna nauka
- Przeczytaj o danych strukturalnych na stronie o modelu danych na Wikipedii
- Przeczytaj o danych półstrukturalnych na stronie o danych półstrukturalnych na Wikipedii
- Przeczytaj o danych niestrukturalnych na stronie o danych niestrukturalnych na Wikipedii
- Dowiedz się więcej o Azure Storage i różnych typach przechowywania danych w dokumentacji Azure Storage
Zadanie
Zastrzeżenie:
Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Chociaż dokładamy wszelkich starań, aby tłumaczenie było precyzyjne, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za autorytatywne źródło. W przypadku informacji o kluczowym znaczeniu zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.