Berichtsstatus

Report State ist eine wichtige Funktion, mit der das Home Die Aktion meldet proaktiv den aktuellen Status der Gerät des Nutzers wieder auf Google Home Graph zurücksetzen, anstatt auf eine QUERY-Intent.

Report State meldet Google den Status der Nutzergeräte mit den angegebenen agentUserId, die ihnen zugeordnet sind (gesendet im Original SYNC Anfrage). Wenn Google Assistant eine Aktion ausführen möchte der den aktuellen Status eines Geräts verstehen muss, stattdessen die Statusinformationen in Home Graph vor Ausgabe des Intents QUERY an verschiedene Drittanbieter-Clouds EXECUTE-Intent.

Ohne Report State, angesichts von Lampen verschiedener Anbieter in der Befehl Ok Google, mach mein Wohnzimmer heller Mehrere QUERY-Intents, die an mehrere Clouds gesendet wurden, werden aufgelöst, die aktuellen Helligkeitswerte auf Grundlage dessen, die zuvor gemeldet wurden. Für eine optimale Nutzererfahrung Assistant muss den aktuellen Status eines Geräts haben, ohne dass ein Umweg zum Gerät erforderlich ist.

Nach dem ersten SYNC für ein Gerät sendet die Plattform den Intent QUERY. der den Gerätestatus erfasst, um Home Graph auszufüllen. Danach speichert Home Graph nur noch den Status gesendet mit Report State.

Wenn Sie Report State aufrufen, achten Sie darauf, für ein bestimmtes Merkmal. Home Graph aktualisiert Status in einem und überschreibt alle Daten für dieses Merkmal, wenn ein Report State Anruf wird getätigt. Wenn Sie beispielsweise für das Trait StartStop erstellt haben, wird die Nutzlast muss Werte für isRunning und isPaused enthalten.

Erste Schritte

So implementierst du Report State:

Google HomeGraph API aktivieren

  1. Rufen Sie in der Google Cloud Console die Seite HomeGraph API auf.

    Zur Seite „HomeGraph API“
  2. Wählen Sie das Projekt aus, das Ihrer smart home-Projekt-ID entspricht.
  3. Klicken Sie auf AKTIVIEREN.

Dienstkontoschlüssel erstellen

Folgen Sie dieser Anleitung, um einen Dienstkontoschlüssel aus Google Cloud Console zu generieren:

Hinweis: Achten Sie darauf, dass Sie bei der Ausführung das richtige GCP-Projekt verwenden. führen Sie diese Schritte aus. Dies ist das Projekt, das Ihrer smart home-Projekt-ID entspricht.
  1. Rufen Sie in der Google Cloud Console die Seite Dienstkontoschlüssel erstellen auf.

    Zur Seite Dienstkontoschlüssel erstellen
  2. Wählen Sie in der Liste Dienstkonto Neues Dienstkonto.
  3. Geben Sie im Feld Dienstkontoname einen Namen ein.
  4. Geben Sie im Feld Dienstkonto-ID eine ID ein.
  5. Wählen Sie in der Liste Rolle die Option Dienstkonten aus. <ph type="x-smartling-placeholder"></ph> Ersteller von Dienstkonto-Token.

  6. Wählen Sie als Schlüsseltyp die Option JSON aus.

  7. Klicken Sie auf Erstellen. Eine JSON-Datei, die Ihren Schlüssel enthält auf Ihren Computer herunterladen.

API aufrufen

Wählen Sie aus den folgenden Tabs eine Option aus:

HTTP

Home Graph stellt einen HTTP-Endpunkt bereit.

  1. Verwenden Sie die heruntergeladene JSON-Datei des Dienstkontos, um eine JSON-Webdatei zu erstellen Token (JWT). Weitere Informationen finden Sie unter <ph type="x-smartling-placeholder"></ph> Authentifizierung mit einem Dienstkonto.
  2. Fordern Sie ein OAuth 2.0-Zugriffstoken mit der https://www.googleapis.com/auth/homegraph Bereich verwendet oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Erstellen Sie die JSON-Anfrage mit agentUserId. Hier sehen Sie eine JSON-Beispielanfrage für den Berichtsstatus und die Benachrichtigung:
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
    
  6. Kombinieren Sie den Berichtsstatus und die JSON-Benachrichtigung (Benachrichtigung) sowie das Token in Ihrem HTTP-POST-Befehl. an den Google Home Graph-Endpunkt senden. Hier ist ein Beispiel dafür, um die Anfrage in die Befehlszeile mit curl zu stellen, wie 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 stellt einen gRPC-Endpunkt bereit.

  1. Rufen Sie die Protokollzwischenspeicher-Dienstdefinition für die Home Graph API ab.
  2. Folgen Sie der gRPC-Entwicklerdokumentation, um Client-Stubs für eine der unterstützten Sprachen zu generieren.
  3. Rufen Sie die Methode ReportStateAndNotification auf.

