Rapor Durumu

Report State, Home işleminin QUERY intent'i beklemek yerine kullanıcının cihazının son durumunu proaktif olarak Google Home Graph'ye bildirmesini sağlayan önemli bir özelliktir.

Report State, ilişkili agentUserId ile kullanıcı cihazlarının durumunu Google'a bildirir (orijinal SYNC isteğinde gönderilir). Google Assistant, bir cihazın mevcut durumunu anlama gerektiren bir işlem yapmak istediğinde EXECUTE intent'ini göndermeden önce çeşitli üçüncü taraf bulutlarına QUERY intent'i göndermek yerine Home Graph'te durum bilgilerini arayabilir.

Report State olmadan, bir oturma odasında birden fazla sağlayıcıdan ışık verildiğinde Ok Google, oturma odamın ışığını aç komutu, daha önce bildirilenlere göre mevcut parlaklık değerlerini aramak yerine birden fazla buluta gönderilen birden fazla QUERY intent'inin çözülmesini gerektirir. En iyi kullanıcı deneyimi için Assistant'ün, cihaza gidip gelme gerektirmeden cihazın mevcut durumunu bilmesi gerekir.

Bir cihaz için ilk SYNC'ten sonra platform, Home Graph'yi doldurmak üzere cihazın durumunu toplayan bir QUERY intent'i gönderir. Bu noktadan sonra Home Graph yalnızca Report State ile birlikte gönderilen durumu depolar.

Report State öğesini çağırırken belirli bir özellik için tam durum verilerini sağladığınızdan emin olun. Home Graph, durumları özellik bazında günceller ve Report State çağrısı yapıldığında ilgili özelliğin tüm verilerinin üzerine yazar. Örneğin, StartStop özelliğinin durumunu 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 sayfasında 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'ten 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 sayfasında Hizmet hesabı anahtarı oluştur sayfasına gidin.

    Hizmet Hesabı Anahtarı Oluştur sayfasına gidin.
  2. Hizmet hesabı listesinden Yeni hizmet hesabı'nı seçin.
  3. Hizmet hesabı adı alanına bir ad girin.
  4. Hizmet hesabı kimliği alanına bir kimlik girin.
  5. Rol listesinde Hizmet Hesapları > Hizmet Hesabı Jetonu Oluşturucusu'nu seçin.

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

  7. 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 bir seçenek belirleyin:

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ği:
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
  6. Google Home Graph uç noktasına gönderdiğiniz HTTP POST isteğinizde Rapor Durumu ve Bildirim JSON'unu ve jetonu birleştirin. Aşağıda, test amacıyla curl kullanarak komut satırında isteği nasıl yapacağınıza 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'nin protokol arabellekleri hizmeti tanımını öğrenin.
  2. Desteklenen dillerden biri için istemci saplamaları oluşturmak üzere gRPC geliştirici belgelerini uygulayın.
  3. ReportStateAndNotification yöntemini çağırın.

Node.js

Google API'leri Node.js İstemcisi 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ığı, HomeGraph API için bağlamalar sağlar.

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

İşleminizin sertifika almaya hazır olması için Report State değerini test etmeniz önemlidir.

Bunu yapmak için indirme veya dağıtma gerektirmeyen bağımsız bir web uygulaması olan Home Graph Görüntüleyici aracını kullanmanızı öneririz.

Report State Kontrol Paneli hâlâ kullanılabilir olsa da kullanımdan kaldırılmıştır ve artık desteklenmemektedir.

Rapor Durumu Kontrol Paneli

Ön koşullar

İşleminizi test edebilmek için Hizmet Hesabı Anahtarınız ve agentUserId'niz olmalıdır. Hizmet Hesabı Anahtarınız varsa ve agentUserId Report State Kontrol Paneli'ni dağıtma başlıklı makaleyi inceleyin.

Rapor Durumu kontrol panelini dağıtma

Projeniz için hizmet hesabı anahtarını ve temsilci kullanıcı kimliğini aldıktan sonra Report State Kontrol panelinden en son sürümü indirip dağıtın. En son sürümü indirdikten sonra, ekteki README.MD dosyasındaki talimatları uygulayın.

Report State kontrol panelini dağıttıktan sonra aşağıdaki URL'den kontrol paneline erişin (proje_kimliğiniz yerine proje kimliğinizi yazın):

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şille vurgulanır.

Hata Yanıtları

Report State'ü çağırırken aşağıdaki hata yanıtlarından birini alabilirsiniz. Bu yanıtlar, HTTP durum kodları biçiminde gelir.

  • 400 Bad Request: Sunucu, geçersiz söz dizimi nedeniyle istemci tarafından gönderilen isteği işleyemedi. Yaygın nedenler arasında hatalı biçimlendirilmiş JSON veya 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ı bulamadığımız 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 SENKRONİZE yanıtınızda sağlanan değerle eşleştiğinden ve DISCONNECT amaçlarını düzgün bir şekilde yönettiğinizden emin olun.