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
Como configurar o ambiente de simulação
-
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.
-
Abra o AWS IoT console
e, no menu à esquerda, escolha Testar para abrir o MQTTcliente. -
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:
-
Escolha Gerenciar e em seguida, Objetos.
-
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.
-
Insira o nome
mySimulatedThing
, deixe outras configurações como padrão e clique em Próximo. -
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.
-
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:
-
No AWS IoT Console, escolha seu objeto na lista de itens exibidos e, em seguida, escolha Sombras.
-
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
-
No MQTTcliente, escolha Inscrever-se em um tópico.
-
Insira os tópicos
get
,update
edelete
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
-
No MQTTcliente, escolha Publicar em um tópico.
-
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 ocode
é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
-
No MQTTcliente, escolha Publicar em um tópico e insira este tópico:
$aws/things/mySimulatedThing/shadow/name/simShadow1/update
-
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.
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
-
No MQTTcliente, escolha Publicar em um tópico.
-
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
-
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 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.