Report State ist eine wichtige Funktion, mit der die
Google Home Aktion den aktuellen Status des
Geräts des Nutzers proaktiv an Google Home Graph senden kann, anstatt auf eine
QUERY Absicht zu warten.
Report State meldet an Google die Status von Nutzergeräten
mit der angegebenen agentUserId (in der ursprünglichen
SYNC Anfrage). Wenn Google Assistant eine Aktion ausführen möchte
für die der aktuelle Status eines Geräts erforderlich ist, kann er die Statusinformationen einfach im Home Graph nachschlagen, anstatt
vor dem Senden der EXECUTE-Absicht eine QUERY-Absicht an verschiedene Drittanbieter-Clouds zu senden.
Ohne Report State erfordert der Befehl Ok Google, mach das Wohnzimmer heller bei mehreren Lampen von verschiedenen Anbietern in
einem Wohnzimmer die Auflösung mehrerer QUERY-Absichten, die an mehrere Clouds gesendet werden, anstatt einfach die aktuellen Helligkeitswerte basierend auf den zuvor gemeldeten Werten nachzuschlagen. Für eine optimale Nutzererfahrung muss
Assistant den aktuellen Status eines Geräts kennen,
ohne dass eine Round-Trip-Kommunikation mit dem Gerät erforderlich ist.
Nach der ersten SYNC für ein Gerät sendet die Plattform eine QUERY-Absicht
, mit der der Status des Geräts erfasst wird, um Home Graph zu füllen.
Danach speichert Home Graph nur den Status, der
mit Report State gesendet wird.
Wenn Sie Report State aufrufen, müssen Sie vollständige
Statusdaten für ein bestimmtes Merkmal angeben. Home Graph aktualisiert die Status auf
Merkmalsbasis und überschreibt alle Daten für dieses Merkmal, wenn ein
Report State Aufruf erfolgt. StartStopmal „StartStop“ melden, muss die Nutzlast
Werte für beide isRunning und isPaused enthalten.
Jetzt starten
So implementieren Sie Report State:
Google HomeGraph API aktivieren
-
Rufen Sie in der Google Cloud Console die Seite HomeGraph API auf.
Zur Seite „HomeGraph API“ - Wählen Sie das Projekt aus, das Ihrer smart home Projekt-ID entspricht.
- Klicken Sie auf AKTIVIEREN.
Dienstkontoschlüssel erstellen
Folgen Sie dieser Anleitung, um einen Dienstkontoschlüssel in der Google Cloud Console zu generieren:
-
Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.
Zur Seite „Dienstkonten“.Möglicherweise müssen Sie ein Projekt auswählen, bevor Sie zur Seite „Dienstkonten“ weitergeleitet werden.
Klicken Sie auf und dann auf Dienstkonto erstellen.
Geben Sie im Feld Dienstkontoname einen Namen ein.
Geben Sie im Feld Dienstkonto-ID eine ID ein.
Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein.
Klicken Sie auf Erstellen und fortfahren.
Wählen Sie im Drop-down-Menü Rolle die Option Dienstkonten > Ersteller von OpenID Connect-Identitätstokens für Dienstkonten aus.
Klicken Sie auf Weiter.
Klicken Sie auf Fertig.
Wählen Sie das gerade erstellte Dienstkonto in der Liste der Dienstkonten aus und wählen Sie Schlüssel verwalten im Menü Aktionen aus.
Wählen Sie Schlüssel hinzufügen > Neuen Schlüssel erstellen aus.
Wählen Sie für den Schlüsseltyp die Option JSON aus.
Klicken Sie auf Erstellen. Eine JSON-Datei mit Ihrem Schlüssel wird auf Ihren Computer heruntergeladen.
API aufrufen
Wählen Sie eine Option auf den Tabs unten aus:
HTTP
Der Home Graph bietet einen HTTP-Endpunkt
- Erstellen Sie mit der heruntergeladenen JSON-Datei des Dienstkontos ein JSON Web Token (JWT). Weitere Informationen finden Sie unter Mit einem Dienstkonto authentifizieren.
- Rufen Sie mit
oauth2l ein OAuth 2.0-Zugriffstoken mit dem
https://www.googleapis.com/auth/homegraphBereich ab: - Erstellen Sie die JSON-Anfrage mit der
agentUserId. Hier ist eine Beispiel-JSON-Anfrage für „Status melden“ und Benachrichtigungen: - Kombinieren Sie die JSON-Anfrage für „Status melden“ und Benachrichtigungen mit dem Token in Ihrer HTTP POST
Anfrage an den Google Home Graph-Endpunkt. Hier ist ein Beispiel dafür, wie
Sie die Anfrage in der Befehlszeile mit
curlals Test ausführen können:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "requestId": "123ABC", "agentUserId": "user-123", "payload": { "devices": { "states": { "light-123": { "on": true } } } } }
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
Der Home Graph bietet einen gRPC-Endpunkt
- Rufen Sie die Protocol Buffers-Dienstdefinition für die Home Graph API ab.
- Folgen Sie der gRPC-Entwicklerdokumentation, um Client-Stubs für eine der unterstützten Sprachen zu generieren.
- Rufen Sie die Methode ReportStateAndNotification auf.
Node.js
Der Google APIs Node.js-Client bietet Bindungen für die Home Graph API.
- Initialisieren Sie den
google.homegraphDienst mit Standardanmeldedaten für Anwendungen. - Rufen Sie die
reportStateAndNotificationMethode mit der ReportStateAndNotificationRequest auf. Sie gibt einPromisemit 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 bietet Bindungen für die Home Graph API.
- Initialisieren Sie
HomeGraphApiServicemit Standardanmeldedaten für Anwendungen. - Rufen Sie die
reportStateAndNotificationMethode mit derReportStateAndNotificationRequestauf. Sie gibt eineReportStateAndNotificationResponsezurü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).execute(); }
„Status melden“ testen
Damit Ihre Cloud-to-cloud Integration für Zertifizierung bereit ist, ist es wichtig, Report State zu testen.
Dazu empfehlen wir das Tool Home Graph Viewer, eine eigenständige Webanwendung, für die kein Download oder keine Bereitstellung erforderlich ist.
Das Report State Dashboard ist weiterhin verfügbar, wurde aber eingestellt und wird nicht mehr unterstützt.
Dashboard „Status melden“
Vorbereitung
Bevor Sie Ihre Cloud-to-cloud Integration testen können, benötigen Sie
Ihren Dienstkontoschlüssel und Ihre agentUserId. Wenn Sie bereits Ihren
Dienstkontoschlüssel und agentUserId haben, lesen Sie den Abschnitt Dashboard
Report State bereitstellen.
Dashboard „Status melden“ bereitstellen
Sobald Sie den Dienstkontoschlüssel und die Agent-Nutzer-ID für Ihr Projekt haben,
laden Sie die neueste Version von
Report State
Dashboardherunter und stellen Sie sie bereit.
Folgen Sie nach dem Herunterladen der neuesten Version der Anleitung in der Datei README.MD.
Nachdem Sie das Report State Dashboard bereitgestellt haben, rufen Sie es über die folgende URL auf (ersetzen Sie your_project_id durch Ihre Projekt-ID):
http://<your-project-id>.appspot.com
Führen Sie auf dem Dashboard folgende Schritte aus:
- Wählen Sie Ihre Kontoschlüsseldatei aus.
- Fügen Sie Ihre agentUserId hinzu.
Klicken Sie dann auf Liste.
Alle Ihre Geräte werden aufgelistet. Sobald die Liste gefüllt ist, können Sie mit der Schaltfläche Aktualisieren die Gerätestatus aktualisieren. Wenn sich der Gerätestatus ändert, wird die Zeile grün hervorgehoben.
Abweichungen bei „Status melden“
Die Genauigkeit des abfragebasierten Statusberichts gibt an, wie gut der neueste Statusbericht für ein Gerät mit dem Status des Geräts übereinstimmt, wenn ein Nutzer ihn abfragt. Dieser Wert sollte bei 99,5 % liegen. Weitere Informationen zum aktuellen Status der Genauigkeit von „Status melden“ Ihres Projekts finden Sie unter Gerätezustand – Statusgenauigkeit. Sie können die Details des Protokolls für Abweichungen bei „Status melden“ aus dem Log-Explorer aufrufen.
Hier ist ein Beispiel für ein Protokoll für Abweichungen bei „Status melden“:
{
"insertId": "abcdefgh",
"jsonPayload": {
"reportStateLog": {
"result": "INACCURATE",
"detailedAccuracyResult": "DETAILED_ACCURACY_RESULT_INACCURATE",
"isOffline": false,
"queriedTime": "2026-01-17T03:22:01.732938Z",
"reportedTime": "2024-11-30T15:24:34.052751Z",
"agentId": "google-smart-home-agent-id-example",
"requestId": "84920571364829501736",
"queryReportStateDifferences": {
"queryState": "on_off \t {\n on: true\n}\n",
"reportState": "on_off \t {\n on: false\n}\n"
},
"traitName": "TRAIT_ON_OFF",
"snapshotTime": "2026-01-17T03:22:01.732938Z",
"isMissingField": false,
"deviceType": "action.devices.types.OUTLET",
"stateName": "on",
"deviceId": "sample-device-id",
"accuracy": "INACCURATE"
}
},
"resource": {
"type": "assistant_action_project",
"labels": {
"project_id": "google-smart-home-agent-id-example"
}
},
"timestamp": "2026-01-17T07:16:13.712708257Z",
"severity": "ERROR",
"logName": "projects/google-smart-home-agent-id-example/logs/assistant_smarthome%2Fassistant_smarthome_logs",
"receiveTimestamp": "2026-01-17T07:16:13.712708257Z"
}Felddefinitionen für das Protokoll für Abweichungen bei „Status melden“
| Feldname | Definition |
|---|---|
detailedAccuracyResult |
Eine Diagnosezusammenfassung, in der die spezifische Abweichung zwischen der Nutzlast von „Status melden“ und der Antwort der QUERY-Absicht erläutert wird. |
queriedTime |
Der genaue Zeitstempel, als Google die QUERY-Antwort vom Fulfillment-Anbieter erhalten hat. |
reportedTime |
Der genaue Zeitstempel, als Google die Benachrichtigung „Status melden“ erhalten hat. |
agentId |
Die eindeutige Kennung für Ihr Projekt (in der Regel die Projekt-ID in der Google Home Developer Console). |
requestId |
Die eindeutige Korrelations-ID, die mit der spezifischen QUERY-Antwort verknüpft ist. |
queryReportStateDifferences |
Ein Objekt oder eine Liste, in dem bzw. der die spezifischen Gerätestatusattribute hervorgehoben werden, die sich zwischen der QUERY-Antwort und den Daten von „Status melden“ unterscheiden. |
Fehlerantworten
Beim Aufrufen von Report State können Sie eine der folgenden Fehlerantworten erhalten. Diese Antworten werden in Form von HTTP-Statuscodes gesendet.
400 Fehlerhafte Anfrage
Der Server konnte die vom Client gesendete Anfrage aufgrund einer
ungültigen Syntax nicht verarbeiten. Häufige Ursachen sind fehlerhaftes JSON oder die Verwendung von null anstelle von "" für einen Stringwert.
404 Nicht gefunden
Die angeforderte Ressource wurde nicht gefunden, ist aber möglicherweise in Zukunft verfügbar.
In der Regel bedeutet dies, dass wir das angeforderte Gerät nicht finden können. Es kann auch bedeuten, dass das Nutzerkonto nicht mit Google verknüpft ist oder wir eine ungültige agentUserId erhalten haben. Achten Sie darauf, dass die agentUserId mit dem in Ihrer
SYNC-Antwort angegebenen Wert übereinstimmt und dass Sie
DISCONNECT-Absichten ordnungsgemäß verarbeiten.
Wenn ein Aufruf von „Status melden“ mit einem 404 NOT_FOUND-Fehler fehlschlägt, deutet dies auf eine
Synchronisierungsabweichung zwischen Ihrer Cloud und Home Graph hin.
Das kann passieren, wenn ein Gerät aus Home Graph entfernt wird oder wenn
ein Nutzer die Verknüpfung seines Kontos aufhebt.
So beheben Sie 404-Fehler von „Status melden“:
- Status des Nutzerkontos prüfen: Rufen Sie
devices.syncfür dieagentUserIdauf, die einen 404-Fehler zurückgegeben hat. So können Sie feststellen, ob der Fehler für das gesamte Nutzerkonto oder für ein bestimmtes Gerät gilt.- Wenn
SYNCeinen 404-Fehler zurückgibt, ist das Nutzerkonto nicht mehr mit Google verknüpft. Senden Sie für die Geräte dieses Nutzers keine Statusberichte mehr und fordern Sie keine Synchronisierung mehr an. - Wenn
SYNCden Statuscode 200 OK zurückgibt, ist das Nutzerkonto weiterhin verknüpft. Der 404-Fehler ist also gerätespezifisch.
- Wenn
- Geräteliste abgleichen: Wenn
SYNCden Statuscode 200 OK zurückgibt, müssen Sie ermitteln, welche Geräte Google nicht mehr kennt. Wir empfehlen, die Liste der Geräte, die Google für den Nutzer hat, mit Ihrer Gerätedatenbank zu vergleichen und Geräte in Ihrem System zu identifizieren, die nicht in der Liste von Google enthalten sind. Wenn ein Gerät mit Google synchronisiert werden soll, aber noch nicht für Google freigegeben wurde, verwenden SieSYNC, um sicherzustellen, dass das Gerät mit Google synchronisiert wird. Wenn die Verknüpfung eines Geräts mit Google aufgehoben werden soll, melden Sie den Status für dieses Gerät nicht mehr und melden Sie den Status für andere gültige Geräte unter dieseragentUserIdweiterhin.
Online- und Offline-Statusberichte
Wenn ein Gerät offline ist, sollten Sie innerhalb von fünf Minuten nach dem Verhalten des Geräts <code{"online": code="" dir="ltr" false}<="" translate="no"> an „Status melden“ senden. Wenn ein Gerät wieder online ist, sollten Sie innerhalb von fünf Minuten nach dem Verhalten des Geräts <code{"online": code="" dir="ltr" translate="no" true}<=""> an „Status melden“ senden. Wenn ein Gerät wieder online ist, sollte der Partner alle aktuellen Gerätestatus mit derreportStateAndNotification API melden.
In diesem Beispiel ist ein Gerät vom Typ light online und meldet alle aktuellen Gerätestatus.
"requestId": "test-request-id",
"agentUserId": "agent-user-1",
"payload":{
"devices": {
"states": {
"device-id-1": {
"brightness": 65,
"on": true,
"online": true
}
"notifications": {},
}
}
}