Stan raportu

Report State to ważna funkcja, która umożliwiaGoogle Home działaniu proaktywne zgłaszanie najnowszego stanu urządzenia użytkownika do Google Home Graph zamiast czekania na intencję QUERY.

Report State przekazuje do Google stany urządzeń użytkowników z określonymi agentUserId powiązanymi z tymi urządzeniami (wysyłanymi w pierwotnym żądaniu SYNC). Gdy Google Assistant chce wykonać działanie, które wymaga znajomości bieżącego stanu urządzenia, może po prostu sprawdzić informacje o stanie w Home Graph zamiast wysyłać intencję QUERY do różnych chmur innych firm przed wysłaniem intencji EXECUTE.

Bez Report State, gdy w salonie znajdują się światła od różnych dostawców, polecenie OK Google, rozjaśnij salon wymaga rozwiązania wielu intencji QUERY wysyłanych do różnych chmur, a nie tylko sprawdzenia bieżących wartości jasności na podstawie wcześniej zgłoszonych danych. Aby zapewnić użytkownikom jak najlepsze wrażenia, Assistant musi znać aktualny stan urządzenia bez konieczności wysyłania do niego żądania.

Po początkowym SYNC dla urządzenia platforma wysyła intencję QUERY, która zbiera stan urządzenia, aby wypełnić Home Graph. Po tym czasie Home Graph przechowuje tylko stan, który jest wysyłany z Report State.

Podczas wywoływania funkcji Report State pamiętaj, aby podać pełne dane o stanie dla danego cechy. Home Graph aktualizuje stany na podstawie poszczególnych cech i zastępuje wszystkie dane dotyczące danej cechy, gdy zostanie wykonane wywołanie Report State. Jeśli na przykład raportujesz stan cechy StartStop, ładunek musi zawierać wartości zarówno dla isRunning, jak i isPaused.

Rozpocznij

Aby wdrożyć Report State, wykonaj te czynności:

Włączanie interfejsu Google HomeGraph API

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

    Otwórz stronę HomeGraph API
  2. Wybierz projekt, który pasuje do Twojego 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: podczas wykonywania tych czynności upewnij się, że używasz właściwego projektu GCP. Jest to projekt, który pasuje do Twojego identyfikatora projektu smart home.
  1. W konsoli Google Cloud Console otwórz stronę Konta usługi.

    Otwórz stronę Konta usługi.

    Zanim przejdziesz na stronę Konta usługi, być może musisz wybrać projekt.

  2. Kliknij Utwórz konto usługi.

  3. W polu Nazwa konta usługi wpisz nazwę.

  4. W polu Identyfikator konta usługi wpisz identyfikator.

  5. W polu Opis konta usługi wpisz opis.

  6. Kliknij Utwórz i kontynuuj.

  7. W menu Rola wybierz Konta usługi > Twórca tokenów tożsamości OpenID Connect konta usługi.

  8. Kliknij Dalej.

  9. Kliknij Gotowe.

  10. Wybierz z listy kont usług utworzone przed chwilą konto usługi i w menu Działania kliknij Zarządzaj kluczami.

  11. Kliknij Dodaj klucz > Utwórz nowy klucz.

  12. W polu Typ klucza wybierz opcję JSON.

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

Szczegółowe instrukcje i informacje o tworzeniu kluczy konta usługi znajdziesz w artykule Tworzenie i usuwanie kluczy konta usługi w Centrum pomocy konsoli Google Cloud.

Wywoływanie interfejsu API

Wybierz opcję z kart poniżej:

HTTP

Home Graph udostępnia punkt końcowy HTTP.

  1. Użyj pobranego pliku JSON konta usługi, aby utworzyć token internetowy JSON (JWT). Więcej informacji znajdziesz w artykule Uwierzytelnianie za pomocą konta usługi.
  2. Uzyskaj token dostępu OAuth 2.0 z zakresem https://www.googleapis.com/auth/homegraph za pomocą narzędzia oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Utwórz żądanie JSON za pomocą znaku agentUserId. Oto przykładowe żądanie w formacie JSON dotyczące raportowania stanu i powiadomień:
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
  6. Połącz raport o stanie i powiadomienie w formacie JSON oraz token w żądaniu HTTP POST do punktu końcowego Google Home Graph. Ten przykład pokazuje, jak w ramach testu wysłać żądanie w wierszu poleceń za pomocą 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 udostępnia punkt końcowy gRPC.

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

