Campainha (legada)

Nest Hello

Todas as Nest Doorbells legadas são compatíveis com a API Smart Device Management (SDM). Este dispositivo retorna um tipo de dispositivo DOORBELL:

sdm.devices.types.DOORBELL

A Google Nest Doorbell (legada) tem uma câmera, que funciona da mesma forma que um tipo de dispositivo de CAMERA.

Características

Referência

As seguintes características, comandos ou eventos estão relacionados a este dispositivo:

CaracterísticaDescriçãoComandosEventos
CameraEventImageEssa característica pertence a qualquer dispositivo que suporta a geração de imagens a partir de eventos.GenerateImage
CameraImageEssa característica pertence a qualquer dispositivo compatível com a captura de imagens.
CameraLiveStreamEssa característica pertence a qualquer dispositivo compatível com transmissões ao vivo.GenerateRtspStream
ExtendRtspStream
StopRtspStream
CameraMotionEssa característica pertence a qualquer dispositivo compatível com eventos de detecção de movimento.Movimento
CameraPersonEssa característica pertence a qualquer dispositivo compatível com eventos de detecção de pessoas.Pessoa
CameraSoundEssa característica pertence a qualquer dispositivo compatível com eventos de detecção de som.Som
DoorbellChimeEssa característica pertence a qualquer dispositivo que tenha suporte a uma campainha e a eventos de pressionamento relacionados.Carrilhão
InformaçõesEssa característica pertence a qualquer dispositivo para informações relacionadas a ele.

JSON

A ausência de uma característica em uma resposta GET indica que a característica ou o recurso não está disponível no momento para o dispositivo. Consulte Tipos de dispositivos para mais informações.

{
  "type" : "sdm.devices.types.DOORBELL",
  "traits" : {
    "sdm.devices.traits.CameraEventImage" : {},
    "sdm.devices.traits.CameraImage" : {
      "maxImageResolution" : {
        "width" : 1280,
        "height" : 960
      }
    },
    "sdm.devices.traits.CameraLiveStream" : {
      "maxVideoResolution" : {
        "width" : 640,
        "height" : 480
      },
      "videoCodecs" : ["H264"],
      "audioCodecs" : ["AAC"],
      "supportedProtocols" : ["WEB_RTC"]
    },
    "sdm.devices.traits.CameraMotion" : {},
    "sdm.devices.traits.CameraPerson" : {},
    "sdm.devices.traits.CameraSound" : {},
    "sdm.devices.traits.DoorbellChime" : {},
    "sdm.devices.traits.Info" : {
      "customName" : "My device"
    }
  }
}

Processar eventos da campainha e da câmera

Os seguintes eventos podem ser acionados em um tipo de dispositivo DOORBELL:

Tipo Elemento Descrição
Evento Evento Motion da característica CameraMotion A câmera detectou movimento.
Evento Evento Person do atributo CameraPerson A câmera detectou uma pessoa.
Evento Evento Sound da característica CameraSound A câmera detectou som.
Evento Evento Chime do atributo DoorbellChime A campainha foi tocada.
Por exemplo, aqui o botão da campainha foi pressionado:

Payload

{
  "eventId" : "119bfb86-3c27-4e12-ba3c-b35177badda0",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.DoorbellChime.Chime" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "i_MVBkcoLJkn7d6J1GIhbq5M5m..." } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }
O payload desse evento contém um eventId que pode ser usado com o comando GenerateImage. Esse comando retorna um URL de download para a imagem da câmera relacionada ao evento:

Solicitação

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraEventImage.GenerateImage",
  "params" : {
    "eventId" : "3T7wSCdxnQKNnna6Yxg4DXlLFW..."
  }
}

Resposta

{
  "results" : {
    "url" : "https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
    "token" : "g.0.eventToken"
  }
}

Fazer o download de uma imagem da câmera

Faça uma chamada GET para url a partir de uma resposta de comando GenerateImage, usando o token no cabeçalho de autorização HTTP com autorização básica para fazer o download da imagem da câmera:

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...

Use os parâmetros de consulta width ou height para personalizar a resolução da imagem salva. Somente um desses parâmetros precisa ser especificado. O outro parâmetro é dimensionado automaticamente de acordo com a proporção da câmera.

