Con un token de acceso en mano y la llamada inicial a la lista de dispositivos realizada, ya puedes usar la API de SDM para acceder a tu dispositivo y controlarlo.
Cómo enumerar estructuras y dispositivos
Usa curl
para realizar una llamada GET simple al extremo structures
:
curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/structures' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer access-token'
Una llamada correcta muestra una lista de estructuras para las cuentas vinculadas a tu proyecto deDevice Access :
{ "structures": [ { "name": "enterprises/project-id/structures/structure-id", "traits": { "sdm.structures.traits.Info": { "customName": "structure-name" } } } ] }
Si aún no lo hiciste, realiza una llamada GET al extremo devices
para obtener una lista de dispositivos:
curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer access-token'
Una llamada correcta muestra una lista de dispositivos vinculados a tu proyecto Device Access. Cada dispositivo tiene su propia lista única de atributos disponibles:
{ "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" } ] } ] }
Copia el device-id de cada dispositivo; lo necesitarás para otras llamadas a la API.
Cómo obtener información de un dispositivo
Para obtener información sobre un dispositivo específico, realiza una llamada GET al extremo 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'
La respuesta debería ser similar a la anterior, pero solo para el 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" } ] }
Ejecutar un comando
Después de validar tu acceso con una llamada GET correcta, intenta ejecutar un comando según el tipo de dispositivo que autorizaste:
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ÁMARA
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" : {}
}'
Si la llamada se realiza correctamente, se producen los siguientes resultados:
TERMOSTATO
Recibirás una respuesta vacía y el termostato físico cambiará su modo actual al modo especificado en los parámetros del comando.
{}
CÁMARA
Recibes una URL de transmisión en vivo y 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" } }
Solución de problemas
Sin autenticar
Los tokens de acceso para la API de SDM solo son válidos por 1 hora. Si recibes una respuesta UNAUTHENTICATED, es probable que el token haya vencido. Usa tu token de actualización para obtener un token de acceso nuevo.
Otros errores
Consulta la Referencia de códigos de error para obtener la lista completa de los Device Access códigos de error.