Отчет о состоянии

Report State — важная функция, позволяющая Google Home Action заблаговременно сообщать в Google Home Graph о последнем состоянии устройства пользователя, вместо того чтобы ждать запроса QUERY .

Report State отправляет в Google информацию о состоянии пользовательских устройств с указанным agentUserId (отправленным в исходном запросе SYNC ). Когда Google Assistant хочет выполнить действие, требующее понимания текущего состояния устройства, он может просто получить информацию о состоянии в Home Graph вместо того чтобы отправлять интент QUERY в различные сторонние облачные сервисы перед отправкой интента EXECUTE .

Без Report State , при наличии освещения от нескольких поставщиков в гостиной, команда «Окей, Google, ярче мою гостиную» требует обработки нескольких QUERY , отправленных в несколько облачных сервисов, вместо того, чтобы просто узнать текущие значения яркости на основе ранее полученных данных. Для наилучшего пользовательского опыта Assistant должен иметь текущее состояние устройства, не требуя повторного обращения к устройству.

После первоначальной SYNC устройства платформа отправляет намерение QUERY , которое собирает состояние устройства для заполнения Home Graph . После этого Home Graph сохраняет только то состояние, которое было отправлено с помощью Report State .

При вызове функции Report State убедитесь, что предоставляете полные данные о состоянии для заданного параметра. Home Graph обновляет состояние для каждого параметра отдельно и перезаписывает все данные для этого параметра при вызове функции Report State . Например, если вы сообщаете о состоянии для параметра StartStop , полезная нагрузка должна включать значения для параметров isRunning и isPaused .

Начать

Для внедрения функции Report State выполните следующие шаги:

Включите API Google HomeGraph

  1. В Google Cloud Console перейдите на страницу API HomeGraph .

    Перейдите на страницу API HomeGraph.
  2. Выберите проект, соответствующий идентификатору вашего проекта smart home .
  3. Нажмите ВКЛЮЧИТЬ .

Создать ключ учетной записи службы

Следуйте этим инструкциям, чтобы сгенерировать ключ учетной записи службы в Google Cloud Console :

Примечание : Убедитесь, что при выполнении этих шагов вы используете правильный проект GCP. Это проект, соответствующий идентификатору вашего проекта smart home .
  1. В Google Cloud Console перейдите на страницу «Учетные записи служб» .

    Перейдите на страницу «Учетные записи служб» .

    Возможно, вам потребуется выбрать проект, прежде чем вы перейдете на страницу «Учетные записи служб».

  2. Нажмите . Создайте учетную запись службы .

  3. В поле « Имя учетной записи службы» введите имя.

  4. В поле «Идентификатор учетной записи службы» введите идентификатор.

  5. В поле «Описание учетной записи службы» введите описание.

  6. Нажмите «Создать и продолжить» .

  7. В раскрывающемся списке «Роль» выберите «Учетные записи служб» > «Создание токенов идентификации OpenID Connect для учетных записей служб» .

  8. Нажмите «Продолжить» .

  9. Нажмите «Готово» .

  10. Выберите созданную вами учетную запись службы из списка учетных записей служб и выберите «Управление ключами» в меню «Действия .

  11. Выберите «Добавить ключ» > «Создать новый ключ» .

  12. В поле « Тип ключа» выберите вариант JSON .

  13. Нажмите «Создать». Будет создан JSON-файл, содержащий ключи, которые можно загрузить на ваш компьютер.

Подробные инструкции и информация о создании ключей учетных записей служб приведены в разделе «Создание и удаление ключей учетных записей служб» на сайте справки консоли Google Cloud.

Вызовите API

Выберите один из вариантов на вкладках ниже:

HTTP

Home Graph предоставляет HTTP-конечную точку.

  1. Используйте загруженный JSON-файл учетной записи службы для создания JSON-токена (JWT). Дополнительную информацию см. в разделе «Аутентификация с использованием учетной записи службы» .
  2. Получите токен доступа OAuth 2.0 с областью действия https://www.googleapis.com/auth/homegraph , используя oauth2l :
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Создайте JSON-запрос, используя agentUserId . Вот пример JSON-запроса для получения информации о состоянии отчета и уведомлений:
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
  6. Объедините JSON-данные состояния отчета и уведомления, а также токен в вашем HTTP POST-запросе к конечной точке Google Home Graph. Вот пример того, как выполнить запрос в командной строке с помощью curl , в качестве теста:
  7. curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \
      -H "Content-Type: application/json" \
      -d @request-body.json \
      "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
    

gRPC

Home Graph предоставляет конечную точку gRPC.

  1. Получите определение службы Protocol Buffers для API Home Graph.
  2. Для генерации клиентских заглушек для одного из поддерживаемых языков следуйте документации для разработчиков gRPC.
  3. Вызовите метод ReportStateAndNotification .

Node.js

Клиент Google API для Node.js предоставляет привязки для API Home Graph .

  1. Инициализируйте службу google.homegraph , используя учетные данные приложения по умолчанию .
  2. Вызовите метод reportStateAndNotification с объектом ReportStateAndNotificationRequest . Он вернет Promise с объектом ReportStateAndNotificationResponse .
const homegraphClient = homegraph({
  version: 'v1',
  auth: new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/homegraph'
  })
});

