اشکال زدایی خانه هوشمند

1. قبل از شروع

به‌عنوان یک توسعه‌دهنده اینترنت اشیا (IoT)، می‌توانید ادغام‌های Cloud-to-Cloud را ایجاد کنید که به کاربران خود توانایی کنترل دستگاه‌های خود را از طریق کنترل‌های لمسی در برنامه Google Home و دستورات صوتی با Google Assistant می‌دهد.

a4657871181b5ad2.gif

یادگیری ابزارهای اشکال زدایی برای ادغام های Cloud-to-Cloud یک گام مهم برای ایجاد یکپارچگی کیفیت تولید با دستیار Google است. برای تسهیل نظارت و اشکال‌زدایی آسان، معیارهای Google Cloud Platform (GCP) و Logging و Test Suite برای خانه‌های هوشمند در دسترس هستند تا به شما در شناسایی و حل مشکلات ادغام‌هایتان کمک کنند.

پیش نیازها

چیزی که خواهی ساخت

در این لبه کد، یک ادغام Cloud-to-Cloud را با 2 نقص اجرا می‌کنید و آن را به Assistant متصل می‌کنید، سپس نقص‌های ادغام را از طریق Test Suite برای معیارها و گزارش‌گیری خانه هوشمند و Google Cloud Platform (GCP) رفع اشکال می‌کنید.

چیزی که یاد خواهید گرفت

  • نحوه استفاده از معیارهای GCP و Logging برای شناسایی و حل مشکلات تولید
  • نحوه استفاده از Test Suite برای خانه هوشمند برای شناسایی مشکلات عملکردی و API

آنچه شما نیاز دارید

2. برنامه معیوب را اجرا کنید

کد منبع را دریافت کنید

برای دانلود نمونه این کد لبه روی دستگاه توسعه خود، روی لینک زیر کلیک کنید:

یا می توانید مخزن GitHub را از خط فرمان کلون کنید:

$ git clone https://github.com/google-home/smarthome-debug.git

در مورد پروژه

برنامه شستشو شامل زیر شاخه های زیر است:

به 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 کلیک کنید ae8d3b25777a5e30.png دکمه برای به‌روزرسانی HomeGraph از طریق درخواست همگام‌سازی با آخرین ابرداده دستگاه از برنامه شستشوی معیوب:

6f2b1344179977cf.png

برنامه Google Home را باز کنید و بررسی کنید که می‌توانید دستگاه شستشو با نام Faulty Washer را ببینید.

e357de6a7faff925.png

3. ادغام خود را آزمایش کنید

پس از استقرار پروژه خود، آزمایش کنید که ادغام شما واشر را کنترل می کند.

واشر را تست کنید

هنگامی که هر یک از دستورات صوتی زیر را از طریق تلفن خود امتحان می کنید، تغییر مقدار را بررسی کنید:

"Hey Google، ماشین لباسشویی من را روشن کن."

"Hey Google، ماشین لباسشویی من را روشن کن."

"Hey Google، واشر من را متوقف کن."

"Hey Google، ماشین لباسشویی من را از سر بگیر."

"Hey Google، ماشین لباسشویی من را متوقف کن."

متوجه خواهید شد که وقتی ماشین لباسشویی را متوقف می‌کنید یا از سرگیری می‌کنید، «دستیار» از طریق صدا پاسخ می‌دهد:

"با عرض پوزش، من نتوانستم به <project display name> برسم."

برای رفع اشکال این مشکل، ابتدا به اطلاعات بیشتری در مورد خطا نیاز دارید تا علت اصلی آن را محدود کرده و شناسایی کنید.

داشبورد تجزیه و تحلیل خانه هوشمند

یک مکان خوب برای بررسی خطاها داشبورد Smarthome Analytics است که نمودارهای معیارهای استفاده و سلامت را برای انجام ابر شما جمع‌آوری می‌کند:

  • معیارهای استفاده ، روند استفاده از یکپارچه‌سازی Cloud-to-Cloud شما را نشان می‌دهد، از جمله تعداد کاربران فعال روزانه و تعداد کل درخواست‌ها تا انجام شما.
  • معیارهای Health به شما کمک می کند تا وقوع ناهنجاری را در ادغام Cloud-to-Cloud خود نظارت کنید، تأخیر درخواست، درصد موفقیت و تفکیک خطا را پوشش می دهد.

برای محدود کردن علت خطا، مراحل زیر را برای دسترسی به داشبورد پروژه دنبال کنید.

  1. در Developer Console ، به صفحه Projects بروید.
  2. پروژه خانه هوشمند خود را انتخاب کنید.
  3. روی تب Analytics در منوی سمت چپ کلیک کنید.

b1735bbe11a7aff8.png

  1. این شما را به لیستی از داشبوردهای پروژه خود در Google Cloud هدایت می کند. داشبورد Google Home Analytics - Cloud Integration را انتخاب کنید.

