Campainha (legada)

Nest Hello

Todos os Nest Doorbells legados são compatíveis com a API Smart Device Management (SDM). Esse dispositivo retorna um tipo de dispositivo DOORBELL:

sdm.devices.types.DOORBELL

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

Características

Referência

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

TraçoDescriçãoComandosEventos
CameraEventImageEssa característica pertence a qualquer dispositivo compatível com a geração de imagens 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 a transmissão ao vivo.GenerateRtspStream
ExtendRtspStream
StopRtspStream
CameraMotionEssa característica pertence a qualquer dispositivo que oferece suporte a 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 que oferece suporte a eventos de detecção de som.Som
DoorbellChimeEssa característica pertence a qualquer dispositivo com suporte a um toque de campainha e eventos de pressão relacionados.Carimbo
InformaçõesEssa característica pertence a qualquer dispositivo para informações relacionadas a ele.

JSON

A ausência de um atributo em uma resposta GET indica que o atributo ou recurso não está disponível para o dispositivo no momento. Consulte Tipos de dispositivo 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 de campainha e câmera

Os eventos a seguir podem ser acionados por um tipo de dispositivo DOORBELL:

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

Payload

{
  "eventId" : "76f85e13-cc15-4705-83c3-0b3838118524",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.DoorbellChime.Chime" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "cV7T3NiEMXH5ZmQz21AwMaW0mF..." } } } "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" : "mFNqXZk08luMZuuBBPCPbS7mZ4..."
  }
}

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 o url de uma resposta do 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 transferida por download. Apenas 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 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 fornecidos 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 streaming têm suporte para este dispositivo:

  • RTSP

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

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

RTSP

Para um stream RTSP, o comando GenerateRtspStream do comando de característica do CameraLiveStream retorna o URL do stream e o 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 do stream 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 transmissão só pode ser usado por um cliente por vez. Se vários clientes quiserem fazer streaming da mesma câmera ao mesmo tempo, os comandos RTSP precisarão ser enviados para cada cliente individualmente, e cada um deles precisará usar o próprio URL de streaming.

Estender uma transmissão ao vivo

As sessões de transmissão ao vivo da câmera só são válidas por 5 minutos. Se você precisar estender a duração de uma transmissão ao vivo, use o comando ExtendFormatStream adequado da característica CameraLiveStream do formato de transmissão que você criou.

RTSP

Para estender um stream RTSP, use o comando ExtendRtspStream do comando de atributo 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 do stream com estes novos valores para continuar assistindo a transmissão ao vivo:

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

Parar uma transmissão ao vivo

Sempre que você não estiver usando uma transmissão ao vivo da câmera, pare e invalide a transmissão. Para fazer isso, use o comando StopFormatStream adequado da característica CameraLiveStream para o formato de transmissão que você gerou.

RTSP

Para interromper uma transmissão RTSP, use o token para invalidar 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 do evento. Faça o download da imagem antes do prazo de validade.
O ID do evento não pertence à câmera. FAILED_PRECONDITION Use o eventID correto retornado pelo evento da câmera.

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