Zarządzaj stanem urządzeń IoT w dowolnym miejscu za pomocą usługi AWS IoT Device Shadow i AWS IoT Greengrass

30 maja 2023

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ć).

Zarzadzaj stanem urzadzen IoT w dowolnym miejscu za pomoca uslugi AWS IoT Device Shadow i AWS IoT Greengrass 1

Zarzadzaj stanem urzadzen IoT w dowolnym miejscu za pomoca uslugi AWS IoT Device Shadow i AWS IoT Greengrass 1

Ś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

Oprogramowanie

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.

Zarzadzaj stanem urzadzen IoT w dowolnym miejscu za pomoca uslugi AWS IoT Device Shadow i AWS IoT Greengrass

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:

  1. Przejdź do konsoli AWS IoT Greengrass
  2. Przejdź do Wdrożenie w urządzeniach Greengrass, utwórz nowe wdrożenie
  3. Miejscem docelowym wdrożenia może być grupa Thing RaspberryPiGroup lub urządzenie Core
  4. Wybierz te 3 komponenty z Komponenty publiczneZarzadzaj stanem urzadzen IoT w dowolnym miejscu za pomoca uslugi AWS IoT Device Shadow i AWS IoT Greengrass
  5. Skonfiguruj komponent aws.greengrass.ShadowManager

W kroku Konfiguruj komponenty wybierz aws.greengrass.ShadowManager, a następnie kliknij Konfiguruj komponent.

Zarzadzaj stanem urzadzen IoT w dowolnym miejscu za pomoca uslugi AWS IoT Device Shadow i AWS IoT Greengrass

  1. Skonfiguruj wersję komponentu i plik konfiguracyjny json aws.greengrass.ShadowManager

Zarzadzaj stanem urzadzen IoT w dowolnym miejscu za pomoca uslugi AWS IoT Device Shadow i AWS IoT Greengrass

  • Version: 3.1
  • Configuration to merge:  

JSON

{
  "synchronize": {
    "coreThing": {
      "classic": true,
      "namedShadows": [
        "NumberLEDNamedShadow"
      ]
    },
    "shadowDocuments": [],
    "direction": "betweenDeviceAndCloud"
  },
  "rateLimits": {
    "maxOutboundSyncUpdatesPerSecond": 100,
    "maxTotalLocalRequestsRate": 200,
    "maxLocalRequestsPerSecondPerThing": 20
  },
  "shadowDocumentSizeLimitBytes": 8192
}

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.

  1. 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.

  1. Komponent example.sensehat.joystick: przechwyć zdarzenia z joysticka i opublikuj je w temacie IPC „ipc/joystick” (został zdefiniowany jako zmienna w recepturze).
  2. 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

{
   "timemillis":1669202845134,
   "direction":"down",
   "action":"released"
}

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.Zarzadzaj stanem urzadzen IoT w dowolnym miejscu za pomoca uslugi AWS IoT Device Shadow i AWS IoT Greengrass 7

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ądzeniemZarzadzaj stanem urzadzen IoT w dowolnym miejscu za pomoca uslugi AWS IoT Device Shadow i AWS IoT Greengrass

Aby zobaczyć cień urządzenia w akcji:

  1. Przejdź do konsoli AWS IoT Greengrass
  2. Przejdź do Rzeczy, wybierz PiWithSenseHat
  3. 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.

Zarzadzaj stanem urzadzen IoT w dowolnym miejscu za pomoca uslugi AWS IoT Device Shadow i AWS IoT Greengrass

Demo 1: Zaktualizuj urządzenie lokalnie za pomocą joysticka

  1. 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).
  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

  1. Na początku tej demonstracji dioda LED urządzenia wyświetlała 0  
    {
      "state": {
        "desired": {
          "number": 0
        },
        "reported": {
          "status": "device is updated by local",
          "number": 0
        }
      }
    }
  2. 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 

     

    {
      "state": {
        "desired": {
          "number":9
        }
      }
    }
  3. 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

Case Studies
Referencje

Bardzo sprawny kontakt z pracownikami Hostersi pozwolił nam pomyślną realizację naszego projektu i osiągnięcie założonych celów biznesowych. Jesteśmy pełni uznania dla kompetencji specjalistów Hostersi i jakości świadczonych przez nich usług.

Beata Kaczor
Dyrektor Zarządzający
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.