5edd3751323176dd.png

  1. برای مشاهده کدهای خطا برای محدوده زمانی برجسته شده، به نمودار Cloud Fulfillment Errors - Status Breakdown بروید.

c468743c20a11c15.png

کد خطای PARTNER_RESPONSE_MISSING_DEVICE اشاره ای به علت اصلی ارائه می دهد. در مرحله بعد، گزارش رویدادها را بر اساس کد خطا برای جزئیات بیشتر بازیابی کنید.

به گزارش های رویداد دسترسی داشته باشید

برای به دست آوردن جزئیات بیشتر در مورد خطا، از طریق Cloud Logging به گزارش های رویداد برای ادغام Cloud-to-Cloud خود دسترسی پیدا کنید.

منوی پیمایش را در Google Cloud Platform باز کنید و در بخش Operations ، Logging > Logs Explorer را انتخاب کنید تا به گزارش رویدادهای پروژه خود دسترسی داشته باشید. یا می توانید Logs Explorer را در کادر جستجو جستجو کنید.

در قسمت جستجوی همه فیلدها ، عبارت PARTNER_RESPONSE_MISSING_DEVICE را وارد کنید و روی اجرای پرس و جو کلیک کنید. گزارش های مطابق با پرس و جو در بخش نتایج نمایش داده می شوند.

747cca0f1249a5a.png

گزارش خطا یک رویداد خانه هوشمند را با جزئیات خطا نشان می دهد:

  • اقدام کاربر انجام شده "ازسرگیری شستشو" ( 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 این دستورالعمل ها را دنبال کنید:

  1. در مرورگر وب خود، مجموعه تست برای خانه هوشمند را باز کنید.
  2. با استفاده از دکمه در گوشه بالا سمت راست وارد Google شوید. این به مجموعه تست اجازه می دهد تا دستورات را مستقیماً به دستیار Google ارسال کند.
  3. در قسمت Project ID ، شناسه پروژه ادغام Cloud-to-Cloud خود را وارد کنید. و سپس برای ادامه روی NEXT کلیک کنید.
  4. در مرحله تنظیمات تست ، می‌بینید که مجموعه تست نوع دستگاه و ویژگی‌های واشر را فهرست می‌کند.

78ed6a1ebdb581bf.png

  1. گزینه Test Request Sync را غیرفعال کنید زیرا برنامه شستشوی نمونه رابط کاربری برای افزودن / حذف / تغییر نام واشر ندارد. در یک سیستم تولیدی، هر زمان که کاربر دستگاه‌ها را اضافه/حذف/تغییر نام می‌دهد، باید Request Sync را فعال کنید.
  2. روی NEXT کلیک کنید تا آزمایش شروع شود.

پس از اجرای Test Suite، نتایج تست‌ها را مشاهده کنید. متوجه دو مورد تست شکست خورده خواهید شد که با پیغام خطای مربوطه گرفتار شده اند:

5838d10631c98ed2.png

برای رفع اشکال ادغام Cloud-to-Cloud برای خرابی، باید ابتدا با تجزیه و تحلیل پیام خطا، علت اصلی خطا را شناسایی کنید.

تجزیه و تحلیل پیام خطا

برای کمک به توسعه‌دهندگان در شناسایی علت اصلی، Test Suite پیام‌های خطایی را برای هر مورد آزمایشی ناموفق نشان می‌دهد که دلیل شکست را نشان می‌دهد.

برای اولین مورد آزمون ناموفق بالا،

99e4e5d06965a8a7.png

پیام خطای آن نشان می‌دهد که Test Suite انتظار "isPause": true ، اما حالت‌های واقعی فقط شامل "isPause": false .

علاوه بر این، پیام خطای دومین مورد آزمایشی ناموفق نشان می‌دهد که وضعیت‌های موجود در پاسخ QUERY از ادغام Cloud-to-Cloud شما شامل "isPause": true است که با "isPause": false در حالت‌های گزارش شده از Cloud-to-cloud شما متفاوت است. ادغام:

fdb5124102e3a37.png

با توجه به هر دو پیام خطا، باید بررسی کنید که آیا گزارش های یکپارچه سازی شما با مقدار صحیح 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

مجموعه تست برای خانه هوشمند را مجدداً اجرا کنید و متوجه خواهید شد که تمام موارد آزمایشی با موفقیت پشت سر گذاشته شده است.

148837f85d377dd6.png

5. تبریک می گویم

17d485868a6771bc.png

تبریک می گویم! شما با موفقیت یاد گرفتید که چگونه مشکلات ادغام Cloud-to-Cloud را از طریق Test Suite برای خانه های هوشمند و معیارهای GCP و گزارش عیب یابی کنید.

بیشتر بدانید

با ایجاد این Codelab، تمرینات زیر را امتحان کنید و منابع اضافی را کشف کنید:

همچنین می‌توانید درباره آزمایش و ارسال یک ادغام برای بررسی، از جمله فرآیند صدور گواهینامه برای انتشار ادغام خود برای کاربران، اطلاعات بیشتری کسب کنید.