Implementação de dispositivos e práticas recomendadas para IoT central

Este artigo fornece informações sobre como implementar dispositivos que se conectam ao seu aplicativo central IoT. Inclui também algumas boas práticas. Para saber mais sobre o processo geral de conexão, consulte Conectar um dispositivo.

Para obter um código de implementação de dispositivo de exemplo, consulte Tutorial: Criar e conectar um aplicativo cliente ao seu aplicativo do Azure IoT Central.

Implementar o dispositivo

Os dispositivos que se conectam ao IoT Central devem seguir as convenções IoT Plug and Play. Uma dessas convenções é que um dispositivo deve enviar o ID do modelo de dispositivo que implementa quando se conecta. O ID do modelo permite que o aplicativo IoT Central atribua o dispositivo ao modelo de dispositivo correto.

Um modelo de dispositivo do IoT Central inclui um modelo que especifica os comportamentos que um dispositivo desse tipo deve implementar. Os comportamentos incluem telemetria, propriedades e comandos.

Cada modelo tem um identificador de modelo de gêmeo digital exclusivo (DTMI), como dtmi:com:example:Thermostat;1. Quando um dispositivo se conecta ao IoT Central, ele envia a DTMI do modelo que implementa. O IoT Central pode então atribuir o modelo de dispositivo correto ao dispositivo.

O IoT Plug and Play define um conjunto de convenções que um dispositivo deve seguir quando implementa um modelo DTDL (Digital Twin Definition Language).

Os SDKs de dispositivo IoT do Azure incluem suporte para as convenções IoT Plug and Play.

Modelo do dispositivo

Para o IoT Central, um modelo de dispositivo é definido usando a linguagem de modelagem DTDL v2 . Esta linguagem permite-lhe definir:

  • A telemetria que o dispositivo envia. A definição inclui o nome e o tipo de dados da telemetria. Por exemplo, um dispositivo envia telemetria de temperatura como um duplo.
  • As propriedades que o dispositivo relata ao IoT Central. Uma definição de propriedade inclui seu nome e tipo de dados. Por exemplo, um dispositivo relata o estado de uma válvula como um booleano.
  • As propriedades que o dispositivo pode receber do IoT Central. Opcionalmente, você pode marcar uma propriedade como gravável. Por exemplo, o IoT Central envia uma temperatura de destino como um dobro para um dispositivo.
  • Os comandos aos quais um dispositivo responde. A definição inclui o nome do comando e os nomes e tipos de dados de quaisquer parâmetros. Por exemplo, um dispositivo responde a um comando de reinicialização que especifica quantos segundos esperar antes de reinicializar.

Nota

O IoT Central define algumas extensões para a linguagem DTDL v2. Para saber mais, consulte Extensão do IoT Central.

Um modelo DTDL pode ser um modelo sem componente ou um modelo multicomponente :

  • Modelo sem componentes: um modelo simples não usa componentes incorporados ou em cascata. Toda a telemetria, propriedades e comandos são definidos como um único componente raiz. Para obter um exemplo, consulte o modelo de termostato .
  • Modelo multicomponente. Um modelo mais complexo que inclui dois ou mais componentes. Esses componentes incluem um único componente raiz e um ou mais componentes aninhados. Para obter um exemplo, consulte o modelo do controlador de temperatura.

Gorjeta

Você pode importar e exportar um modelo de dispositivo completo ou uma interface individual de um modelo de dispositivo do IoT Central como um arquivo DTDL v2.

Para saber mais sobre modelos de dispositivos, consulte o guia de modelagem IoT Plug and Play

Convenções

Um dispositivo deve seguir as convenções IoT Plug and Play quando troca dados com o IoT Central. As convenções incluem:

  • Envie a DTMI quando ela se conectar ao IoT Central.
  • Envie cargas úteis e metadados JSON formatados corretamente para o IoT Central.
  • Responda corretamente a propriedades e comandos graváveis do IoT Central.
  • Siga as convenções de nomenclatura para comandos de componentes.

