
Все устаревшие модели дверных звонков 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.