View a markdown version of this page

Implemente a AWS.SendCommand operação - Integrações gerenciadas para AWS IoT Device Management

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á.

Implemente a AWS.SendCommand operação

A AWS.SendCommand operação permite que as integrações gerenciadas enviem comandos iniciados pelo usuário final por meio do AWS cliente para seu servidor de recursos. AWS IoT Device Management Seu servidor de recursos pode oferecer suporte a vários tipos de dispositivos, onde cada tipo tem seu próprio modelo de resposta.

A execução de comandos é um processo assíncrono em que o Managed Integrations for AWS IoT Device Management envia uma solicitação de execução de comando com umtraceId, que seu conector incluirá em uma resposta de comando enviada de volta às Integrações Gerenciadas por meio da API. AWS IoT Device Management SendConnectorEvent O Managed Integrations for AWS IoT Device Management espera que o servidor de recursos retorne uma resposta confirmando que o comando foi recebido, mas não necessariamente indicando que o comando foi executado.

Fluxo de trabalho de execução de comandos do

O diagrama a seguir ilustra o fluxo de execução do comando com um exemplo em que o usuário final tenta acender as luzes de sua casa:

Fluxo de trabalho de execução de comandos do
Etapas do fluxo de trabalho
  1. O usuário final envia um comando - Um usuário final envia um comando para acender uma luz usando o aplicativo do AWS cliente.

  2. O cliente retransmite o comando - O cliente retransmite as informações do comando para as integrações gerenciadas AWS IoT Device Management com as informações do dispositivo do usuário final.

  3. As integrações gerenciadas geram TraceID - Integrações gerenciadas AWS IoT Device Management para gerar o “TraceID” que seu conector usará ao enviar as respostas dos comandos de volta ao serviço.

  4. Solicitação de comando enviada ao conector - Integrações gerenciadas para AWS IoT Device Management enviar a solicitação de comando ao seu conector, usando a interface de AWS.SendCommand operação.

    • A carga útil definida por essa interface consiste no identificador do dispositivo, nos comandos do dispositivo formulados como Matter endpoints/clusters /commands, no token de acesso do usuário final e em outros parâmetros necessários.

  5. O conector armazena o TraceID - Seu conector armazena traceId o que será incluído na resposta do comando.

    • Seu conector traduz as integrações gerenciadas para solicitação de AWS IoT Device Management comando no formato apropriado do seu servidor de recursos.

  6. O conector obtém UserId - Seu conector UserId obtém o token de acesso do usuário final fornecido e o associa ao comando.

    • Eles UserId podem ser recuperados do seu servidor de recursos usando uma chamada separada ou extraídos do token de acesso no caso de JWT e tokens similares.

    • A implementação depende dos detalhes do servidor de recursos e do token de acesso.

  7. O conector chama o servidor de recursos - Seu conector chama o servidor de recursos para “Ligar” a luz do usuário final.

  8. O servidor de recursos interage com o dispositivo - O servidor de recursos interage com o dispositivo.

    • O conector retransmite às integrações gerenciadas para AWS IoT Device Management que o servidor de recursos tenha entregue o comando, respondendo com um ACK como resposta inicial e síncrona do comando.

    • Integrações gerenciadas para AWS IoT Device Management , em seguida, retransmiti-las ao aplicativo do cliente.

  9. O dispositivo executa o comando - Depois que o dispositivo acende a luz, esse evento do dispositivo é capturado pelo seu servidor de recursos.

  10. O servidor de recursos envia o evento do dispositivo - Seu servidor de recursos envia o evento do dispositivo para o conector.

  11. O conector transforma o evento - Seu conector transforma o evento do dispositivo gerado pelo servidor de recursos em integrações gerenciadas para o tipo de operação do evento AWS IoT Device Management DEVICE_COMMAND_RESPONSE.

  12. Chamadas de conector SendConnectorEvent - Seu conector chama a SendConnectorEvent API com operação como “DEVICE_COMMAND_RESPONSE”.

    • Ele anexa o traceId fornecido pelas Integrações Gerenciadas AWS IoT Device Management na solicitação inicial.

  13. Integrações gerenciadas notificam o cliente - Integrações gerenciadas para AWS IoT Device Management notificar o cliente sobre a mudança no estado do dispositivo do usuário final.

  14. O cliente notifica o usuário final - O cliente notifica o usuário final de que a luz do dispositivo está acesa.

nota

A configuração do servidor de recursos determina a lógica para lidar com mensagens de resposta e solicitação de comando do dispositivo com falha. Isso inclui tentativas de repetição de mensagens usando o mesmo ID de referência para o comando.

Requisitos do conector C2C para execução de comandos de dispositivos

A lista a seguir descreve os requisitos do conector C2C para facilitar a execução bem-sucedida do comando do dispositivo.

  • O conector C2C Lambda pode processar mensagens de solicitação de AWS.SendCommand operação de integrações gerenciadas para o AWS IoT Device Management.

  • Seu conector C2C deve acompanhar os comandos enviados ao seu servidor de recursos e mapeá-los com o `traceID` apropriado.

  • Você pode chamar integrações gerenciadas para as APIs do serviço AWS IoT Device Management via SigV4 AWS usando as credenciais usadas para registrar o conector Conta da AWS C2C.

Processo de execução de comandos

Etapa 1: Integrações gerenciadas enviam comando para o conector

Envie uma solicitação POST com uma das seguintes cargas, dependendo do tipo de autorização:

Solicitação do OAuth 2.0:

