Dispositivos, configuração e estado

Registro do dispositivo

Para que um dispositivo seja conectado, primeiro é preciso registrá-lo no gerenciador de dispositivos. O gerenciador permite criar e configurar registros de dispositivos e os dispositivos dentro deles. O gerenciador de dispositivos pode ser usado por meio do Console do Cloud Platform, comandos gcloud ou a API REST.

Registros do dispositivo

O registro de dispositivos é um contêiner de dispositivos.

  • Cada registro de dispositivo é criado em uma região específica da nuvem e pertence a um projeto da nuvem.
  • Um registro é identificado no serviço cloudiot.googleapis.com pelo nome completo como: projects/{project-id}/locations/{cloud-region}/registries/{registry-id}.
  • O registro de dispositivos está configurado com um ou mais tópicos do Cloud Pub/Sub em que os eventos de telemetria são publicados para todos os dispositivos nesse registro. Um único tópico pode ser usado para coletar dados em todas as regiões.
  • O monitoramento do Stackdriver é ativado automaticamente para cada registro.
  • O gerenciamento de identidade e acesso (IAM) pode ser usado para controle de acesso, concedendo permissão aos usuários para visualizar, provisionar ou gerenciar dispositivos. O Cloud IoT Core concede automaticamente o papel cloudiot.serviceAgent à conta de serviço correspondente para cada projeto, permitindo a publicação em tópicos do Pub/Sub.
  • Saiba mais sobre os requisitos de nome e tamanho do ID do registro do dispositivo em Requisitos de caracteres e tamanho permitidos.

Veja mais detalhes na referência de recursos do DeviceRegistry.

Dispositivos

Ao criar um dispositivo em um registro, você o define como um recurso do Cloud IoT Core. Em seguida, você pode ver os detalhes do dispositivo e controlar algumas propriedades.

  • É possível impedir que um dispositivo se comunique com o Cloud IoT Core. Isso pode ser útil quando um sensor falha ou um dispositivo está configurado incorretamente.
  • Os carimbos de data/hora do dispositivo mostram o evento de sinal de funcionamento e telemetria recebido mais recentemente.
  • Cada dispositivo pode ser identificado pelo nome completo do recurso: projects/{project-id}/locations/{cloud-region}/registries/{registry-id}/devices/{device-id} ou projects/{project-id}/locations/{cloud-region}/registries/{registry-id}/devices/{device-numeric-id}. Consulte a próxima seção para ver mais informações sobre o ID do dispositivo e o ID numérico do dispositivo.

Veja mais detalhes em Referência de recursos do dispositivo.

Observe as cotas e limites do Cloud IoT Core ao trabalhar com dispositivos.

Identificadores de dispositivo

Cada dispositivo tem os seguintes identificadores:

  • ID do dispositivo definido pelo usuário. Para saber mais sobre os requisitos de nome e tamanho do ID do dispositivo, consulte Requisitos de caracteres e tamanho permitidos.
  • Um código numérico do dispositivo gerado pelo servidor. O código numérico do dispositivo é criado automaticamente pelo Cloud IoT Core. ele é globalmente exclusivo e não editável. Para ver um código numérico do dispositivo, acesse a página Detalhes do dispositivo.
  • O caminho completo do dispositivo, conforme descrito na seção anterior.

Metadados do dispositivo

É possível definir metadados para um dispositivo, como impressão digital de hardware, número de série, informações do fabricante ou qualquer outro atributo. O Cloud IoT Core não interpreta nem indexa metadados de dispositivos. Na teoria, os metadados do dispositivo são mais seguros do que o estado ou a configuração do dispositivo porque os metadados nunca são enviados para ou de um dispositivo. Isso significa que, se um dispositivo for comprometido, os metadados dele não poderão ser lidos.

Os metadados do dispositivo não mudam com frequência. para melhores resultados, atualize-a no máximo uma vez por dia.

É possível definir até 500 pares de chave-valor no momento de adicionar ou editar um dispositivo. As chaves precisam ser exclusivas.

Para saber mais sobre os requisitos de tamanho e nomeação de chaves-valor dos metadados do dispositivo, consulte Requisitos de caracteres e tamanho permitidos.

Configuração do dispositivo

Com o Cloud IoT Core, é possível controlar um dispositivo enviando a ele uma configuração. Uma configuração de dispositivo é um blob arbitrário de definido pelo usuário de dados enviados do Cloud IoT Core para um dispositivo. Os dados podem ser estruturados ou não. Também pode ser de qualquer formato, como dados binários arbitrários, texto, JSON ou buffers de protocolo serializado.

A configuração do dispositivo é mantida no armazenamento pelo Cloud IoT Core. O tamanho máximo dos dados de configuração é 64 KB. Para saber mais sobre limites, consulte Cotas e limites.

Para melhores resultados, a configuração do dispositivo deve se concentrar nos valores ou resultados desejados, e não em uma sequência de comandos. Se você especificar comandos, as versões intermediárias de configuração poderão criar conflitos e não será possível restaurar o estado de um dispositivo (sem executar todas as sequências de comandos desde que o dispositivo foi inicializado pela primeira vez). Se as suas configurações enfatizarem valores e resultados, você poderá restaurar o estado do dispositivo com mais facilidade.

Versões de configuração

Ponte MQTT

Para determinada conexão MQTT, um dispositivo recebe configurações somente em ordem crescente de números de versão; Em outras palavras, nunca será enviada uma configuração mais antiga que a versão atual. No entanto, se o dispositivo se reconectar à ponte MQTT, ele poderá receber uma configuração mais antiga do que a conexão anterior. No entanto, isso é raro, e o dispositivo receberá a versão mais recente.

Não há garantia de que um dispositivo receberá todas as atualizações de configuração. Em vez disso, ele sempre receberá a atualização latest. Se uma configuração estiver sendo atualizada rapidamente, talvez os dispositivos não recebam as versões intermediárias.

Ao modificar uma configuração de dispositivo, você pode especificar o número da versão a ser modificado. Isso protege contra a substituição de uma configuração por alterações simultâneas.

Ponte HTTP

Os dispositivos conectados por HTTP podem especificar a versão local (a versão de configuração no dispositivo). O Cloud IoT Core retornará apenas uma versão mais recente, conforme descrito na seção sobre a ponte HTTP.

Estado do dispositivo

As informações de estado do dispositivo capturam o status atual do dispositivo, não o ambiente. Os dispositivos podem descrever o estado deles com um blob de dados arbitrário definido pelo usuário, enviado do dispositivo para a nuvem. Os dados podem ser estruturados ou não. Também pode ser de qualquer formato, como dados binários, texto, JSON ou buffers de protocolo serializado.

Alguns exemplos de estado do dispositivo incluem a integridade do dispositivo ou a versão dele do firmware. Normalmente, as informações de estado do dispositivo não são atualizadas com frequência.

Diferenças entre metadados, configurações e estado do dispositivo

Usando a configuração e o estado juntos, é possível responder a perguntas como: o que o dispositivo atualmente "pensa" que ele deveria fazer? Como isso se compara à configuração mais recente do dispositivo? Por outro lado, os metadados servem principalmente como marcadores ou identificadores dos dispositivos.

Os dados de configuração são enviados ao dispositivo a partir do Cloud IoT Core. Os dados de estado são enviados pelo dispositivo para o Cloud IoT Core. Pense na configuração como uma instrução externa enviada a um dispositivo e no estado como uma representação interna do dispositivo. Os dados de configuração e de estado podem ter o mesmo esquema e codificação, ou podem ser diferentes.

As informações que precisam ser enviadas ou enviadas de um dispositivo não podem ser armazenadas como metadados do dispositivo, porque os metadados do dispositivo permanecem na nuvem. Essas informações precisam estar em uma configuração de dispositivo, se for necessário enviá-las para um dispositivo, ou em dados de estado do dispositivo, se for necessário retorná-las ao Cloud IoT Core.

O exemplo a seguir explica os diferentes usos de metadados, configuração e estado usando o cenário de dispositivos em um edifício:

  • Digamos que você tenha diversos dispositivos em cada andar de um edifício. Para identificar dispositivos no sétimo andar, você pode adicionar um par de chave-valor de metadados 'floor': '7' aos dispositivos no sétimo andar. A aplicação dessas informações de metadados fornece uma maneira de identificar os dispositivos, mas, como os metadados não são interpretados ou indexados, eles só podem ser usados para fins de identificação.

  • Se você quiser alterar o estado dos dispositivos no edifício, poderá enviar uma configuração de dispositivo para cada um. Essa configuração inclui um blob arbitrário de dados que contém a temperatura desejada e se as luzes do dispositivo estão acesas ou desligadas:

    {
      temperature: 50
      lights: off
    }
    

    Por si só, a configuração não muda a temperatura do dispositivo nem acende ou apaga as luzes dele. Cabe ao dispositivo interpretar a configuração e usar a própria lógica para executar o comando. Nas próximas horas, a configuração do dispositivo não mudará (a menos que você atualize e envie uma nova configuração), mas o estado do dispositivo precisa mudar à medida que a temperatura aumenta ou diminui e o dispositivo aumenta as luzes. desativado.

  • Para verificar se a configuração foi aplicada corretamente e se os dispositivos estão no estado correto, cada dispositivo pode informar o estado (independentemente de estar ligado ou desligado, qual a temperatura e a temperatura dele) menor ou igual a 50 graus) para o Cloud IoT Core.

