Rapor Durumu

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.

güncellemek sizin sorumluluğunuzdadır.

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

  1. Google Cloud Console bölümünde HomeGraph API sayfasına gidin.

    HomeGraph API sayfasına gidin
  2. smart home proje kimliğinizle eşleşen projeyi seçin.
  3. 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:

Not: Bu adımları uygularken doğru GCP projesini kullandığınızdan emin olun. Bu, smart home proje kimliğinizle eşleşen projedir.
  1. 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.

  2. Hizmet hesabı oluştur'u tıklayın.

  3. Hizmet hesabı adı alanına bir ad girin.

  4. Hizmet hesabı kimliği alanına bir kimlik girin.

  5. Hizmet hesabı açıklaması alanına bir açıklama girin.

  6. Oluştur ve devam et'i tıklayın.

  7. Rol açılır listesinden Hizmet Hesapları > Hizmet Hesabı OpenID Connect Kimlik Jetonu Oluşturucu'yu seçin.

  8. Devam'ı tıklayın.

  9. Bitti'yi tıklayın.

  10. Hizmet hesapları listesinden yeni oluşturduğunuz hizmet hesabını seçin ve İşlemler menüsünden Anahtarları yönet'i seçin.

  11. Anahtar ekle > Yeni anahtar oluştur'u seçin.

  12. Anahtar türü olarak JSON seçeneğini belirleyin.

  13. Oluştur'u tıklayın. Anahtarınızı içeren bir JSON dosyası bilgisayarınıza indirilir.

Hizmet hesabı anahtarları oluşturmayla ilgili ayrıntılı talimatlar ve bilgiler için Google Cloud Console Yardım sitesindeki Hizmet hesabı anahtarları oluşturma ve silme başlıklı makaleyi inceleyin.

API'yi çağırma

Aşağıdaki sekmelerden birini seçin:

HTTP

Home Graph, HTTP uç noktası sağlar.

  1. 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.
  2. oauth2l kullanarak https://www.googleapis.com/auth/homegraph kapsamıyla bir OAuth 2.0 erişim jetonu alın:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. agentUserId ile JSON isteğini oluşturun. Rapor Durumu ve Bildirim için örnek bir JSON isteğini aşağıda bulabilirsiniz:
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
  6. 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:
  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, gRPC uç noktası sağlar.

  1. Home Graph API için protocol buffers hizmet tanımını alın.
  2. Desteklenen dillerden biri için istemci saplamaları oluşturmak üzere gRPC geliştirici belgelerindeki adımları uygulayın.
  3. ReportStateAndNotification yöntemini çağırın.

Node.js

Google APIs Node.js Client, Home Graph API için bağlamalar sağlar.

  1. Uygulama Varsayılan Kimlik Bilgileri'ni kullanarak google.homegraph hizmetini başlatın.
  2. ReportStateAndNotificationRequest ile reportStateAndNotification yöntemini çağırın. ReportStateAndNotificationResponse ile bir Promise 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.

  1. HomeGraphApiService öğesini Uygulama Varsayılan Kimlik Bilgileri'ni kullanarak başlatın.
  2. reportStateAndNotification yöntemini ReportStateAndNotificationRequest 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

Bu görev için önerilen araçlar

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 "" yerine null 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 bir agentUserId 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": {},
        }
      }
    }
</code{"online":></code{"online":>