Por exemplo, se a proporção da câmera for 4:3, para fazer o download da imagem da câmera com uma resolução de 480 x 360, especifique a largura ou a altura:

Largura

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?width=480

Altura

curl -H "Authorization: Basic g.0.eventToken" \
      https://domain/sdm_event_snapshot/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?height=360

Outras restrições ao URL de download se aplicam:

  • Se ambos os parâmetros forem informados no URL, width será usado e height será ignorado.
  • Se nenhum parâmetro for fornecido no URL, um valor padrão de 480 será escolhido para o width.

Consulte a característica CameraImage para conferir informações sobre as propriedades da imagem.

Acessar uma transmissão ao vivo

A transmissão ao vivo de uma câmera pode ser acessada. Os seguintes formatos de stream têm suporte a este dispositivo:

  • RTSP

Para conferir uma lista completa de câmeras e formatos de stream compatíveis, consulte Dispositivos compatíveis.

Para acessar uma transmissão ao vivo, use o comando GenerateFormatStream apropriado da característica CameraLiveStream.

RTSP

Para um stream RTSP, o comando GenerateRtspStream do comando de característica CameraLiveStream retorna o URL do stream e streamToken relacionado:

Solicitação

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.GenerateRtspStream",
  "params" : {}
}

Resposta

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

Em seguida, use o URL da transmissão para acessar a transmissão ao vivo da câmera:

rtsps://someurl.com/CjY5Y3VKaTZwR3o4Y19YbTVfMF...?auth=g.0.streamingToken

Os URLs de transmissão ao vivo RTSP não podem ser compartilhados entre clientes. Um URL de stream só pode ser usado por um cliente de cada vez. Se vários clientes quiserem transmitir ao mesmo tempo da mesma câmera, os comandos RTSP precisarão ser enviados para cada cliente, e cada cliente precisará usar o próprio URL de stream.

Estender uma transmissão ao vivo

As sessões de transmissão ao vivo da câmera só são válidas por cinco minutos. Se você precisar prolongar a vida útil de uma transmissão ao vivo, use o comando "Prolongar transmissão"Formatda característica CameraLiveStream para o formato de transmissão que você gerou.

RTSP

Para estender um stream RTSP, use o comando ExtendRtspStream do comando de característica CameraLiveStream para receber novos valores de streamExtensionToken e streamToken:

Solicitação

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.ExtendRtspStream",
  "params" : {
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
  }
}

Resposta

{
  "results" : {
    "streamExtensionToken" : "dGNUlTU2CjY5Y3VKaTZwR3o4Y1...",
    "streamToken" : "g.0.newStreamingToken",
    "expiresAt" : "2018-01-04T18:30:00.000Z"
  }
}

Atualize o URL da transmissão com estes novos valores para continuar vendo a transmissão ao vivo:

rtsps://someurl.com/dGNUlTU2CjY5Y3VKaTZwR3o4Y1...?auth=g.0.newStreamingToken

Interromper uma transmissão ao vivo

Sempre que você não estiver mais usando uma transmissão ao vivo da câmera, será necessário interrompê-la e invalidar a transmissão. Para isso, use o comando PararFormatStream correto da característica CameraLiveStream para o formato de transmissão que você gerou.

RTSP

Para interromper um stream RTSP, use o token para fazer a invalidação com o comando StopRtspStream do comando de característica CameraLiveStream:

Solicitação

POST /enterprises/project-id/devices/device-id:executeCommand
{
  "command" : "sdm.devices.commands.CameraLiveStream.StopRtspStream",
  "params" : {
    "streamExtensionToken" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF..."
  }
}

Resposta

{}

Erros

Os seguintes códigos de erro podem ser retornados em relação a este dispositivo:

Mensagem de erro RPC Solução de problemas
A imagem da câmera não está mais disponível para download. DEADLINE_EXCEEDED As imagens do evento expiram 30 segundos após a publicação. Faça o download da imagem antes que ela expire.
O ID do evento não pertence à câmera. FAILED_PRECONDITION Use a eventID correta retornada pelo evento da câmera.

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