AWS IoT Serviço Device Shadow - AWS IoT Core

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

AWS IoT Serviço Device Shadow

O serviço AWS IoT Device Shadow adiciona sombras aos objetos AWS IoT físicos. As sombras podem disponibilizar o estado de um dispositivo para aplicativos e outros serviços, independentemente de o dispositivo estar conectado AWS IoT ou não. AWS IoT objetos físicos podem ter várias sombras nomeadas para que sua solução de IoT tenha mais opções para conectar seus dispositivos a outros aplicativos e serviços.

AWS IoT objetos de coisas não têm sombras até serem criados explicitamente. As sombras podem ser criadas, atualizadas e excluídas usando o AWS IoT console. Dispositivos, outros clientes da web e serviços podem criar, atualizar e excluir sombras usando o MQTT e os tópicos MQTT reservados, o HTTP usando a Sombra do Dispositivo API REST, e o AWS CLI para AWS IoT. Como as sombras são armazenadas AWS na nuvem, elas podem coletar e relatar dados de estado do dispositivo de aplicativos e outros serviços em nuvem, independentemente de o dispositivo estar conectado ou não.

Usar shadows

As sombras fornecem um armazenamento de dados confiável para dispositivos, aplicativos e outros serviços na nuvem para compartilhamento de dados. Eles permitem que dispositivos, aplicativos e outros serviços na nuvem se conectem e desconectem sem perder o estado de um dispositivo.

Enquanto dispositivos, aplicativos e outros serviços em nuvem estão conectados AWS IoT, eles podem acessar e controlar o estado atual de um dispositivo por meio de suas sombras. Por exemplo, um aplicativo pode solicitar uma alteração no estado de um dispositivo atualizando uma sombra. AWS IoT publica uma mensagem que indica a alteração no dispositivo. O dispositivo recebe essa mensagem, atualiza seu estado de forma correspondente e publica uma mensagem com o estado atualizado. O serviço Sombra do Dispositivo reflete esse estado atualizado na sombra correspondente. O aplicativo pode se inscrever na atualização da sombra ou consultar a sombra para saber seu estado atual.

Quando um dispositivo fica off-line, um aplicativo ainda pode se comunicar com AWS IoT as sombras do dispositivo. Quando o dispositivo se reconecta, ele recebe o estado atual de suas sombras para que possa atualizar seu estado de forma correspondente a elas, e possa publicar uma mensagem com seu estado atualizado. Da mesma forma, quando o estado do dispositivo muda enquanto ele está offline, o dispositivo mantém a sombra atualizada para que o aplicativo possa consultar as sombras para saber o estado atual quando ele se reconectar.

Se seus dispositivos ficam offline com frequência e você deseja configurá-los para receber mensagens delta após se reconectarem, você pode usar o atributo de sessão persistente. Para obter mais informações sobre o período de expiração da sessão persistente, consulte Período de expiração da sessão persistente.

Optar por usar sombras nomeadas ou sem nome

O serviço Sombra do Dispositivo oferece suporte a sombras nomeadas e sem nome ou clássicas. Um objeto pode ter várias sombras nomeadas e não mais do que uma sombra sem nome. O objeto também pode ter uma sombra nomeada reservada, que opera de forma semelhante a uma sombra nomeada, exceto que você não pode atualizar seu nome. Para obter mais informações, consulte Sombra nomeada reservada.

Um objeto pode ter sombras nomeadas e sem nome ao mesmo tempo. No entanto, a API usada para acessar cada uma é ligeiramente diferente, portanto, talvez seja mais eficiente decidir o tipo de sombra que funcionará melhor para sua solução e usar somente esse tipo. Para obter mais informações sobre a API para acessar as sombras, consulte Tópicos de sombra.

Com sombras nomeadas, você pode criar diferentes visualizações do estado de um objeto. Por exemplo, é possível dividir um objeto com muitas propriedades em sombras com grupos lógicos de propriedades, cada um identificado por seu nome de sombra. Também é possível limitar o acesso às propriedades agrupando-as em diferentes sombras e usando políticas para controlar o acesso. Para obter mais informações sobre políticas a serem usadas com sombras do dispositivos, consulte Ações, recursos e chaves de condição AWS IoT e AWS IoT Core políticas.

As sombras clássicas e sem nome são mais simples, mas um pouco mais limitadas do que as sombras nomeadas. Cada AWS IoT objeto pode ter apenas uma sombra sem nome. Se você espera que sua solução de IoT tenha uma necessidade limitada de dados de sombra, talvez essa seja a maneira como você quer começar a usar sombras. No entanto, se você espera adicionar sombras adicionais no futuro, considere usar sombras nomeadas desde o início.

A indexação de frota oferece suporte a sombras sem nome e sombras com nomes diferentes. Para acessar mais informações, consulte Gerenciar a indexação de frotas.

Acessar sombras

Cada sombra tem um tópico MQTT e um URL HTTP reservados que são compatíveis com as ações get, update e delete na sombra.

