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 komutlar aracılığıyla cihazlarını kontrol etme olanağı sunan akıllı ev İşlemleri oluşturabilirsiniz.

a4657871181b5reklam2.gif

Akıllı ev Actions için hata ayıklama araçlarını öğrenmek, Google Asistan ile üretim kalitesi entegrasyonu oluşturmak için önemli bir adımdır. İzleme ve hata ayıklama işlemlerini kolaylaştırmak için işlemlerinizle ilgili sorunları tespit edip çözmenize yardımcı olacak Google Cloud Platform (GCP) Metrikleri ile günlük kaydı ve Akıllı Ev için Test Paketi mevcuttur.

Ön koşullar

Geliştirme

Bu codelab'de 2 kusurlu bir akıllı ev Action'ı dağıtacak ve Asistan'a bağlayacak, ardından akıllı ev ve Google Cloud Platform (GCP) metrikleri ve günlük kaydı için Test Suite üzerinden Action'ın hatalarını gidereceksiniz.

Neler öğreneceksiniz?

  • Üretim sorunlarını belirlemek ve çözmek için GCP Metrikleri ve Günlük Kaydı'nı kullanma
  • İşlevsel ve API sorunlarını tespit etmek için Test Suite'i akıllı ev için kullanma

Gerekenler

2. Hatalı uygulamayı çalıştırın

Kaynak kodu alma

Bu codelab'in ö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:

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

Firebase'e bağlanma

Geliştirme makinenizde terminali açın. washer-faulty dizinine gidin ve Akıllı ev cihazlarını Google Asistan codelab'e bağlama başlıklı makalede yer alan Actions projenizde Firebase CLI'yı 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ılardan kaynaklanmıştır ve 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ükleyip projenizi yapılandırdığınıza göre, hatalı çamaşır makinesi uygulamasını dağıtmaya hazırsınız.

$ firebase deploy

Aşağıdaki konsol çıkışını görmeniz gerekir:

...

✔ Deploy complete!

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

HomeGraph'i güncelleme

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, Senkronizasyon İste özelliği üzerinden HomeGraph'i hatalı temizlikçi uygulamasıyla ilgili en son cihaz meta verileriyle güncellemek için Yenileae8d3b25777a5e30.png düğmesini tıklayın.

6f2b1344179977cf.png

Google Home uygulamasını açıp 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 ettiğini test edin.

Çamaşır makinesini test etme

Telefonunuz üzerinden 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 / çözdüğünüzde Asistan'ın sesle ilgili bir soruna yanıt verdiğini göreceksiniz:

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

Bu sorunu ayıklamak için, önce hatayı düzeltmek ve temel nedeni belirlemek üzere hata hakkında daha fazla bilgi gerekir.

Smarthome Analytics kontrol paneli

Hataları incelemek için iyi bir yer olan Smarthome Analytics kontrol paneli, buluta karşılamanızın Kullanım ve Sağlık metrikleri grafiklerini toplar:

  • Kullanım metrikleri, akıllı ev İşleminizin kullanım eğilimini (günlük etkin kullanıcı sayısı ve sipariş karşılama toplam istek sayısı dahil) yansıtır.
  • Sağlık metrikleri, akıllı ev Action'ınızdaki anormallik oluşumunu izlemenize yardımcı olarak istek gecikmesi, başarı yüzdesi 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 projeniz için kontrol panelleri listesine yönlendirir. Google Home Analytics - Cloud Entegrasyonu kontrol panelini seçin.

5edd3751323176gg.png

  1. Vurgulanan zaman aralığı için hata kodlarını görüntülemek üzere Cloud Sipariş Doldurma Hataları - Durum Dökümü grafiğine gidin.

c468743c20a11c15.png

PARTNER_RESPONSE_MISSING_DEVICE hata kodu, ana nedene ilişkin 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 ayrıntılı bilgi edinmek için Cloud Logging üzerinden akıllı ev Action'larınızın etkinlik 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ı > Günlük Gezgini'ni seçerek projenizin etkinlik günlüklerine erişin. Alternatif olarak, arama kutusunda Günlük Gezgini'ni arayabilirsiniz.

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österilir.

