Stan raportu

Report State to ważna funkcja, która pozwala Home Aktywne przekazywanie informacji o najnowszym stanie z powrotem na urządzenie Google Home Graph, zamiast czekać na QUERY zamiar.

Report State przekazuje Google informacje o stanie urządzeń użytkowników z powiązanymi z nimi agentUserId (wysłanymi w oryginalnej wersji SYNC prośba). Gdy Google Assistant chce podjąć działanie które wymagają zrozumienia bieżącego stanu urządzenia, można po prostu sprawdzić, zaktualizuj informacje o stanie w Home Graph, wysłanie intencji QUERY do różnych chmur zewnętrznych przed udostępnieniem EXECUTE zamiar.

Bez: Report State, dane światła od różnych dostawców w: salonu, polecenie OK Google, zwiększ jasność salonu, rozpoznawania wielu intencji QUERY wysyłanych do wielu chmur, sprawdzanie bieżących wartości jasności na podstawie wcześniej zgłoszone. Aby zadbać o jak najlepsze wrażenia użytkowników, Assistant musi mieć bieżący stan urządzenia. bez konieczności przesyłania danych w obie strony.

Po początkowej wartości SYNC dotyczącej urządzenia platforma wysyła intencję QUERY zbierający stan urządzenia w celu wypełnienia parametru Home Graph. Po tym czasie Home Graph przechowuje tylko stan wysłano za pomocą: Report State.

Dzwoniąc pod numer Report State, podaj pełne informacje i standaryzować dane o określonej cechie. Home Graph stany aktualizacji w z danymi cechami i zastępuje wszystkie dotyczące ich dane, Wykonano połączenie typu Report State. Na przykład, jeśli przesyłasz dane dla cechy StartStop, ładunek musi zawierać wartości isRunning 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 zadań korzystasz z właściwego projektu GCP. te czynności. 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. Na liście 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. Plik JSON zawierający klucz pobrane na komputer.

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ć plik JSON Web Token (JWT). Więcej informacji: Uwierzytelnianie przy użyciu konta usługi.
  2. Uzyskaj token dostępu OAuth 2.0 za pomocą https://www.googleapis.com/auth/homegraph zakres używa 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 plik JSON powiadomienia z tokenem w żądaniu HTTP POST do punktu końcowego Google Home Graph. Oto przykład, żądania w wierszu poleceń za pomocą polecenia curl jako test:
  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ć się do uzyskania certyfikatu, warto przetestować Report State

Zalecamy korzystanie z przeglądarki Home Graph, czyli samodzielną aplikację internetową, która nie wymaga pobierania ani wdrożenia.

Panel Report State jest nadal dostępny, ale wycofane i nie są już obsługiwane.

Panel stanu raportu

Wymagania wstępne

Aby przetestować działanie, musisz mieć konto usługi Klucz i agentUserId. Jeśli masz już klucz konta usługi i agentUserId – zobacz Wdrażanie Report State Panel.

Wdrażanie panelu stanu raportu

Gdy już masz klucz konta usługi i identyfikator użytkownika agenta dla swojego projektu, pobierz i wdróż najnowszą wersję z Report State Panel. Po pobraniu najnowszej wersji postępuj zgodnie z instrukcjami uwzględniono README.MD plik.

Po wdrożeniu panelu Report State otwórz panelu pod następującym adresem URL (zastąp your_project_id swoim identyfikator 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. Po zapełnieniu listy możesz użyć funkcji Odśwież, aby zaktualizować stany urządzeń. W przypadku zmiany stanu urządzenia wiersz jest zaznaczony na zielono.

Odpowiedzi na błędy

Podczas rozmowy może pojawić się jeden z tych błędów – Report State Odpowiedzi te mają postać stanu HTTP. kodami.

  • 400 Bad Request – serwer nie może przetworzyć żądanie wysłane przez klienta z powodu nieprawidłowej składni. Najczęstsze przyczyny zawierają nieprawidłowy plik JSON lub używasz atrybutu null zamiast „” dla wartości ciągu.
  • 404 Not Found – nie można uzyskać żądanego zasobu ale mogą być dostępne w przyszłości. Zwykle oznacza to, że nie może znaleźć żądanego urządzenia. Może to też oznaczać, że konto użytkownika Adres nie jest połączony z Google lub otrzymaliśmy nieprawidłowy adres agentUserId. Sprawdź, czy że agentUserId jest zgodne z wartością w polu odpowiedź SYNC działa prawidłowo. z intencjami DISCONNECT.