Дверной звонок (устаревшая версия)

Nest Hello

Все устаревшие модели дверных звонков Nest поддерживаются в Smart Device Management (SDM) API. Это устройство возвращает тип DOORBELL:

sdm.devices.types.DOORBELL

В Google Nest Doorbell (устаревшая модель) есть камера, которая работает так же, как устройство типа CAMERA.

Функции

Справочные материалы

С этим устройством связаны следующие признаки, команды и события:

ТрейтОписаниеКомандыСобытия
CameraEventImageЭта черта относится к любому устройству, которое поддерживает создание изображений на основе событий.GenerateImage
CameraImageЭта черта относится к любому устройству, которое поддерживает съемку изображений.
CameraLiveStreamЭтот признак относится к любому устройству, которое поддерживает трансляции.GenerateRtspStream
ExtendRtspStream
StopRtspStream
CameraMotionЭтот признак относится к любому устройству, которое поддерживает события обнаружения движения.Анимация
CameraPersonЭтот признак относится к любому устройству, которое поддерживает события обнаружения людей.Пользователь
CameraSoundЭтот признак относится к любому устройству, которое поддерживает события распознавания звука.Звук
DoorbellChimeЭтот трейт относится к любому устройству, которое поддерживает дверной звонок и связанные с ним события нажатия.Звук
ИнформацияЭтот признак относится к любому устройству, если речь идет об информации, связанной с устройством.

JSON

Если в ответе GET нет какого-либо признака, это означает, что признак или функция в настоящее время недоступны для устройства. Подробнее о типах устройств…

{
  "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" : ["OPUS"],
      "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"
    }
  }
}

Как обрабатывать события дверного звонка и камеры

Устройства типа DOORBELL могут вызывать следующие события:

Тип Элемент Описание
Событие Событие Motion признака CameraMotion Камера обнаружила движение.
Событие Событие Person из черты CameraPerson Камера обнаружила человека.
Событие Событие Sound признака CameraSound Камера обнаружила звук.
Событие Событие Chime признака DoorbellChime Нажата кнопка дверного звонка.
Например, на изображении ниже нажата кнопка звонка:

Полезная нагрузка

{
  "eventId" : "b52cc247-0f8e-4b35-911f-47902ceaacc6",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.DoorbellChime.Chime" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "bCPUUD4vo10K316P4_08zFCbog..." } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }
Полезная нагрузка этого события содержит объект eventId, который можно использовать с командой GenerateImage. Эта команда возвращает URL для скачивания изображения с камеры, связанного с событием:

Запрос

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

Ответ

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

Как скачать изображение с камеры

Выполните вызов GET к url из ответа на команду GenerateImage, используя token в заголовке авторизации HTTP с базовой авторизацией, чтобы скачать изображение с камеры:

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

Используйте параметры запроса width или height, чтобы настроить разрешение скачиваемого изображения. Достаточно указать только один из этих параметров. Другой параметр масштабируется автоматически в соответствии с соотношением сторон камеры.

Например, если соотношение сторон камеры составляет 4:3, чтобы скачать изображение с разрешением 480 x 360, укажите ширину или высоту:

Ширина

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

Высота

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

К URL для скачивания применяются следующие ограничения:

  • Если в URL указаны оба параметра, используется width, а height игнорируется.
  • Если в URL не указан ни один из этих параметров, для параметра width будет выбрано значение по умолчанию – 480.

Информацию о свойствах изображений можно найти в CameraImage .

Как открыть трансляцию

Трансляция с камеры доступна. Для этого устройства поддерживаются следующие форматы потоков:

  • RTSP;

Полный список камер и поддерживаемых форматов потоков приведен на странице Поддерживаемые устройства.

Чтобы получить доступ к трансляции, используйте команду GenerateFormatStream из трейтаCameraLiveStream.

RTSP;

Для потока RTSP команда GenerateRtspStream из команды черты CameraLiveStream возвращает URL стрима и связанные с ним streamToken:

Запрос

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

Ответ

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

Затем используйте URL потока, чтобы получить доступ к прямой трансляции с камеры:

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

URL трансляций RTSP нельзя передавать между клиентами. URL трансляции может использоваться только одним клиентом одновременно. Если несколько клиентов хотят одновременно получать трансляцию с одной камеры, для каждого из них необходимо отправить команды RTSP и использовать отдельный URL стрима.

Как продлить трансляцию

Сеансы трансляции с камеры действительны только в течение пяти минут. Если вам нужно продлить трансляцию, используйте команду ExtendFormatStream из CameraLiveStream для сгенерированного вами формата трансляции.

RTSP;

Чтобы продлить трансляцию RTSP, используйте команду ExtendRtspStream из черты CameraLiveStream, чтобы получить новые значения streamExtensionToken и streamToken:

Запрос

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

Ответ

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

Чтобы продолжить просмотр трансляции, обновите URL стрима, добавив в него новые значения:

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

Как остановить трансляцию

Если вы больше не используете трансляцию с камеры, ее нужно остановить и сделать недействительной. Для этого используйте команду StopFormatStream из чертыCameraLiveStream для сгенерированного вами формата потока.

RTSP;

Чтобы остановить трансляцию RTSP, используйте токен для аннулирования с помощью команды StopRtspStream из черты CameraLiveStream:

Запрос

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

Ответ

{}

Ошибки

В отношении этого устройства могут быть возвращены следующие коды ошибок:

Сообщение об ошибке Доход от клика Устранение неполадок
Изображение с камеры больше нельзя скачать. DEADLINE_EXCEEDED Изображения для мероприятий удаляются через 30 секунд после публикации мероприятия. Не забудьте скачать изображение до истечения срока действия.
Идентификатор события не относится к камере. FAILED_PRECONDITION Используйте правильное значение eventID, возвращенное событием камеры.

Полный список кодов ошибок API приведен в Справочнике по кодам ошибок API.