1. قبل از شروع
بهعنوان یک توسعهدهنده اینترنت اشیا (IoT)، میتوانید «اقدامات خانه هوشمند» بسازید که به کاربرانتان این امکان را میدهد که دستگاههای خود را از طریق کنترلهای لمسی در برنامه Google Home و فرمانهای صوتی با «دستیار Google» کنترل کنند.
یادگیری ابزارهای اشکال زدایی برای اقدامات خانه هوشمند گام مهمی برای ایجاد یکپارچگی کیفیت تولید با دستیار Google است. برای تسهیل نظارت و اشکالزدایی آسان، متریکها و Logging و Test Suite Google Cloud Platform (GCP) برای خانههای هوشمند در دسترس هستند تا به شما در شناسایی و حل مشکلات مربوط به Actions خود کمک کنند.
پیش نیازها
- راهنمای برنامهنویس اکشن ساخت خانه هوشمند را بخوانید
- اتصال دستگاههای خانه هوشمند را به لبه کد Google Assistant اجرا کنید
چیزی که خواهی ساخت
در این کد، یک اقدام خانه هوشمند با 2 نقص اجرا میکنید و آن را به Assistant متصل میکنید، سپس نقصهای Action را از طریق Test Suite برای معیارها و گزارشگیری خانه هوشمند و Google Cloud Platform (GCP) رفع اشکال میکنید.
چیزی که یاد خواهید گرفت
- نحوه استفاده از معیارهای GCP و Logging برای شناسایی و حل مشکلات تولید
- نحوه استفاده از Test Suite برای خانه هوشمند برای شناسایی مشکلات عملکردی و API
آنچه شما نیاز دارید
- یک مرورگر وب، مانند گوگل کروم
- یک دستگاه iOS یا Android با برنامه Google Home نصب شده است
- Node.js نسخه 10.16 یا بالاتر
- یک حساب صورتحساب Google Cloud
2. برنامه معیوب را اجرا کنید
کد منبع را دریافت کنید
برای دانلود نمونه این کد لبه روی دستگاه توسعه خود، روی لینک زیر کلیک کنید:
یا می توانید مخزن GitHub را از خط فرمان کلون کنید:
$ git clone https://github.com/google-home/smarthome-debug.git
در مورد پروژه
برنامه شستشو شامل زیر شاخه های زیر است:
-
public
: رابط کاربری frontend برای کنترل و نظارت آسان بر وضعیت واشر هوشمند. -
functions
: یک سرویس ابری کاملاً پیادهسازی شده که واشر هوشمند را با توابع Cloud برای پایگاه داده بیدرنگ Firebase و Firebase مدیریت میکند.
به Firebase متصل شوید
ترمینال را در دستگاه توسعه خود باز کنید. به دایرکتوری washer-faulty
بروید، سپس Firebase CLI را با پروژه Actions خود که در اتصال دستگاههای خانه هوشمند به لبه کد Google Assistant ساخته شده است، راهاندازی کنید:
$ cd washer-faulty $ firebase use <project-id>
در Firebase مستقر شوید
به پوشه functions
بروید و تمام وابستگی های لازم را با استفاده از npm.
$ cd functions $ npm install
توجه: اگر پیام زیر را مشاهده کردید، می توانید نادیده بگیرید و ادامه دهید. این هشدار به دلیل برخی وابستگیهای قدیمی است و میتوانید جزئیات بیشتری را در اینجا بیابید.
found 5 high severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
اکنون که وابستگی ها را نصب کرده اید و پروژه خود را پیکربندی کرده اید، آماده استقرار برنامه شستشوی معیوب هستید.
$ firebase deploy
این خروجی کنسولی است که باید ببینید:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<project-id>/overview Hosting URL: https://<project-id>.firebaseapp.com
HomeGraph را به روز کنید
برای مشاهده برنامه وب ، URL میزبانی وب را در مرورگر خود ( https://<project-id>.firebaseapp.com
) باز کنید. در رابط کاربری وب، روی Refresh کلیک کنید دکمه برای بهروزرسانی HomeGraph از طریق درخواست همگامسازی با آخرین ابرداده دستگاه از برنامه شستشوی معیوب:
برنامه Google Home را باز کنید و بررسی کنید که میتوانید دستگاه شستشو با نام Faulty Washer را ببینید.
3. اکشن خود را آزمایش کنید
پس از استقرار پروژه خود، آزمایش کنید که Action شما واشر را کنترل می کند.
واشر را تست کنید
هنگامی که هر یک از دستورات صوتی زیر را از طریق تلفن خود امتحان می کنید، تغییر مقدار را بررسی کنید:
"Hey Google، ماشین لباسشویی من را روشن کن."
"Hey Google، ماشین لباسشویی من را روشن کن."
"Hey Google، واشر من را متوقف کن."
"Hey Google، ماشین لباسشویی من را از سر بگیر."
"Hey Google، ماشین لباسشویی من را متوقف کن."
متوجه خواهید شد که وقتی ماشین لباسشویی را متوقف میکنید یا از سرگیری میکنید، «دستیار» از طریق صدا پاسخ میدهد:
"با عرض پوزش، من نتوانستم به <project display name> برسم."
برای رفع اشکال این مشکل، ابتدا به اطلاعات بیشتری در مورد خطا نیاز دارید تا علت اصلی آن را محدود کرده و شناسایی کنید.
داشبورد تجزیه و تحلیل خانه هوشمند
یک مکان خوب برای بررسی خطاها داشبورد Smarthome Analytics است که نمودارهای معیارهای استفاده و سلامت را برای انجام ابر شما جمعآوری میکند:
- معیارهای استفاده، روند استفاده از اقدام خانه هوشمند شما را منعکس میکند، از جمله تعداد کاربران فعال روزانه و تعداد کل درخواستها تا انجام شما.
- معیارهای Health به شما کمک می کند تا وقوع ناهنجاری را در Action خانه هوشمند خود نظارت کنید و تأخیر درخواست، درصد موفقیت و تفکیک خطا را پوشش می دهد.
برای محدود کردن علت خطا، مراحل زیر را برای دسترسی به داشبورد پروژه دنبال کنید.
- در کنسول Actions ، به صفحه Projects بروید.
- پروژه خانه هوشمند خود را انتخاب کنید.
- برگه Analytics را انتخاب کنید و روی Go to Google Cloud Platform کلیک کنید.
- این شما را به لیستی از داشبوردهای پروژه خود در Google Cloud هدایت می کند. داشبورد Google Home Analytics - Cloud Integration را انتخاب کنید.
- برای مشاهده کدهای خطا برای محدوده زمانی برجسته شده، به نمودار Cloud Fulfillment Errors - Status Breakdown بروید.
کد خطای PARTNER_RESPONSE_MISSING_DEVICE
اشاره ای به علت اصلی ارائه می دهد. در مرحله بعد، گزارش رویدادها را بر اساس کد خطا برای جزئیات بیشتر بازیابی کنید.
به گزارش های رویداد دسترسی داشته باشید
برای به دست آوردن جزئیات بیشتر در مورد خطا، از طریق Cloud Logging به گزارش رویدادها برای اقدامات خانه هوشمند خود دسترسی پیدا کنید.
منوی پیمایش را در Google Cloud Platform باز کنید و در بخش Operations ، Logging > Logs Explorer را انتخاب کنید تا به گزارش رویدادهای پروژه خود دسترسی داشته باشید. یا می توانید Logs Explorer را در کادر جستجو جستجو کنید.
در بخش Query ، عبارت PARTNER_RESPONSE_MISSING_DEVICE
را وارد کنید و روی Run Query کلیک کنید. گزارش های مطابق با پرس و جو در بخش نتایج پرس و جو نمایش داده می شوند.
گزارش خطا یک رویداد خانه هوشمند را با جزئیات خطا نشان می دهد:
- اقدام کاربر انجام شده "ازسرگیری شستشو" (
actionType:
"STARTSTOP_UNPAUSE
")، مربوط به فرمان صوتی ناموفق اخیر است. - پیام اشکالزدایی مرتبط «
JSON response does not include device.
بر اساس پیام اشکال زدایی، باید بررسی کنید که چرا برنامه شستشو دستگاه صحیح را در پاسخ EXECUTE
شامل نمی شود.
علت اصلی خطا را شناسایی کنید
در functions/index.js
، کنترل کننده EXECUTE
(در آرایه onExecute
) را پیدا کنید که وضعیت هر فرمان و وضعیت دستگاه جدید را برمی گرداند. درج شناسه های دستگاه در یک پاسخ EXECUTE
بستگی به حل عملکرد updateDevice
دارد:
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
چگونه pause / resume را در واشر کنترل می کند، و متوجه خواهید شد که رشته مطابق با دستور pause / resume نادرست است:
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);
};
خطا را برطرف کنید
اکنون که علت اصلی خطا را شناسایی کرده اید، می توانید رشته دستور pause / resume را تصحیح کنید:
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);
};
راه حل خود را تست کنید
کد به روز شده را با استفاده از Firebase CLI مستقر کنید:
firebase deploy --only functions
دستورات صوتی زیر را دوباره امتحان کنید، میبینید که وقتی ماشین لباسشویی را متوقف یا از سر میگیرید، دستیار به درستی پاسخ میدهد.
"Hey Google، واشر من را متوقف کن."
=>
"البته، واشر را مکث کرده است."
"Hey Google، ماشین لباسشویی من را از سر بگیر."
=>
فهمیدم، از سرگیری ماشین لباسشویی.
همچنین می توانید با پرسیدن سوال وضعیت فعلی ماشین لباسشویی خود را تست کنید.
"Hey Google، ماشین لباسشویی من روشن است؟"
"Hey Google، آیا ماشین لباسشویی من کار می کند؟"
"Hey Google، ماشین لباسشویی من در چه چرخه ای است؟"
4. Action خود را با Test Suite تست کنید
علاوه بر آزمایش دستی، میتوانید از مجموعه تست خودکار برای خانه هوشمند برای تأیید موارد استفاده بر اساس نوع دستگاه و ویژگیهای مرتبط با Action خود استفاده کنید. مجموعه آزمایشی مجموعهای از آزمایشها را برای شناسایی مشکلات در Action شما اجرا میکند و پیامهای آموزندهای را برای موارد آزمایشی ناموفق نشان میدهد تا پیش از فرو رفتن در گزارشهای رویداد، اشکالزدایی شما را تسریع کند.
مجموعه تست را برای خانه هوشمند اجرا کنید
برای آزمایش Action by Test Suite خانه هوشمند خود این دستورالعمل ها را دنبال کنید:
- در مرورگر وب خود، مجموعه تست برای خانه هوشمند را باز کنید.
- با استفاده از دکمه در گوشه بالا سمت راست وارد Google شوید. این به مجموعه تست اجازه می دهد تا دستورات را مستقیماً به دستیار Google ارسال کند.
- در قسمت Project ID شناسه پروژه اکشن خانه هوشمند خود را وارد کنید. و سپس برای ادامه روی NEXT کلیک کنید.
- در مرحله تنظیمات تست ، میبینید که مجموعه تست نوع دستگاه و ویژگیهای واشر را فهرست میکند.
- گزینه Test Request Sync را غیرفعال کنید زیرا برنامه شستشوی نمونه رابط کاربری برای افزودن / حذف / تغییر نام واشر ندارد. در یک سیستم تولیدی، هر زمان که کاربر دستگاهها را اضافه/حذف/تغییر نام میدهد، باید Request Sync را فعال کنید.
- برای شروع اجرای آزمون، روی NEXT کلیک کنید.
پس از اجرای Test Suite، نتایج تستها را مشاهده کنید. متوجه دو مورد تست شکست خورده خواهید شد که با پیغام خطای مربوطه گرفتار شده اند:
برای رفع اشکال Action خانه هوشمند خود برای خرابی، باید ابتدا با تجزیه و تحلیل پیام خطا، علت اصلی خطا را شناسایی کنید.
تجزیه و تحلیل پیام خطا
برای کمک به توسعهدهندگان در شناسایی علت اصلی، Test Suite پیامهای خطایی را برای هر مورد آزمایشی ناموفق نشان میدهد که دلیل شکست را نشان میدهد.
برای اولین مورد آزمون ناموفق بالا،
پیام خطای آن نشان میدهد که Test Suite انتظار "isPause": true
، اما حالتهای واقعی فقط شامل "isPause": false
.
علاوه بر این، پیام خطای دومین مورد آزمایشی ناموفق نشان میدهد که وضعیتهای موجود در پاسخ QUERY
از اقدام خانه هوشمند شما شامل "isPause": true
است که با "isPause": false
در وضعیتهای گزارش شده از اقدام خانه هوشمند شما متفاوت است:
با توجه به هر دو پیام خطا، باید بررسی کنید که آیا گزارش های اقدام شما با مقدار صحیح isPaused
.
علت اصلی خطا را شناسایی کنید
functions/index.js
باز کنید، که حاوی تابع reportstate
است که تغییرات وضعیت را از طریق گزارش وضعیت به نمودار اصلی ارسال میکند. بارگزاری وضعیت گزارش را بررسی کنید، و متوجه خواهید شد که محموله حالت isPaused
را ندارد، که دقیقاً همان چیزی است که مجموعه تست در موارد آزمایش ناموفق بررسی کرده است.
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,
});
...
});
خطا را برطرف کنید
اکنون که علت اصلی خطا را شناسایی کرده اید، با اضافه کردن حالت isPaused
به بارگزاری وضعیت گزارش functions/index.js
را اصلاح کنید:
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,
},
},
},
},
};
...
});
راه حل خود را تست کنید
کد به روز شده را با استفاده از Firebase CLI مستقر کنید:
$ firebase deploy --only functions
مجموعه تست برای خانه هوشمند را مجدداً اجرا کنید و متوجه خواهید شد که تمام موارد آزمایشی با موفقیت پشت سر گذاشته شده است.
5. تبریک می گویم
تبریک می گویم! شما با موفقیت یاد گرفتید که چگونه مشکلات مربوط به اقدام خانه هوشمند را از طریق Test Suite for smart home & GCP Metrics and Logging عیب یابی کنید.
بیشتر بدانید
با ایجاد این Codelab، تمرینات زیر را امتحان کنید و منابع اضافی را کشف کنید:
- ویژگی های پشتیبانی شده بیشتری را به دستگاه خود اضافه کنید و آنها را با مجموعه تست آزمایش کنید.
- داشبورد ایجاد کنید، هشدارها را راهاندازی کنید، و بهصورت برنامهریزی به دادههای معیارها دسترسی داشته باشید تا معیارهای استفاده مفید درباره Action خود را دریافت کنید.
- تحقق محلی برای خانه هوشمند را کاوش کنید.
- برای بررسی بیشتر ، نمونه GitHub ما را بررسی کنید.
همچنین میتوانید درباره آزمایش و ارسال یک Action برای بررسی، از جمله فرآیند صدور گواهی برای انتشار Action خود برای کاربران، اطلاعات بیشتری کسب کنید.