Sdílet prostřednictvím


Odesílání a příjem zpráv z cloudu na zařízení

Azure IoT Hub je plně spravovaná služba, která umožňuje obousměrnou komunikaci, včetně zpráv typu cloud-zařízení (C2D) z back-endů řešení do milionů zařízení.

Tento článek popisuje, jak pomocí sad SDK Azure IoT sestavit následující typy aplikací:

  • Aplikace zařízení, které přijímají a zpracovávají zprávy typu cloud-zařízení z fronty zasílání zpráv ioT Hubu.

  • Back-endové aplikace, které odesílají zprávy typu cloud-zařízení do jednoho zařízení prostřednictvím fronty zasílání zpráv ioT Hubu.

Tento článek je určený k doplnění spustitelných ukázek sady SDK, na které odkazuje tento článek.

Poznámka:

Funkce popsané v tomto článku jsou k dispozici pouze na úrovni Standard služby IoT Hub. Další informace o úrovních Služby IoT Hub úrovně Basic a Standard/Free najdete v tématu Volba správné úrovně IoT Hubu pro vaše řešení.

Přehled

Aby aplikace zařízení přijímala zprávy typu cloud-zařízení, musí se připojit ke službě IoT Hub a pak nastavit obslužnou rutinu zpráv pro zpracování příchozích zpráv. Sady SDK zařízení Azure IoT Hubu poskytují třídy a metody, které zařízení může použít k příjmu a zpracování zpráv ze služby. Tento článek popisuje klíčové prvky jakékoli aplikace zařízení, která přijímá zprávy, včetně:

  • Deklarace objektu klienta zařízení
  • Připojení ke službě IoT Hub
  • Načtení zpráv z fronty zpráv ioT Hubu
  • Zpracování zprávy a odeslání potvrzení zpět do IoT Hubu
  • Konfigurace zásady opakování příjmu zpráv

Aby back-endová aplikace odesílala zprávy z cloudu do zařízení, musí se připojit ke službě IoT Hub a odesílat zprávy prostřednictvím fronty zpráv ioT Hubu. Sady SDK služby Azure IoT Hub poskytují třídy a metody, které může aplikace použít k odesílání zpráv do zařízení. Tento článek popisuje klíčové prvky všech aplikací, které odesílají zprávy do zařízení, včetně těchto:

  • Deklarace objektu klienta služby
  • Připojení ke službě IoT Hub
  • Sestavení a odeslání zprávy
  • Příjem zpětné vazby k doručení
  • Konfigurace zásady opakování odesílání zpráv

Vysvětlení fronty zpráv

Abyste porozuměli zasílání zpráv typu cloud-zařízení, je důležité pochopit některé základní informace o tom, jak fungují fronty zpráv zařízení ioT Hubu.

Zprávy typu cloud-zařízení odeslané z back-endové aplikace řešení do zařízení IoT se směrují přes IoT Hub. Mezi back-endovou aplikací řešení a cílovým zařízením neexistuje žádná přímá komunikace mezi dvěma účastníky. IoT Hub umístí příchozí zprávy do fronty zpráv připravené ke stažení cílovými zařízeními IoT.

Aby se zajistilo alespoň jedno doručení zpráv, ioT Hub udržuje zprávy typu cloud-zařízení ve frontách jednotlivých zařízení. Zařízení musí explicitně potvrdit dokončení zprávy, aby služba IoT Hub odebrala zprávu z fronty. Tento přístup zaručuje odolnost proti chybám připojení a zařízení.

Když IoT Hub vloží zprávu do fronty zpráv zařízení, nastaví stav zprávy do fronty. Když vlákno zařízení převezme zprávu z fronty, IoT Hub zprávu uzamkne nastavením stavu zprávy na Neviditelné. Tento stav brání dalším vláknům v zařízení ve zpracování stejné zprávy. Když vlákno zařízení úspěšně dokončí zpracování zprávy, upozorní ioT Hub a pak IoT Hub nastaví stav zprávy na Dokončeno.

Aplikace zařízení, která úspěšně přijme a zpracuje zprávu, se říká, že má zprávu dokončit . V případě potřeby ale zařízení může také:

  • Zamítnout zprávu, která způsobí, že ioT Hub nastaví stav nedoručených zpráv. Zařízení, která se připojují přes protokol MQTT (Message Queuing Telemetry Transport), nemůžou odmítnout zprávy typu cloud-zařízení.
  • Opusťte zprávu, která způsobí, že IoT Hub vloží zprávu zpět do fronty se stavem zprávy nastaveným na Zařazení do fronty. Zařízení, která se připojují přes protokol MQTT, nemohou opustit zprávy typu cloud-zařízení.

Další informace o životním cyklu zpráv typu cloud-zařízení a o tom, jak IoT Hub zpracovává zprávy typu cloud-zařízení, najdete v tématu Odesílání zpráv typu cloud-zařízení ze služby IoT Hub.

Příjem zpráv z cloudu do zařízení

Tato část popisuje, jak přijímat zprávy typu cloud-zařízení pomocí třídy DeviceClient v sadě Azure IoT SDK pro .NET.

Existují dvě možnosti, které může klientská aplikace zařízení použít k příjmu zpráv:

  • Dotazování: Aplikace zařízení kontroluje nové zprávy ioT Hubu pomocí smyčky kódu (například smyčky while nebo for smyčky). Smyčka se provádí nepřetržitě a kontroluje zprávy.
  • Zpětné volání: Aplikace zařízení nastaví asynchronní metodu obslužné rutiny zpráv, která se volá okamžitě při doručení zprávy.

Deklarace objektu DeviceClient

DeviceClient obsahuje metody a vlastnosti potřebné k příjmu zpráv ze služby IoT Hub.

Příklad:

static DeviceClient deviceClient;

Zadejte parametry připojení.

Pomocí metody CreateFromConnectionString zadejte primární připojovací řetězec a ID DeviceClient zařízení služby IoT Hub. Kromě požadované primární připojovací řetězec IoT Hubu CreateFromConnectionString je možné tuto metodu přetížit, aby zahrnovala tyto volitelné parametry:

  • transportType – Přenosový protokol: varianty HTTP verze 1, AMQP nebo MQTT. AMQP je výchozí možnost. Pokud chcete zobrazit všechny dostupné hodnoty, přečtěte si téma TransportType – výčet.
  • transportSettings - Rozhraní sloužící k definování různých nastavení specifických pro přenos a DeviceClient ModuleClient. Další informace naleznete v tématu ITransportSettings Rozhraní.
  • ClientOptions - Možnosti, které umožňují konfiguraci instance klienta zařízení nebo modulu během inicializace.

Tato ukázková volání CreateFromConnectionString definují DeviceClient nastavení IoT Hubu připojení a ID zařízení.

static string connectionString = "{your IoT hub connection string}";
static string deviceID = "{your device ID}";
deviceClient = DeviceClient.CreateFromConnectionString(connectionString,deviceID);

cyklické dotazování

