Com o Cloud IoT Core, é possível monitorar o estado de cada dispositivo conectado. O estado é relatado pelo dispositivo como dados binários. As atualizações de estado do dispositivo geralmente são acionadas por uma alteração no dispositivo, seja uma atualização de configuração do Cloud IoT Core ou uma alteração semelhante de outra fonte externa, como uma atualização de firmware.
O estado do dispositivo é diferente da configuração do dispositivo. 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 e com o estado como uma representação interna.
O Cloud IoT Core pode ajudar você a responder perguntas básicas sobre configuração e estado: o que o dispositivo atualmente "pensa" que ele deveria fazer? Como isso se compara à configuração mais recente do dispositivo?
Limites
As atualizações de estado são limitadas a uma atualização por segundo, por dispositivo. No entanto, para melhores resultados, o estado do dispositivo deve ser atualizado com muito menos frequência, no máximo, uma vez a cada 10 segundos.
A taxa de atualização é calculada como o tempo entre a confirmação mais recente do servidor e a próxima solicitação de atualização.
Relatar o estado do dispositivo
Ponte MQTT
Para informar o estado ao Cloud IoT Core usando a ponte MQTT, publique mensagens no tópico /devices/DEVICE_ID/state
do MQTT. Selecione um tópico do Cloud Pub/Sub para armazenar eventos de estado ao criar ou atualizar um registro.
Para mais detalhes, consulte Como publicar pela ponte MQTT.
Ponte HTTP
Para informar o estado ao Cloud IoT Core usando a ponte HTTP, os dispositivos devem usar uma solicitação setState
. Os dados de estado binário são transmitidos no corpo da solicitação como uma string codificada em base64.
Para mais detalhes, consulte Como publicar pela ponte HTTP.
Como receber dados de estado do dispositivo
Nesta seção, explicamos como receber os dados de estado que são informados ao Cloud IoT Core por dispositivos. Os dispositivos não podem ler dados de estado da nuvem.
Os dados de estado são retornados no formato binário. Os dados de estado podem ter uma estrutura diferente dos dados de configuração que acionam a mudança de estado.
Por exemplo, suponha que você tenha um dispositivo com diversos fãs. Os dados de configuração podem ser um objeto JSON contendo um booleano simples que ativa ou desativa o resfriamento:
Exemplo de dados de configuração
{
'cooling': true
}
Mas os dados de estado do dispositivo podem incluir informações de diagnóstico, além dos dados de ventilador que você espera ver em resposta a uma mudança de 'cooling'
:
Exemplo de dados de estado
{
'fan1_target_rpm': 1000,
'fan2_target_rpm': 1200,
'firmware_version': '1.2.3b'
}
A firmware_version
do dispositivo não está relacionada aos dados de configuração, mas o dispositivo retorna a representação interna completa do estado dele. Este exemplo ilustra como o estado do dispositivo pode ser útil para depuração em geral, bem como para confirmar que os dispositivos confirmaram configurações específicas.
É possível receber dados de estado do dispositivo usando um tópico do Cloud Pub/Sub, o Console do Cloud Platform, a API Cloud IoT Core ou o gcloud.
Tópico do Cloud Pub/Sub
O Cloud IoT Core mantém os dados de estado no armazenamento. Também é possível configurar um tópico opcional do Cloud Pub/Sub para notificação de estado em cada registro de dispositivo, pelo Console do Cloud, gcloud ou API. Este tópico pode ser igual ou diferente do tópico do evento de telemetria.
Os dados de estado são publicados no Cloud Pub/Sub com base no melhor esforço: se a publicação no tópico falhar, ela não será repetida. Se nenhum tópico for definido, as atualizações de estado do dispositivo serão mantidas internamente pelo Cloud IoT Core, mas somente os últimos 10 estados serão mantidos.
Console
- Acesse a página Registros no Console do Google Cloud.
Clique no ID do registro do dispositivo.
No menu de registro à esquerda, clique em Dispositivos.
Clique no código do dispositivo para acessar a página Detalhes do dispositivo.
Clique em Histórico de configuração e de estado. Use as caixas de seleção para exibir o histórico de configuração, o estado ou os dois. Por padrão, ambos são mostrados.
- Uma marca de seleção verde indica que o dispositivo confirmou a configuração (somente MQTT).
- Um símbolo de aviso amarelo indica que o dispositivo ainda não reconheceu a configuração (somente MQTT).
- Clique em uma linha para ver os dados completos de configuração ou estado no JSON, além do carimbo de data/hora e da versão.
Clique em Comparar para comparar os dados de configuração com os dados de estado. Essa visualização pode ajudar você a depurar as configurações. Se você estiver usando MQTT, confirme se os dispositivos confirmaram versões de configuração específicas. A ponte HTTP não é compatível com a confirmação de configurações.
gcloud
Para ver as mensagens de estado mais recentes de um dispositivo (até 10), execute o comando gcloud iot devices states list
.
gcloud iot devices states list \ --registry=REGISTRY_ID \ --device=DEVICE_ID \ --region=REGION
Uma sinalização de estado do Cloud Pub/Sub (--state-pubsub-topic
) está disponível para os comandos gcloud iot registries create
e update
:
gcloud iot registries create REGISTRY_ID \ --project=PROJECT_ID \ --region=REGION \ [--event-notification-config=topic=TOPIC,[subfolder=SUBFOLDER] [--event-notification-config=...]] [--state-pubsub-topic=STATE_PUBSUB_TOPIC]
gcloud iot registries update REGISTRY_ID \ --project=PROJECT_ID \ --region=REGION \ [--event-notification-config=topic=TOPIC,[subfolder=SUBFOLDER] [--event-notification-config=...]] [--state-pubsub-topic=STATE_PUBSUB_TOPIC]
API
Use o método states.list
do dispositivo para ver os estados mais recentes deles (até 10). Cada recurso Device
tem um campo DeviceState
que contém o estado recebido mais recentemente do dispositivo. O recurso DeviceRegistry
tem um campo StateNotificationConfig
que pode ser usado para especificar um tópico de notificação de estado do Cloud Pub/Sub ao criar ou atualizar um registro.
O exemplo a seguir mostra como recuperar o estado do dispositivo de um registro de dispositivo: