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á.
Usar sombras em dispositivos
Esta seção descreve as comunicações de dispositivos com sombras usando mensagens MQTT, o método preferido para dispositivos se comunicarem com o serviço AWS IoT Device Shadow.
As comunicações de sombra emulam um modelo de solicitação/resposta usando o modelo de comunicação de publicação/assinatura do MQTT. Cada ação de sombra consiste em um tópico de solicitação, um tópico de resposta bem-sucedido (accepted
) e um tópico de resposta de erro (rejected
).
Para que os aplicativos e serviços possam determinar se um dispositivo está conectado, consulte Detectar se um dispositivo está conectado.
Importante
Como o MQTT usa um modelo de comunicação de publicação/assinatura, você pode assinar os tópicos de resposta antes de você publicar um tópico de solicitação. Caso contrário, você não deve receber a resposta à solicitação que publicar.
Se você usar um AWS IoT Device SDK para chamar as APIs do serviço Sombra do Dispositivo, isso será feito para você.
Os exemplos desta seção usam uma forma abreviada do tópico em que ShadowTopicPrefix
podem se referir a uma sombra nomeada ou não nomeada, conforme descrito nesta tabela.
As sombras podem ser nomeadas ou sem nome (clássica). Os tópicos usados por cada uma diferem apenas no prefixo do tópico. Esta tabela mostra o prefixo do tópico usado em cada tipo de sombra.
ShadowTopicPrefix value |
Tipo de sombra |
---|---|
$aws/things/ |
Sombra sem nome (clássica) |
$aws/things/ |
Sombra nomeada |
Importante
Verifique se o uso de sombras por seu aplicativo ou serviço é consistente e compatível com as implementações correspondentes em seus dispositivos. Por exemplo, considere como as sombras são criadas, atualizadas e excluídas. Considere também como as atualizações são processadas no dispositivo e nos aplicativos ou serviços que acessam o dispositivo por meio de uma sombra. Seu design deve ser claro sobre como o estado do dispositivo é atualizado e relatado e como seus aplicativos e serviços interagem com o dispositivo e suas sombras.
Para criar um tópico completo, selecione o
do tipo de sombra ao qual você quer fazer referência, substitua ShadowTopicPrefix
, e thingName
, se aplicável, por seus valores correspondentes e acrescente isso ao stub de tópico, conforme mostrado na seguinte tabela. Lembre-se de que os tópicos diferenciam maiúsculas de minúsculas.shadowName
Consulte Tópicos de sombra para obter mais informações sobre os tópicos reservados para sombras.
Inicializando o dispositivo na primeira conexão com AWS IoT
Depois que um dispositivo se registra AWS IoT, ele deve assinar essas mensagens MQTT para as sombras que ele suporta.
Tópico | Significado | Ação que um dispositivo deve executar quando este tópico é recebido |
---|---|---|
|
A |
As ações necessárias para acomodar a sombra excluída, como interromper a publicação de atualizações. |
|
A |
Responda à mensagem de erro no corpo da mensagem. |
|
A |
As ações necessárias para processar o documento de estado no corpo da mensagem. |
|
A |
Responda à mensagem de erro no corpo da mensagem. |
|
A |
Confirme se os dados atualizados no corpo da mensagem correspondem ao estado do dispositivo. |
|
A |
Responda à mensagem de erro no corpo da mensagem. |
|
O documento paralelo foi atualizado por meio de uma solicitação para AWS IoT, e o corpo da mensagem contém as alterações solicitadas. |
Atualize o estado do dispositivo para que corresponda ao estado desejado no corpo da mensagem. |
|
Uma atualização na sombra foi concluída recentemente e o corpo da mensagem contém o documento de sombra atual. |
Confirme se o estado atualizado no corpo da mensagem corresponde ao estado do dispositivo. |
Depois de assinar as mensagens na tabela anterior para cada sombra, o dispositivo deve testar para ver se as sombras às quais oferece suporte já foram criadas pela publicação de um tópico /get
para cada sombra. Se uma mensagem /get/accepted
for recebida, o corpo da mensagem conterá o documento de sombra que o dispositivo pode usar para inicializar seu estado. Se uma mensagem /get/rejected
for recebida, a sombra deverá ser criada publicando uma mensagem /update
com o estado do dispositivo atual.
Por exemplo, suponha que você tenha uma My_IoT_Thing
objeto que não tenha sombras clássicas ou nomeadas. Se você publicar agora uma solicitação /get
no tópico $aws/things/My_IoT_Thing/shadow/get
reservado, será retornado um erro no tópico $aws/things/My_IoT_Thing/shadow/get/rejected
porque o objeto não tem sombras. Para resolver esse erro, primeiro publique uma mensagem /update
usando o tópico $aws/things/My_IoT_Thing/shadow/update
com o estado atual do dispositivo, como a carga útil a seguir.
{ "state": { "reported": { "welcome": "aws-iot", "color": "yellow" } } }
Uma sombra clássica agora é criada para o objeto e a mensagem é publicada no tópico $aws/things/My_IoT_Thing/shadow/update/accepted
. Se você publicar no tópico $aws/things/My_IoT_Thing/shadow/get
, ele retornará uma resposta ao tópico $aws/things/My_IoT_Thing/shadow/get/accepted
com o estado do dispositivo.
Para sombras nomeadas, você deve primeiro criar a sombra nomeada ou publicar uma atualização com o nome da sombra antes de usar a solicitação get. Por exemplo, para criar uma sombra nomeada namedShadow1
, primeiro publique as informações do estado do dispositivo no tópico $aws/things/My_IoT_Thing/shadow/name/namedShadow1/update
. Para recuperar as informações do estado, use a solicitação /get
para a sombra nomeada, $aws/things/My_IoT_Thing/shadow/name/namedShadow1/get
.
Processando mensagens enquanto o dispositivo está conectado ao AWS IoT
Enquanto um dispositivo está conectado AWS IoT, ele pode receber mensagens /update/delta e deve manter o estado do dispositivo compatível com as mudanças em suas sombras da seguinte forma:
-
Lendo todas as mensagens /update/delta recebidas e sincronizando o estado do dispositivo para que corresponda.
-
Publicando uma mensagem /update com um corpo de mensagem
reported
que tenha o estado atual do dispositivo, sempre que o estado do dispositivo for alterado.
Enquanto um dispositivo está conectado, ele deve publicar essas mensagens quando indicado.
Indicação | Tópico | Carga útil |
---|---|---|
O estado do dispositivo foi alterado. |
|
Um documento de sombra com a propriedade |
O dispositivo pode não estar sincronizado com a sombra. |
|
(empty) |
Uma ação no dispositivo indica que uma sombra não será mais compatível com o dispositivo, como quando o dispositivo é removido ou substituído. |
|
(empty) |
Processando mensagens quando o dispositivo se reconecta ao AWS IoT
Quando um dispositivo com uma ou mais sombras se conecta AWS IoT, ele deve sincronizar seu estado com o de todas as sombras que ele suporta por meio de:
-
Lendo todas as mensagens /update/delta recebidas e sincronizando o estado do dispositivo para que corresponda.
-
Publicando uma mensagem /update com um corpo de mensagem
reported
que tenha o estado atual do dispositivo.