Při dotazování se kontroluje zprávy pomocí funkce ReceiveAsync .

Volání může ReceiveAsync mít tyto tvary:

  • ReceiveAsync() – Než budete pokračovat, počkejte na výchozí časový limit zprávy.
  • ReceiveAsync (Timespan) – Obdrží zprávu z fronty zařízení pomocí určitého časového limitu.
  • ReceiveAsync (CancellationToken) – Přijme zprávu z fronty zařízení pomocí tokenu zrušení. Při použití tokenu zrušení se výchozí období časového limitu nepoužívá.

Při použití typu přenosu HTTP 1 místo MQTT nebo AMQP ReceiveAsync vrátí metoda okamžitě. Podporovaný vzor zpráv typu cloud-zařízení s protokolem HTTP 1 je přerušovaně připojených zařízení, která kontrolují zprávy zřídka (minimálně každých 25 minut). Při vydávání dalších protokolů HTTP 1 dochází k omezování požadavků ve službě IoT Hub. Další informace o rozdílech mezi podporou MQTT, AMQP a HTTP 1 najdete v pokynech ke komunikaci typu Cloud-zařízení a volba komunikačního protokolu.

Metoda CompleteAsync

Jakmile zařízení obdrží zprávu, aplikace zařízení zavolá metodu CompleteAsync , která ioT Hubu upozorní, že se zpráva úspěšně zpracuje a že zprávu lze bezpečně odebrat z fronty zařízení IoT Hubu. Zařízení by mělo tuto metodu volat, když se jeho zpracování úspěšně dokončí bez ohledu na protokol přenosu, který používá.

Opuštění, odmítnutí nebo vypršení časového limitu zprávy

S protokoly AMQP a HTTP verze 1, ale ne protokolem MQTT, může zařízení také:

  • Zprávu opustíte voláním AbandonAsync. Výsledkem je zachování zprávy ve frontě zařízení pro budoucí spotřebu ve službě IoT Hub.
  • Zamítnout zprávu voláním RejectAsync. Tím se trvale odebere zpráva z fronty zařízení.

Pokud se stane něco, co brání zařízení v dokončení, opuštění nebo odmítnutí zprávy, IoT Hub zařadí zprávu znovu do fronty po uplynutí časového limitu. Z tohoto důvodu musí být logika zpracování zpráv v aplikaci zařízení idempotentní, takže přijetí stejné zprávy několikrát způsobí stejný výsledek.

Další informace o životním cyklu zpráv typu cloud-zařízení a o tom, jak IoT Hub zpracovává zprávy typu cloud-zařízení, najdete v tématu Odesílání zpráv typu cloud-zařízení ze služby IoT Hub.

Smyčka dotazování

Při dotazování aplikace používá smyčku kódu, která metodu ReceiveAsync opakovaně volá, aby kontrolila nové zprávy, dokud se nezastaví.

Pokud používáte ReceiveAsync s hodnotou časového limitu nebo výchozím časovým limitem, ve smyčce každé volání ReceiveAsync počká na zadanou dobu časového limitu. Pokud ReceiveAsync vyprší časový limit, null vrátí se hodnota a smyčka bude pokračovat.

Při přijetí zprávy se vrátí objekt Task, který by měl být předán completeAsync.ReceiveAsync Volání, které CompleteAsync službě IoT Hub oznámí odstranění zadané zprávy z fronty zpráv na základě parametru Task .

V tomto příkladu smyčka volá ReceiveAsync , dokud se neobdrží zpráva nebo se zastaví smyčka dotazování.

static bool stopPolling = false;

while (!stopPolling)
{
   // Check for a message. Wait for the default DeviceClient timeout period.
   using Message receivedMessage = await _deviceClient.ReceiveAsync();

   // Continue if no message was received
   if (receivedMessage == null)
   {
      continue;
   }
   else  // A message was received
   {
      // Print the message received
      Console.WriteLine($"{DateTime.Now}> Polling using ReceiveAsync() - received message with Id={receivedMessage.MessageId}");
      PrintMessage(receivedMessage);

      // Notify IoT Hub that the message was received. IoT Hub will delete the message from the message queue.
      await _deviceClient.CompleteAsync(receivedMessage);
      Console.WriteLine($"{DateTime.Now}> Completed C2D message with Id={receivedMessage.MessageId}.");
   }

   // Check to see if polling loop should end
   stopPolling = ShouldPollingstop ();
}

Zpětné volání

Pokud chcete přijímat zprávy zpětného volání z cloudu do zařízení v aplikaci zařízení, musí se aplikace připojit ke službě IoT Hub a nastavit naslouchací proces zpětného volání pro zpracování příchozích zpráv. Příchozí zprávy do zařízení se přijímají z fronty zpráv ioT Hubu.

Pomocí zpětného volání aplikace zařízení nastaví metodu obslužné rutiny zpráv pomocí SetReceiveMessageHandlerAsync. Obslužná rutina zprávy je volána, pak se přijme zpráva. Vytvoření metody zpětného volání pro příjem zpráv eliminuje potřebu průběžného dotazování na přijaté zprávy.

Zpětné volání je k dispozici pouze pomocí těchto protokolů:

  • Mqtt
  • Mqtt_WebSocket_Only
  • Mqtt_Tcp_Only
  • Amqp
  • Amqp_WebSocket_Only
  • Amqp_Tcp_only

Možnost Http1 protokolu nepodporuje zpětné volání, protože metody SADY SDK by se přesto potřebovaly dotazovat na přijaté zprávy, což porazí princip zpětného volání.

V tomto příkladu SetReceiveMessageHandlerAsync nastaví metodu obslužné rutiny zpětného volání s názvem OnC2dMessageReceivedAsync, která se volá při každém přijetí zprávy.

// Subscribe to receive C2D messages through a callback (which isn't supported over HTTP).
await deviceClient.SetReceiveMessageHandlerAsync(OnC2dMessageReceivedAsync, deviceClient);
Console.WriteLine($"\n{DateTime.Now}> Subscribed to receive C2D messages over callback.");

Zásady opakování příjmu zpráv

Zásady opakování zpráv klienta zařízení je možné definovat pomocí DeviceClient.SetRetryPolicy.

Časový limit opakování zprávy je uložen ve vlastnosti DeviceClient.OperationTimeoutInMilliseconds .

Ukázka zprávy příjmu sady SDK

Sada .NET/C# SDK obsahuje ukázku pro příjem zpráv, která obsahuje metody příjmu zpráv popsané v této části.

Odesílání zpráv z cloudu do zařízení

Tato část popisuje základní kód pro odeslání zprávy z back-endové aplikace řešení do zařízení IoT pomocí třídy ServiceClient v sadě Azure IoT SDK pro .NET. Jak je popsáno dříve, back-endová aplikace řešení se připojuje ke službě IoT Hub a zprávy se odesílají do IoT Hubu kódovaného pomocí cílového zařízení. IoT Hub ukládá příchozí zprávy do fronty zpráv a zprávy se doručují z fronty zpráv IoT Hubu do cílového zařízení.

