Usar a API

Com um token de acesso e a chamada inicial da lista de dispositivos feita, você já pode usar a API SDM para acessar e controlar o dispositivo.

Listar estruturas e dispositivos

Use curl para fazer uma chamada GET simples para o endpoint structures:

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/structures' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

Uma chamada bem-sucedida retorna uma lista de estruturas para contas vinculadas ao seu projetoDevice Access :

{
  "structures": [
    {
      "name": "enterprises/project-id/structures/structure-id",
      "traits": {
        "sdm.structures.traits.Info": {
          "customName": "structure-name"
        }
      }
    }
  ]
}

Faça uma chamada GET para o endpoint devices para acessar uma lista de dispositivos, caso ainda não tenha feito isso:

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

Uma chamada bem-sucedida retorna uma lista de dispositivos vinculados ao projeto Device Access. Cada dispositivo tem a própria lista exclusiva de características disponíveis:

{
  "devices": [
    {
      "name": "enterprises/project-id/devices/device-id",
      "type": "sdm.devices.types.device-type",
      "traits": { ... },
      "parentRelations": [
        {
          "parent": "enterprises/project-id/structures/structure-id/rooms/room-id",
          "displayName": "device-room-name"
        }
      ]
    }
  ]
}

Copie a device-id de cada dispositivo, que será necessária para outras chamadas de API.

Receber informações de um dispositivo

Para acessar informações de um dispositivo específico, faça uma chamada GET para o endpoint device-id:

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices/device-id' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

A resposta será semelhante à anterior, mas apenas para o dispositivo específico:

{
  "name": "enterprises/project-id/devices/device-id",
  "type": "sdm.devices.types.device-type",
  "traits": { ... },
  "parentRelations": [
    {
      "parent": "enterprises/project-id/structures/structure-id/rooms/room-id",
      "displayName": "device-room-name"
    }
  ]
}

Executar um comando

Depois de validar seu acesso com uma chamada GET bem-sucedida, tente executar um comando dependendo do tipo de dispositivo autorizado:

TERMOSTATO

curl -X POST \
  'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices/device-id:executeCommand' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer access-token' \
  --data-raw '{
    "command" : "sdm.devices.commands.ThermostatMode.SetMode",
    "params" : {
      "mode" : "HEAT"
    }
  }'

CÂMERA

curl -X POST \
  'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices/device-id:executeCommand' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer access-token' \
  --data-raw '{
    "command" : "sdm.devices.commands.CameraLiveStream.GenerateRtspStream",
    "params" : {}
  }'

Se a chamada for bem-sucedida, os seguintes resultados vão ocorrer:

TERMOSTATO

Você recebe uma resposta vazia, e o termostato físico muda o modo atual para o especificado nos parâmetros de comando.

{}

CÂMERA

Você vai receber um URL de transmissão ao vivo e tokens relacionados.

{
  "results" : {
    "streamUrls" : {
      "rtspUrl" : "rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken"
    },
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...",
    "streamToken" : "g.0.streamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}

Solução de problemas

Não autenticadas

Os tokens de acesso da API SDM são válidos por apenas uma hora. Se você receber uma resposta NÃO AUTENTICADA, é provável que o token tenha expirado. Use seu token de atualização para receber um novo token de acesso.

Outros erros

Consulte a Referência de código de erro para ver a lista completa de Device Access códigos de erro.