Akıllı ev işlemlerinin nasıl geliştirileceğini öğrenmek için yeni adres olan Google Home Geliştirici Merkezi'ne hoş geldiniz. Not: Actions Console'da işlem oluşturmaya devam edersiniz.

Akıllı Ev'de hata ayıklama

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

1. Başlamadan önce

Nesnelerin İnterneti (IoT) geliştiricisi olarak, kullanıcılarınıza Google Home uygulamasındaki dokunma kontrolleri ve Google Asistan'daki sesli komutlar aracılığıyla cihazlarını kontrol etme olanağı tanıyan akıllı ev İşlemleri oluşturabilirsiniz.

CANNOT TRANSLATE

Akıllı ev işlemleri için hata ayıklama araçlarını öğrenmek, Google Asistan ile üretim kalitesi entegrasyonu oluşturmanın önemli bir adımıdır. İzleme ve hata ayıklama işlemlerini kolaylaştırmak üzere, Action'larınız ile ilgili sorunları tanımlayıp çözmenize yardımcı olması için Google Cloud Platform (GCP) Metrikleri ile Günlük Kaydı ve Akıllı ev için Test Paketi kullanılabilir.

Ön koşullar

Geliştireceğiniz uygulama

Bu codelab'de, 2 kusura sahip bir akıllı ev Action'ını dağıtıp Asistan'a bağlayacak, ardından akıllı ev ve Google Cloud Platform (GCP) Metrikleri ve Logging için Test Paketi aracılığıyla Action'daki hataları ayıklayın.

Neler öğreneceksiniz?

  • Üretim sorunlarını belirlemek ve çözmek için GCP Metrikleri ve Günlük Kaydı'nı kullanma
  • İşlevselliği ve API sorunlarını belirlemek için Akıllı Ev'de Test Paketi'ni kullanma

Gerekenler

2. Hatalı uygulamayı çalıştırma

Kaynak kodunu alma

Bu codelab'in örneğini geliştirme makinenize indirmek için aşağıdaki bağlantıyı tıklayın:

...veya GitHub deposunu komut satırından klonlayabilirsiniz:

$ git clone https://github.com/googlecodelabs/smarthome-debug.git

Proje hakkında

Çamaşır makinesi uygulaması aşağıdaki alt dizinleri içerir:

  • public: Akıllı çamaşır makinesinin durumunu kolayca kontrol etmek ve izlemek için ön uç kullanıcı arayüzü.
  • functions: Akıllı çamaşır makinesini Cloud Functions for Firebase ve Firebase Realtime Database ile yöneten, tamamen uygulamalı bir bulut hizmetidir.

Firebase'e bağlanma

Geliştirme makinenizdeki terminali açın. washer-faulty dizinine gidin ve ardından Akıllı ev cihazlarını Google Asistan codelab'e bağlama başlıklı makaledeki Actions projenizle Firebase CLI'ı ayarlayın:

$ cd washer-faulty
$ firebase use <project-id>

Firebase'e dağıtma

functions klasörüne gidin ve npm. kullanarak gerekli tüm bağımlılıkları yükleyin

$ cd functions
$ npm install

Not: Aşağıdaki mesajı görürseniz yoksayıp devam edebilirsiniz. Uyarı, daha eski bazı bağımlılardan kaynaklanmaktadır ve daha fazla bilgiye buradan ulaşabilirsiniz.

found 5 high severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

Bağımlıları yükleyip projenizi yapılandırdığınıza göre artık hatalı çamaşır makinesi uygulamasını dağıtabilirsiniz.

$ firebase deploy

Görmeniz gereken konsol çıkışı şudur:

...

✔ Deploy complete!

Project Console: https://console.firebase.google.com/project/<project-id>/overview
Hosting URL: https://<project-id>.firebaseapp.com

HomeGraphgüncelleyin

Web uygulamasını görüntülemek için tarayıcınızda https://<project-id>.firebaseapp.com Hosting URL'yi açın. Web kullanıcı arayüzünde Refreshae8d3b25777a5e30.png (Yenile) düğmesini tıklayarak HomeGraph'i, hatalı çamaşır makinesi uygulamasından en son cihaz meta verileriyle Sync Sync aracılığıyla güncelleyin:

6f2b1344179977cf.png

Google Home uygulamasını açın ve Hatalı Çamaşır Makinesi adlı çamaşır makinesini gördüğünüzü doğrulayın.

e357de6a7faff925.png

3. İşleminizi test etme