Back-endová aplikace řešení může také požadovat a přijímat zpětnou vazbu k doručení zprávy odeslané do služby IoT Hub, která je určená pro doručování zařízení prostřednictvím fronty zpráv.

Deklarace objektu ServiceClient

ServiceClient obsahuje metody a vlastnosti potřebné k odesílání zpráv z aplikace přes IoT Hub do zařízení.

static ServiceClient serviceClient;

Zadejte připojovací řetězec

Pomocí metody CreateFromConnectionString zadejte primární připojovací řetězec ServiceClient IoT Hubu. Kromě požadované primární připojovací řetězec IoT Hubu CreateFromConnectionString je možné tuto metodu přetížit, aby zahrnovala tyto volitelné parametry:

  • transportType - Amqp nebo Amqp_WebSocket_Only.
  • transportSettings – Nastavení proxy serveru AMQP a HTTP pro klienta služby.
  • ServiceClientOptions - Možnosti, které umožňují konfiguraci instance klienta služby během inicializace. Další informace naleznete v tématu ServiceClientOptions.

Tento příklad vytvoří ServiceClient objekt pomocí připojovací řetězec IoT Hubu.

static string connectionString = "{your iot hub connection string}";
serviceClient = ServiceClient.CreateFromConnectionString(connectionString);

Odeslání asynchronní zprávy z cloudu na zařízení

K odeslání asynchronní zprávy z aplikace prostřednictvím cloudu (IoT Hub) do zařízení použijte sendAsync . Volání se provádí pomocí protokolu AMQP.

sendAsync používá tyto parametry:

  • deviceID – Identifikátor řetězce cílového zařízení.
  • message – Zpráva typu cloud-zařízení. Zpráva je typu Zpráva a lze ji odpovídajícím způsobem naformátovat.
  • timeout– Volitelná hodnota časového limitu. Výchozí hodnota je jedna minuta, pokud není zadána.

Tento příklad odešle testovací zprávu cílovému zařízení s hodnotou časového limitu 10 sekund.

string targetDevice = "Device-1";
static readonly TimeSpan operationTimeout = TimeSpan.FromSeconds(10);
var commandMessage = new
Message(Encoding.ASCII.GetBytes("Cloud to device message."));
await serviceClient.SendAsync(targetDevice, commandMessage, operationTimeout);

Příjem zpětné vazby k doručení

Odesílající program může požadovat potvrzení o doručení (nebo vypršení platnosti) ze služby IoT Hub pro každou zprávu typu cloud-zařízení. Tato možnost umožňuje odesílajícímu programu používat logiku informování, opakování nebo kompenzace. Úplný popis operací a vlastností zpětné vazby zpráv jsou popsány v části Váš názor na zprávu.

Příjem zpětné vazby k doručení zprávy:

  • Vytvoření objektu feedbackReceiver
  • Odesílání zpráv pomocí parametru Ack
  • Počkejte, až dostanete zpětnou vazbu.

Vytvoření objektu feedbackReceiver

Volání GetFeedbackReceiver vytvořit FeedbackReceiver objektu. FeedbackReceiver obsahuje metody, které mohou služby použít k provádění operací příjmu zpětné vazby.

var feedbackReceiver = serviceClient.GetFeedbackReceiver();

Odesílání zpráv pomocí parametru Ack

Každá zpráva musí obsahovat hodnotu vlastnosti Ack potvrzení o doručení, aby bylo možné dostávat zpětnou vazbu k doručení. Vlastnost Ack může být jedna z těchto hodnot:

  • none (výchozí): Nevygeneruje se žádná zpráva zpětné vazby.

  • Positive: Pokud byla zpráva dokončena, obdržíte zprávu s zpětnou vazbou.

  • Negative: Pokud vypršela platnost zprávy (nebo byl dosažen maximální počet doručení), aniž by zařízení dokončilo zprávu.

  • Full: zpětná vazba k oběma Positive výsledkům a Negative výsledkům.

V tomto příkladu Ack je vlastnost nastavena na Full, vyžaduje pozitivní i negativní zpětnou vazbu k doručení jedné zprávy.

var commandMessage = new
Message(Encoding.ASCII.GetBytes("Cloud to device message."));
commandMessage.Ack = DeliveryAcknowledgement.Full;
await serviceClient.SendAsync(targetDevice, commandMessage);

Počkejte, až dostanete zpětnou vazbu.

Definujte .CancellationToken Pak ve smyčce zavolejte ReceiveAsync opakovaně a kontrolujte zprávy zpětné vazby k doručení. Každé volání, které ReceiveAsync počká na dobu časového limitu definované pro ServiceClient objekt.

  • ReceiveAsync Pokud vyprší časový limit bez přijetí zprávy, ReceiveAsync vrátí se null a smyčka bude pokračovat.
  • Pokud se přijme zpráva zpětné vazby, vrátí ReceiveAsync se objekt Task, který by se měl předat CompleteAsync spolu s tokenem zrušení. Volání, které CompleteAsync odstraní zadanou odeslanou zprávu z fronty zpráv na základě parametru Task .
  • V případě potřeby může přijmout kód volat AbandonAsync , aby odeslal zprávu zpět do fronty.
var feedbackReceiver = serviceClient.GetFeedbackReceiver();
// Define the cancellation token.
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;
// Call ReceiveAsync, passing the token. Wait for the timout period.
var feedbackBatch = await feedbackReceiver.ReceiveAsync(token);
if (feedbackBatch == null) continue;

Tento příklad ukazuje metodu, která zahrnuje tyto kroky.

private async static void ReceiveFeedbackAsync()
{
      var feedbackReceiver = serviceClient.GetFeedbackReceiver();

      Console.WriteLine("\nReceiving c2d feedback from service");
      while (true)
      {
         // Check for messages, wait for the timeout period.
         var feedbackBatch = await feedbackReceiver.ReceiveAsync();
         // Continue the loop if null is received after a timeout.
         if (feedbackBatch == null) continue;

         Console.ForegroundColor = ConsoleColor.Yellow;
         Console.WriteLine("Received feedback: {0}",
            string.Join(", ", feedbackBatch.Records.Select(f => f.StatusCode)));
         Console.ResetColor();

         await feedbackReceiver.CompleteAsync(feedbackBatch);
      }
   }

Všimněte si, že tento vzor příjmu zpětné vazby je podobný vzoru používanému k přijímání zpráv typu cloud-zařízení v aplikaci zařízení.

Opětovné připojení klienta služby

Při výskytu výjimky klient služby předá informace volající aplikaci. V tomto okamžiku se doporučuje zkontrolovat podrobnosti o výjimce a provést nezbytná opatření.

Příklad:

  • Pokud se jedná o výjimku sítě, můžete operaci zopakovat.
  • Pokud se jedná o výjimku zabezpečení (neautorizovanou výjimku), zkontrolujte své přihlašovací údaje a ujistěte se, že jsou aktuální.
  • Pokud se jedná o výjimku překročení omezení nebo překročení kvóty, monitorování nebo úpravu frekvence odesílání požadavků nebo aktualizaci jednotky škálování instance centra. Podrobnosti najdete v tématu Kvóty a omezování služby IoT Hub.

Zásady opakování odesílání zpráv

Zásady ServiceClient opakování zprávy lze definovat pomocí ServiceClient.SetRetryPolicy.

Ukázka zprávy pro odeslání sady SDK

Sada .NET/C# SDK obsahuje ukázku klienta služby, která obsahuje metody odesílání zpráv popsané v této části.

Příjem zpráv z cloudu do zařízení

Tato část popisuje, jak přijímat zprávy typu cloud-zařízení pomocí třídy DeviceClient ze sady Azure IoT SDK pro Javu.

Aby aplikace zařízení založená na Javě přijímala zprávy typu cloud-zařízení, musí se připojit ke službě IoT Hub a pak nastavit naslouchací proces zpětného volání a obslužnou rutinu zpráv pro zpracování příchozích zpráv ze služby IoT Hub. Aplikace zařízení by také měla být schopná rozpoznat a zpracovat odpojení v případě, že dojde k přerušení připojení zpráv typu zařízení-ioT Hub.

Import knihoven sady Azure IoT Java SDK

Kód, na který odkazuje tento článek, používá tyto knihovny sady SDK.

import com.microsoft.azure.sdk.iot.device.*;
import com.microsoft.azure.sdk.iot.device.exceptions.IotHubClientException;
import com.microsoft.azure.sdk.iot.device.transport.IotHubConnectionStatus;

Deklarace objektu DeviceClient

Vytvoření instance objektu DeviceClient vyžaduje tyto parametry:

  • connString – připojovací řetězec zařízení IoT. Připojovací řetězec je sada párů klíč-hodnota, které jsou oddělené znakem ;, s klíči a hodnotami oddělenými znakem =. Měl by obsahovat hodnoty pro tyto klíče: HostName, DeviceId, and SharedAccessKey.
  • Přenosový protokolDeviceClient Připojení může používat jeden z následujících přenosových protokolů IoTHubClientProtocol . AMQP je nejuniverzálnější, umožňuje často kontrolovat zprávy a umožňuje odmítnutí a zrušení zprávy. MQTT nepodporuje metody zamítnutí nebo opuštění zprávy:
    • AMQPS
    • AMQPS_WS
    • HTTPS
    • MQTT
    • MQTT_WS

Příklad:

static string connectionString = "{a device connection string}";
static protocol = IotHubClientProtocol.AMQPS;
DeviceClient client = new DeviceClient(connectionString, protocol);

Nastavení metody zpětného volání zprávy

Pomocí setMessageCallback metoda definovat metodu obslužné rutiny zprávy, která je upozorněna při přijetí zprávy ze služby IoT Hub.

setMessageCallback zahrnuje tyto parametry:

  • callback – Název metody zpětného volání. Může to být null.
  • context- Volitelný kontext typu object. Použijte null , pokud není zadáno.

V tomto příkladu callback je setMessageCallbackpředána metoda s názvem MessageCallback bez parametru kontextu .

client.setMessageCallback(new MessageCallback(), null);

Vytvoření obslužné rutiny zpětného volání zprávy

Obslužná rutina zprávy zpětného volání přijímá a zpracovává příchozí zprávu předanou z fronty zpráv ioT Hubu.

V tomto příkladu obslužná rutina zprávy zpracuje příchozí zprávu a pak vrátí IotHubMessageResult.COMPLETE. Návratová IotHubMessageResult.COMPLETE hodnota oznámí službě IoT Hub, že zpráva byla úspěšně zpracována a že zprávu je možné bezpečně odebrat z fronty zařízení. Zařízení by se mělo vrátit IotHubMessageResult.COMPLETE po úspěšném dokončení zpracování a upozornit IoT Hub, že by se zpráva měla odebrat z fronty zpráv bez ohledu na protokol, který používá.

  protected static class MessageCallback implements com.microsoft.azure.sdk.iot.device.MessageCallback
  {
      public IotHubMessageResult onCloudToDeviceMessageReceived(Message msg, Object context)
      {
          System.out.println(
                  "Received message with content: " + new String(msg.getBytes(), Message.DEFAULT_IOTHUB_MESSAGE_CHARSET));
          // Notify IoT Hub that the message
          return IotHubMessageResult.COMPLETE;
      }
  }

Možnosti opuštění a odmítnutí zprávy

I když by měl být do zařízení úspěšně přijat velký počet příchozích zpráv, IotHubMessageResult.COMPLETEmůže být nutné zprávu opustit nebo odmítnout.

  • S AMQP a HTTPS, ale ne MQTT může aplikace:
    • IotHubMessageResult.ABANDON zpráva. IoT Hub ho znovu odešle a odešle ho později.
    • IotHubMessageResult.REJECT zpráva. IoT Hub zprávu nepřeřadí do fronty a trvale ji odebere z fronty zpráv.
  • Klienti používající MQTT nebo MQTT_WS nemohou ABANDON nebo REJECT zprávy.

Pokud se stane něco, co brání zařízení v dokončení, opuštění nebo odmítnutí zprávy, IoT Hub zařadí zprávu znovu do fronty po uplynutí časového limitu. Z tohoto důvodu musí být logika zpracování zpráv v aplikaci zařízení idempotentní, takže přijetí stejné zprávy několikrát způsobí stejný výsledek.

Další informace o životním cyklu zpráv typu cloud-zařízení a o tom, jak IoT Hub zpracovává zprávy typu cloud-zařízení, najdete v tématu Odesílání zpráv typu cloud-zařízení ze služby IoT Hub.

Poznámka:

Pokud jako přenos použijete protokol HTTPS místo MQTT nebo AMQP, instance DeviceClient kontroluje zprávy ze služby IoT Hub zřídka (minimálně každých 25 minut). Další informace o rozdílech mezi podporou MQTT, AMQP a HTTPS najdete v pokynech ke komunikaci typu Cloud-zařízení a volba komunikačního protokolu.

Vytvoření metody zpětného volání stavu zprávy

Aplikace může použít registerConnectionStatusChangeCallback k registraci metody zpětného volání, která se má provést při změně stavu připojení zařízení. Tímto způsobem může aplikace rozpoznat připojení ke zprávě mimo provoz a pokusit se znovu připojit.

V tomto příkladu IotHubConnectionStatusChangeCallbackLogger se zaregistruje jako metoda zpětného volání změny stavu připojení.

client.registerConnectionStatusChangeCallback(new IotHubConnectionStatusChangeCallbackLogger(), new Object());

Zpětné volání se aktivuje a předá ConnectionStatusChangeContext objekt.

Volání connectionStatusChangeContext.getNewStatus() pro získání aktuálního stavu připojení

IotHubConnectionStatus status = connectionStatusChangeContext.getNewStatus();

Vrácený stav připojení může být jedna z těchto hodnot:

  • IotHubConnectionStatus.DISCONNECTED
  • IotHubConnectionStatus.DISCONNECTED_RETRYING
  • IotHubConnectionStatus.CONNECTED