A tabela a seguir mostra as principais diferenças entre metadados, configuração e estado do dispositivo:

  Metadados do dispositivo Configuração do dispositivo Estado do dispositivo
Descrição Define e classifica dispositivos
  • Atualiza o estado de um dispositivo enviando o estado esperado como uma configuração.
  • Controla um dispositivo fornecendo comandos em uma configuração.
Captura o estado atual de um dispositivo.
Conteúdo Pares de string de chave-valor Blob de dados arbitrários definido pelo usuário Blob de dados arbitrários definido pelo usuário
Limitações Chaves:
  • Caracteres permitidos: [a-zA-Z][-a-zA-Z0-9._+~%]+
  • primeiro caractere tem que ser uma letra. ([a-zA-Z])
  • Tamanho mínimo: 1 caractere
  • Comprimento máximo: 128 caracteres
Valores:
  • Tamanho mínimo: 0 KB
  • Tamanho máximo: 32 KB

Tamanho total máximo combinado de todos os pares de chave-valor de metadados do dispositivo: 256 KB
  • Tamanho máximo: 64 KB
  • Limitado a 1 QPS por dispositivo
  • Tamanho máximo: 64 KB
  • Limitado a 1 QPS por dispositivo
Casos de uso Armazenar o número de série de um dispositivo e as informações do fabricante como um par de chave-valor;
  • Enviar uma configuração com uma versão de firmware para informar a um dispositivo qual versão de firmware ele deve usar
  • Enviar um comando para um dispositivo
Recuperar a integridade de um dispositivo (como a frequência de falhas)
Direção da mensagem Nenhum Somente Cloud IoT Core para dispositivo Somente dispositivo para Cloud IoT Core
Frequência recomendada No máximo uma vez por dia em cada dispositivo Menos de 0,1 QPS Menos de 0,1 QPS

Alterar o comportamento ou o estado do dispositivo usando dados de configuração

Conforme observado na tabela acima, os principais casos de uso de dados de configuração são os seguintes:

Como enviar o estado desejado como dados de configuração

Os dados de configuração do dispositivo armazenados no Cloud IoT Core podem ser usados para alterar o estado de um dispositivo. Por exemplo, suponha que a configuração de um dispositivo seja representada da seguinte maneira:

DeviceConfig

{
    firmwareVersionRequest: 1.11
}

O cliente MQTT ou HTTP pode interpretar esses dados de configuração como instruções para alterar o estado do dispositivo. Nesse caso, verifique se o dispositivo está na versão 1.11 do firmware. O dispositivo pode enviar o estado para o Cloud IoT Core para mostrar qual versão de firmware tem:

DeviceState

{
    firmwareVersion: 1.11
}

Comandos de modelagem usando dados de estado e configuração

Os dados de configuração do dispositivo armazenados no Cloud IoT Core podem ser usados para modelar comandos de dispositivo. Por exemplo, suponha que a configuração de um dispositivo seja representada da seguinte maneira:

DeviceConfig

{
  rebootRequested: true
}

Seu cliente MQTT ou HTTP pode interpretar esses dados de configuração como instruções para executar ações. Nesse caso, envie um comando de reinicialização. O dispositivo pode exibir os resultados informando o estado dele e mostrando que um segundo se passou desde a última reinicialização:

DeviceState

{
  last_reboot: 1
}

Como estruturar dados de configuração

Os dados de configuração também podem ser mais estruturados e podem incluir detalhes sobre a expiração dos comandos:

DeviceConfig

{
  commands: {
    id1: {
      type: REBOOT
      requestedTimestamp: xxxx
      expirationTimestamp: yyyy
    }
    id2: ...
  }
}

O cliente pode ler esses comandos e atualizar o estado do dispositivo adequadamente, fornecendo um carimbo de data/hora para a reinicialização e, possivelmente, uma mensagem de erro.

DeviceState

{
  commandResults: {
    id1: {
      type: REBOOT
      completedTimestamp: zzzz
      errorMessage: >empty<
    }
    id2: ...
  }
}

Esse modelo pode ser considerado uma relação de comando e resposta entre o cliente e os dispositivos. Se o tempo de expiração for usado, verifique se o relógio do dispositivo está sincronizado.