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'daki sesli komutlarla cihazlarını kontrol etme olanağı sağlayan akıllı ev İşlemleri oluşturabilirsiniz.

a4657871181b5ad2.gif

Akıllı Ev İş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. İzlemeyi ve hata ayıklamayı kolaylaştırmak için Actions'daki sorunları tespit edip çözmenize yardımcı olacak Google Cloud Platform (GCP) Metrikleri, Logging ve Akıllı ev için Test Paketi kullanıma sunulmuştur.

Ön koşullar

Derlemeniz

Bu codelab'de, 2 kusurlu bir akıllı ev işlemi dağıtıp Asistan'a bağlayacak, ardından akıllı ev ve Google Cloud Platform (GCP) metrikleri ve günlük kaydı için Test Paketi aracılığıyla İşlemin kusurlarını ayıklayacaksınız.

Neler öğreneceksiniz?

  • Üretim sorunlarını tespit etmek ve çözmek için GCP Metrikleri ve Logging'i kullanma
  • İşlevsel sorunları ve API sorunlarını tespit etmek üzere Akıllı Ev için Test Paketi'ni kullanma

Gerekenler

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

Kaynak kodunu alma

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

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

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

Proje hakkında

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

Firebase'e bağlanma

Geliştirme makinenizdeki terminali açın. washer-faulty dizinine gidin, ardından Akıllı ev cihazlarını Google Asistan codelab'ine bağlama bölümünde yerleşik olarak bulunan Actions projenizle Firebase CLI'yi ayarlayın:

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

Firebase'e dağıtma

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

$ cd functions
$ npm install

Not: Aşağıdaki mesajı görüyorsanız bu mesajı yoksayıp devam edebilirsiniz. Uyarı bazı eski bağımlılıklar nedeniyle gelmiştir. Daha ayrıntılı 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, arızalı çamaşır makinesi uygulamasını dağıtmaya hazırsınız.

$ firebase deploy

Aşağıdaki konsol çıkışını görürsünüz:

...

✔ Deploy complete!

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

Home Graph'i güncelleme

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. Web kullanıcı arayüzünde, Senkronizasyon İste seçeneği aracılığıyla HomeGraph'i arızalı yıkama uygulamasındaki en son cihaz meta verileriyle güncellemek için Yenileae8d3b25777a5e30.png düğmesini tıklayın:

6f2b1344179977cf.png

Google Home uygulamasını açın ve Hatalı Çamaşır Makinesi adlı çamaşır makinesini 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

Aşağıdaki sesli komutlardan herhangi birini telefonunuzdan 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 / devam ettirdiğinizde Asistan'ın, bir şeylerin yolunda gitmediğini sesli olarak yanıt verdiğini fark edersiniz:

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

Bu sorunu gidermek için öncelikle hata hakkında daha fazla bilgi edinip temel nedeni tanımlamalısınız.

Smarthome Analytics kontrol paneli

Hataları incelemek için iyi bir yer olan Smarthome Analytics kontrol paneli, bulut karşılamanıza ilişkin Kullanım ve Durum metriklerinin grafiklerini toplar:

  • Kullanım metrikleri, günlük etkin kullanıcı sayısı ve sipariş karşılamanızdaki toplam istek sayısı da dahil olmak üzere akıllı ev İşleminizin kullanım trendini yansıtır.
  • Sağlık metrikleri; istek gecikmesi, başarı yüzdesi ve hata dökümü dahil olmak üzere akıllı ev İşleminizdeki anormallik oluşumunu izlemenize yardımcı olur.

Hatanın nedenini saptamak için aşağıdaki adımları izleyerek 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. Bu işlem sizi Google Cloud'daki projeniz için bir kontrol paneli listesine yönlendirir. Google Home Analytics - Cloud Integration kontrol panelini seçin.

5edd3751323176dd.png

  1. Vurgulanan zaman aralığıyla ilgili hata kodlarını görüntülemek için Bulut Karşılama Hataları - Durum Dökümü grafiğine gidin.

c468743c20a11c15.png

PARTNER_RESPONSE_MISSING_DEVICE hata kodu, sorunun asıl nedenine dair ipucu verir. Ardından, daha fazla ayrıntı için hata koduna göre olay günlüklerini alın.

Olay günlüklerine erişme

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

Projenizin olay günlüklerine erişmek için Google Cloud Platform'da gezinme menüsünü açıp İşlemler bölümünde Günlük Kaydı > Günlük Gezgini'ni seçin. Dilerseniz arama kutusunda Günlük Gezgini araması da yapabilirsiniz.

Query (Sorgu) bölümüne PARTNER_RESPONSE_MISSING_DEVICE sorgusunu girin ve Run Query'yi (Sorgu Çalıştır) tıklayın. Sorguyla eşleşen günlükler Sorgu sonuçları bölümünde gösterilir.