Zavolejte connectionStatusChangeContext.getNewStatusReason() a získejte důvod změny stavu připojení.

IotHubConnectionStatusChangeReason statusChangeReason = connectionStatusChangeContext.getNewStatusReason();

Voláním connectionStatusChangeContext.getCause() zjistíte důvod změny stavu připojení. getCause() může vrátit, null pokud nejsou k dispozici žádné informace.

Throwable throwable = connectionStatusChangeContext.getCause();
if (throwable != null)
    throwable.printStackTrace();

Podívejte se na ukázku HandleMessages uvedenou v části s ukázkou zprávy v tomto článku o úplné ukázce, která ukazuje, jak extrahovat stav změny stavu změny stavu připojení metody zpětného volání, důvod, proč se stav zařízení změnil, a kontext.

Otevření připojení mezi zařízením a IoT Hubem

Otevřením vytvoříte připojení mezi zařízením a IoT Hubem. Zařízení teď může asynchronně odesílat a přijímat zprávy do a ze služby IoT Hub. Pokud je klient již otevřený, metoda nic nedělá.

client.open(true);

Ukázka zprávy příjmu sady SDK

HandleMessages: ukázková aplikace zařízení, která je součástí sady Microsoft Azure IoT SDK pro Javu, která se připojuje k centru IoT a přijímá zprávy typu cloud-zařízení.

Odesílání zpráv z cloudu do zařízení

Tato část popisuje, jak odeslat zprávu typu cloud-zařízení pomocí třídy ServiceClient ze sady Azure IoT SDK pro Javu. Back-endová aplikace řešení se připojuje ke službě IoT Hub a zprávy se odesílají do IoT Hubu kódovaného pomocí cílového zařízení. IoT Hub ukládá příchozí zprávy do fronty zpráv a zprávy se doručují z fronty zpráv IoT Hubu do cílového zařízení.

Back-endová aplikace řešení může také požadovat a přijímat zpětnou vazbu k doručení zprávy odeslané do služby IoT Hub, která je určená pro doručování zařízení prostřednictvím fronty zpráv.

Přidání příkazu závislostí

Přidejte závislost pro použití balíčku iothub-java-service-client ve vaší aplikaci ke komunikaci se službou IoT Hub:

<dependency>
  <groupId>com.microsoft.azure.sdk.iot</groupId>
  <artifactId>iot-service-client</artifactId>
  <version>1.7.23</version>
</dependency>

Přidání příkazů importu

Přidejte tyto příkazy importu pro použití sady Azure IoT Java SDK a obslužné rutiny výjimek.

import com.microsoft.azure.sdk.iot.service.*;
import java.io.IOException;
import java.net.URISyntaxException;

Definování protokolu připojení

Pomocí IotHubServiceClientProtocol definujte protokol aplikační vrstvy používaný klientem služby ke komunikaci se službou IoT Hub.

IotHubServiceClientProtocol přijímá pouze výčet AMQPS nebo AMQPS_WS výčt.

private static final IotHubServiceClientProtocol protocol =    
    IotHubServiceClientProtocol.AMQPS;

Vytvoření objektu ServiceClient

Vytvořte objekt ServiceClient a zadejte připojovací řetězec a protokol iot Hubu.

private static final String connectionString = "{yourhubconnectionstring}";
private static final ServiceClient serviceClient (connectionString, protocol);

Otevření připojení mezi aplikací a IoT Hubem

otevřete připojení odesílatele AMQP. Tato metoda vytvoří připojení mezi aplikací a IoT Hubem.

serviceClient.open();

Otevření příjemce zpětné vazby pro odeslání zprávy

Pomocí feedbackReceiveru FeedbackReceiver můžete do ioT Hubu odeslat zpětnou vazbu do služby IoT Hub. A FeedbackReceiver je specializovaný přijímač, jehož Receive metoda vrací FeedbackBatch místo Message.

V tomto příkladu FeedbackReceiver se objekt vytvoří a zavolá se open() příkaz, který bude čekat na zpětnou vazbu.

FeedbackReceiver feedbackReceiver = serviceClient
  .getFeedbackReceiver();
if (feedbackReceiver != null) feedbackReceiver.open();

Přidání vlastností zprávy

Volitelně můžete použít setProperties k přidání vlastností zprávy. Tyto vlastnosti jsou zahrnuty do zprávy odeslané do zařízení a aplikace zařízení je může extrahovat po přijetí.

Map<String, String> propertiesToSend = new HashMap<String, String>();
propertiesToSend.put(messagePropertyKey,messagePropertyKey);
messageToSend.setProperties(propertiesToSend);

Vytvoření a odeslání asynchronní zprávy

Objekt Message ukládá zprávu, která se má odeslat. V tomto příkladu se doručí zpráva Typu cloud-zařízení.

Pomocí setDeliveryAcknowledgement můžete požadovat doručení nebo nedoručení do fronty zpráv ioT Hubu. V tomto příkladu je Fullžádost o potvrzení doručena nebo nedoručována.

K odeslání asynchronní zprávy z klienta do zařízení použijte SendAsync . Alternativně můžete použít metodu Send (nesync), ale tato funkce se synchronizuje interně, takže najednou je povolená jenom jedna operace odeslání. Zpráva se doručí z aplikace do IoT Hubu. IoT Hub umístí zprávu do fronty zpráv připravené k doručení do cílového zařízení.

Message messageToSend = new Message("Cloud to device message.");
messageToSend.setDeliveryAcknowledgementFinal(DeliveryAcknowledgement.Full);
serviceClient.sendAsync(deviceId, messageToSend);

Příjem zpětné vazby k doručení zprávy

Po odeslání zprávy z aplikace může aplikace volat s hodnotou časového limitu nebo bez této zprávy. Pokud není zadána hodnota časového limitu, použije se výchozí časový limit. Tím se předá zpět objekt FeedbackBatch , který obsahuje vlastnosti zpětné vazby pro doručení zprávy, které je možné prozkoumat.

Tento příklad vytvoří FeedbackBatch příjemce a volání getEnqueuedTimeUtc, tisk zprávy vyčtený čas.

FeedbackBatch feedbackBatch = feedbackReceiver.receive(10000);
if (feedbackBatch != null) {
  System.out.println("Message feedback received, feedback time: "
    + feedbackBatch.getEnqueuedTimeUtc().toString());
}

Ukázky zpráv odesílané sadou SDK

Instalace knihovny azure IoT SDK

Před voláním souvisejícího kódu nainstalujte na vývojovém počítači knihovnu azure-iot-device SDK:

pip install azure-iot-device

Existují dvě třídy sady Python SDK, které slouží k odesílání zpráv do a ze zařízení IoT. Metody zpracování zpráv z těchto tříd jsou popsány v oddílech na této stránce.

  • Třída IoTHubDeviceClient obsahuje metody pro vytvoření synchronního připojení ze zařízení do služby Azure IoT Hub a příjem zpráv ze služby IoT Hub.

  • Třída IoTHubRegistryManager obsahuje rozhraní API pro operace Správce registru služby IoT Hub. V tomto článku metody z této třídy ukazují, jak se připojit ke službě IoT Hub a odeslat zprávu do zařízení.