As sombras usam documentos JSON de sombra para armazenar e recuperar dados. Um documento de sombra contém uma propriedade de estado que descreve estes aspectos do estado do dispositivo:

  • desired

    Os aplicativos especificam os estados desejados das propriedades do dispositivo atualizando o objeto desired.

  • reported

    Os dispositivos relatam seu estado atual no objeto reported.

  • delta

    AWS IoT relata diferenças entre o estado desejado e o estado relatado no delta objeto.

Os dados armazenados em uma sombra são determinados pela propriedade de estado do corpo da mensagem da ação de atualização. As ações de atualização subsequentes podem modificar os valores de um objeto de dados existente e também adicionar e excluir chaves e outros elementos no objeto de estado da sombra. Para obter mais informações sobre como acessar sombras, consulte Usar sombras em dispositivos e Usar sombras em aplicativos e serviços.

Importante

A permissão para fazer solicitações de atualização deve ser limitada a aplicativos e dispositivos confiáveis. Isso impede que a propriedade de estado da sombra seja alterada inesperadamente. Caso contrário, os dispositivos e aplicativos que usam a sombra devem ser projetados para esperar que as chaves na propriedade de estado sejam alteradas.

Usar sombras em dispositivos, aplicativos e outros serviços na nuvem

O uso de sombras em dispositivos, aplicativos e outros serviços na nuvem requer consistência e coordenação entre todos eles. O serviço AWS IoT Device Shadow armazena o estado de sombra, envia mensagens quando o estado de sombra muda e responde às mensagens que mudam de estado. Os dispositivos, aplicativos e outros serviços na nuvem em sua solução de IoT devem gerenciar seu estado e mantê-lo consistente com o estado da sombra do dispositivo.

Os dados de estado de sombra são dinâmicos e podem ser alterados pelos dispositivos, aplicativos e outros serviços na nuvem com permissão para acessar a sombra. Por esse motivo, é importante considerar como cada dispositivo, aplicativo e outro serviço de nuvem interagirão com a sombra. Por exemplo: .

  • Os dispositivos devem gravar somente na propriedade reported do estado de sombra ao comunicar dados de estado à sombra.

  • Os aplicativos e outros serviços na nuvem devem gravar somente na propriedade desired ao comunicar solicitações de alteração de estado ao dispositivo por meio da sombra.

Importante

Os dados contidos em um objeto de dados de sombra são independentes dos de outras sombras e de outras propriedades de objeto, como os atributos de um objeto e o conteúdo de mensagens MQTT que um dispositivo de objeto pode publicar. Um dispositivo pode, no entanto, relatar os mesmos dados em diferentes tópicos MQTT e sombras, se necessário.

Um dispositivo compatível com várias sombras deve manter a consistência dos dados que ele relata nas diferentes sombras.

Ordem das mensagens

Não há garantia de que as mensagens do AWS IoT serviço chegarão ao dispositivo em qualquer ordem específica. O cenário a seguir mostra o que acontece nesse caso.

Documento de estado inicial:

{ "state": { "reported": { "color": "blue" } }, "version": 9, "timestamp": 123456776 }

Atualização 1:

{ "state": { "desired": { "color": "RED" } }, "version": 10, "timestamp": 123456777 }

Atualização 2:

{ "state": { "desired": { "color": "GREEN" } }, "version": 11, "timestamp": 123456778 }

Documento de estado final:

{ "state": { "reported": { "color": "GREEN" } }, "version": 12, "timestamp": 123456779 }

Isso resulta em duas mensagens delta:

{ "state": { "color": "RED" }, "version": 11, "timestamp": 123456778 }
{ "state": { "color": "GREEN" }, "version": 12, "timestamp": 123456779 }

O dispositivo pode receber essas mensagens fora de ordem. Como o estado nessas mensagens é cumulativo, um dispositivo pode descartar com segurança as mensagens que contêm um número da versão anterior ao que ele está rastreando. Se o dispositivo receber o delta para a versão 12 antes da versão 11, pele poderá descartar a mensagem da versão 11 com segurança.

Reduzir mensagens de shadow

Para reduzir o tamanho das mensagens de shadow enviadas para o dispositivo, defina uma regra que selecione apenas os campos de que o dispositivo precisa e, em seguida, publique novamente a mensagem em um tópico MQTT que o dispositivo esteja escutando.

A regra é especificada no JSON e deve ser semelhante ao seguinte:

{ "sql": "SELECT state, version FROM '$aws/things/+/shadow/update/delta'", "ruleDisabled": false, "actions": [ { "republish": { "topic": "${topic(3)}/delta", "roleArn": "arn:aws:iam:123456789012:role/my-iot-role" } } ] }

A declaração de SELECT determina quais campos da mensagem serão publicados novamente no tópico especificado. Um caractere curinga "+" é usado para corresponder a todos os nomes de shadow. A regra especifica que todas as mensagens correspondentes devem ser publicadas novamente no tópico especificado. Nesse caso, a função "topic()" é usada para especificar o tópico no qual a publicação deverá ser refeita. O topic(3) avalia o nome do objeto no tópico original. Para obter mais informações sobre como criar regras, consulte Regras para AWS IoT.