Dzwonek (starsza wersja)

Nest Hello

Wszystkie starsze urządzenia Nest Doorbell są obsługiwane przez interfejs Smart Device Management (SDM). To urządzenie zwraca typ urządzenia DOORBELL:

sdm.devices.types.DOORBELL

Dzwonek Google Nest Doorbell (starszego typu) ma kamerę, która działa tak samo jak urządzenie typu CAMERA.

Cechy

Dokumentacja

Te cechy, polecenia lub zdarzenia są powiązane z tym urządzeniem:

CechaOpisPoleceniaWydarzenia
CameraEventImageTa cecha należy do każdego urządzenia, które obsługuje generowanie obrazów z zdarzeń.GenerateImage
CameraImageTa cecha należy do każdego urządzenia, które obsługuje robienie zdjęć.
CameraLiveStreamTa cecha należy do każdego urządzenia, które obsługuje transmisję na żywo.GenerateRtspStream
ExtendRtspStream
StopRtspStream
Ruch kameryTa cecha należy do każdego urządzenia, które obsługuje zdarzenia wykrywania ruchu.Ruch
CameraPersonTa cecha należy do każdego urządzenia, które obsługuje zdarzenia wykrywania osób.Osoba
CameraSoundTa cecha należy do każdego urządzenia, które obsługuje zdarzenia wykrywania dźwięku.Dźwięk
DoorbellChimeTa cecha należy do każdego urządzenia, które obsługuje dzwonek do drzwi i powiązane zdarzenia naciśnięcia.Chime
InformacjeTa cecha należy do każdego urządzenia w przypadku informacji związanych z urządzeniem.

JSON

Brak atrybutu w odpowiedzi GET oznacza, że atrybut lub funkcja są obecnie niedostępne na urządzeniu. Więcej informacji znajdziesz w sekcji Typy urządzeń.

{
  "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"
    }
  }
}

Obsługa zdarzeń dzwonka i kamery

Typ urządzenia DOORBELL może wywoływać te zdarzenia:

Typ Element Opis
Zdarzenie Zdarzenie Ruch atrybutu CameraMotion Kamera wykryła ruch.
Zdarzenie Zdarzenie Osoba atrybutu CameraPerson Kamera wykryła osobę.
Zdarzenie Zdarzenie dźwięk związane z cechą CameraSound Kamera wykryła dźwięk.
Zdarzenie Zdarzenie Chime atrybutu DoorbellChime Dzwonek został naciśnięty.
Na przykład tutaj przycisk dzwonka został naciśnięty:

Ładunek

{
  "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" ] }
Ładunek tego zdarzenia zawiera eventId, którego można używać z poleceniem GenerateImage. To polecenie zwraca adres URL pobierania obrazu aparatu powiązanego ze zdarzeniem:

Żądanie

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

Odpowiedź

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

Pobierz obraz z kamery

Aby pobrać obraz z kamery, wykonaj wywołanie GET do parametru url w odpowiedzi na polecenie GenerateImage, używając w nagłówku HTTP Authorization autoryzacji podstawowej z parametrem token:

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

Aby dostosować rozdzielczość pobranego obrazu, użyj parametrów zapytania width lub height. Wystarczy podać tylko 1 z tych parametrów. Drugi parametr jest skalowany automatycznie zgodnie z formatem obrazu aparatu.

Jeśli na przykład współczynnik proporcji aparatu wynosi 4:3, aby pobrać obraz z rozdzielczości 480 x 360, określ szerokość lub wysokość:

Szerokość

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

Wysokość

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

Obowiązują też inne ograniczenia dotyczące adresu URL do pobrania:

  • Jeśli w adresie URL podano oba parametry, używany jest parametr width, a parametr height jest ignorowany.
  • Jeśli w adresie URL nie ma żadnego parametru, dla parametru width zostanie wybrana domyślna wartość 480.

Aby uzyskać informacje o właściwościach obrazu, zapoznaj się z cechą CameraImage .

Dostęp do transmisji na żywo

Można uzyskać dostęp do transmisji na żywo z kamery. Na tym urządzeniu obsługiwane są te formaty strumieniowania:

  • RTSP

Pełną listę kamer i obsługiwanych formatów strumieniowania znajdziesz w sekcji Obsługiwane urządzenia.

Aby uzyskać dostęp do transmisji na żywo, użyj odpowiedniego polecenia generowaniaFormatStreamCameraLiveStreamtrait.

RTSP

W przypadku strumienia RTSP polecenie GenerateRtspStream w atrybucie CameraLiveStream zwraca adres URL strumienia i powiązane streamToken:

Żądanie

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

Odpowiedź

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

Następnie użyj adresu URL transmisji, aby uzyskać dostęp do transmisji na żywo z kamery:

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

Adresów URL strumieni RTSP nie można udostępniać między klientami. Adresu URL transmisji może używać tylko jeden klient naraz. Jeśli wielu klientów chce jednocześnie korzystać z tego samego urządzenia do przesyłania strumieniowego, komendy RTSP muszą być wysyłane do każdego klienta z osobna, a każdy klient musi używać własnego adresu URL strumienia.

Przedłużanie transmisji na żywo

Sesje transmisji na żywo z kamery są ważne tylko przez 5 minut. Jeśli chcesz wydłużyć czas trwania transmisji na żywo, użyj odpowiedniej komendy ExtendFormatStream (Rozszerzenie transmisji) CameraLiveStream w przypadku wygenerowanego przez Ciebie formatu strumienia.

RTSP

Aby rozszerzyć strumień RTSP, użyj polecenia ExtendRtspStream polecenia trait CameraLiveStream w celu pobrania nowych wartości streamExtensionToken i streamToken:

Żądanie

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

Odpowiedź

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

Aby kontynuować oglądanie transmisji na żywo, zaktualizuj adres URL strumienia, podając te nowe wartości:

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

Zatrzymywanie transmisji na żywo

Za każdym razem, gdy nie korzystasz już z transmisji na żywo z kamery, zatrzymaj ją i unieważnij. Aby to zrobić, użyj odpowiedniego polecenia StopFormatStream w właściwościCameraLiveStreamdla wygenerowanego formatu transmisji.

RTSP

Aby zatrzymać strumień RTSP, użyj polecenia StopRtspStream w atrybucie CameraLiveStream, aby unieważnić token:

Żądanie

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

Odpowiedź

{}

Błędy

W związku z tym urządzeniem mogą zostać zwrócone te kody błędów:

Komunikat o błędzie RPC Rozwiązywanie problemów
Zdjęcie z aparatu nie jest już dostępne do pobrania. DEADLINE_EXCEEDED Obrazy wydarzeń wygasają 30 sekund po opublikowaniu wydarzenia. Pamiętaj, aby pobrać obraz przed wygaśnięciem.
Identyfikator zdarzenia nie należy do kamery. FAILED_PRECONDITION Użyj prawidłowej wartości eventID zwróconej przez zdarzenie zarejestrowane przez kamerę.

Pełną listę kodów błędów interfejsu API znajdziesz w dokumentacji kodu błędu interfejsu API.