Wysyłanie komunikatów z chmury do urządzenia z centrum IoT

Aby wysyłać powiadomienia jednokierunkowe do aplikacji urządzenia z zaplecza rozwiązania, wyślij komunikaty z chmury do urządzenia z centrum IoT Do urządzenia. Aby zapoznać się z omówieniem innych opcji chmury do urządzenia obsługiwanych przez Azure IoT Hub, zobacz Wskazówki dotyczące komunikacji z chmurą do urządzenia.

Uwaga

Funkcje opisane w tym artykule są dostępne tylko w warstwie Standardowa IoT Hub. Aby uzyskać więcej informacji o warstwach podstawowa i Standardowa/Bezpłatna IoT Hub, zobacz Wybieranie odpowiedniej warstwy IoT Hub dla rozwiązania.

Komunikaty z chmury do urządzenia są wysyłane za pośrednictwem punktu końcowego dostępnego dla usługi /messages/devicebound. Następnie urządzenie odbiera komunikaty za pośrednictwem punktu końcowego specyficznego dla urządzenia /devices/{deviceId}/messages/devicebound.

Aby skierować każdy komunikat z chmury do urządzenia na jednym urządzeniu, usługa IoT Hub ustawia właściwość na/devices/{deviceId}/messages/devicebound.

Każda kolejka urządzeń przechowuje co najwyżej 50 komunikatów z chmury do urządzenia. Jeśli spróbujesz wysłać więcej komunikatów do tego samego urządzenia, wystąpi błąd.

Cykl życia komunikatów z chmury do urządzenia

Aby zagwarantować co najmniej jednokrotne dostarczanie komunikatów, centrum IoT będzie utrwalać komunikaty z chmury do urządzenia w kolejkach poszczególnych urządzeń. Urządzenia muszą jawnie potwierdzić ukończenie komunikatu, zanim centrum IoT usunie komunikat z kolejki. Takie podejście gwarantuje odporność na łączność i awarie urządzeń.

Wykres stanu cyklu życia jest wyświetlany na poniższym diagramie:

Diagram przedstawiający wykres stanu cyklu życia komunikatów chmura-urządzenie.

Gdy usługa IoT Hub wysyła komunikat do urządzenia, usługa ustawia stan komunikatu na Wartość w kolejce. Gdy urządzenie chce otrzymać komunikat, centrum IoT blokuje komunikat, ustawiając stan na Niewidoczne. Ten stan umożliwia innym wątkom na urządzeniu rozpoczęcie odbierania innych komunikatów. Gdy wątek urządzenia zakończy przetwarzanie komunikatu, powiadamia centrum IoT hub przez ukończenie komunikatu. Następnie centrum IoT ustawia stan na Ukończono.

Urządzenie może również:

  • Odrzuć komunikat, co powoduje, że centrum IoT ma ustawić stan Utracony. Urządzenia, które łączą się za pośrednictwem protokołu MQTT (Message Queuing Telemetry Transport) nie mogą odrzucać komunikatów z chmury do urządzenia.

  • Porzucanie komunikatu, co powoduje przełączenie komunikatu z powrotem do kolejki przez centrum IoT z ustawionym stanem Na kolejce. Urządzenia łączące się za pośrednictwem protokołu MQTT nie mogą porzucić komunikatów chmura-urządzenie.

Wątek może nie przetworzyć komunikatu bez powiadamiania centrum IoT. W takim przypadku komunikaty automatycznie przechodzą ze stanu Niewidzialny z powrotem do stanu w kolejce po przekroczeniu limitu czasu widoczności (lub limitu czasu blokady ). Wartość tego limitu czasu wynosi minutę i nie można jej zmienić.

Właściwość maksymalnej liczby dostarczania w centrum IoT określa maksymalną liczbę przypadków, w których komunikat może przechodzić między stanami w kolejce i niewidocznymi . Po tej liczbie przejść centrum IoT ustawia stan komunikatu na Utracony. Podobnie centrum IoT ustawia stan komunikatu na Dead lettered po upływie czasu wygaśnięcia. Aby uzyskać więcej informacji, zobacz Wygaśnięcie komunikatu (czas wygaśnięcia).

Artykuł How to send cloud-to-device messages with IoT Hub (Jak wysyłać komunikaty z chmury do urządzenia z chmury i odbierać je na urządzeniu).

