Simulando comunicações de serviço Sombra do Dispositivo - 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á.

Simulando comunicações de serviço Sombra do Dispositivo

Este tópico demonstra como o serviço Sombra do Dispositivo atua como intermediário e permite que dispositivos e aplicativos usem uma sombra para atualizar, armazenar e recuperar o estado de um dispositivo.

Para demonstrar a interação descrita neste tópico e explorá-la mais detalhadamente, você precisará de um Conta da AWS e um sistema no qual possa executar AWS CLI o. Se não os tiver, você ainda poderá ver a interação nos exemplos de código.

Neste exemplo, o AWS IoT console representa o dispositivo. O AWS CLI representa o aplicativo ou serviço que acessa o dispositivo por meio da sombra. A AWS CLI interface é muito semelhante à API que um aplicativo pode usar para se comunicar AWS IoT. O dispositivo neste exemplo é uma lâmpada inteligente, e o aplicativo exibe o estado da lâmpada e pode alterá-lo.

Configurar a simulação

Estes procedimentos inicializam a simulação abrindo o Console do AWS IoT, que simula o dispositivo, e a janela da linha de comando que simula o aplicativo.

Como configurar o ambiente de simulação
  1. Você precisará Conta da AWS executar os exemplos deste tópico sozinho. Se você não tiver um Conta da AWS, crie um, conforme descrito emConfigurar Conta da AWS.

  2. Abra o AWS IoT console e, no menu à esquerda, escolha Testar para abrir o MQTTcliente.

  3. Em outra janela, abra uma janela de terminal em um sistema que tenha a AWS CLI instalada.

Você deve ter duas janelas abertas: uma com o AWS IoT console na página de teste e outra com um prompt de linha de comando.

Inicializar o dispositivo

Nesta simulação, trabalharemos com um objeto chamado, mySimulatedThing, e sua sombra chamada simShadow1.

Criar objeto e sua política de IoT

Para criar um objeto, no AWS IoT Console:

  1. Escolha Gerenciar e em seguida, Objetos.

  2. Clique no botão Criar se as coisas estiverem listadas, caso contrário, clique em Registrar uma única coisa para criar uma única AWS IoT coisa.

  3. Insira o nome mySimulatedThing, deixe outras configurações como padrão e clique em Próximo.

  4. Use a criação de certificado com um clique para gerar os certificados que autenticarão a conexão do dispositivo com o AWS IoT. Clique em Ativar para ativar o certificado.

  5. Você pode anexar a política My_IoT_Policy que daria permissão ao dispositivo para publicar e assinar os tópicos MQTT reservados. Para obter etapas mais detalhadas sobre como criar AWS IoT algo e como criar essa política, consulteCriar um objeto.

Crie uma sombra nomeada para o objeto-objeto

Você pode criar uma sombra nomeada para algo publicando uma solicitação de atualização no tópico $aws/things/mySimulatedThing/shadow/name/simShadow1/update conforme descrito abaixo.

Ou, para criar uma sombra nomeada:

  1. No AWS IoT Console, escolha seu objeto na lista de itens exibidos e, em seguida, escolha Sombras.

  2. Escolha Adicionar uma sombra, insira o nome simShadow1 e escolha Criar para adicionar a sombra nomeada.

Assine e publique em MQTT tópicos reservados

No console, assine os tópicos MQTT paralelos reservados. Esses tópicos são as respostas às ações get, update e delete para que seu dispositivo esteja pronto para receber as respostas depois de publicar uma ação.

Para se inscrever em um MQTT tópico no MQTTcliente
  1. No MQTTcliente, escolha Inscrever-se em um tópico.

  2. Insira os tópicos get, update e delete para se inscrever. Copie um tópico por vez da lista a seguir, cole-o no campo Filtro de tópico e clique em Inscrever. Você deverá ver os tópicos aparecerem em Inscrições.

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/delete/accepted

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/delete/rejected

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/delta

    • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/documents

    Neste ponto, seu dispositivo simulado está pronto para receber os tópicos conforme são publicados pelo AWS IoT.