Nota

Atualmente, o IoT Central não suporta totalmente a matriz DTDL e os tipos de dados geoespaciais.

Para saber mais sobre as convenções IoT Plug and Play, consulte Convenções IoT Plug and Play.

Para saber mais sobre o formato das mensagens JSON que um dispositivo troca com o IoT Central, consulte Telemetria, propriedade e cargas úteis de comando.

SDKs de dispositivo

Use um dos SDKs de dispositivo do Azure IoT para implementar o comportamento do seu dispositivo. O código deve:

  • Registre o dispositivo com DPS e use as informações do DPS para se conectar ao hub IoT interno em seu aplicativo IoT Central.
  • Anuncie o DTMI do modelo que o dispositivo implementa.
  • Envie telemetria no formato especificado pelo modelo do dispositivo. O IoT Central usa o modelo no modelo de dispositivo para determinar como usar a telemetria para visualizações e análises.
  • Sincronize valores de propriedade entre o dispositivo e o IoT Central. O modelo especifica os nomes de propriedade e os tipos de dados para que o IoT Central possa exibir as informações.
  • Implemente manipuladores de comando para os comandos especificados no modelo. O modelo especifica os nomes de comando e parâmetros que o dispositivo deve usar.

Para obter mais informações sobre a função dos modelos de dispositivo, consulte O que são modelos de dispositivo?.

A tabela a seguir resume como os recursos do dispositivo Azure IoT Central são mapeados para os recursos do Hub IoT:

Azure IoT Central Hub IoT do Azure
Telemetria Mensagens de dispositivo para nuvem
Comandos offline Mensagens da nuvem para o dispositivo
Property Propriedades relatadas de gêmeos de dispositivo
Propriedade (gravável) Propriedades desejadas e relatadas do gêmeo do dispositivo
Comando Métodos diretos

Protocolos de comunicação

Os protocolos de comunicação que um dispositivo pode usar para se conectar ao IoT Central incluem MQTT, AMQP e HTTPS. Internamente, o IoT Central usa um hub IoT para habilitar a conectividade do dispositivo. Para obter mais informações sobre os protocolos de comunicação suportados pelo Hub IoT para conectividade de dispositivos, consulte Escolher um protocolo de comunicação.

Se o seu dispositivo não puder usar nenhum dos protocolos suportados, use o Azure IoT Edge para fazer a conversão de protocolo. O IoT Edge dá suporte a outros cenários de inteligência na borda para descarregar o processamento do aplicativo Azure IoT Central.

Carimbos de data/hora de telemetria

Por padrão, o IoT Central usa o tempo enfileirado de mensagens quando exibe telemetria em painéis e gráficos. O tempo de enfileiramento de mensagens é definido internamente quando o IoT Central recebe a mensagem do dispositivo.

Um dispositivo pode definir a iothub-creation-time-utc propriedade quando cria uma mensagem para enviar ao IoT Central. Se essa propriedade estiver presente, o IoT Central a usará quando exibir telemetria em painéis e gráficos.

Você pode exportar o tempo enfileirado e a propriedade ao exportar telemetria iothub-creation-time-utc do seu aplicativo IoT Central.

Para saber mais sobre as propriedades das mensagens, consulte Propriedades do sistema de mensagens do Hub IoT do dispositivo para a nuvem.

Melhores práticas

Essas recomendações mostram como implementar dispositivos para aproveitar a alta disponibilidade integrada, a recuperação de desastres e o dimensionamento automático no IoT Central.

Provisionamento de dispositivos

À medida que o número de hubs IoT em seu aplicativo muda, um dispositivo pode precisar se conectar a um hub diferente.

