Écran

Nest Hub Max

L'écran Google Nest Hub Max est compatible avec l'API Smart Device Management (SDM). Cet appareil renvoie un type d'appareil DISPLAY :

sdm.devices.types.DISPLAY

Le Google Nest Hub Max est équipé d'une caméra, qui fonctionne de la même manière qu'un type d'appareil CAMERA.

Traits de caractère

Référence

Les traits de caractère, commandes ou événements suivants sont associés à cet appareil :

CaractéristiqueDescriptionCommandesÉvénements
CameraEventImageCette caractéristique appartient à tout appareil compatible avec la génération d'images à partir d'événements.GenerateImage
CameraImageCette caractéristique appartient à tout appareil compatible avec la prise d'images.
CameraLiveStreamCette caractéristique appartient à tout appareil compatible avec la diffusion en direct.GenerateRtspStream
ExtendRtspStream
StopRtspStream
CameraMotionCette caractéristique appartient à tout appareil compatible avec les événements de détection de mouvement.Mouvement
CameraPersonCette caractéristique appartient à tout appareil compatible avec les événements de détection de personnes.Personne
CameraSoundCette caractéristique appartient à tout appareil compatible avec les événements de détection de sons.Son
InfosCette caractéristique appartient à tout appareil pour les informations associées à l'appareil.

JSON

L'absence d'une caractéristique dans une réponse GET indique que la caractéristique ou la fonctionnalité n'est actuellement pas disponible pour l'appareil. Pour en savoir plus, consultez la section Types d'appareils.

{
  "type" : "sdm.devices.types.DISPLAY",
  "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.Info" : {
      "customName" : "My device"
    }
  }
}

Gérer les événements de la caméra

Les événements suivants peuvent être déclenchés à partir d'un type d'appareil DISPLAY :

Type Élément Description
Événement Événement de mouvement de la caractéristique CameraMotion Un mouvement a été détecté par la caméra.
Événement Événement de personne de la caractéristique CameraPerson Une personne a été détectée par la caméra.
Événement Événement de son de la caractéristique CameraSound Un son a été détecté par la caméra.
Par exemple, voici comment la caméra a détecté un mouvement :

Charge utile

{
  "eventId" : "f39b35b7-21ba-4cf4-bbf0-5d36b21b345d",
"timestamp" : "2019-01-01T00:00:01Z",
"resourceUpdate" : { "name" : "enterprises/project-id/devices/device-id", "events" : { "sdm.devices.events.CameraMotion.Motion" : { "eventSessionId" : "CjY5Y3VKaTZwR3o4Y19YbTVfMF...", "eventId" : "hkDG-nDge7SgosWYto0eOCLQeQ...", } } } "userId" : "AVPHwEuBfnPOnTqzVFT4IONX2Qqhu9EJ4ubO-bNnQ-yi",
"resourceGroup" : [ "enterprises/project-id/devices/device-id" ] }
La charge utile de cet événement contient un eventId qui peut être utilisé avec la GenerateImage commande. Cette commande renvoie une URL de téléchargement pour l'image de la caméra associée à l'événement :

Requête

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

Réponse

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

Télécharger une image de la caméra

Effectuez un appel GET à la url à partir d'une GenerateImage réponse de commande, en utilisant la token dans l'en-tête d'autorisation HTTP avec l'autorisation de base, pour télécharger l'image de la caméra :

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

Utilisez les paramètres de requête width ou height pour personnaliser la résolution de l'image téléchargée. Vous n'avez besoin de spécifier qu'un seul de ces paramètres. L'autre paramètre est mis à l'échelle automatiquement en fonction du format de la caméra.

Par exemple, si le format de la caméra est de 4:3, pour télécharger l'image de la caméra avec une résolution de 480 x 360, spécifiez la largeur ou la hauteur :

Largeur

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

Hauteur

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

D'autres restrictions s'appliquent à l'URL de téléchargement :

  • Si les deux paramètres sont fournis dans l'URL, width est utilisé et height est ignoré.
  • Si aucun paramètre n'est fourni dans l'URL, une valeur par défaut de 480 est choisie pour la width.

Pour en savoir plus sur les propriétés des images, consultez la section Caractéristique CameraImage trait.

Accéder à un flux en direct

Vous pouvez accéder au flux en direct d'une caméra. Les formats de flux suivants sont compatibles avec cet appareil :

  • RTSP

Pour obtenir la liste complète des caméras et des formats de flux compatibles, consultez la section Appareils compatibles.

Pour accéder à un flux en direct, utilisez la commande GenerateFormatStream appropriée de la caractéristique CameraLiveStream trait.

RTSP

Pour un flux RTSP, la commande GenerateRtspStream de la caractéristique CameraLiveStream renvoie l'URL de la diffusion et le streamToken associé :

Requête

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

Réponse

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

Utilisez ensuite l'URL du flux pour accéder au flux en direct de la caméra :

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

Les URL de flux en direct RTSP ne peuvent pas être partagées entre les clients. Une URL de flux ne peut être utilisée que par un seul client à la fois. Si plusieurs clients souhaitent diffuser du contenu à partir de la même caméra en même temps, les commandes RTSP doivent être envoyées pour chaque client individuel, et chaque client individuel doit utiliser sa propre URL de flux.

Prolonger un flux en direct

Les sessions de flux en direct de la caméra ne sont valides que pendant cinq minutes. Si vous devez prolonger la durée de vie d'un flux en direct, utilisez la commande ExtendFormatStream appropriée de la caractéristique CameraLiveStream pour le format de flux que vous avez généré.

RTSP

Pour prolonger un flux RTSP, utilisez la ExtendRtspStream commande de la caractéristique CameraLiveStream pour obtenir de nouvelles streamExtensionToken et streamToken valeurs :

Requête

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

Réponse

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

Mettez à jour l'URL de la diffusion avec ces nouvelles valeurs pour continuer à regarder le live stream :

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

Arrêter un flux en direct

Lorsque vous n'utilisez plus un flux en direct de la caméra, vous devez l'arrêter et l'invalider. Pour ce faire, utilisez la commande StopFormatStream appropriée de la caractéristique CameraLiveStream pour le format de flux que vous avez généré.

RTSP

Pour arrêter un flux RTSP, utilisez le jeton à invalider avec la StopRtspStream de la caractéristique CameraLiveStream :

Requête

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

Réponse

{}

Erreurs

Le ou les codes d'erreur suivants peuvent être renvoyés en relation avec cet appareil :

Message d'erreur RPC Dépannage
L'image de la caméra n'est plus disponible au téléchargement. DEADLINE_EXCEEDED Les images d'événement expirent 30 secondes après la publication de l'événement. Veillez à télécharger l'image avant son expiration.
L'ID d'événement n'appartient pas à la caméra. FAILED_PRECONDITION Utilisez le eventID correct renvoyé par l'événement de la caméra.

Pour obtenir la liste complète des codes d'erreur de l'API, consultez la section Référence des codes d'erreur de l'API pour.