Para publicar em um MQTT tópico no MQTTcliente

Depois que um dispositivo se inicializar e assinar tópicos de resposta, ele deve consultar as sombras compatíveis. Essa simulação suporta apenas uma sombra, a sombra que suporta um objeto chamado, mySimulatedThing, chamado, simShadow1.

Para obter o estado atual da sombra do MQTTcliente
  1. No MQTTcliente, escolha Publicar em um tópico.

  2. Em Publicar, insira o seguinte tópico e exclua qualquer conteúdo da janela do corpo da mensagem abaixo de onde você inseriu o tópico para obter. Em seguida, você pode escolher Publicar no tópico para publicar a solicitação. $aws/things/mySimulatedThing/shadow/name/simShadow1/get.

    Se você não criou a sombra nomeada, simShadow1, você receberá uma mensagem no tópico $aws/things/mySimulatedThing/shadow/name/simShadow1/get/rejected e o code é 404, como neste exemplo, a sombra não terá sido criada, portanto, vamos criá-la a seguir.

    { "code": 404, "message": "No shadow exists with name: 'simShadow1'" }
Como criar uma sombra com o status atual do dispositivo
  1. No MQTTcliente, escolha Publicar em um tópico e insira este tópico:

    $aws/things/mySimulatedThing/shadow/name/simShadow1/update
  2. Na janela do corpo da mensagem abaixo de onde você inseriu o tópico, insira esse documento-sombra para mostrar que o dispositivo está relatando sua ID e sua cor atual em RGB valores. Escolha Publicar para publicar a solicitação.

    { "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }

Se você receber uma mensagem no tópico:

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/accepted: a sombra foi criada e o corpo da mensagem contém o documento de sombra atual.

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/update/rejected: revise o erro no corpo da mensagem.

  • $aws/things/mySimulatedThing/shadow/name/simShadow1/get/accepted: a sombra já existirá e o corpo da mensagem terá o estado da sombra atual, como neste exemplo. Com isso, você pode definir seu dispositivo ou confirmar que ele corresponde ao estado da sombra.

    { "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 3, "timestamp": 1591140517, "clientToken": "426bfd96-e720-46d3-95cd-014e3ef12bb6" }

Enviar uma atualização do aplicativo

Esta seção usa o AWS CLI para demonstrar como um aplicativo pode interagir com uma sombra.

Para obter o estado atual da sombra usando o AWS CLI

Na linha de comando, insira este comando.

aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout

Nas plataformas Windows, você pode usar con ao invés de /dev/stdout.

aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con

Como a sombra existe e foi inicializada pelo dispositivo para refletir seu estado atual, ela deve retornar o seguinte documento de sombra.

{ "state": { "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 3, "timestamp": 1591141111 }

O aplicativo pode usar essa resposta para inicializar sua representação do estado do dispositivo.

Se o aplicativo atualizar o estado, como quando um usuário final altera a cor da nossa lâmpada inteligente para amarelo, o aplicativo enviará um comando update-thing-shadow. Esse comando corresponde ao UpdateThingShadow RESTAPI.

Como atualizar uma sombra de um aplicativo

Na linha de comando, insira este comando.

AWS CLI v2.x
aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \ --cli-binary-format raw-in-base64-out \ --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout
AWS CLI v1.x
aws iot-data update-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 \ --payload '{"state":{"desired":{"ColorRGB":[255,255,0]}},"clientToken":"21b21b21-bfd2-4279-8c65-e2f697ff4fab"}' /dev/stdout

Se for bem-sucedido, esse comando deverá retornar o seguinte documento de sombra.

{ "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] } }, "version": 4, "timestamp": 1591141596, "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab" }

Responder à atualização no dispositivo

Retornando ao MQTTcliente no AWS console, você deve ver as mensagens AWS IoT publicadas para refletir o comando de atualização emitido na seção anterior.

Para visualizar as mensagens de atualização no MQTTcliente

No MQTTcliente, escolha $aws/things/ mySimulatedThing /shadow/name/ 1/update/delta na coluna simShadow Assinaturas. Se o nome do tópico estiver truncado, você poderá pausar nele para ver o tópico completo. No log do tópico deste tópico, você deverá ver uma mensagem /delta semelhante a esta.

{ "version": 4, "timestamp": 1591141596, "state": { "ColorRGB": [ 255, 255, 0 ] }, "metadata": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "clientToken": "21b21b21-bfd2-4279-8c65-e2f697ff4fab" }

Seu dispositivo processará o conteúdo desta mensagem para definir o estado do dispositivo para que corresponda ao estado desired na mensagem.

Depois que o dispositivo atualizar o estado para corresponder ao desired estado na mensagem, ele deverá enviar o novo estado relatado de volta AWS IoT publicando uma mensagem de atualização. Esse procedimento simula isso no MQTTcliente.

Como atualizar a sombra no dispositivo
  1. No MQTTcliente, escolha Publicar em um tópico.

  2. Na janela do corpo da mensagem, no campo de tópico acima da janela do corpo da mensagem, insira o tópico do shadow seguido da ação /update: $aws/things/mySimulatedThing/shadow/name/simShadow1/update e no corpo da mensagem, insira este documento shadow atualizado, que descreve o estado atual do dispositivo. Clique em Publicar para publicar o estado atualizado do dispositivo.

    { "state": { "reported": { "ColorRGB": [255,255,0] } }, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

    Se a mensagem foi recebida com sucesso por AWS IoT, você deverá ver uma nova resposta no registro de mensagens $aws/things/ mySimulatedThing /shadow/name/ simShadow 1/update/accepted no cliente com o estado atual da sombra, como neste exemplo. MQTT

    { "state": { "reported": { "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "reported": { "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5, "timestamp": 1591142747, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

Uma atualização bem-sucedida do estado relatado do dispositivo também faz AWS IoT com que uma descrição abrangente do estado de sombra em uma mensagem seja enviada ao tópico, como o corpo da mensagem resultante da atualização paralela realizada pelo dispositivo no procedimento anterior.

{ "previous": { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 128, 128, 128 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591140517 }, { "timestamp": 1591140517 }, { "timestamp": 1591140517 } ] } }, "version": 4 }, "current": { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5 }, "timestamp": 1591142747, "clientToken": "a4dc2227-9213-4c6a-a6a5-053304f60258" }

Observar a atualização no aplicativo

O aplicativo agora pode consultar o estado atual da sombra conforme relatado pelo dispositivo.

Para obter o estado atual da sombra usando o AWS CLI
  1. Na linha de comando, insira este comando.

    aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 /dev/stdout

    Nas plataformas Windows, você pode usar con ao invés de /dev/stdout.

    aws iot-data get-thing-shadow --thing-name mySimulatedThing --shadow-name simShadow1 con
  2. Como a sombra acaba de ser atualizada pelo dispositivo para refletir seu estado atual, ele deve retornar o seguinte documento de sombra.

    { "state": { "desired": { "ColorRGB": [ 255, 255, 0 ] }, "reported": { "ID": "SmartLamp21", "ColorRGB": [ 255, 255, 0 ] } }, "metadata": { "desired": { "ColorRGB": [ { "timestamp": 1591141596 }, { "timestamp": 1591141596 }, { "timestamp": 1591141596 } ] }, "reported": { "ID": { "timestamp": 1591140517 }, "ColorRGB": [ { "timestamp": 1591142747 }, { "timestamp": 1591142747 }, { "timestamp": 1591142747 } ] } }, "version": 5, "timestamp": 1591143269 }

Além da simulação

Experimente a interação entre a AWS CLI (representando o aplicativo) e o console (representando o dispositivo) para modelar sua solução de IoT.