Подписаться на события

События происходят асинхронно и управляются системой Google Cloud Pub/Sub в рамках одной темы на каждый элемент. ProjectСобытия обеспечивают обновления для всех устройств и структур, и получение событий гарантировано до тех пор, пока токен доступа не будет отозван пользователем и сообщения о событиях не истекут.

События — это необязательная функция API SDM. Их легко реализовать и проверить с помощью вашего проекта Google Cloud.

Включить события

События можно включить в Device Access Консоль. Выберите свой проект в консоли, если вы еще этого не сделали.

Перейдите в Device Access Консоль

Если вы уже включили события (например, при создании проекта ), поле «Тема публикации/подписки» в разделе « Включить тему публикации/подписки для событий» уже должно содержать значение, называемое идентификатором темы, в старом формате:

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

Этот формат тем размещается на серверах Google и будет использоваться в вашем проекте до тех пор, пока вы не отключите тему Pub/Sub, размещенную на серверах Google. Если вы включите ее позже, вы переключитесь на тему Pub/Sub, размещенную на собственных серверах.

Создавать или изменять темы Pub/Sub, размещенные на собственном сервере, можно в собственном проекте Google Cloud разработчика. Разработчик также несет ответственность за все расходы, связанные с использованием Pub/Sub; подробную информацию о ценах на Pub/Sub см. в соответствующем разделе.

Создайте тему Pub/Sub:

gcloud pubsub topics create {topic} --message-retention-duration=0s

Предоставьте API SDM необходимые разрешения для доступа и публикации данных событий для идентификатора темы вашего проекта:

gcloud pubsub topics add-iam-policy-binding projects/{project}/topics/{topic} \
--member="group:sdm-publisher@googlegroups.com" \
--role="roles/pubsub.publisher"

Формат вашего вновь созданного идентификатора темы будет выглядеть следующим образом:

projects/gcp-project-name/subscriptions/topic-id

Запишите идентификатор вашей темы (Topic ID), он понадобится вам для активации событий. Дополнительную информацию см. в разделе «Создание темы» .

Для включения событий:

  1. Установите флажок «Включить события» и нажмите «Создать проект» .
  2. Щелкните значок для темы Pub/Sub и выберите «Включить события с темой PubSub» .
  3. Введите идентификатор темы публикации/подтемы, который был предоставлен или создан ранее.

Скопируйте идентификатор вашей темы (Topic ID), он понадобится для создания подписки на тему, чтобы можно было получать сообщения о событиях.

Создать подписку на получение данных (pull subscription)

Подписка по принципу «pull subscription» — это когда подписчик инициирует запросы к серверу Pub/Sub для получения сообщений о событиях, находящихся в очереди. Это быстрый и простой способ убедиться, что события генерируются для ваших авторизованных устройств.

Откройте Cloud Shell для своего проекта в Google Cloud:

Перейдите в Google Cloud Shell

В командной строке Cloud Shell выполните следующую команду, чтобы создать подписку на вашу тему, используя любой желаемый subscription-id и ваш уникальный идентификатор темы:

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

Инициировать события

Чтобы впервые инициировать события после создания подписки Pub/Sub, выполните вызов для перечисления ваших устройств в качестве одноразового триггера:

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

После этого вызова API будут опубликованы события для всех структур и устройств.

Генерировать события

События генерируются для всех изменений полей признаков, некоторые из которых происходят автоматически, а некоторые — вручную.

Например, если температура окружающей среды рядом с вашим термостатом Nest изменится, будет сгенерировано событие дляТемпература Этот параметр будет автоматически отправлен с новым значением ambientTemperatureCelsius .

Для создания его вручную можно использовать один из следующих способов:

  1. Физически измените состояние вашего устройства, например, измените режим работы термостата Nest.
  2. Запустите событие, например, обнаружение движения, человека или звука, на камере Google Nest Cam Indoor.
  3. Выполните команду устройства, используя API SDM.

Просмотреть сообщения

Сообщения о событиях можно просмотреть в вашем проекте Google Cloud в разделе «Подписки Pub/Sub»:

Перейдите в раздел «Подписки Google Cloud Pub/Sub».

  1. Нажмите на идентификатор подписки, который вы создали ранее.
  2. На экране сведений о подписке вы должны увидеть активность на графике количества неподтвержденных сообщений . Это означает, что для вашей подписки поступили сообщения о событиях. Если вы не видите никакой активности, подождите немного или сгенерируйте еще несколько событий.
  3. Нажмите кнопку « сообщения» , чтобы открыть панель сообщений .
  4. Нажмите кнопку «Потянуть» , чтобы просмотреть сообщения. Они должны соответствовать действиям, которые вы использовали для генерации событий.

Сообщения также можно просмотреть в Cloud Shell с помощью простой команды pull :

gcloud pubsub subscriptions pull subscription-id

Для получения дополнительной информации о типах подписки, а также о типах событий, отправляемых API SDM, и о том, как их использовать, см. раздел «События» .

Управление сообщениями

Сообщения следует регулярно подтверждать и удалять, чтобы поддерживать чистоту подписки и избегать повторной отправки сообщений другим подписчикам. Все сообщения подписки можно удалить вручную в разделе «Подписки на публикацию/подписку»:

Перейдите в раздел «Подписки Google Cloud Pub/Sub».

  1. Нажмите на идентификатор подписки.
  2. Существует несколько способов признать проблему и избавиться от неё:
    1. Нажмите кнопку > «Просмотреть сообщения» , чтобы открыть панель сообщений . Установите флажок «Включить подтверждение сообщений» и нажмите кнопку «Получить» , чтобы просмотреть и подтвердить все сообщения.
    2. Нажмите кнопку сообщения» , чтобы удалить все существующие сообщения, подтвердив их без просмотра. Нажмите кнопку «Удалить» для подтверждения.

В Cloud Shell также можно удалить сообщения, используя флаг --auto-ack с помощью простой команды pull :

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

Управление подписками

Подписки можно настраивать различными способами, как описано в разделе «Использование свойств подписки» .

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

Для получения дополнительной информации об аутентификации служебной учетной записи с помощью Device AccessСм. раздел «События» .