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 komutlarla cihazlarını kontrol etme olanağı sağlayan akıllı ev İşlemleri oluşturabilirsiniz.
Akıllı Ev İş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. İzlemeyi ve hata ayıklamayı kolaylaştırmak için Actions'daki sorunları tespit edip çözmenize yardımcı olacak Google Cloud Platform (GCP) Metrikleri, Logging ve Akıllı ev için Test Paketi kullanıma sunulmuştur.
Ö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ırın
Derlemeniz
Bu codelab'de, 2 kusurlu bir akıllı ev işlemi 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 Paketi aracılığıyla İşlemin kusurlarını ayıklayacaksınız.
Neler öğreneceksiniz?
- Üretim sorunlarını tespit etmek ve çözmek için GCP Metrikleri ve Logging'i kullanma
- İşlevsel sorunları ve API sorunlarını tespit etmek üzere Akıllı Ev için 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 10.16 veya sonraki sürümler
- Google Cloud faturalandırma hesabı
2. Hatalı uygulamayı çalıştırma
Kaynak kodunu alma
Bu codelab ö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 etmeyi ve izlemeyi sağlayan ö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 makinenizdeki terminali açın. washer-faulty
dizinine gidin, ardından Akıllı ev cihazlarını Google Asistan codelab'ine bağlama bölümünde yerleşik olarak bulunan Actions projenizle Firebase CLI'yi ayarlayın:
$ cd washer-faulty $ firebase use <project-id>
Firebase'e dağıtma
functions
klasörüne gidin ve npm.
aracılığıyla gerekli tüm bağımlılıkları yükleyin
$ cd functions $ npm install
Not: Aşağıdaki mesajı görüyorsanız bu mesajı yoksayıp devam edebilirsiniz. Uyarı bazı eski bağımlılıklar nedeniyle gelmiştir. Daha ayrıntılı 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, arızalı çamaşır makinesi uygulamasını dağıtmaya hazırsınız.
$ firebase deploy
Aşağıdaki konsol çıkışını görürsünüz:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<project-id>/overview Hosting URL: https://<project-id>.firebaseapp.com
Home Graph'i güncelleme
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. Web kullanıcı arayüzünde, Senkronizasyon İste seçeneği aracılığıyla HomeGraph'i arızalı yıkama uygulamasındaki en son cihaz meta verileriyle güncellemek için Yenile düğmesini tıklayın:
Google Home uygulamasını açın ve 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 edip etmediğini test edin.
Çamaşır makinesini test etme
Aşağıdaki sesli komutlardan herhangi birini telefonunuzdan 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 / devam ettirdiğinizde Asistan'ın, bir şeylerin yolunda gitmediğini sesli olarak yanıt verdiğini fark edersiniz:
"Maalesef <proje görünen adı> adlı projeye ulaşamadım."
Bu sorunu gidermek için öncelikle hata hakkında daha fazla bilgi edinip temel nedeni tanımlamalısınız.
Smarthome Analytics kontrol paneli
Hataları incelemek için iyi bir yer olan Smarthome Analytics kontrol paneli, bulut karşılamanıza ilişkin Kullanım ve Durum metriklerinin grafiklerini toplar:
- Kullanım metrikleri, günlük etkin kullanıcı sayısı ve sipariş karşılamanızdaki toplam istek sayısı da dahil olmak üzere akıllı ev İşleminizin kullanım trendini yansıtır.
- Sağlık metrikleri; istek gecikmesi, başarı yüzdesi ve hata dökümü dahil olmak üzere akıllı ev İşleminizdeki anormallik oluşumunu izlemenize yardımcı olur.
Hatanın nedenini saptamak için aşağıdaki adımları izleyerek 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.
- Bu işlem sizi Google Cloud'daki projeniz için bir kontrol paneli listesine yönlendirir. Google Home Analytics - Cloud Integration kontrol panelini seçin.
- Vurgulanan zaman aralığıyla ilgili hata kodlarını görüntülemek için Bulut Karşılama Hataları - Durum Dökümü grafiğine gidin.
PARTNER_RESPONSE_MISSING_DEVICE
hata kodu, sorunun asıl nedenine dair ipucu verir. Ardından, daha fazla ayrıntı için hata koduna göre olay günlüklerini alın.
Olay günlüklerine erişme
Hata hakkında daha fazla bilgi edinmek için Cloud Logging üzerinden akıllı ev İşlemlerinizin olay günlüklerine erişin.
Projenizin olay günlüklerine erişmek için Google Cloud Platform'da gezinme menüsünü açıp İşlemler bölümünde Günlük Kaydı > Günlük Gezgini'ni seçin. Dilerseniz arama kutusunda Günlük Gezgini araması da yapabilirsiniz.
Query (Sorgu) bölümüne PARTNER_RESPONSE_MISSING_DEVICE
sorgusunu girin ve Run Query'yi (Sorgu Ç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ı ev etkinliği gösterilir. Hata ayrıntılarının yer aldığı bu etkinlik, şu bilgileri içerir:
- Gerçekleştirilen kullanıcı işlemi, en son başarısız sesli komuta karşılık gelen "çamaşır makinesi devam ettiriliyor" (
actionType:
"STARTSTOP_UNPAUSE
") oldu. - İlişkilendirilmiş hata ayıklama mesajı: "
JSON response does not include device.
"
Hata ayıklama mesajına göre, EXECUTE
yanıtında çamaşır makinesi uygulamasının neden doğru cihazı içermediğini kontrol etmeniz gerekiyor.
Hatanın temel nedenini belirleme
functions/index.js
politikasında, 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ü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 yıkama makinesinde duraklatma / devam ettirme işlemini nasıl işlediğini daha iyi 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
Hatanın temel nedenini tespit ettiğinize göre duraklatma / devam ettirme komutu 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üzeltmenizi test etme
Firebase CLI'yi kullanarak güncellenmiş kodu dağıtın:
firebase deploy --only functions
Aşağıdaki sesli komutları tekrar deneyin. Çamaşır makinesini duraklattığınızda / devam ettirdiğinizde Asistan'ın 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 makinesine devam ediyorum."
Ayrıca, sorular 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 Suite ile test etme
Manuel olarak test etmenin yanı sıra otomatik Akıllı ev için Test Paketi'ni kullanarak kullanım alanlarını İşleminizle ilişkili cihaz türleri ve özelliklere göre doğrulayabilirsiniz. Test Paketi, İşleminizdeki sorunları tespit etmek için bir dizi test yürütür ve etkinlik günlüklerini derinlemesine incelemeden önce hata ayıklama işleminizi hızlandırmak amacıyla başarısız test durumlarıyla ilgili bilgilendirici mesajlar gösterir.
Akıllı ev için Test Paketi'ni çalıştırma
Akıllı ev İşleminizi Test Suite'e göre 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, Test Paketi'nin komutları doğrudan Google Asistan'a göndermesine olanak tanır.
- Proje Kimliği alanına akıllı ev işleminizin proje kimliğini girin. Ardından, ilerlemek için SONRAKİ'yi tıklayın.
- Test Ayarları adımında, Test Paketi'nde çamaşır makinesinin türünün ve özelliklerinin listesini görürsünüz.
- Örnek yıkama uygulamasında çamaşır makinesi eklemek / çıkarmak / 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 / 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ırma işlemi tamamlandıktan sonra test durumlarının sonuçlarını görüntüleyin. İlgili hata mesajıyla yakalanmış iki başarısız test durumu görürsünüz:
Akıllı Ev İşleminizde hata ayıklama işlemi yapmak için öncelikle hata mesajını analiz ederek hatanın temel nedenini belirlemeniz gerekir.
Hata mesajını analiz et
Geliştiricilerin temel nedeni belirlemelerine yardımcı olmak için Test Paketi, her başarısız test durumu için hatanın nedenini belirten hata mesajlarını 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, ancak gerçek durumlar yalnızca "isPause": false
değerini içerdiğini gösterir.
Ayrıca, ikinci başarısız test durumundaki hata mesajı, akıllı ev işleminizin QUERY
yanıtında yer alan durumları belirtir. "isPause": true
şunları içerir: Bu durum, akıllı ev İşleminizden bildirilen eyaletlerdeki "isPause": false
değerinden farklıdır:
Her iki hata mesajına göre, İşlem raporlarınızda isPaused
değerinin doğru olup olmadığını kontrol etmeniz gerekir.
Hatanın temel nedenini belirleme
Durumu yayınlayan reportstate
işlevini içeren functions/index.js
işlevini Rapor Durumu aracılığıyla Ana Sayfa Grafiği olarak değiştirir. Rapor Durumu yükünü incelediğinizde yükte isPaused
durumunun eksik olduğunu görürsünüz. Bu, Test Suite'in başarısız test durumlarında tam olarak kontrol ettiği durumdur.
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
düzeltmesini gözden geçirin:
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 etme
Firebase CLI'yi kullanarak güncellenmiş kodu 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 geçtiğini göreceksiniz.
5. Tebrikler
Tebrikler! Akıllı ev ve GCP metrikleri ve Logging için Test Paketi'ni kullanarak akıllı ev işlemi sorunlarını nasıl gidereceğinizi başarıyla öğrendiniz.
Daha fazla bilgi
Bu Codelab'den yola çıkarak aşağıdaki alıştırmaları yaparak ek kaynakları keşfedin:
- Cihazınıza daha fazla desteklenen özellik ekleyin ve bunları Test Paketi ile test edin.
- İşleminizle ilgili faydalı 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 sayfasını keşfedin.
- Daha fazla bilgi edinmek için GitHub örneğimize göz atın.
Ayrıca, İşleminizi kullanıcılara yayınlamak için sertifikasyon süreci de dahil olmak üzere bir İşlemi test etme ve incelemeye gönderme hakkında daha fazla bilgi edinebilirsiniz.