Projenizi dağıttıktan sonra İşleminizin çamaşır makinesini kontrol ettiğini test edin.

Çamaşır makinesini test etme

Telefonunuzla aşağıdaki sesli komutlardan herhangi birini denediğinizde değer değişikliğini kontrol edin:

"Ok Google, çamaşır makinemi aç."

"Ok Google, çamaşır makinemi başlat."

"Ok Google, çamaşır makinemi duraklat."

"Ok Google, çamaşır makinemi devam ettir."

"Ok Google, çamaşır makinemi durdur."

Çamaşır makinesini duraklattığınızda / devam ettirdiğinizde Asistan'ın bir şeylerin yanlış olduğunu söylediğini fark edersiniz:

"Maalesef <project display name> projesine ulaşamadım."

Bu sorunu ayıklamak için, öncelikle hatanın nedenini bulmak ve temel nedeni belirlemek üzere hatayla ilgili daha fazla bilgiye ihtiyacınız vardır.

Smarthome Analytics kontrol paneli

Hataları incelemek için Cloudhome Analytics kontrol panelini kullanabilirsiniz. Bu kontrol paneli, buluta geçişle ilgili Kullanım ve Sağlık durumu metrikleri grafiklerini bir araya getirir:

  • Kullanım metrikleri, akıllı etkin İşleminizin kullanım trendini (ör. günlük etkin kullanıcı sayısı ve karşılamanıza gelen toplam istek sayısı) yansıtır.
  • Sağlık metrikleri, akıllı ev Action'ınızda anormallik durumunu izlemenize yardımcı olarak istek gecikmesini, başarı yüzdesini ve hata dökümünü gösterir.

Hatanın nedenini daraltmak için aşağıdaki adımları uygulayarak proje kontrol paneline erişin.

  1. İşlemler konsolunda Projeler sayfasına gidin.
  2. Akıllı ev projenizi seçin.
  3. Analytics sekmesini seçin ve Google Cloud Platform'a git'i tıklayın.

b1735bbe11a7aff8.png

  1. Bu işlem sizi Google Cloud'daki projenizdeki kontrol panelleri listesine yönlendirir. Google Home Analytics - Cloud Entegrasyonu kontrol panelini seçin.

5edd3751323176gg.png

  1. Vurgulanan zaman aralığına ait hata kodlarını görmek için Cloud Sipariş Karşılama Hataları - Durum Dökümü grafiğine gidin.

c468743c20a11c15.png

PARTNER_RESPONSE_MISSING_DEVICE hata kodu, temel neden için bir ipucu sağlar. Ardından, daha fazla ayrıntı için hata koduna göre olay günlüklerini alın.

Olay günlüklerine erişme

Hatayla ilgili daha fazla bilgi edinmek için akıllı bulut işlemlerinizle ilgili günlüklere Cloud Logging üzerinden erişebilirsiniz.

Google Cloud Platform'da Gezinme Menüsü'nü açın ve İşlemler altında, Günlük Kaydı > Günlük Gezgini'ni seçerek projenizin olay günlüklerine erişin. Alternatif olarak, arama kutusunda Günlük Gezgini için arama yapabilirsiniz.

Sorgu bölümüne PARTNER_RESPONSE_MISSING_DEVICE sorgusunu girin ve Sorguyu Çalıştır'ı tıklayın. Sorguyla eşleşen günlükler, Sorgu sonuçları bölümünde görüntülenir.

747cca0f1249a5a.png

Hata günlüğü, hata ayrıntılarını gösteren bir akıllı ev etkinliği gösterir:

  • Kullanıcı tarafından gerçekleştirilen son işlem, son başarısız sesli komuta karşılık gelen " çamaşır makinesi devam ettiriliyor" (actionType: "STARTSTOP_UNPAUSE").
  • İlişkili hata ayıklama mesajı: "JSON response does not include device."

Hata ayıklama mesajına göre çamaşır makinesi uygulamasının neden EXECUTE cihazını doğru cihazı içermediğini kontrol etmelisiniz.

Hatanın temel nedenini belirleme

functions/index.js bölümünde, her komutun durumunu ve yeni cihaz durumunu döndüren EXECUTE işleyicisini (onExecute dizisinde) bulun. Cihaz kimliklerinin EXECUTE yanıtına eklenmesi, updateDevice işlevinin çözülmesine bağlıdır:

dizin.js

