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.
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
- Akıllı ev oluşturma işlemi geliştirici kılavuzunu okuyun
- Akıllı ev cihazlarını Google Asistan'a bağlama codelab'ini çalıştırma
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
- Google Chrome gibi bir web tarayıcısı
- Google Home uygulamasının yüklü olduğu bir iOS veya Android cihaz
- Node.js 10.16 veya sonraki sürümler
- Google Cloud faturalandırma hesabı
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:
public
: Akıllı çamaşır makinesinin durumunu kolayca kontrol edip 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, eksiksiz bir bulut hizmeti.
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 düğmesini tıklayın:
Google Home uygulamasını açın ve Hatalı Çamaşır Makinesi adlı çamaşır makinesi cihazını görebildiğinizi doğrulayın.
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.
- Actions Console'da Projeler sayfasına gidin.
- Akıllı ev projenizi seçin.
- Analytics sekmesini seçin ve Google Cloud Platform'a git'i tıklayın.
- Bunu yaptığınızda, Google Cloud'daki projeniz için kontrol panellerinin listesine yönlendirilirsiniz. Google Home Analytics - Cloud Entegrasyonu kontrol panelini seçin.
- 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.
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.
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."
=>
"Elbette, çamaşır makinesi duraklatılıyor."
"Ok Google, çamaşır makinemi devam ettir."
=>
"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:
- Web tarayıcınızda Akıllı ev için Test Paketi'ni açın.
- Sağ üst köşedeki düğmeyi kullanarak Google'da oturum açın. Bu sayede Test Paketi, komutları doğrudan Google Asistan'a gönderebilir.
- 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.
- Test Ayarları adımında Test Paketi'nde cihaz türü ve çamaşır makinesinin özelliklerinin listelendiğini göreceksiniz.
- Ö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.
- 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:
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
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:
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.
5. Tebrikler
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:
- Cihazınıza daha fazla desteklenen özellik ekleyin ve bunları Test Paketi ile test edin.
- İşleminizle ilgili yararlı kullanım metrikleri almak için kontrol panelleri oluşturun, uyarılar ayarlayın ve metrik verilerine programatik olarak erişin.
- Akıllı ev için yerel sipariş karşılama özelliğini keşfedin.
- Daha fazla bilgi edinmek için GitHub örneğimize göz atın.
İş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.