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
-
W sekcji Google Cloud Console otwórz stronę HomeGraph API.
Otwórz stronę HomeGraph API - Wybierz projekt, który pasuje do Twojego identyfikatora projektu smart home.
- Kliknij WŁĄCZ.
Tworzenie klucza konta usługi
Aby wygenerować klucz konta usługi z Google Cloud Console, wykonaj te instrukcje:
-
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.
Kliknij
Utwórz konto usługi.W polu Nazwa konta usługi wpisz nazwę.
W polu Identyfikator konta usługi wpisz identyfikator.
W polu Opis konta usługi wpisz opis.
Kliknij Utwórz i kontynuuj.
W menu Rola wybierz Konta usługi > Twórca tokenów tożsamości OpenID Connect konta usługi.
Kliknij Dalej.
Kliknij Gotowe.
Wybierz z listy kont usług utworzone przed chwilą konto usługi i w menu
Działania kliknij Zarządzaj kluczami.Kliknij Dodaj klucz > Utwórz nowy klucz.
W polu Typ klucza wybierz opcję JSON.
Kliknij Utwórz. Na komputer zostanie pobrany plik JSON zawierający klucz.
Wywoływanie interfejsu API
Wybierz opcję z kart poniżej:
HTTP
Home Graph udostępnia punkt końcowy HTTP.
- 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.
- Uzyskaj token dostępu OAuth 2.0 z zakresem
https://www.googleapis.com/auth/homegraph
za pomocą narzędzia oauth2l: - Utwórz żądanie JSON za pomocą znaku
agentUserId
. Oto przykładowe żądanie w formacie JSON dotyczące raportowania stanu i powiadomień: - 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
:
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
Home Graph udostępnia punkt końcowy gRPC.
- Pobierz definicję usługi buforów protokołu interfejsu Home Graph API.
- Postępuj zgodnie z dokumentacją dla deweloperów gRPC, aby wygenerować atrapy klienta w jednym z obsługiwanych języków.
- Wywołaj metodę ReportStateAndNotification.
Node.js
Google APIs Node.js Client udostępnia powiązania z interfejsem API Home Graph.
- Zainicjuj usługę
google.homegraph
za pomocą domyślnych danych logowania aplikacji. - Wywołaj metodę
reportStateAndNotification
za pomocą ReportStateAndNotificationRequest. ZwracaPromise
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.
- Zainicjuj
HomeGraphApiService
za pomocą domyślnych danych logowania aplikacji. - Wywołaj metodę
reportStateAndNotification
z parametremReportStateAndNotificationRequest
. 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
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 znakunull
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 identyfikatoragentUserId
. Upewnij się, żeagentUserId
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ą interfejsureportStateAndNotification
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": {},
}
}
}