Akıllı Ev'de Hata Ayıklama

1. Başlamadan önce

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

a4657871181b5ad2.gif

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. Kolay izleme ve hata ayıklama işlemlerini kolaylaştırmak amacıyla, Actions'larınızla ilgili sorunları tespit edip çözmenize yardımcı olacak Google Cloud Platform (GCP) Metrikleri ile Logging ve Akıllı ev için Test Paketi'nden yararlanabilirsiniz.

Ön koşullar

Oluşturacaklarınız

Bu codelab'de 2 kusurlu bir akıllı ev işlemi dağıtıp Asistan'a bağlayacaksınız. Ardından, akıllı ev için Test Suite'i kullanarak İşlemin kusurlarını ayıklayacaksınız Google Cloud Platform (GCP) Metrikleri ve Günlük Kaydı.

Neler öğreneceksiniz?

  • Üretim sorunlarını belirleyip çözmek için GCP Metrikleri ve Logging'i kullanma
  • İşlevsel sorunları ve API sorunlarını belirlemek üzere akıllı ev için Test Suite'i kullanma

Gerekenler

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

Kaynak kodunu alma

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

veya GitHub deposunu komut satırından klonlayabilirsiniz:

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

Proje hakkında

Çamaşır makinesi uygulaması şu alt dizinleri içerir:

Firebase'e bağlanma

Geliştirme makinenizde terminali açın. washer-faulty dizinine gidin, ardından Akıllı ev cihazlarını Google Asistan codelab'ine bağlama başlıklı makalede yerleşik olarak bulunan 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ı, bazı eski bağımlılıklardan kaynaklanmaktadır. Daha fazla bilgiyi burada bulabilirsiniz.

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

Bağımlılıkları yüklediğinize ve projenizi yapılandırdığınıza göre artık hatalı çamaşır makinesi uygulamasını dağıtmaya hazırsınız.

$ 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

HomeGraph'i güncelle