Příjem zpráv z cloudu do zařízení

Tato část popisuje, jak přijímat zprávy typu cloud-zařízení pomocí třídy IoTHubDeviceClient ze sady Azure IoT SDK pro Python.

Aby aplikace zařízení založená na Pythonu přijímala zprávy typu cloud-zařízení, musí se připojit ke službě IoT Hub a pak nastavit obslužnou rutinu zpětného volání pro zpracování příchozích zpráv ze služby IoT Hub.

Import objektu IoTHubDeviceClient

Přidejte řádek kódu pro import IoTHubDeviceClient funkcí ze sady AZURE.iot.device SDK.

from azure.iot.device import IoTHubDeviceClient

Připojení klienta zařízení

Vytvořte instanci IoTHubDeviceClient a předáte připojovací řetězec IoT Hubu do create_from_connection_string. Tím se ze zařízení vytvoří připojení ke službě IoT Hub.

Alternativně se můžete připojit IoTHubDeviceClientk zařízení pomocí jedné z těchto metod:

deviceConnectionString = "{your IoT hub connection string}";
client = IoTHubDeviceClient.create_from_connection_string ({deviceConnectionString})

Zpracování opětovného připojení

IoTHubDeviceClient ve výchozím nastavení se pokusí znovu vytvořit přerušené připojení. Chování opětovného IoTHubDeviceClient připojení se řídí connection_retry a connection_retry_interval parametry.

Vytvoření obslužné rutiny zprávy

Vytvořte funkci obslužné rutiny zprávy pro zpracování příchozích zpráv do zařízení.

V tomto příkladu message_handler je volána při přijetí zprávy. Vlastnosti zprávy (.items) se vytisknou do konzoly pomocí smyčky.

def message_handler(message):
    global RECEIVED_MESSAGES
    RECEIVED_MESSAGES += 1
    print("")
    print("Message received:")

    # print data from both system and application (custom) properties
    for property in vars(message).items():
        print ("    {}".format(property))

    print("Total calls received: {}".format(RECEIVED_MESSAGES))

Přiřazení obslužné rutiny zprávy

K přiřazení metody obslužné rutiny zprávy k objektu použijte metodu IoTHubDeviceClient on_message_received.

V tomto příkladu je k objektu IoTHubDeviceClient client připojena metoda message_handler obslužné rutiny zprávy. Objekt client čeká na přijetí zprávy typu cloud-zařízení ze služby IoT Hub. Tento kód počká až 300 sekund (5 minut) na zprávu nebo se ukončí, pokud je stisknutá klávesa klávesnice.

try:
    # Attach the handler to the client
    client.on_message_received = message_handler

    while True:
        time.sleep(300)
except KeyboardInterrupt:
    print("IoT Hub C2D Messaging device sample stopped")
finally:
    # Graceful exit
    print("Shutting down IoT Hub Client")
    client.shutdown()

Ukázka zprávy příjmu sady SDK

Přijmout zprávu – příjem zpráv typu cloud-zařízení (C2D) odesílaných ze služby Azure IoT Hub do zařízení

Odesílání zpráv z cloudu do zařízení

Tato část popisuje, jak odeslat zprávu typu cloud-zařízení pomocí třídy IoTHubRegistryManager ze sady Azure IoT SDK pro Python. Back-endová aplikace řešení se připojuje ke službě IoT Hub a zprávy se odesílají do IoT Hubu kódovaného pomocí cílového zařízení. IoT Hub ukládá příchozí zprávy do fronty zpráv a zprávy se doručují z fronty zpráv IoT Hubu do cílového zařízení.

Import objektu IoTHubRegistryManager

Přidejte následující import příkaz. IoTHubRegistryManager zahrnuje rozhraní API pro operace Správce registru služby IoT Hub.

from azure.iot.hub import IoTHubRegistryManager

Připojení správce registru služby IoT Hub

Vytvořte instanci objektu IoTHubRegistryManager, který se připojuje k centru IoT a předává připojovací řetězec IoT Hubu do from_connection_string.

IoTHubConnectionString = "{Primary connection string to an IoT hub}"
registry_manager = IoTHubRegistryManager.from_connection_string(IoTHubConnectionString)

Sestavení a odeslání zprávy

Pomocí send_c2d_message odešlete do zařízení zprávu přes cloud (IoT Hub).

send_c2d_message používá tyto parametry:

  • deviceID – Identifikátor řetězce cílového zařízení.
  • message – Zpráva typu cloud-zařízení. Zpráva je typu str (řetězec).
  • properties- Volitelná kolekce vlastností typu dict. Vlastnosti mohou obsahovat vlastnosti aplikace a systémové vlastnosti. Výchozí hodnota je {}.

Tento příklad odešle testovací zprávu cílovému zařízení.

# define the device ID
deviceID = "Device-1"

# define the message
message = "{\"c2d test message\"}"

# include optional properties
props={}
props.update(messageId = "message1")
props.update(prop1 = "test property-1")
props.update(prop1 = "test property-2")
prop_text = "Test message"
props.update(testProperty = prop_text)

# send the message through the cloud (IoT Hub) to the device
registry_manager.send_c2d_message(deviceID, message, properties=props)

Ukázka zprávy pro odeslání sady SDK

send_message.py – ukazuje, jak odeslat zprávu typu cloud-zařízení.

Instalace balíčků zasílání zpráv Node.js

Spuštěním těchto příkazů nainstalujte balíčky azure-iot-device a azure-iothub na vývojový počítač:

npm install azure-iot-device --save
npm install azure-iothub --save

Balíček zařízení azure-iot-device obsahuje objekty, které jsou rozhraní se zařízeními IoT. Tento článek popisuje Client kód třídy, který přijímá zprávy ze služby IoT Hub.

Balíček azure-iothub obsahuje objekty, které jsou rozhraní se službou IoT Hub. Tento článek popisuje Client kód třídy, který odesílá zprávu z aplikace do zařízení prostřednictvím IoT Hubu.

Příjem zpráv v aplikaci zařízení

Tato část popisuje, jak přijímat zprávy typu cloud-zařízení pomocí balíčku azure-iot-device v sadě Azure IoT SDK pro Node.js.

Aby aplikace zařízení založená na Node.js přijímala zprávy typu cloud-zařízení, musí se připojit ke službě IoT Hub a pak nastavit naslouchací proces zpětného volání a obslužnou rutinu zpráv pro zpracování příchozích zpráv ze služby IoT Hub. Aplikace zařízení by také měla být schopná rozpoznat a zpracovat odpojení v případě, že dojde k přerušení připojení zpráv typu zařízení-ioT Hub.

Vytvoření klientského modulu

