Zarządzaj stanem urządzeń IoT w dowolnym miejscu za pomocą usługi AWS IoT Device Shadow i AWS IoT Greengrass
Deweloperzy Internetu rzeczy (IoT) często muszą wdrożyć solidny mechanizm zarządzania stanem urządzeń IoT lokalnie lub zdalnie. Typowym przykładem jest inteligentny grzejnik domowy, urządzenie IoT, w którym za pomocą wbudowanego panelu sterowania można regulować temperaturę (stan urządzenia) lub zdalnie wyzwalać komunikaty o regulacji temperatury z aplikacji działającej w chmurze.
Możesz szybko zbudować ten mechanizm, korzystając z usługi AWS IoT Device Shadow. Usługa AWS IoT Device Shadow może udostępnić stan urządzenia Twojej logice biznesowej, nawet w przypadku przerywanego połączenia sieciowego.
Ponadto, aby wydajnie zarządzać cyklem życia oprogramowania urządzenia i przyspieszyć prace rozwojowe, możesz użyć AWS IoT Greengrass wraz z jego gotowymi komponentami. AWS IoT Greengrass to środowisko uruchomieniowe typu open source i usługa w chmurze do tworzenia, wdrażania i zarządzania oprogramowaniem urządzeń. Jednym z komponentów AWS IoT Greengrass jest Shadow Manager, który umożliwia lokalną usługę na twoim głównym urządzeniu. Usługa local shadow umożliwia komponentom korzystanie z komunikacji międzyprocesowej (IPC) w celu interakcji z lokalnymi cieniami. Komponent shadow manager zarządza przechowywaniem lokalnych dokumentów shadow, a także obsługuje synchronizację lokalnych stanów shadow z usługą AWS IoT Device Shadow.
W poniższym artykule autorzy używają usługi AWS IoT Device Shadow i AWS IoT Greengrass wraz z Raspberry Pi i sprzętem Sense HAT do symulacji inteligentnego grzejnika domowego. Ta demonstracja wykorzystuje liczbę jednocyfrową (0 – 9) do symulacji mocy wyjściowej. Ta liczba to stan urządzenia, którym chcemy zarządzać z dowolnego miejsca, lokalnego i zdalnego. Użytkownik może zmienić ten numer za pomocą lokalnego przełącznika sprzętowego (joystick wbudowany w Sense HAT), jak również zdalnie z aplikacji w chmurze.
Raspberry Pi pokazuje liczbę na wyświetlaczu LED Sense HAT, wskazując moc wyjściową grzejnika. Użytkownik może nacisnąć joystick w Sense HAT, aby zwiększyć liczbę (lub nacisnąć w dół, aby ją zmniejszyć).
Śledząc ten artykuł, możesz szybko rozpocząć tworzenie i testowanie rozwiązań IoT do zarządzania stanem urządzenia w dowolnym miejscu.
Warunki wstępne
Aby podążać za treścią tego artykułu, będziesz potrzebować:
Sprzęt komputerowy
- A Raspberry Pi (To demo wykorzystuje Raspberry Pi 3B)
- A Raspberry Pi Sense HAT
Oprogramowanie
- Raspberry Pi OS (64-bitowy) zainstalowany na Raspberry Pi
- Sense HAT SDK zainstalowany na Raspberry Pi
- Konto AWS i uprawnienia dostępu do AWS IoT Core i AWS IoT Greengrass
Przewodnik
Krok 1: Zainstaluj i skonfiguruj podstawowe oprogramowanie AWS IoT Greengrass na Raspberry Pi.
Aby Twoje Raspberry Pi stało się podstawowym urządzeniem AWS IoT Greengrass, wykonaj kroki od 1 do 3 w dokumencie Wprowadzenie do AWS IoT Greengrass. Autorzy utworzyli urządzenie z następującą konfiguracją:
- Core device name: PiWithSenseHat
- Thing group: RaspberryPiGroup
Teraz powinieneś widzieć to urządzenie w konsoli AWS.
Krok 2: Wdróż na urządzeniu gotowe komponenty AWS IoT Greengrass
Kolejnym krokiem jest wdrożenie gotowych komponentów AWS IoT Greengrass na urządzeniu. AWS IoT Greengrass zapewnia i utrzymuje zestaw gotowych komponentów, które mogą przyspieszyć rozwój. W tej demonstracji wdrażane są następujące komponenty:
- greengrass.Cli:
- Zapewnia lokalny interfejs wiersza polecenia, którego można używać na podstawowych urządzeniach do lokalnego opracowywania i debugowania składników
- greengrass.ShadowManager
- Aktywuje lokalną usługę shadow na Twoim podstawowym urządzeniu i obsługuje synchronizację lokalnych stanów shadow z usługą AWS IoT Device Shadow
- greengrass.LocalDebugConsole (opcjonalnie)
- Udostępnia lokalny pulpit nawigacyjny, który wyświetla informacje o podstawowych urządzeniach AWS IoT Greengrass i ich komponentach
Kroki:
- Przejdź do konsoli AWS IoT Greengrass
- Przejdź do Wdrożenie w urządzeniach Greengrass, utwórz nowe wdrożenie
- Miejscem docelowym wdrożenia może być grupa Thing RaspberryPiGroup lub urządzenie Core
- Wybierz te 3 komponenty z Komponenty publiczne
- Skonfiguruj komponent aws.greengrass.ShadowManager
W kroku Konfiguruj komponenty wybierz aws.greengrass.ShadowManager, a następnie kliknij Konfiguruj komponent.
- Skonfiguruj wersję komponentu i plik konfiguracyjny json aws.greengrass.ShadowManager
- Version: 3.1
- Configuration to merge:
JSON
Konfiguracja json synchronizuje nazwany cień, w tym przykładzie o nazwie NumberLEDNamedShadow, w obu kierunkach, między opcjąDeviceAndCloud. W swojej rzeczywistej aplikacji możesz użyć wielu nazwanych cieni oraz jednokierunkowej lub dwukierunkowej synchronizacji. Sprawdź szczegóły aws.greengrass.ShadowManager w jego dokumencie.
- Ukończ pracę kreatora tworzenia stanowiska, aby zakończyć wdrażanie.
Pod koniec kroku 2 Raspberry Pi jest gotowe do zsynchronizowania nazwanego cienia NumberLEDNamedShadow między urządzeniem a chmurą za pomocą podstawowego oprogramowania AWS IoT Greengrass i gotowego komponentu.
Krok 3: Utwórz komponenty AWS IoT Greengrass do symulacji inteligentnego grzejnika domowego z lokalnym sterowaniem
Teraz utwórz dwa komponenty AWS IoT Greengrass do symulacji inteligentnego grzejnika domowego ze sterowaniem lokalnym. Możesz wykorzystać komunikację międzyprocesową (IPC) do wewnętrznej komunikacji między komponentami. Jeśli nie wiesz, jak zbudować niestandardowe komponenty AWS IoT Greengrass, wykonaj krok 4 w dokumencie Rozpoczęcie pracy. Na potrzeby tego artykułu autorzy tworzą je i testują lokalnie.
- Komponent example.sensehat.joystick: przechwyć zdarzenia z joysticka i opublikuj je w temacie IPC „ipc/joystick” (został zdefiniowany jako zmienna w recepturze).
- Element example.sensehat.led: Zasubskrybuj temat IPC „ipc/joystick”, zaktualizuj lokalny cień i wyświetlacz LED Sense HAT.
3.1 Utwórz komponent com.example.sensehat.joystick
Ten komponent publikuje zdarzenia wbudowanego joysticka do rdzenia IPC AWS IoT Greengrass. Wydarzenie jest:
JSON
Możesz znaleźć recepturę komponentu i artefakt z repozytorium kodu źródłowego bloga. Zamiast twardego kodowania tematu IPC w kodzie źródłowym, jest on zdefiniowany w recepturze jako zmienna.
3.2 Utwórz komponent com.example.sensehat.led
Teraz utwórz drugi komponent o nazwie com.example.sensehat.led. Recepturę komponentu i artefakt można znaleźć w repozytorium kodu źródłowego. W recepturze określa uprawnienia dostępu do dokumentów IPC i shadow.
Ten komponent:
- Utrzymuje numer jako stan urządzenia i wyświetla go na diodzie LED
- Subskrybuje temat zdarzenia joysticka za pośrednictwem IPC
- Na podstawie odebranego zdarzenia z joysticka zwiększa/zmniejsza liczbę
- Okresowo sprawdza cień. Jeśli w dokumencie w tle pojawi się nowy numer, zaktualizuj urządzenie o ten numer.
Demo: Zarządzaj stanem urządzenia w działaniu
Teraz Raspberry Pi jako symulator jest gotowy do użycia.
Reaguje na 2 rodzaje zdarzeń:
- Nowe zdarzenie joysticka: Steruj urządzeniem lokalnie
- Nowy dokument w chmurze: zdalne sterowanie urządzeniem
Aby zobaczyć cień urządzenia w akcji:
- Przejdź do konsoli AWS IoT Greengrass
- Przejdź do Rzeczy, wybierz PiWithSenseHat
- W Device Shadows możesz znaleźć NumberLEDNamedShadow. Pamiętaj, że nie musisz ręcznie tworzyć tego cienia. Gdy urządzenie po raz pierwszy zgłosi cień, utworzy go za Ciebie, jeśli go nie ma.
Demo 1: Zaktualizuj urządzenie lokalnie za pomocą joysticka
- Użyj joysticka, aby zwiększyć/zmniejszyć numer lokalnie (Początkowa liczba to 6. Najpierw obniżono ją do 0, a następnie zwiększono do 2).
- Obserwuj, jak dokument w tle urządzenia jest aktualizowany w czasie rzeczywistym w konsoli AWS. Zmiana jest synchronizowana z cieniem chmury w czasie rzeczywistym.
- status zostaje zmieniony na „urządzenie zaktualizowane lokalnie”
- numer jest zmieniany na nową wartość z local
Demo 2: Zdalna aktualizacja urządzenia poprzez aktualizację dokumentu w tle urządzenia w chmurze
- Na początku tej demonstracji dioda LED urządzenia wyświetlała 0
- W konsoli AWS IoT Core edytuj dokument w tle za pomocą następującego Jsona (możesz pominąć sekcję „raportowane”), a następnie kliknij Aktualizuj
- Obserwuj, jak dioda LED Raspberry Pi aktualizuje numer. Zmiana jest przekazywana z chmury na urządzenie lokalne. Teraz urządzenie wyświetla numer 9:
- status zostaje zmieniony na „device updated by shadow”
- liczba zmienia się z 0 na 9.
Ponieważ numer wyświetlacza można aktualizować za pomocą lokalnego joysticka lub zdalnie z konsoli AWS, najnowsza aktualizacja ma pierwszeństwo. Dlatego gdy aktualizacja jest wykonywana lokalnie, ważne jest, aby ustawić „pożądaną” wartość z powrotem na zdalny cień w chmurze, aby zdalny cień znał nową „pożądaną” wartość i nie aktualizował jej w następnym cyklu synchronizacji w tle. Zobacz więcej w dokumencie device-shadow-empty-fields.
Porządkowanie
Usuń/wyłącz użytkownika IAM, którego użyłeś do zainstalowania podstawowego oprogramowania AWS IoT Greengrass w Raspberry Pi
W konsoli AWS IoT przejdź do urządzeń Greengrass
W Core Device wybierz urządzenie PiWithSenseHat i naciśnij Usuń w prawym górnym rogu.
W grupach Thing usuń RaspberryPiGroup
Usuń te dwa niestandardowe komponenty z Raspberry Pi
Uruchom następujące polecenia w terminalu na Raspberry Pi
sudo /greengrass/v2/bin/greengrass-cli --ggcRootPath /greengrass/v2 wdrożenie utwórz --remove "com.example.sensehat.led"
sudo /greengrass/v2/bin/greengrass-cli --ggcRootPath /greengrass/v2 wdrożenie utwórz --remove "com.example.sensehat.joystick"
Odinstaluj podstawowe oprogramowanie AWS IoT Greengrass z Raspberry Pi
Wykonaj czynności opisane w tym dokumencie, aby odinstalować podstawowe oprogramowanie AWS IoT Greengrass ze swojego Raspberry Pi.
Wnioski
Przy pomocy tego artykułu nauczyłeś się, jak korzystać z usług AWS IoT Device Shadow i AWS IoT Greengrass, aby zbudować solidne rozwiązanie do zarządzania stanem urządzeń IoT, niezależnie od tego, czy odbywa się to lokalnie, czy zdalnie. Możesz teraz skupić się na własnej logice biznesowej i pozwolić tym dwóm usługom AWS wykonać ciężkie zadania związane z zarządzaniem stanem urządzenia w dowolnym miejscu. Obecnie te dwa niestandardowe składniki są tworzone i wdrażane lokalnie na urządzeniu. Następnym krokiem może być udostępnienie ich w AWS IoT Greengrass, dzięki czemu można je wdrożyć na większej liczbie urządzeń. W tym celu możesz wykonać krok 5 i krok 6 w dokumencie AWS IoT Greengrass.
Źródło: AWS