747cca0f1249a5a.png

Hata günlüğünde, akıllı bir ev etkinliği gösterilir. Hatada şu ayrıntılar gösterilir:

  • Yapılan kullanıcı işlemi, yakın zamanda başarısız olan sesli komuta karşılık gelen "makineyi devam ettirme" (actionType: "STARTSTOP_UNPAUSE").
  • İlişkilendirilmiş "JSON response does not include device." hata ayıklama mesajı

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

Hatanın temel nedenini belirleme

functions/index.js içinde her bir komutu ve yeni cihaz durumunu döndüren EXECUTE işleyiciyi (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 ettirmeyi nasıl işlediğini de kontrol edin. Duraklat / devam ettir komutu için eşleşecek dizenin yanlış olduğunu 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'yı kullanarak dağıtın:

firebase deploy --only functions

Aşağıdaki sesli komutları yeniden denediğinizde Asistan'ın çamaşır makinesini duraklattığınızda / devam ettirdiğinizde artık 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 makinesi devam ettiriliyor."

Soru 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 Paketi ile Test Etme

Manuel olarak test etmeye ek olarak, Action'ınızla ilişkili cihaz türleri ve özelliklerine göre kullanım alanlarını doğrulamak amacıyla otomatik Akıllı Ev için Test Paketi'ni kullanabilirsiniz. Test Paketi, İşleminizdeki sorunları algılamak için bir dizi test yürütür ve olay günlüklerine dalmadan önce hata ayıklamanızı hızlandırmak için başarısız test durumlarına ilişkin bilgilendirici iletiler gösterir.

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

Akıllı ev Action'ınızı Test Paketi ile 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 Suite, komutları doğrudan Google Asistan'a gönderebilir.
  3. Proje Kimliği alanına akıllı ev İşleminizin proje kimliğini girin. Ardından devam etmek için İLERİ'yi tıklayın.
  4. Test Ayarları adımında, Test Paketi'nin cihaz türünü ve çamaşır makinesinin özelliklerini listelemesini görürsünüz.

78ed6a1ebdb581bf.png

  1. Örnek çamaşır makinesi uygulamasının, yıkayıcıyı eklemek / kaldırmak / yeniden adlandırmak için kullanıcı arayüzüne sahip olmaması nedeniyle İstek Senkronizasyonunu Test Et seçeneğini devre dışı bırakın. Üretim sisteminde, kullanıcı cihazları 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ırıldı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 görürsünüz:

5838d10631c98ed2.png

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

Hata mesajını analiz etme

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

Yukarıdaki ilk başarısız test durumunda,

99e4e5d06965a8a7.png

Hata mesajı, Test Suite'in 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, başarısız olan ikinci test durumu hata mesajında, akıllı ev İşleminizden gelen QUERY yanıtındaki durumlar yer alır. "isPause": true, akıllı ev İşleminizden bildirilen durumlarda "isPause": false ile aynıdır:

fdb5124102e3a37.png

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

Hatanın temel nedenini belirleme

Durum durumunu Ana Grafik'te raporlayan reportstate işlevini içeren functions/index.js öğesini açın. Rapor Durumu yükünü inceleyin ve yükün, test durumu başarısız olan test durumlarında isPaused için tam olarak kontrol edilen durumu eksik olduğunu göreceksiniz.

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 değerini 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'yı kullanarak dağıtın:

$ firebase deploy --only functions

Akıllı ev için Test Paketi'ni tekrar çalıştırarak tüm test durumlarının geçtiğini görebilirsiniz.

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 Action sorunlarını gidermeyi başarıyla öğrendiniz.

Daha fazla bilgi

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

Ayrıca, Action'ınızı kullanıcılara yayınlamak için onay süreci de dahil olmak üzere işlemleri test etme ve gönderme hakkında daha fazla bilgi edinebilirsiniz.