Stan raportu

1

Report State to ważna funkcja, dzięki której akcja Home aktywnie przesyła do Google Home Graph informację o najnowszym stanie urządzenia użytkownika, zamiast czekać na intencję QUERY.

Aplikacja Report State zgłasza do Google stany urządzeń użytkowników, z którymi jest powiązany określony element agentUserId (wysłany w pierwotnym żądaniu SYNC). Gdy Google Assistant chce wykonać działanie, które wymaga zrozumienia bieżącego stanu urządzenia, może wyszukać informacje o stanie w Home Graph, zamiast wysyłać intencję QUERY do różnych chmur zewnętrznych przed wykonaniem intencji EXECUTE.

Bez funkcji Report State w salonie, w przypadku oświetlenia od różnych dostawców, polecenie OK Google, rozjaśnij salon, wymaga rozwiązania kilku intencji QUERY wysyłanych do wielu chmur, w odróżnieniu od sprawdzania bieżących wartości jasności na podstawie informacji, które zostały zgłoszone wcześniej. Aby zadbać o wygodę użytkowników, Assistant musi zachowywać bieżący stan urządzenia bez konieczności przesyłania go w obie strony.

Po początkowej wartości SYNC dotyczącej urządzenia platforma wysyła intencję QUERY, która zbiera stan urządzenia i wypełnia je Home Graph. Po tym czasie Home Graph przechowuje tylko stan wysłany za pomocą Report State.

Przy wywołaniu funkcji Report State podaj pełne dane o stanie dla danej cechy. Home Graph aktualizuje stany na podstawie poszczególnych cech i zastępuje wszystkie powiązane z nimi dane po wywołaniu Report State. Jeśli np. raportujesz stan dla cechy StartStop, ładunek musi zawierać wartości zarówno isRunning, jak i isPaused.

Rozpocznij

Aby zaimplementować funkcję Report State, wykonaj te czynności:

Włączanie interfejsu Google HomeGraph API

  1. W Google Cloud Console otwórz stronę HomeGraph API.

    Otwórz stronę interfejsu HomeGraph API
  2. Wybierz projekt, który pasuje do identyfikatora projektu smart home.
  3. Kliknij WŁĄCZ.

Tworzenie klucza konta usługi

Aby wygenerować klucz konta usługi z Google Cloud Console, wykonaj te instrukcje:

Uwaga: upewnij się, że podczas wykonywania tych czynności używasz właściwego projektu GCP. To jest projekt, który pasuje do identyfikatora projektu smart home.
  1. W Google Cloud Console otwórz stronę Utwórz klucz konta usługi.

    Otwórz stronę tworzenia klucza konta usługi
  2. Z listy Konto usługi wybierz Nowe konto usługi.
  3. W polu Nazwa konta usługi wpisz nazwę.
  4. W polu Identyfikator konta usługi wpisz identyfikator.
  5. Z listy Rola wybierz Konta usługi > Twórca tokenów konta usługi.

  6. W polu Typ klucza wybierz opcję JSON.

  7. Kliknij Utwórz. Na komputer zostanie pobrany plik JSON zawierający klucz.

Wywoływanie interfejsu API

Wybierz opcję z tych kart:

HTTP

Home Graph udostępnia punkt końcowy HTTP

  1. Użyj pobranego pliku JSON konta usługi, aby utworzyć token sieciowy JSON (JWT). Więcej informacji znajdziesz w artykule o uwierzytelnianiu za pomocą konta usługi.
  2. Uzyskaj token dostępu OAuth 2.0 z zakresem https://www.googleapis.com/auth/homegraph za pomocą oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Utwórz żądanie JSON za pomocą agentUserId. Oto przykładowe żądanie stanu raportu i powiadomienia w formacie JSON:
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
    
  6. Połącz stan raportu i kod JSON powiadomienia oraz token w żądaniu HTTP POST z punktem końcowym grafu Google Home Graph. Oto przykład wykonania żądania w wierszu poleceń przy użyciu interfejsu curl w ramach testu:
  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 udostępnia punkt końcowy gRPC

  1. Pobierz definicję usługi buforów protokołów dla interfejsu Home Graph API.
  2. Postępuj zgodnie z dokumentacją dla programistów gRPC, aby wygenerować atrapy klienta w jednym z obsługiwanych języków.
  3. Wywołaj metodę ReportStateAndNotification.

Node.js

Klient Node.js interfejsów API Google zapewnia powiązania dla interfejsu Home Graph API.

  1. Zainicjuj usługę google.homegraph przy użyciu domyślnych danych logowania aplikacji.
  2. Wywołaj metodę reportStateAndNotification za pomocą metody ReportStateAndNotificationRequest. Zwraca Promise z funkcją 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

Biblioteka klienta interfejsu HomeGraph API for Java zawiera powiązania dla interfejsu Home Graph API.

  1. Zainicjuj HomeGraphApiService przy użyciu domyślnych danych logowania aplikacji.
  2. Wywołaj metodę reportStateAndNotification za pomocą funkcji ReportStateAndNotificationRequest. Zwraca 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);
}
    

Stan raportu z testu

Narzędzia zalecane do tego zadania

Aby przygotować działanie do uzyskania certyfikatu, warto przetestować Report State.

Zalecamy korzystanie z przeglądarki Home Graph – jest to samodzielna aplikacja internetowa, która nie wymaga pobierania ani wdrażania.

Panel Report State jest nadal dostępny, ale został wycofany i nie jest już obsługiwany.

Panel stanu raportu

Wymagania wstępne

Aby przetestować działanie, potrzebujesz klucza konta usługi i agentUserId. Jeśli masz już klucz konta usługi i zapoznaj się z sekcją agentUserId na temat wdrażania panelu Report State.

Wdrażanie panelu stanu raportu

Po uzyskaniu klucza konta usługi i identyfikatora użytkownika agenta dla projektu pobierz i wdróż najnowszą wersję z Report Statepanelu. Po pobraniu najnowszej wersji postępuj zgodnie z instrukcjami w dołączonym pliku README.MD.

Po wdrożeniu panelu Report State otwórz go pod tym adresem URL (zastąp your_project_id identyfikatorem projektu):

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

W panelu wykonaj te czynności:

  • Wybierz plik klucza konta
  • Dodaj identyfikator użytkownika agenta

Następnie kliknij Lista.

Na liście znajdują się wszystkie Twoje urządzenia. Gdy lista zostanie zapełniona, możesz użyć przycisku Odśwież, aby zaktualizować stany urządzeń. Gdy zmieni się stan urządzenia, wiersz zostanie wyróżniony na zielono.

Odpowiedzi na błędy

Podczas połączenia z numerem Report State możesz otrzymać jeden z poniższych błędów. Odpowiedzi te mają postać kodów stanu HTTP.

  • 400 Bad Request – serwer nie może przetworzyć żądania wysłanego przez klienta z powodu nieprawidłowej składni. Typowe przyczyny to nieprawidłowy format JSON lub użycie null zamiast „” jako wartości ciągu znaków.
  • 404 Not Found – nie udało się znaleźć żądanego zasobu, ale może być dostępny w przyszłości. Zwykle oznacza to, że nie możemy znaleźć żądanego urządzenia. Może to też oznaczać, że konto użytkownika nie jest połączone z Google lub otrzymaliśmy nieprawidłowy agentUserId. Upewnij się, że agentUserId jest zgodny z wartością w odpowiedzi SYNC i że poprawnie obsługujesz intencje DISCONNECT.