app.onExecute(async (body) => {
 ...

 for (const command of intent.payload.commands) {
   for (const device of command.devices) {
     for (const execution of command.execution) {
       executePromises.push(
           updateDevice(execution, device.id)
               .then((data) => {
                 result.ids.push(device.id);
                 Object.assign(result.states, data);
               })
               .catch((e) =>
                 functions.logger.error('EXECUTE',
                     device.id, e.message)));
     }
   }
 }

updateDevice işlevinin, çamaşır makinesindeki duraklatma/devam ettirme işlevini nasıl işlediğini daha ayrıntılı şekilde kontrol edin. Duraklat/devam ettir komutu ile eşleşecek dizeyi göreceksiniz:

dizin.js

const updateDevice = async (execution, deviceId) => {
 const {params, command} = execution;
 let state; let ref;
 switch (command) {
   ...
   case 'action.devices.commands.PauseUnpausePause':
     state = {isPaused: params.pause};
     if (params.pause) state.isRunning = false;
     ref = firebaseRef.child(deviceId).child('StartStop');
     break;
 }

 return ref.update(state)
     .then(() => state);
};

Hatayı düzeltin

Hatanın temel nedenini belirlediğinize göre şimdi duraklatma / devam ettirme komutunun dizesini düzeltebilirsiniz:

dizin.js

const updateDevice = async (execution, deviceId) => {
 const {params, command} = execution;
 let state; let ref;
 switch (command) {
   ...
   case 'action.devices.commands.PauseUnpause':
     state = {isPaused: params.pause};
     if (params.pause) state.isRunning = false;
     ref = firebaseRef.child(deviceId).child('StartStop');
     break;
 }

 return ref.update(state)
     .then(() => state);
};

Düzeltmenizi test etme

Güncellenen kodu Firebase CLI kullanarak dağıtın:

firebase deploy --only functions

Aşağıdaki sesli komutları tekrar denediğinizde, çamaşır makinesini duraklattığınızda / devam ettirdiğinizde Asistan'ın doğru şekilde yanıt verdiğini görürsünüz.

"Ok Google, çamaşır makinemi duraklat."

=>

"Elbette, çamaşır makinesi duraklatılıyor."

"Ok Google, çamaşır makinemi devam ettir."

=>

"Anladım, çamaşır makinesi devam ettiriliyor."

Ayrıca, sorarak çamaşır makinesinin mevcut durumunu test edebilirsin.

"Ok Google, çamaşır makinem açık mı?"

"Ok Google, çamaşır makinem çalışıyor mu?"

"Ok Google, çamaşır makinem hangi döngüde?"?"

4. İşleminizi Test Paketi ile Test Etme

Manuel olarak test yapmanın yanı sıra, Action'ınızla ilişkili cihaz türlerine ve özelliklere göre kullanım alanlarını doğrulamak için Akıllı Ev için Test Paketi'ni kullanabilirsiniz. Test Paketi, İşleminizdeki sorunları tespit etmek için bir dizi test yapar ve olay günlüklerine girmeden önce hata ayıklama sürecini hızlandırmak amacıyla başarısız test durumları için bilgilendirici mesajlar gösterir.

Akıllı ev için Test Paketi çalıştırma

Test evinizdeki akıllı ev Action'ınızı test etmek için şu talimatları uygulayın:

  1. Web tarayıcınızda Akıllı ev için test paketini açın.
  2. Sağ üst köşedeki düğmeyi kullanarak Google'da oturum açın. Bu sayede Test Paketi, komutları doğrudan Google Asistan'a gönderebilir.
  3. Proje Kimliği alanına, akıllı ev Action'ınızın proje kimliğini girin. Ardından devam etmek için İLERİ'yi tıklayın.
  4. Test Ayarları adımında, Test Paketi'nin çamaşır makinesinin cihaz türünü ve özelliklerini listelediğini görürsünüz.

78ed6a1ebdb581bf.png

  1. Örnek çamaşır makinesi uygulamasının çamaşır makinesinin eklenmesi / kaldırılması / yeniden adlandırılması için bir kullanıcı arayüzü olmadığından İsteği Senkronizasyonunu Test Et seçeneğini devre dışı bırakın. Bir üretim sisteminde, kullanıcı cihaz eklediğinde/kaldırdığında/yeniden adlandırdığında Senkronizasyon İste ayarını tetiklemeniz gerekir.
  2. Testi çalıştırmaya başlamak için SONRAKİ'yi tıklayın.

Test Paketi çalışması tamamlandıktan sonra test durumlarının sonuçlarını görüntüleyin. İlgili hata mesajıyla yakalanan iki başarısız test durumu olduğunu göreceksiniz:

5838d10631c98ed2.png

Akıllı ev Action'ınızdaki hataları ayıklamak için öncelikle hata mesajını analiz ederek hatanın temel nedenini belirlemeniz gerekir.

Hata mesajını analiz etme

Test Paketi, geliştiricilerin temel nedeni tespit etmelerine yardımcı olmak için her başarısız test durumunda, hatanın nedenini belirten hata mesajları gösterir.

Yukarıdaki ilk başarısız test durumu için

99e4e5d06965a8a7.png

Hata mesajı, Test Paketi'nin akıllı ev Action'ınızda bildirilen durumlarda "isPause": true beklediğini, ancak gerçek durumda yalnızca "isPause": false bulunduğunu gösterir.

Ayrıca, ikinci başarısız test durumu hata mesajı, akıllı ev İşleminizden bildirilen QUERY yanıtındaki durumların "isPause": true olduğunu gösterir. Bu durum, akıllı ev İşleminizden bildirilen durumlarda "isPause": false ile aynıdır:

fdb5124102e3a37.png

Her iki hata mesajına göre, İşlem raporlarınızın isPaused değerini doğru değerle belirtip belirlemediğini kontrol etmeniz gerekir.

Hatanın temel nedenini belirleme

Rapor Durumu aracılığıyla Ana Sayfa Grafiği'ne yapılan değişiklikleri yayınlayan reportstate işlevini içeren functions/index.js öğesini açın. Rapor Durumu yükünü incelediğinizde, yükte isPaused durumunun eksik olduğunu görürsünüz. Bu, başarısız test durumlarında Test Paketinin tam olarak bu durumu kontrol eder.

dizin.js

exports.reportstate = functions.database.ref('{deviceId}').onWrite(
    async (change, context) => {
      ...

      const requestBody = {
        requestId: 'ff36a3cc', /* Any unique ID */
        agentUserId: USER_ID,
        payload: {
          devices: {
            states: {
              /* Report the current state of our washer */
             [context.params.deviceId]: {
                online: true,
                on: snapshot.OnOff.on,
                isRunning: snapshot.StartStop.isRunning,
                currentRunCycle: [{
                  currentCycle: 'rinse',
                  nextCycle: 'spin',
                  lang: 'en',
                }],
                currentTotalRemainingTime: 1212,
                currentCycleRemainingTime: 301,
              },
            },
          },
        },
      };

      const res = await homegraph.devices.reportStateAndNotification({
        requestBody,
      });
      ...
    });

Hatayı düzeltin

Hatanın temel nedenini belirlediğinize göre, isPaused durumunu Rapor Durumu yüküne ekleyerek functions/index.js hatasını düzeltin:

dizin.js

exports.reportstate = functions.database.ref('{deviceId}').onWrite(
    async (change, context) => {
      ...

      const requestBody = {
        requestId: 'ff36a3cc', /* Any unique ID */
        agentUserId: USER_ID,
        payload: {
          devices: {
            states: {
              /* Report the current state of our washer */
             [context.params.deviceId]: {
                online: true,
                on: snapshot.OnOff.on,
                isPaused: snapshot.StartStop.isPaused,
                isRunning: snapshot.StartStop.isRunning,
                currentRunCycle: [{
                  currentCycle: 'rinse',
                  nextCycle: 'spin',
                  lang: 'en',
                }],
                currentTotalRemainingTime: 1212,
                currentCycleRemainingTime: 301,
              },
            },
          },
        },
      };
      ...
    });

Düzeltmenizi test etme

Güncellenen kodu Firebase CLI kullanarak dağıtın:

$ firebase deploy --only functions

Akıllı ev için Test Paketi'ni tekrar çalıştırdığınızda tüm test durumlarının başarılı olduğunu görürsünüz.

148837f85d377dd6.png

5. Tebrikler

17d485868a6771bc.png

Tebrikler. Akıllı ev ve GCP Metrikleri ve Günlük Kaydı için Test Paketi aracılığıyla akıllı ev işlemi sorunlarını nasıl gidereceğinizi öğrendiniz.

Daha fazla bilgi

Bu Codelab'i oluştururken aşağıdaki alıştırmaları deneyin ve diğer kaynakları keşfedin:

Ayrıca, İşleminizi kullanıcılara yayınlamak için onay süreci de dahil olmak üzere, bir İşlemi inceleme için test etme ve gönderme hakkında daha fazla bilgi edinebilirsiniz.