1. Başlamadan önce
Nesnelerin İnterneti (IoT) geliştiricisi olarak, kullanıcılarınıza Google Home uygulamasındaki dokunmatik kontroller ve Google Asistan'daki sesli komutlar aracılığıyla cihazlarını kontrol etme olanağı tanıyan buluttan buluta entegrasyonlar oluşturabilirsiniz.
Buluttan buluta entegrasyonlar için hata ayıklama araçlarını öğrenmek, Google Asistan ile üretim kalitesinde entegrasyon oluşturmak için önemli bir adımdır. Kolay izleme ve hata ayıklama için Google Cloud Platform (GCP) Metrikleri ve Günlük Kaydı ile Akıllı Ev Testi, entegrasyonlarınızdaki sorunları tespit etmenize ve çözmenize yardımcı olur.
Ön koşullar
- Buluttan buluta entegrasyon oluşturma geliştirici kılavuzunu okuyun.
- Akıllı ev cihazlarını Google Asistan'a bağlama kod laboratuvarını çalıştırın
Oluşturacağınız uygulama
Bu codelab'de, 2 hataya sahip bir buluttan buluta entegrasyon 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 Suite aracılığıyla entegrasyondaki hataları gidereceksiniz.
Neler öğreneceksiniz?
- Üretim sorunlarını tespit edip çözmek için GCP metriklerini ve günlük kaydını kullanma
- İşlevsel ve API sorunlarını belirlemek için akıllı ev için Test Paketi'ni kullanma
Gerekenler
- Google Chrome gibi bir web tarayıcısı
- Google Home uygulaması yüklü bir iOS veya Android cihaz
- Node.js 10.16 veya sonraki bir sürüm
- Google Cloud faturalandırma hesabı
2. Hatalı uygulamayı çalıştırma
Kaynak kodunu alma
Bu kod laboratuvarının örneğini geliştirme makinenize indirmek için aşağıdaki bağlantıyı tıklayın:
...veya GitHub deposunu komut satırından kopyalayabilirsiniz:
$ 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 edip izlemek için kullanılan ö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ış 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'a bağlama codelab'inde oluşturulan entegrasyon projenizle Firebase CLI'yi ayarlayın:
$ cd washer-faulty $ firebase use <firebase-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 yoksayabilir ve devam edebilirsiniz. Bu 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ükleyip projenizi yapılandırdığınıza göre, hatalı çamaşır makinesi uygulamasını dağıtmaya hazırsınız.
$ firebase deploy
Göreceğiniz konsol çıkışı şu şekildedir:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<Firebase-project-id>/overview Hosting URL: https://<Firebase-project-id>.firebaseapp.com
HomeGraph'ı güncelleme
Web uygulamasını görüntülemek için tarayıcınızda (https://<firebase-project-id>.firebaseapp.com
) Barındırma URL'sini açın. Web kullanıcı arayüzünde, Senkronizasyon iste aracılığıyla HomeGraph'ı hatalı çamaşır makinesi uygulamasındaki en son cihaz meta verileriyle güncellemek için Yenile düğmesini tıklayın:
Google Home uygulamasını açın ve Arızalı Çamaşır Makinesi adlı çamaşır makinesini görebildiğinizi doğrulayın.
3. Entegrasyonunuzu test etme
Projenizi dağıttıktan sonra entegrasyonunuzun çamaşır makinesini kontrol edip etmediğini test edin.
Yıkayıcıyı 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 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 sesli olarak bir sorun olduğunu belirtir:
"<project display name> adresine ulaşamadık."
Bu sorunun hata ayıklama işlemini başlatmak için öncelikle hatayla ilgili daha fazla bilgiye ihtiyacınız var. Bu sayede, sorunun temel nedenini belirleyebilir ve daraltabilirsiniz.
Smarthome Analytics kontrol paneli
Hataları incelemek için iyi bir yer, bulut sipariş tamamlama işleminizin Kullanım ve Sağlık metrikleri grafiklerini toplayan Smarthome Analytics kontrol panelidir:
- Kullanım metrikleri, günlük etkin kullanıcı sayısı ve sipariş tamamlama işlemine yapılan toplam istek sayısı da dahil olmak üzere buluttan buluta entegrasyonunuzun kullanım trendini yansıtır.
- Durum metrikleri, istek gecikmesi, başarı yüzdesi ve hata dökümünü kapsayan buluttan buluta entegrasyonunuzda anormallik oluşumunu izlemenize yardımcı olur.
Hatanın nedenini daraltmak için aşağıdaki adımları uygulayarak proje kontrol paneline erişin.
- Developer Console'da Projeler sayfasına gidin.
- Akıllı ev projenizi seçin.
- Sol menüden Analytics sekmesini tıklayın.
- Bu işlem, Google Cloud'daki projenizin kontrol panellerinin listesine yönlendirir. Google Home Analytics - Cloud Integration kontrol panelini seçin.
- Vurgulanan zaman aralığının hata kodlarını görüntülemek için Cloud Fulfillment Hataları - Durum Ayrıştırması grafiğine gidin.
PARTNER_RESPONSE_MISSING_DEVICE
hata kodu, temel nedenle ilgili bir ipucu sağlar. Ardından, daha fazla ayrıntı için hata koduna göre etkinlik günlüklerini alın.
Olay günlüklerine erişim
Hata hakkında daha fazla bilgi edinmek için Cloud Logging üzerinden buluttan buluta entegrasyonunuzun günlüklerine erişin.
Google Cloud Platform'da Gezinme Menüsü'nü açın ve İşlemler bölümünde Günlük > Günlük Gezgini'ni seçerek projenizin etkinlik günlüklerine erişin. Alternatif olarak, arama kutusunda Günlük Gezgini'ni arayabilirsiniz.
Tüm alanları ara giriş alanına PARTNER_RESPONSE_MISSING_DEVICE
sorgusunu girin ve Sorguyu çalıştır'ı tıklayın. Sorguyla eşleşen günlükler Sonuçlar bölümünde gösterilir.
Hata günlüğünde, akıllı ev etkinliği gösterilir ve hata ayrıntıları şu bilgileri içerir:
- Kullanıcının yaptığı işlem, son başarısız sesli komuta karşılık gelen "çamaşır makinesini devam ettirme"dir (
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 EXECUTE
yanıtında doğru cihazı neden içermediğini kontrol etmeniz gerekir.
Hatanın temel nedenini belirleme
functions/index.js
içinde, 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ümüne 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şlemini nasıl işlediğini daha ayrıntılı bir şekilde kontrol edin. 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 belirlediğinize göre duraklatma / devam ettirme komutunun 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üzeltme işleminizi test etme
Güncellenen kodu Firebase CLI'yi kullanarak dağıtın:
firebase deploy --only functions
Aşağıdaki sesli komutları tekrar deneyin. Artık Asistan, çamaşır makinesini duraklattığınızda / devam ettirdiğinizde doğru yanıt verecektir.
"Ok Google, çamaşır makinemi duraklat."
=>
"Elbette, çamaşır makinesini duraklatıyorum."
"Ok Google, çamaşır makinemi devam ettir."
=>
"Anladım, çamaşır makinesini devam ettiriyorum."
Soru sorarak da ç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 programda?"
4. Entegrasyonunuzu Test Suite ile test etme
Manuel testin yanı sıra, entegrasyonunuzla ilişkili cihaz türlerine ve özelliklerine göre kullanım alanlarını doğrulamak için otomatik Akıllı Ev Test Paketi'ni kullanabilirsiniz. Test paketi, entegrasyonunuzdaki sorunları tespit etmek için bir dizi test çalıştırır ve etkinlik günlüklerine göz atmadan önce hata ayıklamanızı hızlandırmak için başarısız test durumlarıyla ilgili bilgilendirici mesajlar gösterir.
Akıllı ev için Test Paketi'ni çalıştırma
Buluttan buluta entegrasyonunuzu Test Suite ile test etmek için aşağıdaki talimatları uygulayın:
- Web tarayıcınızda Akıllı ev için Test Suite'i 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 buluttan buluta entegrasyonunuzun proje kimliğini girin. Ardından, devam etmek için SONRAKİ'yi tıklayın.
- Test Ayarları adımında, Test Paketi'nin çamaşır makinesinin cihaz türünü ve özelliklerini listelediğini görürsünüz.
- Örnek çamaşır makinesi uygulamasında çamaşır makinesi eklemek / kaldırmak / 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 / adını değiştirdiğinde Senkronizasyon İste'yi tetiklemeniz gerekir.
- 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 birlikte yakalanan iki başarısız test örneğini görürsünüz:
Buluttan buluta entegrasyonunuzda hatayla ilgili hata ayıklama yapmak 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 belirlemesine yardımcı olmak için başarısız olan her test senaryosu için hatanın nedenini belirten hata mesajları gösterir.
Yukarıdaki ilk başarısız test durumu için:
Hata mesajı, Test Suite'in buluttan buluta entegrasyonunuzdan bildirilen eyaletlerde "isPause": true
beklediğini ancak gerçek eyaletlerin yalnızca "isPause": false
olduğunu gösterir.
Ayrıca, başarısız olan ikinci testin hata mesajı, buluttan buluta entegrasyonunuzdan gelen QUERY
yanıtındaki durumların "isPause": true
içerdiğini belirtir. Bu durum, buluttan buluta entegrasyonunuzdan bildirilen "isPause": false
durumlarından farklıdır:
Her iki hata mesajına göre, entegrasyon raporlarınızın isPaused
değerini doğru değerle belirtip belirtmediğini kontrol etmeniz gerekir.
Hatanın temel nedenini belirleme
Durum değişikliklerini Rapor Durumu aracılığıyla Ana Grafik'e yayınlayan reportstate
işlevini içeren functions/index.js
dosyasını açın. Rapor Durumu yükü incelendiğinde, yükte isPaused
durumunun eksik olduğu görülebilir. Test paketi, başarısız test durumlarında tam olarak bunu kontrol eder.
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
Hatanın temel nedenini belirlediğinize göre, Rapor Durumu yüküne isPaused
durumunu ekleyerek functions/index.js
'ü 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üzeltme işleminizi test etme
Güncellenen kodu Firebase CLI'yi kullanarak dağıtın:
$ firebase deploy --only functions
Akıllı ev için Test Paketi'ni yeniden çalıştırdığınızda tüm test senaryolarının geçtiğini görürsünüz.
5. Tebrikler
Tebrikler! Akıllı ev için Test Suite ve GCP Metrikleri ve Günlük Kayıtları aracılığıyla buluttan buluta entegrasyon sorunlarını nasıl gidereceğinizi başarıyla öğrendiniz.
Daha fazla bilgi
Bu Codelab'i temel alarak 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.
- Entegrasyonunuzla ilgili yararlı kullanım metrikleri elde etmek 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.
Ayrıca, entegrasyonunuzu kullanıcılara yayınlamak için sertifika süreci de dahil olmak üzere bir entegrasyonu test etme ve incelemeye gönderme hakkında daha fazla bilgi edinebilirsiniz.