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ğı tanıyan akıllı ev İş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. İzleme ve hata ayıklama işlemlerini kolaylaştırmak üzere, Action'larınız ile ilgili sorunları tanımlayıp çözmenize yardımcı olması için Google Cloud Platform (GCP) Metrikleri ile Günlük Kaydı ve Akıllı ev için Test Paketi kullanılabilir.
Ö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ştireceğiniz uygulama
Bu codelab'de, 2 kusura sahip bir akıllı ev Action'ını dağıtıp Asistan'a bağlayacak, ardından akıllı ev ve Google Cloud Platform (GCP) Metrikleri ve Logging için Test Paketi aracılığıyla Action'daki hataları ayıklayın.
Neler öğreneceksiniz?
- Üretim sorunlarını belirlemek ve çözmek için GCP Metrikleri ve Günlük Kaydı'nı kullanma
- İşlevselliği ve API sorunlarını belirlemek için Akıllı Ev'de Test Paketi'ni 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 üstü
- 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/googlecodelabs/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
: Akıllı çamaşır makinesini Cloud Functions for Firebase ve Firebase Realtime Database ile yöneten, tamamen uygulamalı bir bulut hizmetidir.
Firebase'e bağlanma
Geliştirme makinenizdeki terminali açın. washer-faulty
dizinine gidin ve ardından Akıllı ev cihazlarını Google Asistan codelab'e bağlama başlıklı makaledeki 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ı, daha eski bazı bağımlılardan kaynaklanmaktadır ve daha fazla bilgiye buradan ulaşabilirsiniz.
found 5 high severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
Bağımlıları yükleyip projenizi yapılandırdığınıza göre artık hatalı çamaşır makinesi uygulamasını dağıtabilirsiniz.
$ 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'ı güncelleyin
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 Refresh (Yenile) düğmesini tıklayarak HomeGraph'i, hatalı çamaşır makinesi uygulamasından en son cihaz meta verileriyle Sync Sync aracılığıyla güncelleyin:
Google Home uygulamasını açın ve Hatalı Çamaşır Makinesi adlı çamaşır makinesini gördüğünüzü 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
Telefonunuzla 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'ın bir şeylerin yanlış olduğunu söylediğini fark edersiniz:
"Maalesef <project display name> projesine ulaşamadım."
Bu sorunu ayıklamak için, öncelikle hatanın nedenini bulmak ve temel nedeni belirlemek üzere hatayla ilgili daha fazla bilgiye ihtiyacınız vardır.
Smarthome Analytics kontrol paneli
Hataları incelemek için Cloudhome Analytics kontrol panelini kullanabilirsiniz. Bu kontrol paneli, buluta geçişle ilgili Kullanım ve Sağlık durumu metrikleri grafiklerini bir araya getirir:
- Kullanım metrikleri, akıllı etkin İşleminizin kullanım trendini (ör. günlük etkin kullanıcı sayısı ve karşılamanıza gelen toplam istek sayısı) yansıtır.
- Sağlık metrikleri, akıllı ev Action'ınızda anormallik durumunu izlemenize yardımcı olarak istek gecikmesini, başarı yüzdesini 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 projenizdeki kontrol panelleri listesine yönlendirir. Google Home Analytics - Cloud Entegrasyonu kontrol panelini seçin.
- Vurgulanan zaman aralığına ait hata kodlarını görmek için Cloud Sipariş Karşılama Hataları - Durum Dökümü grafiğine gidin.
PARTNER_RESPONSE_MISSING_DEVICE
hata kodu, temel neden için 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 fazla bilgi edinmek için akıllı bulut işlemlerinizle ilgili günlüklere Cloud Logging üzerinden erişebilirsiniz.
Google Cloud Platform'da Gezinme Menüsü'nü açın ve İşlemler altında, Günlük Kaydı > Günlük Gezgini'ni seçerek projenizin olay günlüklerine erişin. Alternatif olarak, arama kutusunda Günlük Gezgini için arama yapabilirsiniz.
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örüntülenir.
Hata günlüğü, hata ayrıntılarını gösteren bir akıllı ev etkinliği gösterir:
- Kullanıcı tarafından gerçekleştirilen son işlem, son başarısız sesli komuta karşılık gelen " çamaşır makinesi devam ettiriliyor" (
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 neden EXECUTE
cihazını doğru cihazı içermediğini kontrol etmelisiniz.
Hatanın temel nedenini belirleme
functions/index.js
bölümünde, her komutun durumunu ve yeni cihaz durumunu döndüren EXECUTE
işleyicisini (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 ettirme işlevini nasıl işlediğini daha ayrıntılı şekilde kontrol edin. Duraklat/devam ettir komutu ile eşleşecek dizeyi 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 kullanarak dağıtın:
firebase deploy --only functions
Aşağıdaki sesli komutları tekrar denediğinizde, çamaşır makinesini duraklattığınızda / devam ettirdiğinizde Asistan'ın doğru şekilde yanıt verdiğini görürsünüz.
"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, sorarak çamaşır makinesinin mevcut durumunu test edebilirsin.
"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 yapmanın yanı sıra, Action'ınızla ilişkili cihaz türlerine ve özelliklere göre kullanım alanlarını doğrulamak için Akıllı Ev için Test Paketi'ni kullanabilirsiniz. Test Paketi, İşleminizdeki sorunları tespit etmek için bir dizi test yapar ve olay günlüklerine girmeden önce hata ayıklama sürecini hızlandırmak amacıyla başarısız test durumları için bilgilendirici mesajlar gösterir.
Akıllı ev için Test Paketi çalıştırma
Test evinizdeki akıllı ev Action'ınızı test etmek için şu talimatları uygulayın:
- Web tarayıcınızda Akıllı ev için test paketini 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 Action'ınızın proje kimliğini girin. Ardından devam etmek için İLERİ'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ının çamaşır makinesinin eklenmesi / kaldırılması / yeniden adlandırılması için bir kullanıcı arayüzü olmadığından İsteği Senkronizasyonunu Test Et seçeneğini devre dışı bırakın. Bir üretim sisteminde, kullanıcı cihaz eklediğinde/kaldırdığında/yeniden adlandırdığında Senkronizasyon İste ayarını tetiklemeniz gerekir.
- Testi çalıştırmaya başlamak için SONRAKİ'yi tıklayın.
Test Paketi çalışması tamamlandı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 olduğunu göreceksiniz:
Akıllı ev Action'ınızdaki hataları ayıklamak 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 tespit etmelerine yardımcı olmak için her başarısız test durumunda, 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 Action'ınızda bildirilen durumlarda "isPause": true
beklediğini, ancak gerçek durumda yalnızca "isPause": false
bulunduğunu gösterir.
Ayrıca, ikinci başarısız test durumu hata mesajı, akıllı ev İşleminizden bildirilen QUERY
yanıtındaki durumların "isPause": true
olduğunu gösterir. Bu durum, akıllı ev İşleminizden bildirilen durumlarda "isPause": false
ile aynıdır:
Her iki hata mesajına göre, İşlem raporlarınızın isPaused
değerini doğru değerle belirtip belirlemediğini kontrol etmeniz gerekir.
Hatanın temel nedenini belirleme
Rapor Durumu aracılığıyla Ana Sayfa Grafiği'ne yapılan değişiklikleri yayınlayan reportstate
işlevini içeren functions/index.js
öğesini açın. Rapor Durumu yükünü incelediğinizde, yükte isPaused
durumunun eksik olduğunu görürsünüz. Bu, başarısız test durumlarında Test Paketinin tam olarak bu durumu kontrol eder.
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
hatasını 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 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ı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 aracılığıyla akıllı ev işlemi sorunlarını nasıl gidereceğinizi öğrendiniz.
Daha fazla bilgi
Bu Codelab'i oluştururken aşağıdaki alıştırmaları deneyin ve diğer kaynakları keşfedin:
- Cihazınıza daha fazla desteklenen özellik ekleyin ve bunları Test Paketi ile test edin.
- İşleminizle ilgili faydalı kullanım metriklerine ulaşmak için gösterge tabloları oluşturun, uyarılar oluşturun ve metriklere programatik olarak erişin.
- Akıllı ev için yerel karşılama özelliğini keşfedin.
- Daha fazlasını keşfetmek için GitHub örneğimize göz atın.
Ayrıca, İşleminizi kullanıcılara yayınlamak için onay süreci de dahil olmak üzere, bir İşlemi inceleme için test etme ve gönderme hakkında daha fazla bilgi edinebilirsiniz.