Antes de um dispositivo se conectar ao IoT Central, ele deve ser registrado e provisionado nos serviços subjacentes. Quando você adiciona um dispositivo a um aplicativo do IoT Central, o IoT Central adiciona uma entrada a um grupo de registro do DPS. As informações do grupo de registro, como o escopo da ID, a ID do dispositivo e as chaves, são exibidas na interface do usuário do IoT Central.

Quando um dispositivo se conecta pela primeira vez ao seu aplicativo IoT Central, o DPS provisiona o dispositivo em um dos hubs IoT vinculados do grupo de registros. O dispositivo é então associado a esse hub IoT. O DPS usa uma política de alocação para balancear a carga do provisionamento entre os hubs IoT no aplicativo. Esse processo garante que cada hub IoT tenha um número semelhante de dispositivos provisionados.

Para saber mais sobre registro e provisionamento no IoT Central, consulte Guia de conectividade de dispositivo do IoT Central.

Lidar com falhas de conexão

Para fins de dimensionamento ou recuperação de desastres, o IoT Central pode atualizar seus hubs IoT subjacentes. Para manter a conectividade, o código do dispositivo deve lidar com erros de conexão específicos estabelecendo uma conexão com um novo ponto de extremidade do Hub IoT.

Se o dispositivo receber algum dos seguintes erros quando se conectar, ele deve reprovisionar o dispositivo com DPS para obter uma nova cadeia de conexão. Esses erros significam que a cadeia de conexão não é mais válida:

  • Ponto de extremidade inacessível do Hub IoT.
  • Token de segurança expirado.
  • Dispositivo desativado no Hub IoT.

Se o dispositivo receber algum dos seguintes erros quando se conectar, ele deve usar uma estratégia de back-off para tentar novamente a conexão. Esses erros significam que a cadeia de conexão ainda é válida, mas condições transitórias estão impedindo o dispositivo de se conectar:

  • Dispositivo bloqueado pelo operador.
  • Erro interno 500 do serviço.

Para saber mais sobre códigos de erro de dispositivo, consulte Solução de problemas de conexões de dispositivo.

Para saber mais sobre como implementar reconexões automáticas, consulte Gerenciar reconexões de dispositivos para criar aplicativos resilientes.

Atualmente, os dispositivos IoT Edge não podem se mover entre hubs IoT.

Testar recursos de failover

A CLI do Azure permite testar os recursos de failover do código do seu dispositivo. O comando CLI funciona alternando temporariamente um registro de dispositivo para um hub IoT interno diferente. Para verificar se o failover do dispositivo funcionou, verifique se o dispositivo ainda envia telemetria e responde aos comandos.

Para executar o teste de failover para seu dispositivo, execute o seguinte comando:

az iot central device manual-failover \
    --app-id {Application ID of your IoT Central application} \
    --device-id {Device ID of the device you're testing} \
    --ttl-minutes {How to wait before moving the device back to it's original IoT hub}

Gorjeta

Para localizar a ID do aplicativo, navegue até Gerenciamento de aplicativos > em seu aplicativo IoT Central.

Se o comando for bem-sucedido, você verá uma saída semelhante ao exemplo a seguir:

Command group 'iot central device' is in preview and under development. Reference and support levels: https://aka.ms/CLI_refstatus
{
  "hubIdentifier": "6bd4...bafa",
  "message": "Success! This device is now being failed over. You can check your device'’'s status using 'iot central device registration-info' command. The device will revert to its original hub at Tue, 18 May 2021 11:03:45 GMT. You can choose to failback earlier using device-manual-failback command. Learn more: https://aka.ms/iotc-device-test"
}

Para saber mais sobre o comando CLI, consulte az iot central device manual-failover.

Agora você pode verificar se a telemetria do dispositivo ainda chega ao seu aplicativo IoT Central.

Gorjeta

Para ver o código de dispositivo de exemplo que lida com failovers em várias linguagens de programação, consulte Clientes de alta disponibilidade do IoT Central.

Próximos passos

Alguns próximos passos sugeridos são: