S'abonner aux événements

Les événements sont asynchrones et gérés par Google Cloud Pub/Sub, dans un seul sujet par Project. Les événements fournissent des informations à l'ensemble des appareils et des structures. La réception des événements est assurée tant que le jeton d'accès n'est pas révoqué par l'utilisateur et que les messages d'événement n'ont pas expiré.

Les événements sont une fonctionnalité facultative de l'API SDM. Ils peuvent être facilement implémentés et validés à l'aide de votre projet Google Cloud.

Activer les événements

Vous pouvez activer les événements dans la Device Access console. Sélectionnez votre projet dans la console, si ce n'est pas déjà fait.

Accéder à la Device Access console

Si vous avez déjà activé les événements (par exemple, lors de la création d'un projet), le champ Topic Pub/Sub (Sujet Pub/Sub) de la section Project Info (Informations sur le projet) doit déjà contenir une valeur, appelée ID de sujet, au format suivant:

projects/sdm-prod/topics/enterprise-project-id

Si vous n'avez pas activé les événements:

  1. Cliquez sur l'icône  pour le sujet Pub/Sub, puis sélectionnez Modifier.
  2. Cochez Activer les événements, puis cliquez sur Enregistrer.
  3. Un ID de sujet est généré pour vous au format indiqué ci-dessus.

Copiez votre ID de sujet. Vous en aurez besoin pour créer un abonnement au sujet afin de pouvoir récupérer les messages d'événement.

Créer un abonnement pull

Un abonnement pull consiste en un abonné qui envoie des requêtes au serveur Pub/Sub pour les messages d'événements mis en file d'attente. C'est un moyen simple et rapide de vérifier que des événements sont générés pour vos appareils autorisés.

Ouvrez Cloud Shell pour votre projet Google Cloud:

Accéder à Google Cloud Shell

À l'invite Cloud Shell, exécutez la commande suivante pour créer un abonnement pull à votre sujet, en utilisant l'subscription-id de votre choix et votre ID de sujet unique:

gcloud pubsub subscriptions create subscription-id --topic=projects/sdm-prod/topics/enterprise-project-id
Created subscription [projects/gcp-project-name/subscriptions/subscription-id].

Lancer des événements

Pour lancer des événements pour la première fois une fois l'abonnement Pub/Sub créé, effectuez un appel pour lister vos appareils en tant que déclencheur ponctuel:

curl -X GET 'https://smartdevicemanagement.googleapis.com/v1/enterprises/project-id/devices' \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer access-token'

Les événements de toutes les structures et de tous les appareils seront publiés après cet appel d'API.

Générer des événements

Des événements sont générés pour toutes les modifications apportées aux champs de trait, certaines étant automatiques, d'autres manuelles.

Par exemple, si la température ambiante près de votre Nest Thermostat change, un événement pour la caractéristiqueTemperature est automatiquement envoyé avec une nouvelle valeur ambientTemperatureCelsius.

Pour en générer manuellement une, procédez comme suit:

  1. modifier physiquement l'état de votre appareil (par exemple, en changeant le mode de votre Nest Thermostat) ;
  2. Déclencher un événement (mouvement, personne ou son, par exemple) sur une Google Nest Cam Indoor
  3. Exécutez une commande d'appareil à l'aide de l'API SDM.

Consulter les messages

Les messages d'événement peuvent être consultés dans votre projet Google Cloud, dans la section "Abonnements Pub/Sub" :

Accéder aux abonnements Google Cloud Pub/Sub

  1. Cliquez sur l'ID d'abonnement que vous avez créé précédemment.
  2. Sur l'écran Détails de l'abonnement, vous devriez voir une activité pour le graphique Nombre de messages non confirmés. Cela indique que des messages d'événement ont été reçus pour votre abonnement. Si vous ne voyez aucune activité, attendez un peu ou générez d'autres événements.
  3. Cliquez sur AFFICHER LES MESSAGES pour afficher le panneau Messages.
  4. Cliquez sur PULL pour afficher les messages. Elles doivent correspondre aux actions que vous avez utilisées pour générer des événements.

Vous pouvez également afficher les messages dans Cloud Shell à l'aide d'une commande pull de base:

gcloud pubsub subscriptions pull subscription-id

Pour en savoir plus sur les types d'abonnements, ainsi que sur les types d'événements envoyés par l'API SDM et leur utilisation, consultez la section Événements.

Gérer les messages

Les messages doivent être régulièrement confirmés et supprimés pour maintenir un abonnement propre et éviter de distribuer des messages en double à d'autres abonnés. Tous les messages d'abonnement peuvent être supprimés manuellement dans la section "Abonnements Pub/Sub" :

Accéder aux abonnements Google Cloud Pub/Sub

  1. Cliquez sur l'ID de l'abonnement.
  2. Il existe plusieurs façons de confirmer et de purger les données :
    1. Cliquez sur AFFICHER LES MESSAGES pour afficher le panneau Messages. Cochez la case Activer la confirmation de messages, puis cliquez sur PULL (Extraire) pour afficher et confirmer tous les messages.
    2. Cliquez sur SUPPRIMER LES MESSAGES pour supprimer définitivement tous les messages existants en les confirmant sans les afficher. Cliquez sur SUPPRIMER pour confirmer.

Vous pouvez également purger les messages dans Cloud Shell à l'aide de l'option --auto-ack avec une commande pull de base:

gcloud pubsub subscriptions pull subscription-id --auto-ack

Gérer les abonnements

Les abonnements peuvent être configurés de différentes manières, comme décrit dans la section Utiliser les propriétés d'abonnement.

Bien que la manière dont vous souhaitez gérer les abonnements et les messages soit à vous de décider, pour une application de production, nous vous recommandons d'utiliser des comptes de service pour l'authentification, plutôt qu'un compte utilisateur comme vous l'avez vu jusqu'à présent dans ce guide de démarrage rapide. Un compte de service est utilisé par une application ou une machine virtuelle, et non par une personne, et possède sa propre clé de compte unique.

Pour en savoir plus sur l'authentification des comptes de service avec Device Access, consultez la section Événements.