Node.js

Der Google APIs Node.js-Client stellt Bindungen für die Home Graph API bereit.

  1. Initialisieren Sie den google.homegraph-Dienst mit den Standardanmeldedaten für Anwendungen.
  2. Rufen Sie die Methode reportStateAndNotification mit ReportStateAndNotificationRequest auf. Sie gibt ein Promise mit der ReportStateAndNotificationResponse zurück.
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

Die HomeGraph API-Clientbibliothek für Java enthält Bindungen für die Home Graph API.

  1. Initialisieren Sie HomeGraphApiService mit den Standardanmeldedaten für Anwendungen.
  2. Rufen Sie die Methode reportStateAndNotification mit ReportStateAndNotificationRequest auf. Sie gibt ReportStateAndNotificationResponse zurück.
  // 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);
}
    

Testberichtsstatus

<ph type="x-smartling-placeholder"></ph>
Empfohlene Tools für diese Aufgabe

Um Ihre Aktion auf die Zertifizierung vorzubereiten, ist es wichtig, Report State

Dafür empfehlen wir den Home Graph Viewer eine eigenständige Webanwendung, die weder heruntergeladen noch bereitgestellt werden muss.

Das Report State-Dashboard ist weiterhin verfügbar, und wird nicht mehr unterstützt.

Berichtsstatus-Dashboard

Vorbereitung

Sie benötigen Ihr Dienstkonto, um Ihre Aktion testen zu können Schlüssel und agentUserId. Wenn Sie bereits Ihren Dienstkontoschlüssel und agentUserId siehe Report State bereitstellen Dashboard:

Dashboard für Berichtsstatus bereitstellen

Sobald Sie den Dienstkontoschlüssel und die Nutzer-ID des Agents für Ihr Projekt haben, laden Sie die neueste Version von der Report State Dashboard. Nachdem Sie die neueste Version heruntergeladen haben, folgen Sie der Anleitung auf der enthaltene README.MD-Datei.

Nachdem Sie das Report State-Dashboard bereitgestellt haben, greifen Sie auf das Dashboard aus der folgenden URL (ersetzen Sie your_project_id durch Ihren Projekt-ID):

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

Führen Sie im Dashboard die folgenden Schritte aus:

  • Kontoschlüsseldatei auswählen
  • Agent-UserId hinzufügen

Klicken Sie dann auf Liste.

Daraufhin werden alle Ihre Geräte angezeigt. Sobald die Liste gefüllt ist, können Sie den Schaltfläche Aktualisieren, um den Gerätestatus zu aktualisieren. Wenn sich der Gerätestatus ändert, wird die Zeile grün hervorgehoben.

Fehlermeldungen

Beim Aufrufen von Report State Diese Antworten haben den HTTP-Status Codes.

  • 400 Bad Request: Der Server konnte die Datei nicht verarbeiten. Die Anfrage, die vom Client aufgrund einer ungültigen Syntax gesendet wurde Häufige Ursachen Fehlerhaftes JSON einschließen oder null anstelle von "" verwenden für einen Stringwert.
  • 404 Not Found – Die angeforderte Ressource konnte nicht erstellt werden. gefunden, aber möglicherweise in Zukunft verfügbar sein. In der Regel bedeutet das, dass wir kann das angeforderte Gerät nicht finden. Es kann auch bedeuten, dass das Nutzerkonto ist nicht mit Google verknüpft oder wir haben eine ungültige agentUserId erhalten. Sicherstellen, dass die agentUserId mit dem Wert übereinstimmt, der in Ihrem SYNC-Antwort erhalten und DISCONNECT-Intents verarbeiten.