1. قبل از شروع
بهعنوان یک توسعهدهنده اینترنت اشیا (IoT)، میتوانید ادغامهای Cloud-to-Cloud را ایجاد کنید که به کاربران خود توانایی کنترل دستگاههای خود را از طریق کنترلهای لمسی در برنامه Google Home و دستورات صوتی با Google Assistant میدهد.
یادگیری ابزارهای اشکال زدایی برای ادغام های Cloud-to-Cloud یک گام مهم برای ایجاد یکپارچگی کیفیت تولید با دستیار Google است. برای تسهیل نظارت و اشکالزدایی آسان، معیارهای Google Cloud Platform (GCP) و Logging و Test Suite برای خانههای هوشمند در دسترس هستند تا به شما در شناسایی و حل مشکلات ادغامهایتان کمک کنند.
پیش نیازها
- راهنمای توسعهدهنده یکپارچهسازی Cloud-to-Cloud را بخوانید
- اتصال دستگاههای خانه هوشمند را به لبه کد Google Assistant اجرا کنید
چیزی که خواهی ساخت
در این لبه کد، یک ادغام Cloud-to-Cloud را با 2 نقص اجرا میکنید و آن را به Assistant متصل میکنید، سپس نقصهای ادغام را از طریق 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 را با پروژه ادغام خود که در اتصال دستگاههای خانه هوشمند به آزمایشگاه کد دستیار Google ساخته شده است، راهاندازی کنید:
$ cd washer-faulty $ firebase use <firebase-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/<Firebase-project-id>/overview Hosting URL: https://<Firebase-project-id>.firebaseapp.com
HomeGraph را به روز کنید
برای مشاهده برنامه وب، URL میزبانی وب را در مرورگر خود ( https://<firebase-project-id>.firebaseapp.com
) باز کنید. در رابط کاربری وب، روی Refresh کلیک کنید دکمه برای بهروزرسانی HomeGraph از طریق درخواست همگامسازی با آخرین ابرداده دستگاه از برنامه شستشوی معیوب:
برنامه Google Home را باز کنید و بررسی کنید که میتوانید دستگاه شستشو با نام Faulty Washer را ببینید.
3. ادغام خود را آزمایش کنید
پس از استقرار پروژه خود، آزمایش کنید که ادغام شما واشر را کنترل می کند.
واشر را تست کنید
هنگامی که هر یک از دستورات صوتی زیر را از طریق تلفن خود امتحان می کنید، تغییر مقدار را بررسی کنید:
"Hey Google، ماشین لباسشویی من را روشن کن."
"Hey Google، ماشین لباسشویی من را روشن کن."
"Hey Google، واشر من را متوقف کن."
"Hey Google، ماشین لباسشویی من را از سر بگیر."
"Hey Google، ماشین لباسشویی من را متوقف کن."
متوجه خواهید شد که وقتی ماشین لباسشویی را متوقف میکنید یا از سرگیری میکنید، «دستیار» از طریق صدا پاسخ میدهد:
"با عرض پوزش، من نتوانستم به <project display name> برسم."
برای رفع اشکال این مشکل، ابتدا به اطلاعات بیشتری در مورد خطا نیاز دارید تا علت اصلی آن را محدود کرده و شناسایی کنید.
داشبورد تجزیه و تحلیل خانه هوشمند
یک مکان خوب برای بررسی خطاها داشبورد Smarthome Analytics است که نمودارهای معیارهای استفاده و سلامت را برای انجام ابر شما جمعآوری میکند:
- معیارهای استفاده ، روند استفاده از یکپارچهسازی Cloud-to-Cloud شما را نشان میدهد، از جمله تعداد کاربران فعال روزانه و تعداد کل درخواستها تا انجام شما.
- معیارهای Health به شما کمک می کند تا وقوع ناهنجاری را در ادغام Cloud-to-Cloud خود نظارت کنید، تأخیر درخواست، درصد موفقیت و تفکیک خطا را پوشش می دهد.
برای محدود کردن علت خطا، مراحل زیر را برای دسترسی به داشبورد پروژه دنبال کنید.
- در Developer Console ، به صفحه Projects بروید.
- پروژه خانه هوشمند خود را انتخاب کنید.
- روی تب Analytics در منوی سمت چپ کلیک کنید.
- این شما را به لیستی از داشبوردهای پروژه خود در Google Cloud هدایت می کند. داشبورد Google Home Analytics - Cloud Integration را انتخاب کنید.
- برای مشاهده کدهای خطا برای محدوده زمانی برجسته شده، به نمودار Cloud Fulfillment Errors - Status Breakdown بروید.
کد خطای PARTNER_RESPONSE_MISSING_DEVICE
اشاره ای به علت اصلی ارائه می دهد. در مرحله بعد، گزارش رویدادها را بر اساس کد خطا برای جزئیات بیشتر بازیابی کنید.
به گزارش های رویداد دسترسی داشته باشید
برای به دست آوردن جزئیات بیشتر در مورد خطا، از طریق Cloud Logging به گزارش های رویداد برای ادغام Cloud-to-Cloud خود دسترسی پیدا کنید.
منوی پیمایش را در Google Cloud Platform باز کنید و در بخش Operations ، Logging > Logs Explorer را انتخاب کنید تا به گزارش رویدادهای پروژه خود دسترسی داشته باشید. یا می توانید Logs Explorer را در کادر جستجو جستجو کنید.
در قسمت جستجوی همه فیلدها ، عبارت PARTNER_RESPONSE_MISSING_DEVICE
را وارد کنید و روی اجرای پرس و جو کلیک کنید. گزارش های مطابق با پرس و جو در بخش نتایج نمایش داده می شوند.
گزارش خطا یک رویداد خانه هوشمند را با جزئیات خطا نشان می دهد:
- اقدام کاربر انجام شده "ازسرگیری شستشو" (
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. ادغام خود را با Test Suite تست کنید
علاوه بر آزمایش دستی، میتوانید از مجموعه تست خودکار برای خانه هوشمند برای تأیید موارد استفاده بر اساس انواع دستگاه و ویژگیهای مرتبط با ادغام خود استفاده کنید. مجموعه تست مجموعهای از آزمایشها را برای شناسایی مشکلات موجود در ادغام شما اجرا میکند و پیامهای آموزندهای را برای موارد آزمایشی ناموفق نشان میدهد تا پیش از فرو رفتن در گزارشهای رویداد، اشکالزدایی شما را تسریع کند.
مجموعه تست را برای خانه هوشمند اجرا کنید
برای آزمایش ادغام Cloud-to-Cloud توسط Test Suite این دستورالعمل ها را دنبال کنید:
- در مرورگر وب خود، مجموعه تست برای خانه هوشمند را باز کنید.
- با استفاده از دکمه در گوشه بالا سمت راست وارد Google شوید. این به مجموعه تست اجازه می دهد تا دستورات را مستقیماً به دستیار Google ارسال کند.
- در قسمت Project ID ، شناسه پروژه ادغام Cloud-to-Cloud خود را وارد کنید. و سپس برای ادامه روی NEXT کلیک کنید.
- در مرحله تنظیمات تست ، میبینید که مجموعه تست نوع دستگاه و ویژگیهای واشر را فهرست میکند.
- گزینه Test Request Sync را غیرفعال کنید زیرا برنامه شستشوی نمونه رابط کاربری برای افزودن / حذف / تغییر نام واشر ندارد. در یک سیستم تولیدی، هر زمان که کاربر دستگاهها را اضافه/حذف/تغییر نام میدهد، باید Request Sync را فعال کنید.
- روی NEXT کلیک کنید تا آزمایش شروع شود.
پس از اجرای Test Suite، نتایج تستها را مشاهده کنید. متوجه دو مورد تست شکست خورده خواهید شد که با پیغام خطای مربوطه گرفتار شده اند:
برای رفع اشکال ادغام Cloud-to-Cloud برای خرابی، باید ابتدا با تجزیه و تحلیل پیام خطا، علت اصلی خطا را شناسایی کنید.
تجزیه و تحلیل پیام خطا
برای کمک به توسعهدهندگان در شناسایی علت اصلی، Test Suite پیامهای خطایی را برای هر مورد آزمایشی ناموفق نشان میدهد که دلیل شکست را نشان میدهد.
برای اولین مورد آزمون ناموفق بالا،
پیام خطای آن نشان میدهد که Test Suite انتظار "isPause": true
، اما حالتهای واقعی فقط شامل "isPause": false
.
علاوه بر این، پیام خطای دومین مورد آزمایشی ناموفق نشان میدهد که وضعیتهای موجود در پاسخ QUERY
از ادغام Cloud-to-Cloud شما شامل "isPause": true
است که با "isPause": false
در حالتهای گزارش شده از Cloud-to-cloud شما متفاوت است. ادغام:
با توجه به هر دو پیام خطا، باید بررسی کنید که آیا گزارش های یکپارچه سازی شما با مقدار صحیح 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. تبریک می گویم
تبریک می گویم! شما با موفقیت یاد گرفتید که چگونه مشکلات ادغام Cloud-to-Cloud را از طریق Test Suite برای خانه های هوشمند و معیارهای GCP و گزارش عیب یابی کنید.
بیشتر بدانید
با ایجاد این Codelab، تمرینات زیر را امتحان کنید و منابع اضافی را کشف کنید:
- ویژگی های پشتیبانی شده بیشتری را به دستگاه خود اضافه کنید و آنها را با مجموعه تست آزمایش کنید.
- داشبورد ایجاد کنید، هشدارها را راهاندازی کنید، و بهصورت برنامهریزی به دادههای معیارها دسترسی داشته باشید تا معیارهای استفاده مفید در مورد یکپارچهسازی خود را دریافت کنید.
- تحقق محلی برای خانه هوشمند را کاوش کنید.
- برای بررسی بیشتر، نمونه GitHub ما را بررسی کنید.
همچنین میتوانید درباره آزمایش و ارسال یک ادغام برای بررسی، از جمله فرآیند صدور گواهینامه برای انتشار ادغام خود برای کاربران، اطلاعات بیشتری کسب کنید.