azure-iot-device Z balíčku vytvořte Client pomocí třídy Client. Třída Client obsahuje metody, které zařízení může použít k příjmu a odesílání do IoT Hubu.

const Client = require('azure-iot-device').Client;

Volba přenosového protokolu

Objekt Client podporuje tyto protokoly:

  • Amqp
  • Http– Při použití HttpClient instance kontroluje zprávy ze služby IoT Hub zřídka (minimálně každých 25 minut).
  • Mqtt
  • MqttWs
  • AmqpWs

Další informace o rozdílech mezi podporou MQTT, AMQP a HTTPS najdete v pokynech ke komunikaci typu Cloud-zařízení a volba komunikačního protokolu.

Tento příklad přiřadí protokol AMQP proměnné Protocol . Tato proměnná protokolu se předává Client.fromConnectionString metodě v části Přidání připojovací řetězec tohoto článku.

const Protocol = require('azure-iot-device-mqtt').Amqp;

Možnosti dokončování, zamítnutí a opuštění zpráv

V závislosti na zvoleném protokolu je možné použít metody dokončování zpráv, zamítnutí a opuštění.

AMQP a HTTP

Přenosy AMQP a HTTP můžou zprávu dokončit, odmítnout nebo opustit:

  • Dokončeno – K dokončení zprávy je služba, která odeslala zprávu typu cloud-zařízení, upozorněna na přijetí zprávy. IoT Hub odebere zprávu z fronty zpráv. Metoda má formu client.complete(message, callback function).
  • Odmítnout – Pokud chcete odmítnout zprávu, služba, která odeslala zprávu typu cloud-zařízení, je upozorněna, že zařízení zprávu nezpracová. IoT Hub trvale odebere zprávu z fronty zařízení. Metoda má formu client.reject(message, callback function).
  • Opuštění – Pokud chcete zprávu opustit, IoT Hub se ji okamžitě pokusí znovu odeslat. IoT Hub uchovává zprávu ve frontě zařízení pro budoucí spotřebu. Metoda má formu client.abandon(message, callback function).
MQTT

MQTT nepodporuje funkce dokončení, odmítnutí nebo opuštění zprávy. Místo toho MQTT přijme ve výchozím nastavení zprávu a zpráva se odebere z fronty zpráv ioT Hubu.

Opakované pokusy

Pokud se stane něco, co brání zařízení v dokončení, opuštění nebo odmítnutí zprávy, IoT Hub zařadí zprávu znovu do fronty po uplynutí časového limitu. Z tohoto důvodu musí být logika zpracování zpráv v aplikaci zařízení idempotentní, takže přijetí stejné zprávy několikrát způsobí stejný výsledek.

Přidání řetězce a přenosového protokolu ioT Hubu

Volání zConnectionString k navázání připojení typu device-to-IoT Hub pomocí těchto parametrů:

  • connStr – připojovací řetězec, která zapouzdřuje oprávnění "device connect" pro centrum IoT. Připojovací řetězec obsahuje název hostitele, ID zařízení a sdílený přístupový klíč v tomto formátu: HostName=<iothub_host_name>; DeviceId=<device_id>; SharedAccessKey=<device_key>"
  • transportCtor - transportní protokol.
const Protocol = require('azure-iot-device-mqtt').Amqp;
let client = Client.fromConnectionString(deviceConnectionString, Protocol);

Vytvoření obslužné rutiny příchozí zprávy

Obslužná rutina zprávy se volá pro každou příchozí zprávu.

Po úspěšném přijetí zprávy, pokud používáte přenos AMQP nebo HTTP, zavolejte metodu client.complete , která informuje IoT Hub, že zprávu lze odebrat z fronty zpráv.

Tato obslužná rutina zprávy například vytiskne ID zprávy a text zprávy do konzoly a potom zavolá client.complete , aby ioT Hub oznámila, že zprávu zpracovala a že se dá bezpečně odebrat z fronty zařízení. Volání complete není vyžadováno, pokud používáte přenos MQTT a je možné ho vynechat. Pro přenos protokolu AMQP nebo HTTPS se vyžaduje volánícomplete .

function messageHandler(msg) {
  console.log('Id: ' + msg.messageId + ' Body: ' + msg.data);
  client.complete(msg, printResultFor('completed'));
}

Vytvoření obslužné rutiny odpojení připojení

Obslužná rutina odpojení se volá při odpojení připojení. Obslužná rutina odpojení je užitečná pro implementaci kódu pro opětovné připojení.

Tento příklad zachytí a zobrazí chybovou zprávu odpojení ke konzole.

function disconnectHandler() {
  clearInterval(sendInterval);
  sendInterval = null;
  client.open().catch((err) => {
    console.error(err.message);
  });
}

Přidání naslouchacích procesů událostí

Tyto naslouchací procesy událostí můžete zadat pomocí metody .on .

  • Obslužná rutina připojení
  • Obslužná rutina chyby
  • Obslužná rutina odpojení
  • Obslužná rutina zprávy

Tento příklad zahrnuje obslužné rutiny zpráv a odpojení definované dříve.

client.on('connect', connectHandler);
client.on('error', errorHandler);
client.on('disconnect', disconnectHandler);
client.on('message', messageHandler);

Otevření připojení ke službě IoT Hub

Pomocí otevřené metody otevřete připojení mezi zařízením IoT a IoT Hubem. Slouží .catch(err) k zachycení kódu obslužné rutiny chyby a volání.

Příklad:

client.open()
.catch((err) => {
  console.error('Could not connect: ' + err.message);
});

Ukázka zprávy příjmu sady SDK

simple_sample_device – aplikace zařízení, která se připojuje k centru IoT a přijímá zprávy typu cloud-zařízení.

Odesílání zpráv z cloudu do zařízení

Tato část popisuje, jak odeslat zprávu typu cloud-zařízení pomocí balíčku azure-iothub ze sady Azure IoT SDK pro Node.js. Jak je popsáno dříve, back-endová aplikace řešení se připojuje ke službě IoT Hub a zprávy se odesílají do IoT Hubu kódovaného pomocí cílového zařízení. IoT Hub ukládá příchozí zprávy do fronty zpráv a zprávy se doručují z fronty zpráv IoT Hubu do cílového zařízení.

Back-endová aplikace řešení může také požadovat a přijímat zpětnou vazbu k doručení zprávy odeslané do služby IoT Hub, která je určená pro doručování zařízení prostřednictvím fronty zpráv.

Načtení modulů klienta a zpráv

Deklarujte Client objekt pomocí Client třídy z azure-iothub balíčku.

Deklarujte Message objekt pomocí Message třídy z azure-iot-common balíčku.

'use strict';
var Client = require('azure-iothub').Client;
var Message = require('azure-iot-common').Message;

Vytvoření objektu Klienta

Pomocí těchto parametrů vytvořte klienta zConnectionString:

  • připojovací řetězec ioT Hubu
  • Typ přenosu

V tomto příkladu serviceClient se objekt vytvoří s typem Amqp přenosu.

var connectionString = '{IoT Hub connection string}';
var serviceClient = Client.fromConnectionString(connectionString,`Amqp`);

