Rapor Durumu

Report State önemli bir özelliktir. Home İşlemin, QUERY niyetini beklemek yerine kullanıcının cihazının son durumunu proaktif olarak Google Home Graph adlı kullanıcıya bildirmesine olanak tanır.

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 anlamayı gerektiren bir işlem yapmak istediğinde, EXECUTE amacını yayınlamadan önce çeşitli üçüncü taraf bulutlara QUERY amacı göndermek yerine Home Graph içindeki durum bilgilerine bakabilir.

Report State olmadan bir oturma odasındaki birden fazla sağlayıcının ışıkları dikkate alındığında Ok Google, oturma odamın parlaklığını artır komutu, daha önce bildirilen verilere göre mevcut parlaklık değerlerine bakmak yerine birden çok buluta gönderilen birden fazla QUERY niyetinin çözülmesini gerektirir. En iyi kullanıcı deneyimi için Assistant uygulamasının, cihazı gidiş-dönüştürmeden cihazın mevcut durumuna sahip olması gerekir.

Platform, bir cihazın ilk SYNC sonrasında Home Graph değerini doldurmak için cihazın durumunu toplayan bir QUERY niyeti gönderir. Bu noktadan sonra Home Graph, yalnızca Report State ile 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, özellik başına durumu belirtir ve bir Report State çağrısı yapıldığında bu özellikle ilgili tüm verilerin üzerine yazar. Örneğin, StartStop özelliği için raporlama durumu yapıyorsanı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ı izleyin:

Google HomeGraph API'yi etkinleştirme

  1. Google Cloud Console uygulaması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 öğesinden bir hizmet hesabı anahtarı oluşturmak için şu 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şturma sayfasına git
  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. Role (Rol) listesinden Hizmet Hesapları > Hizmet Hesabı Jetonu Oluşturucu'yu 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, bir HTTP uç noktası sağlar

  1. İndirilen hizmet hesabı JSON dosyasını kullanarak JSON Web Token (JWT) oluşturun. Daha fazla bilgi için bkz. Hizmet Hesabı Kullanarak Kimlik Doğrulama.
  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 aşağıda verilmiştir:
  5. {
      "requestId": "123ABC",
      "agentUserId": "user-123",
      "payload": {
        "devices": {
          "states": {
            "light-123": {
              "on": true
            }
          }
        }
      }
    }
    
  6. Rapor Durumu ile Bildirim JSON verilerini ve HTTP POST isteğinizdeki jetonu Google Home Graph uç noktasına birleştirin. Test amacıyla curl kullanarak komut satırında nasıl istek yapacağınıza dair bir örneği aşağıda bulabilirsiniz:
  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, bir gRPC uç noktası sağlar

  1. Home Graph API'nin protokol arabellekleri hizmeti tanımını öğrenin.
  2. Desteklenen dillerden biri için istemci saplaması oluşturmak üzere gRPC geliştirici belgelerini izleyin.
  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. Application Default Credentials'ı (Uygulama Varsayılan Kimlik Bilgileri) 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 için bağlamalar sağlar.

  1. Application Default Credentials'ı (Uygulama Varsayılan Kimlik Bilgileri) kullanarak HomeGraphApiService'ı başlatın.
  2. ReportStateAndNotificationRequest ile reportStateAndNotification yöntemini ç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

İşleminizi sertifikasyona hazırlamak için Report State testini yapmanız önemlidir.

Bunun için indirme veya dağıtım 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 etmeden önce Hizmet Hesabı Anahtarınıza ve agentUserId bilginize ihtiyacınız vardır. Hizmet Hesabı Anahtarınız zaten varsa ve agentUserId Report State kontrol panelini dağıtma bölümünü inceleyin.

Rapor Durumu kontrol panelini dağıtma

Projeniz için Hizmet Hesabı Anahtarı ve Aracı Kullanıcı Kimliği oluşturduktan sonra Report StateKontrol Paneli'nden en yeni sürümü indirip dağıtın. En son sürümü indirdikten sonra, eklenen 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 şunları yapın:

  • Hesap anahtar dosyanızı seçin
  • AracıKullanıcıKimliğinizi ekleyin

Ardından Listele'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 bir değişiklik varsa satır yeşil renkle vurgulanır.

Hata Yanıtları

Report State numarasını 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, geçersiz söz dizimi nedeniyle istemci tarafından gönderilen isteği işleyemedi. Bozuk JSON veya dize değeri için "" yerine null kullanımı, bu durumun sık karşılaşılan nedenlerinden bazılarıdır.
  • 404 Not Found - İstenen kaynak bulunamadı, ancak ileride kullanılabilir olabilir. Genellikle bu, 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.