Partilhar via


Introdução ao gerenciamento de dispositivos (.NET)

Os aplicativos back-end podem usar primitivos do Hub IoT do Azure, como gêmeos de dispositivo e métodos diretos, para iniciar e monitorar remotamente ações de gerenciamento de dispositivos em dispositivos. Este artigo mostra como um aplicativo back-end e um aplicativo de dispositivo podem trabalhar juntos para iniciar e monitorar uma reinicialização remota de dispositivo usando o Hub IoT.

Nota

Os recursos descritos neste artigo estão disponíveis somente na camada padrão do Hub IoT. Para obter mais informações sobre as camadas básica e padrão/gratuita do Hub IoT, consulte Escolha a camada certa do Hub IoT para sua solução.

Use um método direto para iniciar ações de gerenciamento de dispositivos (como reinicialização, redefinição de fábrica e atualização de firmware) a partir de um aplicativo back-end na nuvem. O dispositivo é responsável por:

  • Manipulando a solicitação de método enviada do Hub IoT.

  • Iniciar a ação específica do dispositivo correspondente no dispositivo.

  • Fornecer atualizações de status por meio de propriedades relatadas para o Hub IoT.

Você pode usar um aplicativo back-end na nuvem para executar consultas gêmeas de dispositivo para relatar o progresso de suas ações de gerenciamento de dispositivos.

Este artigo mostra como criar:

  • SimulateManagedDevice: um aplicativo de dispositivo simulado com um método direto que reinicializa o dispositivo e relata o último tempo de reinicialização. Os métodos diretos são invocados a partir da nuvem.

  • TriggerReboot: um aplicativo de console .NET que chama o método direto no aplicativo de dispositivo simulado por meio de seu hub IoT. Ele exibe a resposta e as propriedades relatadas atualizadas.

Pré-requisitos

  • Visual Studio.

  • Um hub IoT. Crie um com a CLI ou o portal do Azure.

  • Um dispositivo registrado em seu hub IoT. Se você não tiver um dispositivo em seu hub IoT, siga as etapas em Registrar um dispositivo.

  • Verifique se a porta 8883 está aberta no firewall. O exemplo de dispositivo neste artigo usa o protocolo MQTT, que se comunica pela porta 8883. Essa porta pode estar bloqueada em alguns ambientes de rede corporativa e educacional. Para obter mais informações e maneiras de contornar esse problema, consulte Conectando-se ao Hub IoT (MQTT).

Criar um aplicativo de dispositivo com um método direto

Nesta secção, pode:

  • Crie um aplicativo de console .NET que responda a um método direto chamado pela nuvem.

  • Acione uma reinicialização simulada do dispositivo.

  • Use as propriedades relatadas para habilitar consultas gêmeas de dispositivo para identificar dispositivos e quando eles foram reinicializados pela última vez.

Para criar o aplicativo de dispositivo simulado, siga estas etapas:

  1. Abra o Visual Studio e selecione Criar um novo projeto, localize e selecione o modelo de projeto Aplicativo de Console (.NET Framework) e selecione Avançar.

  2. Em Configurar seu novo projeto, nomeie o projeto como SimulateManagedDevice e selecione Avançar.

    Captura de tela que mostra como nomear um novo projeto do Visual Studio.

  3. Mantenha a versão padrão do .NET Framework e selecione Criar.

  4. No Gerenciador de Soluções, clique com o botão direito do mouse no novo projeto SimulateManagedDevice e selecione Gerenciar Pacotes NuGet.

  5. Selecione Procurar, procure e selecione Microsoft.Azure.Devices.Client. Selecione Instalar.

    Captura de tela que mostra como instalar o pacote Microsoft.Azure.Devices.Client.

    Esta etapa baixa, instala e adiciona uma referência ao pacote NuGet do SDK do dispositivo IoT do Azure e suas dependências.

  6. Adicione as seguinte declarações using na parte superior do ficheiro Program.cs:

    using Microsoft.Azure.Devices.Client;
    using Microsoft.Azure.Devices.Shared;
    
  7. Adicione os seguintes campos à classe Programa. Substitua o valor do {device connection string} espaço reservado pela cadeia de conexão do dispositivo que você viu quando registrou um dispositivo no Hub IoT:

    static string DeviceConnectionString = "{device connection string}";
    static DeviceClient Client = null;
    
  8. Adicione o seguinte para implementar o método direct no dispositivo:

    static Task<MethodResponse> onReboot(MethodRequest methodRequest, object userContext)
    {
        // In a production device, you would trigger a reboot 
        //   scheduled to start after this method returns.
        // For this sample, we simulate the reboot by writing to the console
        //   and updating the reported properties.
        try
        {
            Console.WriteLine("Rebooting!");
    
            // Update device twin with reboot time. 
            TwinCollection reportedProperties, reboot, lastReboot;
            lastReboot = new TwinCollection();
            reboot = new TwinCollection();
            reportedProperties = new TwinCollection();
            lastReboot["lastReboot"] = DateTime.Now;
            reboot["reboot"] = lastReboot;
            reportedProperties["iothubDM"] = reboot;
            Client.UpdateReportedPropertiesAsync(reportedProperties).Wait();
        }
        catch (Exception ex)
        {
            Console.WriteLine();
            Console.WriteLine("Error in sample: {0}", ex.Message);
        }
    
        string result = @"{""result"":""Reboot started.""}";
        return Task.FromResult(new MethodResponse(Encoding.UTF8.GetBytes(result), 200));
    }
    
  9. Finalmente, adicione o seguinte código ao método Main para abrir a conexão com seu hub IoT e inicializar o ouvinte do método:

    try
    {
        Console.WriteLine("Connecting to hub");
        Client = DeviceClient.CreateFromConnectionString(DeviceConnectionString, 
          TransportType.Mqtt);
    
        // setup callback for "reboot" method
        Client.SetMethodHandlerAsync("reboot", onReboot, null).Wait();
        Console.WriteLine("Waiting for reboot method\n Press enter to exit.");
        Console.ReadLine();
    
        Console.WriteLine("Exiting...");
    
        // as a good practice, remove the "reboot" handler
        Client.SetMethodHandlerAsync("reboot", null, null).Wait();
        Client.CloseAsync().Wait();
    }
    catch (Exception ex)
    {
        Console.WriteLine();
        Console.WriteLine("Error in sample: {0}", ex.Message);
    }
    
  10. No Gerenciador de Soluções, clique com o botão direito do mouse na solução e selecione Configurar Projetos de Inicialização.

  11. Para Common Properties>Startup Project, selecione Single startup project e, em seguida, selecione o projeto SimulateManagedDevice . Selecione OK para salvar as alterações.

  12. Selecione Build Build Solution (Criar>solução de compilação).

Nota

Para simplificar, este artigo não implementa nenhuma política de novas tentativas. No código de produção, você deve implementar políticas de repetição (como um backoff exponencial), como sugerido em Tratamento de falhas transitórias.

Obter a cadeia de conexão do hub IoT

Neste artigo, você cria um serviço de back-end que invoca um método direto em um dispositivo. Para invocar um método direto em um dispositivo por meio do Hub IoT, seu serviço precisa da permissão de conexão de serviço. Por padrão, cada Hub IoT é criado com uma política de acesso compartilhado chamada serviço que concede essa permissão.

Para obter a cadeia de conexão do Hub IoT para a política de serviço , siga estas etapas:

  1. No portal do Azure, selecione Grupos de recursos. Selecione o grupo de recursos onde o hub está localizado e, em seguida, selecione o hub na lista de recursos.

  2. No painel esquerdo do hub IoT, selecione Políticas de acesso compartilhado.

  3. Na lista de políticas, selecione a política de serviço .

  4. Copie a cadeia de conexão primária e salve o valor.

Captura de tela que mostra como recuperar a cadeia de conexão do seu Hub IoT no portal do Azure.

Para obter mais informações sobre políticas e permissões de acesso compartilhado do Hub IoT, consulte Controle de acesso e permissões.

Criar um aplicativo de serviço para disparar uma reinicialização