const res = await homegraphClient.devices.reportStateAndNotification({
  requestBody: {
    agentUserId: 'PLACEHOLDER-USER-ID',
    requestId: 'PLACEHOLDER-REQUEST-ID',
    payload: {
      devices: {
        states: {
          "PLACEHOLDER-DEVICE-ID": {
            on: true
          }
        }
      }
    }
  }
});
    

Java

Клиентская библиотека HomeGraph API для Java предоставляет привязки для HomeGraph API.

  1. Инициализируйте HomeGraphApiService , используя учетные данные приложения по умолчанию .
  2. Вызовите метод reportStateAndNotification с объектом ReportStateAndNotificationRequest . Он вернет объект ReportStateAndNotificationResponse .
  // Get Application Default credentials.
  GoogleCredentials credentials =
      GoogleCredentials.getApplicationDefault()
          .createScoped(List.of("https://www.googleapis.com/auth/homegraph"));

  // Create Home Graph service client.
  HomeGraphService homegraphService =
      new HomeGraphService.Builder(
              GoogleNetHttpTransport.newTrustedTransport(),
              GsonFactory.getDefaultInstance(),
              new HttpCredentialsAdapter(credentials))
          .setApplicationName("HomeGraphExample/1.0")
          .build();

  // Build device state payload.
  Map<?, ?> states = Map.of("on", true);

  // Report device state.
  ReportStateAndNotificationRequest request =
      new ReportStateAndNotificationRequest()
          .setRequestId("PLACEHOLDER-REQUEST-ID")
          .setAgentUserId("PLACEHOLDER-USER-ID")
          .setPayload(
              new StateAndNotificationPayload()
                  .setDevices(
                      new ReportStateAndNotificationDevice()
                          .setStates(Map.of("PLACEHOLDER-DEVICE-ID", states))));
  homegraphService.devices().reportStateAndNotification(request);
}
    

Отчет о результатах испытаний.

Рекомендуемые инструменты для выполнения этой задачи

Для подготовки вашей Cloud-to-cloud интеграции к сертификации важно протестировать Report State .

Для этого мы рекомендуем использовать инструмент Home Graph Viewer, который представляет собой автономное веб-приложение, не требующее загрузки или развертывания.

Панель мониторинга Report State по-прежнему доступна, но устарела и больше не поддерживается.

Панель мониторинга состояния отчета

Предварительные требования

Прежде чем тестировать интеграцию Cloud-to-cloud , вам потребуется ключ учетной записи службы и agentUserId . Если у вас уже есть ключ учетной записи службы и agentUserId см. раздел «Развертывание панели мониторинга Report State .

Разверните панель мониторинга состояния отчета.

Получив ключ учетной записи службы и идентификатор пользователя агента для вашего проекта, загрузите и разверните последнюю версию из панели мониторинга Report State . После загрузки последней версии следуйте инструкциям из прилагаемого файла README.MD .

После развертывания панели Report State получите к ней доступ по следующему URL-адресу (замените your_project_id на идентификатор вашего проекта):

http://<your-project-id>.appspot.com

На панели управления выполните следующие действия:

  • Выберите файл ключа вашей учетной записи.
  • Добавьте свой идентификатор пользователя агента.

Затем нажмите «Список» .

Отобразился список всех ваших устройств. После заполнения списка вы можете использовать кнопку «Обновить» , чтобы обновить состояние устройств. При изменении состояния устройства соответствующая строка будет выделена зеленым цветом.

Сообщить о расхождении в данных штатов

Точность определения состояния устройства на основе запроса измеряет, насколько хорошо последнее состояние устройства в отчете соответствует его статусу на момент запроса пользователем. Ожидается, что это значение составит 99,5%.

Ответы об ошибках

При вызове функции Report State вы можете получить один из следующих ответов об ошибке. Эти ответы поступают в виде кодов состояния HTTP.

  • 400 Bad Request — Сервер не смог обработать запрос, отправленный клиентом, из-за неверного синтаксиса . Распространенные причины включают некорректный JSON или использование null вместо "" для строкового значения.
  • 404 Not Found — Запрошенный ресурс не найден, но может стать доступен в будущем. Как правило, это означает, что мы не можем найти запрошенное устройство. Это также может означать, что учетная запись пользователя не связана с Google или мы получили недействительный agentUserId . Убедитесь, что agentUserId совпадает со значением, указанным в ответе SYNC , и что вы правильно обрабатываете намерения DISCONNECT .

Онлайн и офлайн отчетность по штатам

Если устройство отключено от сети, следует сообщить об этом. Сообщайте о состоянии устройства в течение пяти минут после его поведения. И наоборот, когда устройство возвращается в онлайн-режим, следует сообщить о его состоянии. Сообщить о состоянии устройства следует в течение пяти минут после его срабатывания. Как только устройство снова подключается к сети, партнер должен сообщать обо всех текущих состояниях устройства, используя API reportStateAndNotification . В этом примере показано, что в сети находится устройство типа light , и сообщается обо всех текущих состояниях устройства.
"requestId": "test-request-id",
  "agentUserId": "agent-user-1",
    "payload":{
      "devices": {
        "states": {
          "device-id-1": {
            "brightness": 65,
            "on": true,
            "online": true
          }
          "notifications": {},
        }
      }
    }