Otevření připojení klienta

Voláním Client otevřené metody otevřete připojení mezi aplikací a IoT Hubem.

open lze volat pomocí nebo bez zadání funkce zpětného volání, která je volána po open dokončení operace.

V tomto příkladu metoda open obsahuje volitelnou err funkci zpětného volání otevřeného připojení. Pokud dojde k otevřené chybě, vrátí se objekt chyby. Pokud je otevřené připojení úspěšné, vrátí se hodnota zpětného null volání.

serviceClient.open(function (err)
if (err)
  console.error('Could not connect: ' + err.message);

Vytvoření zprávy

Objekt zprávy obsahuje asynchronní zprávu typu cloud-zařízení. Funkce zpráv funguje stejně jako funkce AMQP, MQTT a HTTP.

Objekt zprávy podporuje několik vlastností, včetně těchto vlastností. Podívejte se na vlastnosti zprávy pro úplný seznam.

  • ack - Zpětná vazba k doručení. Popsáno v další části.
  • properties – Mapa obsahující řetězcové klíče a hodnoty pro ukládání vlastních vlastností zprávy.
  • messageId – používá se ke korelaci obousměrné komunikace.

Po vytvoření instance objektu zprávy přidejte text zprávy. V tomto příkladu 'Cloud to device message.' se přidá zpráva.

var message = new Message('Cloud to device message.');
message.ack = 'full';
message.messageId = "My Message ID";

Potvrzení doručení

Odesílající program může požadovat potvrzení o doručení (nebo vypršení platnosti) ze služby IoT Hub pro každou zprávu typu cloud-zařízení. Tato možnost umožňuje odesílajícímu programu používat logiku informování, opakování nebo kompenzace. Úplný popis operací a vlastností zpětné vazby zpráv jsou popsány v části Váš názor na zprávu.

Každá zpráva, která má přijímat zpětnou vazbu zprávy, musí obsahovat hodnotu pro potvrzení doručení ack vlastnost. Vlastnost ack může být jedna z těchto hodnot:

  • none (výchozí): Nevygeneruje se žádná zpráva zpětné vazby.

  • sent: Pokud byla zpráva dokončena, obdržíte zprávu s zpětnou vazbou.

  • : Pokud vypršela platnost zprávy (nebo byl dosažen maximální počet doručení), aniž by zařízení dokončilo zprávu.

  • full: Zpětná vazba pro odeslané i neodesílané výsledky.

V tomto příkladu ack je vlastnost nastavena na full, požadovat odeslání i neodeslanou zpětnou vazbu k doručení zprávy pro jednu zprávu.

message.ack = 'full';

Funkce zpětného volání příjemce zpětné vazby zprávy je propojena s Client použitím getFeedbackReceiver.

Příjemce zpětné vazby zprávy obdrží dva argumenty:

  • Objekt chyby (může mít hodnotu null)
  • AmqpReceiver – Generuje události, když klient obdrží nové zprávy zpětné vazby.

Tato ukázková funkce obdrží a vytiskne zprávu o doručení zpětné vazby do konzoly.

function receiveFeedback(err, receiver){
  receiver.on('message', function (msg) {
    console.log('Feedback message:')
    console.log(msg.getData().toString('utf-8'));
  });
}

Tento kód propojí funkci zpětného receiveFeedback volání zpětné vazby s objektem služby Client pomocí getFeedbackReceiver.

serviceClient.getFeedbackReceiver(receiveFeedback);

Definování obslužné rutiny výsledků dokončování zpráv

Funkce zpětného volání pro odeslání zprávy se volá po odeslání každé zprávy.

Tato ukázková funkce vytiskne výsledky operace zpráv send do konzoly. V tomto příkladu printResultFor je funkce zadána jako parametr send funkce popsané v další části.

function printResultFor(op) {
  return function printResult(err, res) {
    if (err) console.log(op + ' error: ' + err.toString());
    if (res) console.log(op + ' status: ' + res.constructor.name);
  };
}

Odeslání zprávy

Pomocí funkce odeslání odešlete asynchronní zprávu typu cloud-zařízení do aplikace zařízení prostřednictvím IoT Hubu.

send podporuje tyto parametry:

  • deviceID – ID zařízení cílového zařízení.
  • message – text zprávy, která se má odeslat do zařízení.
  • done – volitelná funkce, která se má volat při dokončení operace. Hotovo se volá se dvěma argumenty:
    • Objekt chyby (může mít hodnotu null).
    • Objekt odpovědi specifický pro přenos, který je užitečný pro protokolování nebo ladění.

Tento kód volá send odeslání zprávy typu cloud-zařízení do aplikace zařízení prostřednictvím IoT Hubu. Funkce printResultFor zpětného volání definovaná v předchozí části obdrží informace o potvrzení doručení.

var targetDevice = '{device ID}';
serviceClient.send(targetDevice, message, printResultFor('send'));

Tento příklad ukazuje, jak odeslat zprávu do zařízení a zpracovat zprávu zpětné vazby, když zařízení potvrdí zprávu typu cloud-zařízení:

serviceClient.open(function (err) {
  if (err) {
    console.error('Could not connect: ' + err.message);
  } else {
    console.log('Service client connected');
    serviceClient.getFeedbackReceiver(receiveFeedback);
    var message = new Message('Cloud to device message.');
    message.ack = 'full';
    message.messageId = "My Message ID";
    console.log('Sending message: ' + message.getData());
    serviceClient.send(targetDevice, message, printResultFor('send'));
  }
});

Ukázka zprávy pro odeslání sady SDK

send_c2d_message.js – Odesílání zpráv C2D do zařízení prostřednictvím IoT Hubu

Zásady opětovného připojení připojení

Tento článek neuvádí zásadu opakování zpráv pro zařízení pro připojení ke službě IoT Hub nebo externí aplikaci pro připojení ke službě IoT Hub. V produkčním kódu byste měli implementovat zásady opakování připojení, jak je popsáno v části Správa opětovného připojení zařízení, abyste vytvořili odolné aplikace.

Doba uchovávání zpráv, pokusy o opakování a maximální počet doručení

Jak je popsáno v tématu Odesílání zpráv typu cloud-zařízení ze služby IoT Hub, můžete zobrazit a nakonfigurovat výchozí hodnoty pro následující hodnoty zpráv pomocí možností konfigurace služby IoT Hub na portálu nebo Azure CLI. Tyto možnosti konfigurace můžou ovlivnit doručování zpráv a zpětnou vazbu.

  • Výchozí hodnota TTL (doba trvání) – doba, po kterou je zpráva dostupná pro zařízení, aby ji spotřebovalo, než služba IoT Hub vypršela.
  • Doba uchovávání zpětné vazby – doba, po kterou služba IoT Hub uchovává zpětnou vazbu k vypršení platnosti nebo doručování zpráv z cloudu do zařízení.
  • Kolikrát se IoT Hub pokusí do zařízení doručit zprávu typu cloud-zařízení.