/Send-Command { "header": { "auth": { "token": "ashriu32yr97feqy7afsaf", "type": "OAuth2.0" } }, "payload": { "operationName": "AWS.SendCommand", "operationVersion": "1.0", "connectorId": "Your-Connector-Id", "connectorDeviceId": "Your_Device_Id", "traceId": "traceId-3241u78123419", "endpoints": [{ "id": "1", "clusters": [{ "id": "0x0202", "commands": [{ "0xff01": { "0x0000": "3” } }] }] }] } }

Solicitação de autorização geral:

/Send-Command { "header": { "auth": { "secretsManager": { "arn": "string", "versionId": "string" }, "type": "GeneralAuthorization" } }, "payload": { "operationName": "AWS.SendCommand", "operationVersion": "1.0", "connectorId": "Your-Connector-Id", "connectorDeviceId": "Your_Device_Id", "traceId": "traceId-3241u78123419", "endpoints": [{ "id": "1", "clusters": [{ "id": "0x0202", "commands": [{ "0xff01": { "0x0000": "3" } }] }] }] } }

Etapa 2: Comando ACK do conector C2C

{ "header":{ "responseCode":200 }, "payload":{ "responseMessage": "Successfully received send-command request for connector 'Your-Connector-Id' and connector-device-id 'Your_Device_Id'" } }

Etapa 3: O conector envia o evento de resposta ao comando do dispositivo

AWS-API: /SendConnectorEvent URI: POST /connector-event/{Your-Connector-Id} { "UserId": "End-User-Id", "Operation": "DEVICE_COMMAND_RESPONSE", "OperationVersion": "1.0", "StatusCode": 200, "Message": “Example message”, "ConnectorDeviceId": "Your_Device_Id", "TraceId": "traceId-3241u78123419", "MatterEndpoint": { "id": "1", "clusters": [{ "id": "0x0202", "attributes": [ { "0x0000": “3” } ], "commands": [ "0xff01": { "0x0000": "3” } ] }] } }
nota

As alterações no estado do dispositivo como resultado da execução de um comando não serão refletidas nas integrações gerenciadas AWS IoT Device Management até que o evento DEVICE_COMMAND_RESPONSE correspondente seja recebido por meio da API. SendConnectorEvent Isso significa que até que o Managed Integrations for AWS IoT Device Management receba o evento da etapa 3 anterior, independentemente de sua resposta de invocação do conector indicar sucesso ou não, o estado do dispositivo não será atualizado.

Importante

Não inclua atributos na carga útil DEVICE_COMMAND_RESPONSE, a menos que o dispositivo tenha confirmado que a alteração de estado foi realmente aplicada. Um DEVICE_COMMAND_RESPONSE sem atributos serve como uma confirmação de que o comando foi enviado para terceiros e resulta em uma notificação DEVICE_COMMAND. Para relatar que os valores dos atributos foram atualizados no dispositivo, envie um DEVICE_EVENT separado com os atributos atualizados. Essa distinção evita falsos positivos em que um comando parece ter êxito, mas o dispositivo nunca recebeu a alteração de estado, por exemplo, quando um dispositivo foi desconectado recentemente.

Interpretação dos “pontos finais” do assunto incluídos na solicitação AWS.SendCommand

As integrações gerenciadas usarão os recursos do dispositivo relatados durante a descoberta do dispositivo para determinar quais comandos um dispositivo pode aceitar. Cada capacidade do dispositivo é modelada por meio de AWS implementações do Matter Data Model; portanto, todos os comandos recebidos serão derivados do campo `comandos` em um determinado cluster. É responsabilidade do seu conector analisar o campo `endpoints`, determinar o comando Matter correspondente e traduzi-lo de forma que o comando correto chegue ao dispositivo. Normalmente, isso significa traduzir o modelo de dados do Matter nas solicitações de API relacionadas.

Depois que o comando for executado, seu conector determina quais `atributos` definidos pelas AWS implementações do Matter Data Model foram alterados como resultado. Essas alterações são então reportadas às integrações gerenciadas do AWS IoT Device Management por meio de eventos da API DEVICE_COMMAND_RESPONSE enviados com a API. SendConnectorEvent

Considere o campo `endpoints` incluído no seguinte exemplo de carga útil: AWS.SendCommand

"endpoints": [{ "id": "1", "clusters": [{ "id": "0x0202", "commands": [{ "0xff01": { "0x0000": "3” } }] }] }]
A partir desse objeto, o conector pode determinar o seguinte:
  1. Defina as informações do endpoint e do cluster:

    1. Defina o endpoint id como “1".

      nota

      Se um dispositivo definir vários endpoints de forma que um único cluster (como On/Off) possa controlar vários recursos (ou seja, acender uma luz on/off e acender um estroboscópio on/off), esse ID será usado para rotear o comando para o recurso correto.

    2. Defina o cluster id como “0x0202" (cluster de controle de ventilador).

  2. Defina as informações do comando:

    1. Defina o identificador do comando como “0xff01" (comando Atualizar estado definido por). AWS

    2. Atualize os identificadores de atributos incluídos com os valores fornecidos na solicitação.

  3. Atualize o atributo:

    1. Defina o identificador do atributo como “0x0000" (FanMode atributo do cluster de controle do ventilador).

    2. Defina o valor do atributo como “3" (Alta velocidade do ventilador).

A Managed Integrations definiu dois tipos de comando “personalizados” que não são estritamente definidos pelas AWS implementações do Matter Data Model: os comandos ReadState e. UpdateState Para obter e definir os atributos de cluster definidos pelo Matter, as Integrações Gerenciadas enviarão ao seu conector uma AWS.SendCommand solicitação com IDs de comando pertencentes a UpdateState (id: 0xff01) ou ReadState (id: 0xff02), com os parâmetros correspondentes dos atributos que devem ser atualizados ou lidos. Esses comandos podem ser invocados para QUALQUER tipo de dispositivo para atributos definidos como mutáveis (atualizáveis) ou recuperáveis (legíveis) a partir da AWS implementação correspondente do Matter Data Model.