Upravit

Sdílet prostřednictvím


Příkazy z aplikací do zařízení IoT

Azure IoT Hub

Aplikace používají dva primární mechanismy pro odesílání příkazů do zařízení IoT, zasílání zpráv z cloudu do zařízení a přímé metody.

  • Aplikace odesílají zprávy z cloudu do front zpráv specifických pro konkrétní zařízení na platformě IoT, aby si zařízení po připojení přečetla. O tom, kdy se mají zprávy číst, rozhodují zařízení.

  • Aplikace vyvolávají přímé metody přímo na připojených zařízeních pomocí vzoru požadavků a odpovědí přes vyhrazené koncové body zařízení IoT.

Tento článek popisuje charakteristiky zasílání zpráv z cloudu do zařízení a přímé metody. Článek také popisuje, jak používat přímé metody s branami protokolu a připojenými pohotovostními zařízeními.

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

Aplikace odesílají příkazové zprávy cloud-zařízení pro konkrétní zařízení do Azure IoT Hub, která zprávy ukládá do front specifických pro konkrétní zařízení. IoT Hub doručí zprávy do front specifických pro konkrétní zařízení bez ohledu na to, jestli jsou zařízení připojená.

Diagram znázorňující, jak IoT Hub ukládat zprávy do interní fronty zpráv pro každé zařízení a zařízení, která se na tyto zprávy dotazují.

Při používání zasílání zpráv z cloudu do zařízení platí následující aspekty:

  • Fronty zpráv efektivně fungují jako poštovní schránky pro zařízení a zařízení zodpovídají za dotazování svých front zpráv na nové zprávy, když jsou připojená.
  • Zařízení přijímají zprávy způsobem, který je v první řadě, takže zasílání zpráv z cloudu do zařízení je ideální pro postupné čtení a zpracování zpráv.
  • Zprávy mají konfigurovatelné vypršení platnosti, takže nepřečtené zprávy mohou být nakonec odebrány z fronty zpráv zařízení.
  • Pro stavovou komunikaci můžou aplikace používat příjemce zpětné vazby k monitorování doručování a potvrzování zpráv. Aplikace může pomocí jednoho příjemce zpětné vazby monitorovat všechny fronty zpráv pro všechna zařízení.

Přímé metody

Aplikace vyvolávají přímé metody přímo na připojených zařízeních IoT a očekávají, že zařízení tyto metody spustí a zaregistrují je v IoT Hub. IoT Hub volá přímé metody na připojených zařízeních přes přímé kanály a zařízení jsou zodpovědná za provádění funkcí a vrácení okamžitých výsledků.

Diagram znázorňující, jak IoT Hub vyvolá kód přímo na jednotlivých zařízeních pomocí přímých metod

Při použití přímých metod platí následující aspekty:

  • Přímé metody selžou, pokud dojde k přerušení připojení mezi IoT Hub a zařízením před dokončením metody. Aplikace můžou zachytávat a zpracovávat selhání opakovaných pokusů o příkazy.
  • Vzhledem k tomu, že neexistuje žádná fronta, musí aplikace, které vyžadují sekvencování přímých metod, spravovat sekvencování volání metod, aby dokončení předchozí metody volaly další metodu.
  • Vyvolání přímých metod umožňuje aplikaci nastavit dva časové limity. Jeden časový limit určuje, jak dlouho má IoT Hub čekat, než se zařízení připojí, a druhý časový limit určuje, jak dlouho má volající čekat na dokončení metody a reagovat, než se vzdát.

Přímé metody s branami protokolu

Aplikace IoT, které používají brány protokolu, můžou těžit z modelu vynucování připojení a modelu požadavků a odpovědí přímých metod. Cloudové brány nebo brány protokolu umožňují připojit existující a různorodá zařízení k IoT Hub tím, že jménem zařízení zprostředkují komunikaci s vlastním protokolem. Brány protokolu mohou podobně abstrahovat model přímých metod serializací metod do zpráv protokolu kompatibilních se zařízením.

