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 aplicativos e serviços
Esta seção descreve como um aplicativo ou serviço interage com o serviço AWS IoT Device Shadow. Este exemplo pressupõe que o aplicativo ou serviço esteja interagindo apenas com a sombra e, por meio da sombra, com o dispositivo. Este exemplo não inclui nenhuma ação de gerenciamento, como criação ou exclusão de sombras.
Este exemplo usa o serviço AWS IoT Device Shadow REST API para interagir com sombras. Ao contrário do exemplo usado emUsar sombras em dispositivos, que usa um modelo de publish/subscribe communications model, this example uses the request/response comunicação do RESTAPI. Isso significa que o aplicativo ou serviço deve fazer uma solicitação antes de receber uma resposta de AWS IoT. Uma desvantagem deste modelo, no entanto, é que ele não é compatível com notificações. Se seu aplicativo ou serviço exigir notificações oportunas sobre mudanças no estado do dispositivo, considere WSS os protocolos MQTT ou MQTT mais, que oferecem suporte ao modelo de comunicação de publicação/assinatura, conforme descrito em. Usar sombras em dispositivos
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. Considere, por exemplo, como as sombras são criadas, atualizadas e excluídas e como as atualizações são processadas no dispositivo e nos aplicativos ou serviços que acessam a sombra. Seu design deve especificar claramente como o estado do dispositivo é atualizado e relatado, e como seus aplicativos e serviços interagem com o dispositivo e suas sombras.
O REST API valor URL de uma sombra nomeada é:
https://
endpoint
/things/thingName
/shadow?name=shadowName
e para uma sombra sem nome:
https://
endpoint
/things/thingName
/shadow
em que:
- endpoint
-
O endpoint retornado pelo CLI comando:
aws iot describe-endpoint --endpoint-type IOT:Data-ATS
- thingName
-
O nome do objeto do objeto ao qual a sombra pertence
- shadowName
-
O nome da sombra nomeada. Esse parâmetro não é usado com sombras sem nome.
Inicializando o aplicativo ou serviço em conexão com AWS IoT
Quando o aplicativo se conecta pela primeira vez AWS IoT, ele deve enviar uma HTTP GET solicitação às URLs sombras que usa para obter o estado atual das sombras que está usando. Isso permite que ele sincronize o aplicativo ou serviço com a sombra.
O estado de processamento muda enquanto o aplicativo ou serviço está conectado ao AWS IoT
Enquanto o aplicativo ou serviço está conectado AWS IoT, ele pode consultar o estado atual periodicamente enviando uma HTTP GET solicitação sobre URLs as sombras que usa.
Quando um usuário final interage com o aplicativo ou serviço para alterar o estado do dispositivo, o aplicativo ou serviço pode enviar uma HTTP POST solicitação às URLs sombras que ele usa para atualizar o desired
estado da sombra. Essa solicitação retorna a alteração que foi aceita, mas talvez você precise pesquisar a sombra fazendo HTTP GET solicitações até que o dispositivo atualize a sombra com seu novo estado.
Detectar se um dispositivo está conectado
Para determinar se um dispositivo está conectado atualmente, inclua uma connected
propriedade no documento paralelo e use uma mensagem MQTT Last Will and Testament (LWT) para definir a connected
propriedade como false
se um dispositivo for desconectado devido a um erro.
nota
MQTTLWTmensagens enviadas para tópicos AWS IoT reservados (tópicos que começam com $) são ignoradas pelo serviço AWS IoT Device Shadow. No entanto, elas são processadas por clientes inscritos e pelo mecanismo de AWS IoT regras. Portanto, você precisará criar uma LWT mensagem que seja enviada para um tópico não reservado e uma regra que republique a MQTT LWT mensagem como uma mensagem de atualização paralela no tópico de atualização reservado da sombra,. ShadowTopicPrefix
/update
Para enviar uma LWT mensagem ao serviço Device Shadow
-
Crie uma regra que republique a MQTT LWT mensagem no tópico reservado. O exemplo a seguir é uma regra que escuta mensagens sobre o tópico
my/things/myLightBulb/update
e republica-a no$aws/things/myLightBulb/shadow/update
.{ "rule": { "ruleDisabled": false, "sql": "SELECT * FROM 'my/things/myLightBulb/update'", "description": "Turn my/things/ into $aws/things/", "actions": [ { "republish": { "topic": "$$aws/things/myLightBulb/shadow/update", "roleArn": "arn:aws:iam:123456789012:role/aws_iot_republish" } } ] } }
-
Quando o dispositivo se conecta AWS IoT, ele registra uma LWT mensagem em um tópico não reservado para que a regra de republicação reconheça. Neste exemplo, esse tópico é
my/things/myLightBulb/update
e define a propriedade conectada comofalse
.{ "state": { "reported": { "connected":"false" } } }
-
Após a conexão, o dispositivo publica uma mensagem em seu tópico de atualização de sombra,
$aws/things/myLightBulb/shadow/update
, para relatar seu estado atual, o que inclui a configuração de sua propriedadeconnected
comotrue
.{ "state": { "reported": { "connected":"true" } } }
-
Antes de desconectar-se corretamente, o dispositivo publica uma mensagem em seu tópico de atualização de sombra,
$aws/things/myLightBulb/shadow/update
, para relatar seu estado mais recente, que inclui a configuração de sua propriedadeconnected
comofalse
.{ "state": { "reported": { "connected":"false" } } }
-
Se o dispositivo se desconectar devido a um erro, o agente de AWS IoT mensagens publicará a LWT mensagem do dispositivo em nome do dispositivo. A regra de republicação detecta essa mensagem e publica a mensagem de atualização de sombra para atualizar a
connected
propriedade da sombra do dispositivo.