Editar

Partilhar via


Comandos de aplicação para dispositivo IoT

Azure IoT Hub

As aplicações utilizam dois mecanismos principais para enviar comandos para dispositivos IoT, mensagens cloud a dispositivo e métodos diretos.

  • As aplicações enviam mensagens da cloud para o dispositivo para filas de mensagens específicas do dispositivo na plataforma IoT para que os dispositivos leiam quando estão ligados. Os dispositivos decidem quando ler as mensagens.

  • As aplicações invocam métodos diretos diretamente em dispositivos ligados, utilizando um padrão de pedido-resposta através de pontos finais de dispositivos IoT dedicados.

Este artigo aborda as características das mensagens da cloud para o dispositivo e dos métodos diretos. O artigo também descreve como utilizar métodos diretos com gateways de protocolo e dispositivos de reserva ligados.

Mensagens da cloud para o dispositivo

As aplicações enviam mensagens de comando da cloud para o dispositivo para dispositivos específicos para Hub IoT do Azure, que armazenam as mensagens em filas específicas do dispositivo. Hub IoT entrega as mensagens às filas específicas do dispositivo, independentemente de os dispositivos estarem ligados.

Um diagrama que mostra como o Hub IoT armazena mensagens numa fila de mensagens interna para cada dispositivo e os dispositivos que consultam estas mensagens.

As seguintes considerações aplicam-se ao utilizar mensagens da cloud para o dispositivo:

  • As filas de mensagens atuam eficazmente como caixas de correio para dispositivos e os dispositivos são responsáveis por consultar as respetivas filas de mensagens para novas mensagens quando estão ligados.
  • Os dispositivos recebem mensagens de forma inicial e inicial, tornando as mensagens da cloud para o dispositivo ideais para ler e agir sequencialmente em mensagens.
  • As mensagens têm uma expiração configurável, pelo que as mensagens não lidas podem eventualmente ser removidas da fila de mensagens do dispositivo.
  • Para comunicação com estado, as aplicações podem utilizar um recetor de comentários para monitorizar a entrega e o reconhecimento de mensagens. A aplicação pode utilizar um único recetor de comentários para monitorizar todas as filas de mensagens para todos os dispositivos.

Métodos diretos

As aplicações invocam métodos diretos diretamente em dispositivos IoT ligados e esperam que os dispositivos executem os métodos e os registem no Hub IoT. Hub IoT chama os métodos diretos em dispositivos ligados através de canais diretos e os dispositivos são responsáveis por executar funções e devolver resultados imediatos.

Um diagrama que mostra como o Hub IoT invoca código diretamente num dispositivo individual através de métodos diretos.

As seguintes considerações aplicam-se ao utilizar métodos diretos:

  • Os métodos diretos falham se a ligação for interrompida entre o Hub IoT e o dispositivo antes da conclusão do método. As aplicações podem capturar e lidar com falhas para tentar novamente comandos.
  • Uma vez que não existe fila, as aplicações que necessitam de sequenciação de métodos diretos têm de gerir a sequenciação de chamadas de método, de modo a que a conclusão do método anterior chame o método seguinte.
  • Invocar métodos diretos permite que uma aplicação defina dois tempos limite. Um tempo limite especifica quanto tempo o Hub IoT deve aguardar pela ligação de um dispositivo antes de desistir e o outro tempo limite especifica quanto tempo o autor da chamada deve esperar que o método seja concluído e responda antes de desistir.

Métodos diretos com gateways de protocolo

As aplicações IoT que utilizam gateways de protocolo podem beneficiar do modelo de aplicação da conectividade e de resposta a pedidos de métodos diretos. Os gateways de cloud ou protocolo permitem ligar dispositivos pré-existentes e diversos a Hub IoT agindo em nome de dispositivos para mediar comunicações de protocolos personalizados. Os gateways de protocolo também podem abstrair o modelo de métodos diretos ao serializar métodos em mensagens de protocolo compatíveis com dispositivos.

Um diagrama que ilustra a sequência de chamadas de métodos diretos para utilizar um gateway de protocolo para mediar a comunicação de protocolo personalizado de um dispositivo para Hub IoT.

  1. A aplicação invoca o método direto em nome do dispositivo no gateway de protocolo.
  2. Para a implementação do método, o gateway traduz o método num protocolo específico do dispositivo e envia a mensagem para o dispositivo. O dispositivo não tem conhecimento de quaisquer alterações à implementação da cloud.
  3. Quando o dispositivo conclui a mensagem e responde, o gateway traduz o estado específico do dispositivo para a resposta do método.
  4. O Hub IoT conclui o método direto ao preencher um resultado de método para o autor da chamada.

O projeto open source do Gateway de Protocolo do Azure traduz métodos diretos para mensagens de protocolo MQTT nativamente, é facilmente extensível e demonstra este modelo de programação para outros adaptadores de protocolo.

Dispositivos de reserva ligados

Os cenários de comandos IoT podem envolver dispositivos de reserva ligados que estão numa condição de inatividade de baixa potência quando não estão ativos. Mecanismos como o Serviço de Mensagens Curtas (SMS) móveis podem enviar sinais de reativação para fazer a transição destes dispositivos para um estado totalmente operacional.

Um diagrama que ilustra como as mensagens SMS ou os comandos enviados através das APIs IoT do Azure podem reativar um dispositivo e ligá-lo a Hub IoT para receber comandos.

  1. A aplicação envia comandos para dispositivos com a API ServiceClient. Uma instância do ServiceClient pode enviar mensagens e invocar métodos para vários dispositivos.
  2. A aplicação também envia chamadas de reativação por SMS para dispositivos de reserva através do gateway de SMS do fornecedor móvel.
  3. No reativação, os dispositivos de reserva utilizam a API DeviceClient para ligar a Hub IoT e receber comandos. Uma instância do DeviceClient representa um único dispositivo ligado ao Hub IoT.

Utilizar métodos diretos para determinar o estado da ligação do dispositivo

O envio de mensagens de reativação desnecessárias através de gateways DE SMS é dispendioso. Antes de enviar comandos reais para um dispositivo, utilize os tempos limite da ligação e do método para determinar se o dispositivo está ligado e, se necessário, enviar um reativação.

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

Para verificar simplesmente a conectividade, utilize um método vazio com um tempo limite de ligação de zero para implementar um ping simples. Por exemplo:

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

Contribuidores

Este artigo é mantido pela Microsoft. Foi originalmente escrito pelos seguintes contribuintes.

Autor principal:

Passos seguintes