Web uygulamasını görüntülemek için tarayıcınızda (https://<project-id>.firebaseapp.com) Barındırma URL'sini açın. Senkronizasyon isteğinde bulunun aracılığıyla HomeGraph'i hatalı çamaşır makinesi uygulamasından en son cihaz meta verileriyle güncellemek için web kullanıcı arayüzünde Yenile ae8d3b25777a5e30.png düğmesini tıklayın:

6f2b1344179977cf.png

Google Home uygulamasını açın ve Hatalı Çamaşır Makinesi adlı çamaşır makinesi cihazını görebildiğinizi doğrulayın.

e357de6a7faff925.png

3. İşleminizi test etme

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

Çamaşır makinesini test etme

Telefonunuzda 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 çalıştır."

"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 veya devam ettirdiğinizde Asistan'ın sesle ilgili bir hata olduğunu belirten yanıt verdiğini fark edeceksiniz:

"Maalesef <proje görünen adı> adlı projeye ulaşamadım."

Bu sorunu gidermek için öncelikle hata hakkında daha fazla bilgi edinerek temel nedeni bulmanız gerekir.

Smarthome Analytics kontrol paneli

Hataları incelemek için iyi bir yer olan Smarthome Analytics kontrol paneli, bulut hizmetinize yönelik Kullanım ve Durum metrikleri grafiklerini bir araya getirir:

  • Kullanım metrikleri, günlük etkin kullanıcı sayısı ve karşılamanıza gelen toplam istek sayısı dahil olmak üzere akıllı ev İşleminizin kullanım trendini yansıtır.
  • Durum metrikleri; akıllı ev işleminizde istek gecikmesi, başarı yüzdesi ve hata dökümü gibi anormallik durumlarını izlemenize yardımcı olur.

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

  1. Actions Console'da 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. Bunu yaptığınızda, Google Cloud'daki projeniz için kontrol panellerinin listesine yönlendirilirsiniz. Google Home Analytics - Cloud Entegrasyonu kontrol panelini seçin.

5edd3751323176dd.png

  1. Vurgulanan zaman aralığındaki hata kodlarını görüntülemek için sayfayı aşağı kaydırarak Cloud Fulfillment Hataları - Durum Dökümü grafiğine gidin.

c468743c20a11c15.png

PARTNER_RESPONSE_MISSING_DEVICE hata kodu, sorunun temel nedeni hakkında ipucu verir. Ardından, daha fazla ayrıntı için hata koduna dayalı olay günlüklerini alın.

Olay günlüklerine erişme

Hata hakkında daha fazla bilgi edinmek için Cloud Logging aracılığıyla akıllı ev İşlemlerinizin olay günlüklerine erişin.

Google Cloud Platform'da gezinme menüsünü açın ve İşlemler bölümünde Günlük Kaydı'nı seçin > Günlük Gezgini'ni tıklayın. Alternatif olarak, arama kutusunda Günlük Gezgini araması da yapabilirsiniz.

Sorgu bölümüne PARTNER_RESPONSE_MISSING_DEVICE sorgusunu girin ve Sorgu Ç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üğünde, aşağıdaki bilgileri içeren hata ayrıntılarıyla bir akıllı ev etkinliği gösterilir:

  • Yapılan kullanıcı işlemi "yıkamacı devam ettiriliyor" (actionType: "STARTSTOP_UNPAUSE"), son başarısız sesli komuta karşılık gelir.
  • İlişkili hata ayıklama mesajı: "JSON response does not include device."

Hata ayıklama mesajına dayanarak, çamaşır makinesi uygulamasının EXECUTE yanıtında neden doğru cihazı içermediğini kontrol etmeniz gerekir.

Hatanın temel nedenini belirleme

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

index.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 makinesinde duraklatma / devam ettirme işlemlerini nasıl işlediğini daha ayrıntılı şekilde kontrol ederseniz duraklat / devam ettir komutuyla eşleşecek dizenin yanlış olduğunu göreceksiniz:

index.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üzeltme

Artık hatanın temel nedenini belirlediğinize göre, duraklat / devam ettir komutuyla ilgili dizeyi düzeltebilirsiniz:

index.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 edin

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

firebase deploy --only functions

Aşağıdaki sesli komutları tekrar deneyin. Çamaşır makinesini duraklattığınızda veya devam ettirdiğinizde Asistan'ın doğru yanıt verdiğini göreceksiniz.

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

=&gt;

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

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

=&gt;

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

Ayrıca, sorular sorarak çamaşır makinenizin mevcut durumunu test edebilirsiniz.

"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 etmenin yanı sıra, İşleminizle ilişkilendirilen cihaz türlerine ve özelliklere göre kullanım alanlarını doğrulamak amacıyla otomatik Akıllı ev için Test Paketi'ni kullanabilirsiniz. Test Paketi, İşleminizdeki sorunları tespit etmek için bir dizi test çalıştırır ve etkinlik günlüklerine geçmeden önce hata ayıklama işleminizi hızlandırmak amacıyla başarısız test durumları için bilgilendirici mesajlar gösterir.

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

Akıllı ev Action by Test Suite'i test etmek için şu talimatları uygulayın:

  1. Web tarayıcınızda Akıllı ev için Test Paketi'ni 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 işleminizin proje kimliğini girin. Ardından, devam etmek için SONRAKİ'yi tıklayın.
  4. Test Ayarları adımında Test Paketi'nde cihaz türü ve çamaşır makinesinin özelliklerinin listelendiğini göreceksiniz.

78ed6a1ebdb581bf.png

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

Test Paketi çalışmayı tamamladıktan sonra test senaryolarının sonuçlarını görüntüleyin. İki başarısız test durumunun ilgili hata mesajıyla yakalandığını fark edeceksiniz:

5838d10631c98ed2.png

Akıllı ev işleminizde hata ayıklamak için önce hata mesajını analiz ederek hatanın temel nedenini belirlemeniz gerekir.

Hata mesajını analiz etme

Test Suite, geliştiricilerin temel nedeni belirlemesine yardımcı olmak amacıyla, başarısız olan her test durumu için 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 İşleminizden bildirilen durumlarda "isPause": true beklediğini belirtir, ancak gerçek durumlar yalnızca "isPause": false değerini içerir.

Ayrıca, ikinci başarısız test durumuna ait hata mesajı, akıllı ev İşleminizden bildirilen QUERY yanıtındaki durumların "isPause": true içerdiğini gösterir. Bu durum, akıllı ev İşleminizden bildirilen eyaletlere göre "isPause": false değerinden farklıdır:

fdb5124102e3a37.png

Her iki hata mesajına göre de İşlem raporlarınızda isPaused değerinin doğru şekilde ifade edilip edilmediğini kontrol etmeniz gerekir.

Hatanın temel nedenini belirleme

Durum değişikliklerini Rapor Durumu aracılığıyla Ana Sayfa Grafiği'nde yayınlayan reportstate işlevini içeren functions/index.js öğesini açın. Rapor Durumu yükünü inceleyin. Yükte, isPaused durumunun eksik olduğunu görürsünüz. Bu durum, başarısız test durumlarında Test Paketi'nin kontrol ettiği durumu belirtir.

index.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üzeltme

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

index.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 edin

Güncellenen kodu Firebase CLI'yı 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ı başarılı olmuştur.

148837f85d377dd6.png

5. Tebrikler

17d485868a6771bc.png

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

Daha fazla bilgi

Bu Codelab'den yola çıkarak aşağıdaki alıştırmaları deneyin ve ek kaynakları keşfedin:

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