747cca0f1249a5a.png

Hata günlüğünde akıllı ev etkinliği gösterilir. Hata ayrıntılarının yer aldığı bu etkinlik, şu bilgileri içerir:

  • Gerçekleştirilen kullanıcı işlemi, en son başarısız sesli komuta karşılık gelen "çamaşır makinesi devam ettiriliyor" (actionType: "STARTSTOP_UNPAUSE") oldu.
  • İlişkilendirilmiş hata ayıklama mesajı: "JSON response does not include device."

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

Hatanın temel nedenini belirleme

functions/index.js politikasında, 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ü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 yıkama makinesinde duraklatma / devam ettirme işlemini nasıl işlediğini daha iyi 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

Hatanın temel nedenini tespit ettiğinize göre duraklatma / devam ettirme komutu dizesini 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 etme

Firebase CLI'yi kullanarak güncellenmiş kodu dağıtın:

firebase deploy --only functions

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

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

=>

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

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

=>

"Anladım, çamaşır makinesine devam ediyorum."

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

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

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

"Ok Google, çamaşır makinem hangi devirde?"

4. İşleminizi Test Suite ile test etme

Manuel olarak test etmenin yanı sıra otomatik Akıllı ev için Test Paketi'ni kullanarak kullanım alanlarını İşleminizle ilişkili cihaz türleri ve özelliklere göre doğrulayabilirsiniz. Test Paketi, İşleminizdeki sorunları tespit etmek için bir dizi test yürütür ve etkinlik günlüklerini derinlemesine incelemeden önce hata ayıklama işleminizi hızlandırmak amacıyla başarısız test durumlarıyla ilgili bilgilendirici mesajlar gösterir.

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

Akıllı ev İşleminizi Test Suite'e göre 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, Test Paketi'nin komutları doğrudan Google Asistan'a göndermesine olanak tanır.
  3. Proje Kimliği alanına akıllı ev işleminizin proje kimliğini girin. Ardından, ilerlemek için SONRAKİ'yi tıklayın.
  4. Test Ayarları adımında, Test Paketi'nde çamaşır makinesinin türünün ve özelliklerinin listesini görürsünüz.

78ed6a1ebdb581bf.png

  1. Örnek yıkama uygulamasında çamaşır makinesi eklemek / çıkarmak / yeniden adlandırmak için kullanıcı arayüzü olmadığından Test İsteği Senkronizasyonu seçeneğini devre dışı bırakın. Üretim sisteminde, kullanıcı cihaz eklediğinde / kaldırdığında / yeniden adlandırdığında Senkronizasyon İste'yi tetiklemeniz gerekir.
  2. Testi çalıştırmaya başlamak için SONRAKİ'yi tıklayın.

Test Paketi çalıştırma işlemi tamamlandıktan sonra test durumlarının sonuçlarını görüntüleyin. İlgili hata mesajıyla yakalanmış iki başarısız test durumu görürsünüz:

5838d10631c98ed2.png

Akıllı Ev İşleminizde hata ayıklama işlemi yapmak için öncelikle hata mesajını analiz ederek hatanın temel nedenini belirlemeniz gerekir.

Hata mesajını analiz et

Geliştiricilerin temel nedeni belirlemelerine yardımcı olmak için Test Paketi, her başarısız test durumu için hatanın nedenini belirten hata mesajlarını 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, ancak gerçek durumlar yalnızca "isPause": false değerini içerdiğini gösterir.

Ayrıca, ikinci başarısız test durumundaki hata mesajı, akıllı ev işleminizin QUERY yanıtında yer alan durumları belirtir. "isPause": true şunları içerir: Bu durum, akıllı ev İşleminizden bildirilen eyaletlerdeki "isPause": false değerinden farklıdır:

fdb5124102e3a37.png

Her iki hata mesajına göre, İşlem raporlarınızda isPaused değerinin doğru olup olmadığını kontrol etmeniz gerekir.

Hatanın temel nedenini belirleme

Durumu yayınlayan reportstate işlevini içeren functions/index.js işlevini Rapor Durumu aracılığıyla Ana Sayfa Grafiği olarak değiştirir. Rapor Durumu yükünü incelediğinizde yükte isPaused durumunun eksik olduğunu görürsünüz. Bu, Test Suite'in başarısız test durumlarında tam olarak kontrol ettiği durumdur.

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 düzeltmesini gözden geçirin:

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 etme

Firebase CLI'yi kullanarak güncellenmiş kodu 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 geçtiğini göreceksiniz.

148837f85d377dd6.png

5. Tebrikler

17d485868a6771bc.png

Tebrikler! Akıllı ev ve GCP metrikleri ve Logging için Test Paketi'ni kullanarak akıllı ev işlemi sorunlarını nasıl gidereceğinizi başarıyla öğrendiniz.

Daha fazla bilgi

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

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