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.
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
- Akıllı ev işlemi oluşturma geliştirici kılavuzunu okuyun
- Akıllı ev cihazlarını Google Asistan'a bağlama codelab'ini çalıştırma
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
- Google Chrome gibi bir web tarayıcısı
- Google Home uygulamasının yüklü olduğu bir iOS veya Android cihaz
- Node.js sürüm 10.16 veya sonraki sürümler
- Google Cloud faturalandırma hesabı
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 Yenile düğmesini tıklayın.
Google Home uygulamasını açıp Hatalı Çamaşır Makinesi adlı çamaşır makinesini görebildiğinizi doğrulayın.
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.
- İşlemler konsolunda Projeler sayfasına gidin.
- Akıllı ev projenizi seçin.
- Analytics sekmesini seçin ve Google Cloud Platform'a git'i tıklayın.
- Bu işlem sizi Google Cloud'daki projeniz için kontrol panelleri listesine yönlendirir. Google Home Analytics - Cloud Entegrasyonu kontrol panelini seçin.
- Vurgulanan zaman aralığı için hata kodlarını görüntülemek üzere Cloud Sipariş Doldurma Hataları - Durum Dökümü grafiğine gidin.
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.
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:
- 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 Suite, komutları doğrudan Google Asistan'a gönderebilir.
- Proje Kimliği alanına akıllı ev İşleminizin proje kimliğini girin. Ardından devam etmek için İLERİ'yi tıklayın.
- Test Ayarları adımında, Test Paketi'nin cihaz türünü ve çamaşır makinesinin özelliklerini listelemesini görürsünüz.
- Ö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.
- 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:
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,
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:
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.
5. Tebrikler
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:
- Cihazınıza daha fazla desteklenen özellik ekleyin ve bunları Test Paketi ile test edin.
- İşleminizle ilgili faydalı kullanım metriklerini almak için gösterge tabloları oluşturun, uyarılar oluşturun ve metriklere programatik olarak erişin.
- Akıllı ev için yerel sipariş karşılama özelliğini keşfedin.
- Daha fazlasını keşfetmek için GitHub örneğimize göz atın.
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.