Diagram znázorňující posloupnost volání přímých metod pro použití brány protokolu ke zprostředkování komunikace vlastního protokolu ze zařízení do IoT Hub

  1. Aplikace vyvolá přímou metodu jménem zařízení v bráně protokolu.
  2. Pro implementaci metody brána přeloží metodu na protokol specifický pro zařízení a odešle zprávu do zařízení. Zařízení neví o žádných změnách cloudové implementace.
  3. Když zařízení zprávu dokončí a odpoví, brána přeloží stav konkrétního zařízení na odpověď metody.
  4. IoT Hub dokončí přímou metodu naplněním výsledku metody pro volajícího.

Opensourcový projekt brány protokolu Azure překládá přímé metody do zpráv protokolu MQTT nativně, je snadno rozšiřitelný a demonstruje tento programovací model pro jiné adaptéry protokolu.

Připojená pohotovostní zařízení

Scénáře příkazů IoT můžou zahrnovat připojená pohotovostní zařízení , která jsou v nečinném stavu s nízkou spotřebou energie, pokud nejsou aktivní. Mechanismy, jako je mobilní služba krátkých zpráv (SMS), můžou odesílat signály probuzení, aby se tato zařízení přemísťila do plně funkčního stavu.

Diagram znázorňující, jak můžou zprávy SMS nebo příkazy odeslané prostřednictvím rozhraní API Azure IoT probudit zařízení a připojit ho k IoT Hub pro příjem příkazů.

  1. Aplikace odesílá příkazy do zařízení pomocí rozhraní ServiceClient API. Jedna instance ServiceClient může odesílat zprávy a vyvolat metody pro více zařízení.
  2. Aplikace také odesílá sms wakeup hovory do pohotovostních zařízení prostřednictvím sms brány mobilního poskytovatele.
  3. Při probuzení se pohotovostní zařízení připojují k IoT Hub a přijímají příkazy pomocí rozhraní DeviceClient API. Jedna instance DeviceClient představuje jedno zařízení připojené k IoT Hub.

Určení stavu připojení zařízení pomocí přímých metod

Posílání nepotřebných zpráv probuzení přes brány SMS je nákladné. Před odesláním skutečných příkazů do zařízení pomocí časových limitů připojení a metody určete, jestli je zařízení připojené, a v případě potřeby odešlete probuzení.

    TimeSpan connTimeOut = FromSeconds(0); // Period to wait for device to connect.
    TimeSpan funcTimeOut = FromSeconds(30); // Period to wait for method to execute.

    while (true) {
        // Send the command via direct method. Initially use a timeout of zero
        // for the connection, which determines whether the device is connected to
        // IoT Hub or needs an SMS wakeup sent to it.

        var method = new CloudToDeviceMethod("RemoteCommand", funcTimeOut, connTimeOut);
        methodInvocation1.SetPayloadJson(CommandPayload);

        var response = await serviceClient.InvokeDeviceMethodAsync(deviceId, method);

        // [DeviceNotConnected] represents a return value from the CloudToDeviceMethod
        // method. That method is not implemented in this sample.
        if (response == [DeviceNotConnected] && connTimeOut == 0) {
            // The device is not currently connected and needs an SMS wakeup. This
            // device should wake up within a period of < 30 seconds. Send the wakeup
            // and retry the method request with a 30 second timeout on waiting for
            // the device to connect.

            connTimeOut = FromSeconds(30); // Set a 30 second connection timeout.
            SendAsyncSMSWakeUpToDevice(); // Send SMS wakeup through mobile gateway.
            continue; // Retry with new connection timeout.
        } else {
            // The method either succeeded or failed.
            ActOnMethodResult(var);
            break;
        }
    }

Pokud chcete jednoduše zkontrolovat připojení, použijte prázdnou metodu s nulovým časovým limitem připojení k implementaci jednoduchého příkazu ping. Příklad:

var method = new CloudToDeviceMethod("Ping", 0, 0);

Přispěvatelé

Tento článek spravuje Microsoft. Původně ji napsali následující přispěvatelé.

Hlavní autor:

Další kroky