Urządzenie zwykle kończy komunikat z chmury do urządzenia, gdy utrata komunikatu nie ma wpływu na logikę aplikacji. Przykładem tego ukończenia może być to, gdy urządzenie utrwało lokalnie zawartość komunikatu lub pomyślnie wykonało operację. Komunikat może również zawierać informacje przejściowe, których utrata nie wpłynie na funkcjonalność aplikacji. Czasami w przypadku długotrwałych zadań można wykonywać następujące czynności:

  • Ukończ komunikat z chmury do urządzenia po utrwałeniu opisu zadania w magazynie lokalnym.

  • Powiadom zaplecze rozwiązania za pomocą co najmniej jednego komunikatu urządzenie-chmura na różnych etapach postępu zadania.

Wygaśnięcie wiadomości (czas wygaśnięcia)

Każdy komunikat z chmury do urządzenia ma czas wygaśnięcia. Ten czas jest ustawiany przez jedną z następujących opcji:

  • Właściwość ExpiryTimeUtc w usłudze
  • Centrum IoT przy użyciu domyślnego czasu wygaśnięcia określonego jako właściwość centrum IoT

Aby uzyskać więcej informacji na temat wygasania komunikatów, zobacz Opcje konfiguracji z chmury do urządzenia.

Typowym sposobem korzystania z wygasania komunikatów i unikania wysyłania komunikatów do urządzeń bez połączenia jest ustawienie krótkiego czasu wygaśnięcia wartości. Takie podejście zapewnia taki sam wynik, jak utrzymywanie stanu połączenia urządzenia, ale jest bardziej wydajne. Gdy zażądasz potwierdzenia wiadomości, centrum IoT powiadomi o tym, które urządzenia są:

  • Możliwość odbierania komunikatów.
  • Nie są w trybie online lub nie powiodły się.

Opinia o wiadomościach

Po wysłaniu komunikatu z chmury do urządzenia usługa może zażądać dostarczenia opinii na temat końcowego stanu komunikatu. Opinie o wiadomościach można skonfigurować, ustawiając właściwość aplikacji iothub-ack w komunikacie cloud-to-device, który jest wysyłany do jednej z następujących czterech wartości:

Wartość właściwości Ack Zachowanie
brak Domyślne. Centrum IoT nie generuje komunikatu opinii.
positive Jeśli komunikat z chmury do urządzenia osiągnie stan Ukończono , centrum IoT generuje komunikat opinii.
negative Jeśli komunikat z chmury do urządzenia osiągnie stan Utracony , centrum IoT generuje komunikat opinii.
Pełne W obu przypadkach centrum IoT generuje komunikat opinii.

Jeśli wartość właściwości Ack jest ustawiona na pełną i nie otrzymasz komunikatu z informacją zwrotną, oznacza to, że komunikat z informacją zwrotną wygasł. Usługa nie może wiedzieć, co się stało z oryginalną wiadomością. W praktyce usługa powinna zapewnić, że może przetworzyć opinię przed wygaśnięciem. Maksymalny czas wygaśnięcia wynosi dwa dni, co pozostawia czas na ponowne uruchomienie usługi, jeśli wystąpi awaria.

Jak wyjaśniono w artykule Punkty końcowe, centrum IoT hub dostarcza opinię za pośrednictwem punktu końcowego dostępnego z usługą /messages/servicebound/feedback jako komunikaty. Semantyka odbierania opinii jest taka sama jak w przypadku komunikatów chmura-urządzenie. Jeśli to możliwe, opinia o wiadomościach jest wsadowa w jednym komunikacie o następującym formacie:

Właściwość Opis
EnqueuedTime Sygnatura czasowa wskazująca, kiedy komunikat opinii został odebrany przez centrum.
UserId {iot hub name}
Contenttype application/vnd.microsoft.iothub.feedback.json

System wyśle opinię, gdy partia osiągnie 64 komunikaty lub w ciągu 15 sekund od ostatniego wysłania, w zależności od tego, co nastąpi wcześniej.

Treść jest serializowaną tablicą rekordów w formacie JSON, z których każda ma następujące właściwości:

Właściwość Opis
enqueuedTimeUtc Sygnatura czasowa wskazująca, kiedy wystąpił wynik komunikatu. Na przykład sygnatura czasowa wskazująca, kiedy centrum odebrało komunikat opinii lub oryginalny komunikat wygasł.
originalMessageId MessageId komunikatu z chmury do urządzenia, do którego odnoszą się te informacje zwrotne.
statusCode Wymagany ciąg używany w komunikatach opinii generowanych przez centrum IoT:
Powodzenie
Wygasła
DeliveryCountExceeded
Odrzucone
Usunięte
description (opis) Wartości ciągu dla statusCode.
deviceId Identyfikator DeviceId docelowego urządzenia komunikatu chmura-urządzenie, do którego odnosi się ta część opinii.
deviceGenerationId Identyfikator DeviceGenerationId docelowego urządzenia komunikatu chmura-urządzenie, do którego odnosi się ta część opinii.

Usługa musi określić identyfikator MessageId , aby komunikat z chmury do urządzenia mógł skorelować swoją opinię z oryginalnym komunikatem.

Treść wiadomości zwrotnej jest wyświetlana w poniższym przykładzie kodu:

[
  {
    "originalMessageId": "0987654321",
    "enqueuedTimeUtc": "2015-07-28T16:24:48.789Z",
    "statusCode": "Success",
    "description": "Success",
    "deviceId": "123",
    "deviceGenerationId": "abcdefghijklmnopqrstuvwxyz"
  },
  {
    ...
  },
  ...
]

Oczekująca opinia dotycząca usuniętych urządzeń

Po usunięciu urządzenia wszystkie oczekujące opinie również zostaną usunięte. Opinia o urządzeniu jest wysyłana w partiach. Wąskie okno, często mniej niż jedna sekunda, może wystąpić między potwierdzeniem otrzymania wiadomości przez urządzenie a przygotowaniem następnej partii opinii. Jeśli urządzenie zostanie usunięte w tym wąskim oknie, opinia nie zostanie wykonana.

To zachowanie można rozwiązać, czekając na czas oczekiwania na odebranie opinii przed usunięciem urządzenia. Po usunięciu urządzenia należy przyjąć, że powiązane opinie o wiadomościach powinny zostać utracone.

Opcje konfiguracji chmury do urządzenia

Każde centrum IoT udostępnia następujące opcje konfiguracji obsługi komunikatów w chmurze do urządzenia:

Właściwość Opis Zakres i wartość domyślna
defaultTtlAsIso8601 Domyślny czas wygaśnięcia komunikatów z chmury do urządzenia ISO_8601 interwał do dwóch dni (co najmniej jedna minuta); wartość domyślna: jedna godzina
maxDeliveryCount Maksymalna liczba dostaw dla kolejek na urządzenie w chmurze na urządzenie Od 1 do 100; wartość domyślna: 10
feedback.ttlAsIso8601 Przechowywanie komunikatów zwrotnych powiązanych z usługą ISO_8601 interwał do dwóch dni (co najmniej jedna minuta); wartość domyślna: jedna godzina
feedback.maxDeliveryCount Maksymalna liczba dostaw dla kolejki opinii Od 1 do 100; wartość domyślna: 10
feedback.lockDurationAsIso8601 Czas trwania blokady kolejki opinii ISO_8601 interwał od 5 do 300 sekund (co najmniej pięć sekund); wartość domyślna: 60 sekund.

Opcje konfiguracji można ustawić na jeden z następujących sposobów:

  • Azure Portal: w obszarze Ustawienia centrum w centrum IoT wybierz pozycję Wbudowane punkty końcowe i przejdź do pozycji Chmura do obsługi komunikatów urządzenia. (Ustawienie właściwości feedback.maxDeliveryCount i feedback.lockDurationAsIso8601 nie jest obecnie obsługiwane w Azure Portal).

Ustawianie opcji konfiguracji komunikatów typu chmura-urządzenie w portalu

  • Interfejs wiersza polecenia platformy Azure: użyj polecenia az iot hub update :

    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.defaultTtlAsIso8601=PT1H0M0S
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.maxDeliveryCount=10
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.ttlAsIso8601=PT1H0M0S
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.maxDeliveryCount=10
    
    az iot hub update --name {your IoT hub name} \
        --set properties.cloudToDevice.feedback.lockDurationAsIso8601=PT0H1M0S
    

Następne kroki

Aby uzyskać informacje o zestawach SDK, których można użyć do odbierania komunikatów z chmury do urządzenia, zobacz zestawy SDK Azure IoT Hub.

Aby wypróbować odbieranie komunikatów z chmury do urządzenia, zobacz samouczek Wysyłanie z chmury do urządzenia .