Report State, Google Home İşlemi'nin QUERY
amaçlı bir istek beklemeden kullanıcının cihazının en son durumunu proaktif olarak Google Home Graph'ye bildirmesini sağlayan önemli bir özelliktir.
Report State, kullanıcı cihazlarının durumlarını Google'a bildirir. Bu bildirimde, cihazlarla ilişkili belirtilen agentUserId
(orijinal SYNC
isteğinde gönderilir) yer alır. Google Assistant, bir cihazın mevcut durumunun anlaşılmasını gerektiren bir işlem yapmak istediğinde EXECUTE
amacını yayınlamadan önce çeşitli üçüncü taraf bulutlarına QUERY
amacı yayınlamak yerine Home Graph'deki durum bilgilerini arayabilir.
Report State olmadan, oturma odasında birden fazla sağlayıcının ışığı varsa Ok Google, oturma odamı aydınlat komutu, daha önce bildirilenlere göre mevcut parlaklık değerlerini basitçe aramak yerine birden fazla buluta gönderilen birden fazla QUERY
amacının çözülmesini gerektirir. En iyi kullanıcı deneyimi için Assistant, cihaza gidiş dönüş yapılmasına gerek kalmadan cihazın mevcut durumunu bilmelidir.
Bir cihaz için ilk SYNC
işleminden sonra platform, Home Graph öğesini doldurmak üzere cihazın durumunu toplayan bir QUERY
amacı gönderir.
Bu noktadan sonra Home Graph yalnızca Report State ile gönderilen durumu saklar.
Report State işlevini çağırırken belirli bir özellik için eksiksiz durum verileri sağladığınızdan emin olun. Home Graph, durumları özellik bazında günceller ve Report State çağrısı yapıldığında söz konusu özelliğin tüm verilerinin üzerine yazar. Örneğin, StartStop özelliği için durumu bildiriyorsanız yükün hem isRunning
hem de isPaused
değerlerini içermesi gerekir.
Başlayın
Report State özelliğini uygulamak için aşağıdaki adımları uygulayın:
Google HomeGraph API'yi etkinleştirme
-
Google Cloud Console bölümünde HomeGraph API sayfasına gidin.
HomeGraph API sayfasına gidin - smart home proje kimliğinizle eşleşen projeyi seçin.
- ETKİNLEŞTİR'i tıklayın.
Hizmet hesabı anahtarı oluşturma
Google Cloud Console'dan hizmet hesabı anahtarı oluşturmak için aşağıdaki talimatları uygulayın:
-
Google Cloud Console bölümünde Hizmet hesapları sayfasına gidin.
Hizmet hesapları sayfasına gidin.Hizmet Hesapları sayfasına yönlendirilmeden önce bir proje seçmeniz gerekebilir.
Hizmet hesabı oluştur'u tıklayın.
Hizmet hesabı adı alanına bir ad girin.
Hizmet hesabı kimliği alanına bir kimlik girin.
Hizmet hesabı açıklaması alanına bir açıklama girin.
Oluştur ve devam et'i tıklayın.
Rol açılır listesinden Hizmet Hesapları > Hizmet Hesabı OpenID Connect Kimlik Jetonu Oluşturucu'yu seçin.
Devam'ı tıklayın.
Bitti'yi tıklayın.
Hizmet hesapları listesinden yeni oluşturduğunuz hizmet hesabını seçin ve
İşlemler menüsünden Anahtarları yönet'i seçin.Anahtar ekle > Yeni anahtar oluştur'u seçin.
Anahtar türü olarak JSON seçeneğini belirleyin.
Oluştur'u tıklayın. Anahtarınızı içeren bir JSON dosyası bilgisayarınıza indirilir.
API'yi çağırma
Aşağıdaki sekmelerden birini seçin:
HTTP
Home Graph, HTTP uç noktası sağlar.
- JSON Web Token (JWT) oluşturmak için indirilen hizmet hesabı JSON dosyasını kullanın. Daha fazla bilgi için Hizmet Hesabı Kullanarak Kimlik Doğrulama başlıklı makaleyi inceleyin.
- oauth2l kullanarak
https://www.googleapis.com/auth/homegraph
kapsamıyla bir OAuth 2.0 erişim jetonu alın: agentUserId
ile JSON isteğini oluşturun. Rapor Durumu ve Bildirim için örnek bir JSON isteğini aşağıda bulabilirsiniz:- Google Home Graph uç noktasına HTTP POST isteğinizde Report State ve Notification JSON'u ile jetonu birleştirin. Aşağıda, test olarak
curl
kullanarak komut satırında isteğin nasıl yapılacağına dair bir örnek verilmiştir:
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, gRPC uç noktası sağlar.
- Home Graph API için protocol buffers hizmet tanımını alın.
- Desteklenen dillerden biri için istemci saplamaları oluşturmak üzere gRPC geliştirici belgelerindeki adımları uygulayın.
- ReportStateAndNotification yöntemini çağırın.
Node.js
Google APIs Node.js Client, Home Graph API için bağlamalar sağlar.
- Uygulama Varsayılan Kimlik Bilgileri'ni kullanarak
google.homegraph
hizmetini başlatın. - ReportStateAndNotificationRequest ile
reportStateAndNotification
yöntemini çağırın. ReportStateAndNotificationResponse ile birPromise
döndürür.
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
Java için HomeGraph API İstemci Kitaplığı, Home Graph API'nin bağlamalarını sağlar.
HomeGraphApiService
öğesini Uygulama Varsayılan Kimlik Bilgileri'ni kullanarak başlatın.reportStateAndNotification
yönteminiReportStateAndNotificationRequest
ile çağırın.ReportStateAndNotificationResponse
döndürür.
// 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); }
Test Raporu Durumu
Cloud-to-cloud entegrasyonunuzun sertifikalandırmaya hazır olması için Report State testini yapmanız önemlidir.
Bunu yapmak için Home Graph Görüntüleyici aracını kullanmanızı öneririz. Bu araç, indirme veya dağıtım gerektirmeyen bağımsız bir web uygulamasıdır.
Report State Kontrol Paneli hâlâ kullanılabilir ancak kullanımdan kaldırılmıştır ve artık desteklenmemektedir.
Eyalet Raporu Kontrol Paneli
Ön koşullar
Cloud-to-cloud entegrasyonunuzu test edebilmek için hizmet hesabı anahtarınız ve Cloud-to-cloud gerekir.agentUserId
Hizmet Hesabı Anahtarınız zaten varsa ve agentUserId
görüyorsanız Report State Hesap Özetini Dağıtma başlıklı makaleyi inceleyin.
Durum Raporu kontrol panelini dağıtma
Projeniz için hizmet hesabı anahtarı ve aracı kullanıcı kimliğine sahip olduğunuzda, Report State
Kontrol Paneli'nden en son sürümü indirip dağıtın.
En son sürümü indirdikten sonra, dahil edilen README.MD
dosyasındaki talimatları uygulayın.
Report State kontrol panelini dağıttıktan sonra aşağıdaki URL'den kontrol paneline erişin (your_project_id kısmını proje kimliğinizle değiştirin):
http://<your-project-id>.appspot.com
Kontrol panelinde aşağıdakileri yapın:
- Hesap anahtarı dosyanızı seçin
- agentUserId değerinizi ekleyin
Ardından Liste'yi tıklayın.
Tüm cihazlarınız listelenir. Liste doldurulduktan sonra cihaz durumlarını güncellemek için Yenile düğmesini kullanabilirsiniz. Cihaz durumunda değişiklik varsa satır yeşil renkle vurgulanır.
Eyalet Tutarsızlığını Bildirme
Sorguya dayalı rapor durumu doğruluğu, bir cihazın en son rapor durumunun, kullanıcı sorguladığında cihazın durumuyla ne kadar iyi eşleştiğini ölçer. Bu değerin %99,5 olması bekleniyor.
Hata Yanıtları
Report State'ı aradığınızda aşağıdaki hata yanıtlarından birini alabilirsiniz. Bu yanıtlar HTTP durum kodları biçiminde gelir.
400 Bad Request
: Sunucu, istemci tarafından gönderilen isteği geçersiz söz dizimi nedeniyle işleyemedi. Yaygın nedenler arasında hatalı biçimlendirilmiş JSON veya bir dize değeri için "" yerinenull
kullanılması yer alır.404 Not Found
- İstenen kaynak bulunamadı ancak gelecekte kullanılabilir. Bu genellikle istenen cihazın bulunamadığı anlamına gelir. Bu durum, kullanıcı hesabının Google'a bağlı olmadığı veya geçersiz biragentUserId
aldığımız anlamına da gelebilir.agentUserId
değerinin SYNC yanıtınızda sağlanan değerle eşleştiğinden ve DISCONNECT amaçlarını düzgün şekilde işlediğinizden emin olun.
Çevrimiçi ve çevrimdışı durum raporlaması
Bir cihaz çevrimdışıyken cihazın davranışından sonraki beş dakika içinde Report State'e <code{"online": code="" dir="ltr" false}<="" translate="no"> bildirmelisiniz. Aksine, bir cihaz tekrar çevrimiçi duruma döndüğünde, cihazın davranışından sonraki beş dakika içinde Report State'e <code{"online": code="" dir="ltr" translate="no" true}<=""> değerini bildirmelisiniz. Bir cihaz tekrar çevrimiçi olduğunda iş ortağı,reportStateAndNotification
API'sini kullanarak mevcut tüm cihaz durumlarını bildirmelidir.
Bu örnekte, bir light
cihaz türünün çevrimiçi olduğu ve tüm mevcut cihaz durumlarını bildirdiği gösterilmektedir.
"requestId": "test-request-id",
"agentUserId": "agent-user-1",
"payload":{
"devices": {
"states": {
"device-id-1": {
"brightness": 65,
"on": true,
"online": true
}
"notifications": {},
}
}
}