Node.js

Google APIs Node.js Client udostępnia powiązania z interfejsem API Home Graph.

  1. Zainicjuj usługę google.homegraph za pomocą domyślnych danych logowania aplikacji.
  2. Wywołaj metodę reportStateAndNotification za pomocą ReportStateAndNotificationRequest. Zwraca Promise z elementem 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 HomeGraph API dla języka Java udostępnia powiązania z interfejsem Home Graph API.

  1. Zainicjuj HomeGraphApiService za pomocą domyślnych danych logowania aplikacji.
  2. Wywołaj metodę reportStateAndNotification z parametrem ReportStateAndNotificationRequest. Zwraca wartość 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

Zalecane narzędzia do tego zadania

Aby przygotować integrację Cloud-to-cloud do certyfikacji, należy ją przetestować Report State.

W tym celu zalecamy użycie Home Graphnarzędzia do wyświetlania, które jest samodzielną aplikacją internetową niewymagającą pobierania ani wdrażania.

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

Panel stanu raportu

Wymagania wstępne

Zanim będziesz mieć możliwość przetestowania integracji Cloud-to-cloud, musisz mieć klucz konta usługi i agentUserId. Jeśli masz już klucz konta usługi i agentUserId, przejdź do sekcji Wdrażanie Report State Dashboardu.

Wdrażanie panelu Raportowanie stanu

Gdy uzyskasz klucz konta usługi i identyfikator użytkownika agenta dla projektu, pobierz i wdroż najnowszą wersję z Report State panelu. Po pobraniu najnowszej wersji postępuj zgodnie z instrukcjami z dołączonego pliku README.MD.

Po wdrożeniu panelu Report State możesz uzyskać do niego dostęp 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 agentUserId

Następnie kliknij Lista.

Wyświetli się lista wszystkich Twoich urządzeń. Gdy lista zostanie wypełniona, możesz użyć przycisku Odśwież, aby zaktualizować stany urządzeń. Jeśli stan urządzenia ulegnie zmianie, wiersz zostanie podświetlony na zielono.

Zgłaszanie rozbieżności w stanie

Dokładność stanu raportu opartego na zapytaniu określa, w jakim stopniu najnowszy stan raportu dla urządzenia odpowiada jego statusowi, gdy użytkownik o niego pyta. Ta wartość powinna wynosić 99,5%.

Odpowiedzi z błędem

Podczas wywoływania interfejsu Report State możesz otrzymać jedną z tych odpowiedzi o błędach. Odpowiedzi te mają postać kodów stanu HTTP.

  • 400 Bad Request – serwer nie mógł przetworzyć żądania wysłanego przez klienta z powodu nieprawidłowej składni. Częste przyczyny to nieprawidłowy format JSON lub użycie znaku null zamiast znaku cudzysłowu „” w przypadku wartości ciągu znaków.
  • 404 Not Found – nie znaleziono żądanego zasobu, ale może on być dostępny w przyszłości. Zwykle oznacza to, że nie możemy znaleźć urządzenia, którego dotyczy żądanie. Może to też oznaczać, że konto użytkownika nie jest połączone z Google lub otrzymaliśmy nieprawidłowy identyfikator agentUserId. Upewnij się, że agentUserId jest zgodne z wartością podaną w odpowiedzi SYNC i że prawidłowo obsługujesz intencje DISCONNECT.

Raportowanie stanu online i offline

Gdy urządzenie jest offline, w ciągu 5 minut od jego działania należy zgłosić <code{"online": code="" dir="ltr" false}<="" translate="no"> do Report State. Z kolei, gdy urządzenie wróci do stanu online, w ciągu 5 minut od zmiany jego stanu należy zgłosić <code{"online": code="" dir="ltr" translate="no" true}<=""> do Report State. Gdy urządzenie wróci do trybu online, partner powinien zgłosić wszystkie bieżące stany urządzenia za pomocą interfejsu reportStateAndNotification API. Ten przykład pokazuje, że light urządzenie jest online i zgłasza wszystkie bieżące stany urządzenia.
"requestId": "test-request-id",
  "agentUserId": "agent-user-1",
    "payload":{
      "devices": {
        "states": {
          "device-id-1": {
            "brightness": 65,
            "on": true,
            "online": true
          }
          "notifications": {},
        }
      }
    }
</code{"online":></code{"online":>