1. Başlamadan önce
Bir 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 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, Günlük Kaydı ve Akıllı Ev için Test Paketi, entegrasyonlarınızla ilgili sorunları belirlemenize ve çözmenize yardımcı olmak üzere kullanılabilir.
Ön koşullar
- Buluttan buluta entegrasyon oluşturma geliştirici kılavuzunu okuyun.
- Connect smart home devices to the Google Assistant (Akıllı ev cihazlarını Google Asistan'a bağlama) adlı codelab'i çalıştırın.
Ne oluşturacaksınız?
Bu codelab'de, 2 kusurlu bir buluttan buluta entegrasyonu dağıtacak, bunu Asistan'a bağlayacak ve ardından akıllı ev ve Google Cloud Platform (GCP) Metrikleri ve Günlükleri için Test Paketi ile entegrasyonun kusurlarında hata ayıklayacaksınız.
Neler öğreneceksiniz?
- Üretim sorunlarını belirlemek ve çözmek için GCP Metrikleri ve Günlük Kaydı'nı kullanma
- İşlevsel ve API sorunlarını belirlemek için akıllı ev Test Paketi'ni kullanma
İhtiyacınız olanlar
- Google Chrome gibi bir web tarayıcısı
- Google Home uygulaması yüklü bir iOS veya Android cihaz
- Node.js 10.16 veya sonraki sürümleri
- 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 aşağıdaki 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ı aşağıdaki alt dizinleri içerir:
public: Akıllı çamaşır makinesinin durumunu kolayca kontrol etmek ve izlemek için kullanılan bir ön uç kullanıcı arayüzü.functions: Cloud Functions for Firebase ve Firebase Realtime Database ile akıllı çamaşır makinesini yöneten, tam olarak 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'yı kurun:
$ 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. Uyarı, eski bağımlılıklardan kaynaklanmaktadır. Daha fazla ayrıntıyı 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 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/<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 Barındırma URL'si'ni (https://<firebase-project-id>.firebaseapp.com) açın. Web kullanıcı arayüzünde, Senkronizasyon İste'yi kullanarak Home Graph'i hatalı çamaşır makinesi uygulamasından alınan en son cihaz meta verileriyle güncellemek için Yenile'yi (
Google Home uygulamasını açın ve Arızalı Çamaşır Makinesi adlı çamaşır makinesi cihazını gördüğünüzü doğrulayın.
3. Entegrasyonunuzu test etme
Projenizi dağıttıktan sonra entegrasyonunuzun çamaşır makinesini kontrol ettiğini test edin.
Püskürtü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 makinem aç."
"Ok Google, çamaşır makinem çalışsın."
"Ok Google, çamaşır makinem duraklatılsın."
"Ok Google, çamaşır makinem çalışmaya devam etsin."
"Ok Google, çamaşır makinem durdur."
Çamaşır makinesini duraklattığınızda veya devam ettirdiğinizde Asistan'ın sesli olarak bir sorun olduğunu söylediğini fark edeceksiniz:
"Üzgünüm, <proje görüntüleme adı> ile iletişime geçemedim."
Bu sorunu ayıklamak için öncelikle hatayla ilgili daha fazla bilgiye ihtiyacınız var. Böylece temel nedeni daraltıp belirleyebilirsiniz.
Akıllı Ev Analizleri kontrol paneli
Hataları incelemek için iyi bir yer, bulut karşılamanızla ilgili Kullanım ve Durum metriklerinin grafiklerini toplayan Akıllı Ev Analizleri kontrol panelidir:
- Kullanım metrikleri, günlük etkin kullanıcı sayısı ve karşılama isteğinizin toplam 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ü gibi konuları kapsayarak buluttan buluta entegrasyonunuzdaki anormallik oluşumunu izlemenize yardımcı olur.
Hataya neden olan durumu daraltmak için proje kontrol paneline erişmek üzere aşağıdaki adımları uygulayın.
- Developer Console'da Projeler sayfasına gidin.
- Akıllı ev projenizi seçin.
- Sol menüde Analytics sekmesini tıklayın.
- Bu işlem sizi Google Cloud'daki projenizin kontrol panelleri listesine yönlendirir. Google Home Analytics - Cloud Integration (Google Home Analytics - Bulut Entegrasyonu) gösterge tablosunu seçin.
- Vurgulanan zaman aralığındaki hata kodlarını görüntülemek için Bulutla Sipariş Karşılama Hataları - Durum Dökümü grafiğine gidin.
PARTNER_RESPONSE_MISSING_DEVICE hata kodu, temel neden hakkında ipucu verir. Ardından, daha fazla ayrıntı için hata koduna göre etkinlik günlüklerini alın.
Olay günlüklerine erişme
Hata hakkında daha fazla bilgi edinmek için Cloud Logging'i kullanarak buluttan buluta entegrasyonunuzun etkinlik günlüklerine erişin.
Google Cloud Platform'da Gezinme Menüsü'nü açın ve İşlemler bölümünde Logging > Logs Explorer'ı (Günlük Gezgini) seçerek projenizin etkinlik günlüklerine erişin. Alternatif olarak, arama kutusunda Logs Explorer'ı (Günlük Gezgini) arayabilirsiniz.
Tüm alanlarda 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, aşağıdaki hata ayrıntılarını içeren bir akıllı ev etkinliği gösteriliyor:
- Gerçekleştirilen kullanıcı işlemi, son başarısız sesli komuta karşılık gelen "çamaşır makinesini devam ettirme" (
actionType:"STARTSTOP_UNPAUSE") işlemidir. - İlişkili hata ayıklama mesajı "
JSON response does not include device."
Hata ayıklama mesajına göre, yıkama makinesi uygulamasının neden EXECUTE yanıtına doğru cihazı dahil etmediğ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şleyicisini (onExecute dizisinde) bulun. Cihaz kimliklerinin bir 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 gerçekleştirdiğini daha ayrıntılı bir şekilde kontrol edin. Duraklatma / devam ettirme komutu için eşleştirilecek 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':
const data = await queryDevice(deviceId);
state = (data.isPaused === false && data.isRunning === false)
? {isRunning: false, isPaused: false}
: {isRunning: !params.pause, isPaused: params.pause};
ref = getFirebaseRef().child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
Hatayı düzeltin
Hataya neden olan temel sorunu 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':
const data = await queryDevice(deviceId);
state = (data.isPaused === false && data.isRunning === false)
? {isRunning: false, isPaused: false}
: {isRunning: !params.pause, isPaused: params.pause};
ref = getFirebaseRef().child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
Düzeltmenizi test etme
Firebase CLI'yı kullanarak güncellenen kodu dağıtın:
firebase deploy --only functions
Aşağıdaki sesli komutları tekrar deneyin. Artık çamaşır makinesini duraklattığınızda / devam ettirdiğinizde Asistan'ın doğru şekilde yanıt verdiğini göreceksiniz.
"Ok Google, çamaşır makinem duraklatılsın."
=>
"Tabii ki, çamaşır makinesi duraklatılıyor."
"Ok Google, çamaşır makinemde yıkamaya devam et."
=>
"Anlaşıldı, çamaşır makinesi çalışmaya devam ediyor."
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 programda çalışıyor?"
4. Entegrasyonunuzu Test Paketi ile test etme
Manuel olarak test etmenin yanı sıra, entegrasyonunuzla ilişkili cihaz türlerine ve özelliklerine dayalı kullanım alanlarını doğrulamak için otomatik akıllı ev test paketi'ni de kullanabilirsiniz. Test Paketi, entegrasyonunuzdaki sorunları tespit etmek için bir dizi test çalıştırır ve başarısız olan test senaryoları için bilgilendirici mesajlar göstererek etkinlik günlüklerine girmeden önce hata ayıklama işleminizi hızlandırır.
Akıllı ev için test paketini çalıştırma
Test Paketi ile buluttan buluta entegrasyonunuzu test etmek için aşağıdaki talimatları uygulayın:
- Web tarayıcınızda Test Suite for smart home'u (Akıllı Ev için Test Paketi) 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. 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 ekleme / kaldırma / yeniden adlandırma 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 veya yeniden adlandırdığında Senkronizasyon İste'yi tetiklemeniz gerekir.
- Testi çalıştırmaya başlamak için SONRAKİ'yi tıklayın.
Test Paketi çalışmayı tamamladıktan sonra test senaryolarının sonuçlarını görüntüleyin. İlgili hata mesajıyla yakalanan iki başarısız test durumu olduğunu fark edeceksiniz:
Buluttan buluta entegrasyonunuzda 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 durumuyla ilgili hata mesajlarını gösterir. Bu mesajlar, başarısızlığın nedenini belirtir.
Yukarıdaki ilk başarısız test durumu için:
Hata mesajında, Test Paketi'nin buluttan buluta entegrasyonunuzdan bildirilen durumlarda "isPause": true beklediği ancak gerçek durumların yalnızca "isPause": false içerdiği belirtiliyor.
Ayrıca, ikinci başarısız test senaryosunun hata mesajı, Cloud'dan Cloud'a entegrasyonunuzdan gelen QUERY yanıtındaki durumların "isPause": true olduğunu gösteriyor. Bu durum, Cloud'dan Cloud'a entegrasyonunuzdan bildirilen durumlardaki "isPause": false değerinden farklıdır:
Her iki hata mesajına göre, entegrasyon raporlarınızın isPaused değerini doğru şekilde bildirip bildirmediğini kontrol etmeniz gerekir.
Hatanın temel nedenini belirleme
Durum değişikliklerini Report State kullanarak Home Graph'a gönderen reportstate işlevini içeren functions/index.js dosyasını açın. Report State yükünü incelediğinizde yükte isPaused durumunun eksik olduğunu görürsünüz. Bu, Test Paketi'nin başarısız test senaryolarında kontrol ettiği şeydir.
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: snapshot.online,
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, functions/index.js değerini, Report State yüküne isPaused durumunu ekleyerek 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: snapshot.online,
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'yı kullanarak güncellenen kodu dağıtın:
$ firebase deploy --only functions
Akıllı ev için test paketini yeniden çalıştırdığınızda tüm test senaryolarının başarılı olduğunu görürsünüz.
5. Tebrikler
Tebrikler! Akıllı ev ve GCP metrikleri ve günlük kaydı için Test Paketi'ni kullanarak buluttan buluta entegrasyon sorunlarını nasıl gidereceğinizi öğrendiniz.
Daha fazla bilgi
Bu Codelab'den yararlanarak aşağıdaki alıştırmaları deneyin ve ek kaynakları inceleyin:
- Cihazınıza daha fazla desteklenen özellik ekleyin ve bunları Test Paketi ile test edin.
- Entegrasyonunuzla ilgili faydalı kullanım metrikleri elde etmek için gösterge tabloları oluşturun, uyarılar ayarlayın ve metrik verilerine programatik olarak erişin.
- Akıllı ev için yerel intent karşılama özelliğini keşfedin.
- Daha fazla bilgi edinmek için GitHub örneğimize göz atın.
Entegrasyonunuzu kullanıcılarla paylaşmak için sertifika süreci de dahil olmak üzere, entegrasyon test etme ve incelemeye gönderme hakkında daha fazla bilgi edinebilirsiniz.











