Команды для передачи данных из приложения на устройство Интернета вещей

Центр Интернета вещей Azure

Для отправки команд на устройства Интернета вещей приложения используют два основных механизма: передача сообщений из облака на устройство и прямые методы.

  • Приложения отправляют сообщения из облака на устройство в предназначенные для конкретных устройств очереди сообщений на платформе Интернета вещей, чтобы подключенные устройства прочли их. Устройства сами решают, когда читать сообщения.

  • Приложения вызывают прямые методы непосредственно на подключенных устройствах, используя шаблон "запрос — ответ" через выделенные конечные точки устройств Интернета вещей.

В этой статье рассматриваются характеристики передачи сообщений из облака на устройство и прямых методов. В статье также описывается использование прямых методов с шлюзами протоколов и подключенными устройствами, находящимися в режиме ожидания.

Передача сообщений из облака на устройство

Приложения отправляют сообщения с командами для конкретных устройств в Центр Интернета вещей Azure, где сообщения хранятся в очередях для конкретных устройств. Центр Интернета вещей доставляет сообщения в очереди для конкретных устройств независимо от того, подключены ли устройства.

Схема, показывающая, как Центр Интернета вещей хранит сообщения во внутренней очереди сообщений для каждого устройства и устройства, опрашивая эти сообщения.

При передаче сообщений из облака на устройство необходимо учитывать следующие моменты.

  • Очереди сообщений работают как почтовые ящики для устройств, а подключенные устройства отвечают за опрос очередей сообщений на предмет новых сообщений.
  • Устройства получают сообщения в порядке их поступления, что делает передачу сообщений из облака на устройств идеальным решением для последовательного чтения и обработки сообщений.
  • Сообщения имеют настраиваемый срок действия, поэтому непрочитанные сообщения в конечном итоге могут быть удалены из очереди сообщений устройства.
  • При взаимодействии с отслеживанием состояния приложения могут использовать приемник обратной связи для мониторинга доставки и подтверждения получения сообщений. Для отслеживания всех очередей сообщений для всех устройств приложение может использовать один приемник обратной связи.

Прямые методы

Приложения вызывают прямые методы непосредственно на подключенных устройствах Интернета вещей и ожидают, что устройства выполнят методы и зарегистрируют их в Центре Интернета вещей. Центр Интернета вещей вызывает прямые методы на подключенных устройствах по прямым каналам, а устройства отвечают за выполнение функций и немедленное возвращение результатов.

Схема, показывающая, как Центр Интернета вещей вызывает код непосредственно на отдельном устройстве с помощью прямых методов.

При использовании прямых методов следует принимать во внимание следующие соображения.

  • Выполнение прямых методов завершается сбоем при разрыве подключения между Центром Интернета вещей и устройством до завершения работы метода. Для повторной попытки отправки команд приложения могут перехватывать и устранять сбои.
  • Так как очередь отсутствует, приложения, для которых требуется последовательность прямых методов, должны управлять последовательностью вызовов методов таким образом, чтобы после завершения предыдущего метода вызывался следующий.
  • При вызове прямых методов приложение может задавать два значения времени ожидания. Одно значение указывает, как долго Центр Интернета вещей должен ожидать подключения устройства, а другое — как долго вызывающая сторона должна ожидать завершения метода и возможности ответить на него.

Прямые методы с шлюзами протоколов

Приложениям Интернета вещей, использующим шлюзы протоколов, может быть выгодна модель установки подключения и реализации принципа "запрос — ответ", поддерживаемая в прямых методах. Облачные шлюзы или шлюзы протоколов позволяют подключать уже существующие и разнообразные устройства к Центру Интернета вещей, действуя от имени устройств для установки взаимодействия по пользовательским протоколам. Шлюзы протоколов могут также абстрагировать модель прямых методов путем сериализации методов в сообщения, передаваемые по совместимому с устройством протоколу.

Схема, иллюстрирующая последовательность вызовов прямых методов для использования шлюза протокола для брокера взаимодействия по пользовательскому протоколу от устройства к Центр Интернета вещей.

  1. Приложение вызывает прямой метод в шлюзе протокола от имени устройства.
  2. Чтобы реализовать метод, шлюз преобразует метод в протокол для конкретного устройства и отправляет сообщение на устройство. Устройство не знает об изменениях в облачной реализации.
  3. Когда устройство завершает сообщение и отвечает, шлюз преобразует состояние конкретного устройства в ответ метода.
  4. Центр Интернета вещей завершает прямой метод, заполняя результат метода для вызывающей стороны.

Проект с открытым исходным кодом Шлюз протокола Azure преобразует прямые методы в сообщения с поддержкой протокола MQTT, является расширяемым и демонстрирует эту модель программирования для других адаптеров протокола.

Подключенные устройства в режиме ожидания

В сценариях отправки команд на устройства Интернета вещей могут быт задействованы подключенные устройства, находящиеся в режиме ожидания со сниженным энергопотреблением. Такие механизмы, как Short Message Service (SMS), могут отправлять сигналы пробуждения для перевода этих устройств в полностью работоспособное состояние.

Схема, на которой показано, как SMS-сообщения или команды, отправленные через API Интернета вещей Azure, могут разбудить устройство и подключить его к Центр Интернета вещей для получения команд.

  1. Приложение отправляет команды на устройства с помощью API ServiceClient. Один экземпляр ServiceClient может отправлять сообщения и вызывать методы для нескольких устройств.
  2. Приложение также отправляет вызовы для пробуждения по SMS на устройства в режиме ожидания через шлюз SMS поставщика мобильной связи.
  3. При пробуждении находящиеся в режиме ожидания устройства используют API DeviceClient для подключения к Центру Интернета вещей и получения команд. Один экземпляр DeviceClient представляет одно устройство, подключенное к Центру Интернета вещей.

Использование прямых методов для определения состояния подключения устройства

Отправка ненужных сообщений пробуждения через шлюзы SMS является дорогостоящей процедурой. Перед отправкой фактических команд на устройство используйте время ожидания метода и подключения, чтобы определить, подключено ли устройство, и при необходимости отправьте команду пробуждения.

    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;
        }
    }

Чтобы просто проверить подключение, используйте пустой метод с нулевым временем ожидания подключения для обычной проверки связи. Пример:

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

Соавторы

Эта статья поддерживается корпорацией Майкрософт. Первоначально она была написана следующими авторами.

Основной автор:

Дальнейшие действия