Nesta seção, você cria um aplicativo de console .NET, usando C#, que inicia uma reinicialização remota em um dispositivo usando um método direto. O aplicativo usa consultas gêmeas de dispositivo para descobrir o último tempo de reinicialização para esse dispositivo.

  1. Abra o Visual Studio e selecione Criar um novo projeto.

  2. Em Criar um novo projeto, localize e selecione o modelo de projeto Aplicativo de Console (.NET Framework) e selecione Avançar.

  3. Em Configurar seu novo projeto, nomeie o projeto como TriggerReboot e selecione Avançar.

    Captura de tela que mostra como configurar um novo projeto do Visual Studio.

  4. Aceite a versão padrão do .NET Framework e selecione Criar para criar o projeto.

  5. No Gerenciador de Soluções, clique com o botão direito do mouse no projeto TriggerReboot e selecione Gerenciar Pacotes NuGet.

  6. Selecione Procurar, procure e selecione Microsoft.Azure.Devices. Selecione Instalar para instalar o pacote Microsoft.Azure.Devices .

    Captura de tela que mostra como instalar o pacote Microsoft.Azure.Devices.

    Esta etapa baixa, instala e adiciona uma referência ao pacote NuGet do SDK do serviço Azure IoT e suas dependências.

  7. Adicione as seguinte declarações using na parte superior do ficheiro Program.cs:

    using Microsoft.Azure.Devices;
    using Microsoft.Azure.Devices.Shared;
    
  8. Adicione os seguintes campos à classe Programa. Substitua o valor do {iot hub connection string} espaço reservado pela cadeia de conexão do Hub IoT copiada anteriormente em Obter a cadeia de conexão do hub IoT.

    static RegistryManager registryManager;
    static string connString = "{iot hub connection string}";
    static ServiceClient client;
    static string targetDevice = "myDeviceId";
    
  9. Adicione o seguinte método à classe Programa. Esse código obtém o gêmeo do dispositivo para o dispositivo de reinicialização e gera as propriedades relatadas.

    public static async Task QueryTwinRebootReported()
    {
        Twin twin = await registryManager.GetTwinAsync(targetDevice);
        Console.WriteLine(twin.Properties.Reported.ToJson());
    }
    
  10. Adicione o seguinte método à classe Programa. Esse código inicia a reinicialização no dispositivo usando um método direto.

    public static async Task StartReboot()
    {
        client = ServiceClient.CreateFromConnectionString(connString);
        CloudToDeviceMethod method = new CloudToDeviceMethod("reboot");
        method.ResponseTimeout = TimeSpan.FromSeconds(30);
    
        CloudToDeviceMethodResult result = await 
          client.InvokeDeviceMethodAsync(targetDevice, method);
    
        Console.WriteLine("Invoked firmware update on device.");
    }
    
  11. Por fim, adicione as seguintes linhas ao método Main:

    registryManager = RegistryManager.CreateFromConnectionString(connString);
    StartReboot().Wait();
    QueryTwinRebootReported().Wait();
    Console.WriteLine("Press ENTER to exit.");
    Console.ReadLine();
    
  12. Selecione Build Build Solution (Criar>solução de compilação).

Nota

Este artigo executa apenas uma única consulta para as propriedades relatadas do dispositivo. No código de produção, recomendamos sondagem para detetar alterações nas propriedades relatadas.

Executar as aplicações

Agora você está pronto para executar os aplicativos.

  1. Para executar o aplicativo de dispositivo .NET SimulateManagedDevice, no Gerenciador de Soluções, clique com o botão direito do mouse no projeto SimulateManagedDevice , selecione Depurar e selecione Iniciar nova instância. O aplicativo deve começar a ouvir chamadas de método do seu hub IoT.

  2. Depois que o dispositivo estiver conectado e aguardando invocações de método, clique com o botão direito do mouse no projeto TriggerReboot , selecione Depurar e, em seguida, selecione Iniciar nova instância.

    Você deve ver Reinicialização escrita no console SimulatedManagedDevice e as propriedades relatadas do dispositivo, que incluem o último tempo de reinicialização, escrito no console TriggerReboot .

    Execução do aplicativo de serviço e dispositivo

Personalizar e estender as ações de gerenciamento de dispositivos

Suas soluções de IoT podem expandir o conjunto definido de padrões de gerenciamento de dispositivos ou habilitar padrões personalizados usando as primitivas de método de gêmeo de dispositivo e de nuvem para dispositivo. Outros exemplos de ações de gerenciamento de dispositivos incluem redefinição de fábrica, atualização de firmware, atualização de software, gerenciamento de energia, gerenciamento de rede e conectividade e criptografia de dados.

Janelas de manutenção de dispositivos

Normalmente, você configura dispositivos para executar ações em um momento que minimiza interrupções e tempo de inatividade. As janelas de manutenção de dispositivos são um padrão comumente usado para definir o momento em que um dispositivo deve atualizar sua configuração. Suas soluções de back-end podem usar as propriedades desejadas do gêmeo de dispositivo para definir e ativar uma política em seu dispositivo que permita uma janela de manutenção. Quando um dispositivo recebe a política da janela de manutenção, ele pode usar a propriedade relatada do gêmeo do dispositivo para relatar o status da política. O aplicativo back-end pode usar consultas gêmeas de dispositivo para atestar a conformidade dos dispositivos e de cada política.

Próximos passos

Neste artigo, você usou um método direto para disparar uma reinicialização remota em um dispositivo. Você usou as propriedades relatadas para relatar a última hora de reinicialização do dispositivo e consultou o gêmeo do dispositivo para descobrir a última hora de reinicialização do dispositivo a partir da nuvem.

ToPara continuar a introdução ao Hub IoT e aos padrões de gerenciamento de dispositivos, como a atualização completa baseada em imagem no artigo Atualização de Dispositivo para o Hub IoT do Azure usando a Imagem de Referência do Raspberry Pi 3 B+.

Para saber como estender sua solução de IoT e agendar chamadas de método em vários dispositivos, consulte Agendar e transmitir trabalhos.