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

۱. قبل از شروع

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

کیت توسعه نرم‌افزار Local Home با افزودن یک مسیر محلی برای هدایت مستقیم اهداف خانه هوشمند به دستگاه Google Home، یکپارچه‌سازی خانه هوشمند شما را بهبود می‌بخشد، که این امر قابلیت اطمینان را افزایش داده و تأخیر در پردازش دستورات کاربران را کاهش می‌دهد. این کیت به شما امکان می‌دهد یک برنامه تحویل سفارش محلی را با TypeScript یا JavaScript بنویسید و مستقر کنید که دستگاه‌ها را شناسایی کرده و دستورات را روی هر بلندگوی هوشمند Google Home یا نمایشگر هوشمند Google Nest اجرا می‌کند. سپس برنامه شما با استفاده از پروتکل‌های استاندارد موجود برای انجام دستورات، مستقیماً با دستگاه‌های هوشمند موجود کاربران از طریق شبکه محلی ارتباط برقرار می‌کند.

72ffb320986092c.png

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

پیش‌نیازها

آنچه خواهید ساخت

در این آزمایشگاه کد، شما یک سیستم تکمیل سفارش محلی برای ادغام‌های ابر به ابر ایجاد کرده و آن را به دستیار متصل خواهید کرد، سپس برنامه Local Home را با استفاده از مجموعه تست برای خانه هوشمند و معیارها و گزارش‌گیری پلتفرم ابر گوگل (GCP) اشکال‌زدایی خواهید کرد.

آنچه یاد خواهید گرفت

  • نحوه استفاده از معیارهای GCP و ثبت وقایع برای شناسایی و حل مشکلات تولید.
  • نحوه استفاده از مجموعه تست برای شناسایی مشکلات عملکردی و API.
  • نحوه استفاده از ابزارهای توسعه کروم (Chrome Dev Tools) هنگام توسعه برنامه Local Home شما.

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

  • آخرین نسخه گوگل کروم
  • یک دستگاه iOS یا اندروید با برنامه Google Home
  • بلندگوی هوشمند گوگل هوم یا نمایشگر هوشمند گوگل نست
  • نسخه Node.js 10.16 یا بالاتر
  • یک حساب گوگل
  • یک حساب پرداخت گوگل کلود

۲. برنامه ماشین لباسشویی را اجرا کنید

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

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

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

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

درباره پروژه

برنامه‌ی آغازین شامل زیرشاخه‌ها و توابع ابری مشابهی با « فعال‌سازی اجرای محلی برای ادغام‌های ابری به ابری» در codelab است. اما به جای app-start ، در اینجا app-faulty داریم. ما با یک برنامه‌ی خانگی محلی شروع خواهیم کرد که کار می‌کند اما نه به خوبی.

اتصال به فایربیس

ما از همان پروژه‌ای که شما در بخش «فعال‌سازی تحویل محلی برای ادغام‌های ابری به ابری» در codelab ایجاد کرده‌اید، استفاده خواهیم کرد، اما فایل‌های دانلود شده در این codelab را مستقر خواهیم کرد.

به پوشه app-faulty بروید، سپس Firebase CLI را با پروژه ادغام خود که در بخش Enable local completion for Cloud-to-cloud integrations codelab ایجاد کرده‌اید، راه‌اندازی کنید:

$ cd app-faulty
$ firebase use <project-id>

استقرار در فایربیس

به پوشه app-faulty/functions بروید و تمام وابستگی‌های لازم را با استفاده از npm نصب کنید:

$ cd functions
$ npm install

توجه: اگر پیام زیر را مشاهده کردید، می‌توانید آن را نادیده بگیرید و ادامه دهید. این هشدار به دلیل برخی وابستگی‌های قدیمی‌تر است و می‌توانید جزئیات بیشتر را اینجا بیابید.

found 5 high severity vulnerabilities
  run `npm audit fix` to fix them, or `npm audit` for details

به پوشه app-faulty/local/ بروید و دستورات زیر را برای دانلود کامپایلر TypeScript و کامپایل برنامه اجرا کنید:

$ cd ../local
$ npm install
$ npm run build

این کد، سورس فایل index.ts (TypeScript) را کامپایل کرده و محتویات زیر را در دایرکتوری app-faulty/public/local-home/ قرار می‌دهد:

  • bundle.js — خروجی جاوا اسکریپت کامپایل شده حاوی برنامه محلی و وابستگی‌ها.
  • index.html — صفحه میزبانی محلی که برای ارائه برنامه جهت آزمایش روی دستگاه استفاده می‌شود.

اکنون که وابستگی‌ها را نصب و پروژه خود را پیکربندی کرده‌اید، آماده‌اید تا برنامه را برای اولین بار اجرا کنید.

$ firebase deploy

این خروجی کنسولی است که باید ببینید:

...

✔ Deploy complete!

Project Console: https://console.firebase.google.com/project/<project-id>/overview
Hosting URL: https://<projectcd -id>.web.app

این دستور یک برنامه وب را به همراه چندین تابع ابری برای Firebase مستقر می‌کند.

به‌روزرسانی هوم‌گراف

برای مشاهده برنامه وب، آدرس میزبانی وب ( https://<project-id>.web.app ) را در مرورگر خود باز کنید. در رابط کاربری وب، روی دکمه Refresh کلیک کنید. ae8d3b25777a5e30.png دکمه را فشار دهید تا HomeGraph با جدیدترین فراداده‌های دستگاه از برنامه ماشین لباسشویی معیوب با استفاده از درخواست همگام‌سازی به‌روزرسانی شود.

fa3c47f293cfe0b7.png

برنامه Google Home را باز کنید و تأیید کنید که می‌توانید دستگاه ماشین لباسشویی خود را با نام جدید "Faulty Washer" ببینید. به یاد داشته باشید که دستگاه را به اتاقی اختصاص دهید که یک دستگاه Nest در آن قرار دارد.

2a082ee11d47ad1a.png

۳. ماشین لباسشویی هوشمند را روشن کنید

اگر دستور Enable local completion for Cloud-to-cloud integrations در codelab را اجرا کرده‌اید، باید ماشین لباسشویی هوشمند مجازی را از قبل شروع کرده باشید. اگر متوقف شده است، به یاد داشته باشید که دستگاه مجازی را مجدداً راه‌اندازی کنید.

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

به دایرکتوری virtual-device/ بروید و اسکریپت دستگاه را اجرا کنید و پارامترهای پیکربندی را به عنوان آرگومان ارسال کنید:

$ cd ../../virtual-device
$ npm install
$ npm start -- \
  --deviceId=deviceid123 --projectId=<project-id> \
  --discoveryPortOut=3311 --discoveryPacket=HelloLocalHomeSDK

تأیید کنید که اسکریپت دستگاه با پارامترهای مورد انتظار اجرا می‌شود:

(...): UDP Server listening on 3311
(...): Device listening on port 3388
(...): Report State successful

۴. اپلیکیشن Local Home را امتحان کنید

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

«هی گوگل، ماشین لباسشویی من را روشن کن.»

«هی گوگل، ماشین لباسشویی من را روشن کن.»

«هی گوگل، محلی را اجباری کن.»

«هی گوگل، ماشین لباسشویی من را خاموش کن.»

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

این یعنی دستگاه از طریق مسیر محلی قابل دسترسی نیست. این قابلیت قبل از صدور دستور "Hey Google, force local" کار می‌کرد، زیرا وقتی دستگاه از طریق مسیر محلی قابل دسترسی نباشد، به استفاده از مسیر ابری برمی‌گردیم. با این حال، پس از "force local"، گزینه بازگشت به مسیر ابری غیرفعال می‌شود.

برای فهمیدن اینکه مشکل چیست، بیایید از ابزارهایی که داریم استفاده کنیم: معیارهای ثبت وقایع و گزارش‌گیری پلتفرم ابری گوگل (GCP) و ابزارهای توسعه‌دهندگان کروم.

۵. اشکال‌زدایی برنامه Local Home

در بخش بعدی، از ابزارهای ارائه شده توسط گوگل برای فهمیدن دلیل عدم دسترسی به دستگاه از طریق مسیر محلی استفاده خواهید کرد. می‌توانید از ابزارهای توسعه‌دهنده گوگل کروم برای اتصال به دستگاه گوگل هوم، مشاهده گزارش‌های کنسول و اشکال‌زدایی برنامه Local Home استفاده کنید. همچنین می‌توانید گزارش‌های سفارشی را به Cloud Logging ارسال کنید تا از خطاهای رایجی که کاربرانتان در برنامه Local Home شما پیدا می‌کنند، مطلع شوید.

ابزارهای توسعه‌دهنده کروم را متصل کنید

برای اتصال دیباگر به برنامه‌ی محلی خود، این مراحل را دنبال کنید:

  1. مطمئن شوید که دستگاه گوگل هوم خود را به کاربری که اجازه دسترسی به پروژه کنسول توسعه‌دهندگان را دارد، متصل کرده‌اید.
  2. دستگاه گوگل هوم خود را مجدداً راه‌اندازی کنید، که به آن امکان می‌دهد URL مربوط به HTML شما و همچنین پیکربندی اسکنی را که در کنسول توسعه‌دهندگان قرار داده‌اید، دریافت کند.
  3. کروم را روی دستگاه توسعه‌دهنده خود اجرا کنید.
  4. یک تب جدید کروم باز کنید و در قسمت آدرس عبارت chrome://inspect وارد کنید تا ابزار Inspector اجرا شود.

شما باید لیستی از دستگاه‌ها را در صفحه مشاهده کنید و آدرس اینترنتی برنامه شما باید زیر نام دستگاه Google Home شما ظاهر شود.

567f97789a7d8846.png

بازرس را راه اندازی کنید

برای اجرای ابزارهای توسعه‌دهنده کروم، روی Inspect در زیر URL برنامه خود کلیک کنید. تب Console را انتخاب کنید و تأیید کنید که می‌توانید محتوای IDENTIFY intent چاپ شده توسط برنامه TypeScript خود را ببینید.

774c460c59f9f84a.png

این خروجی به این معنی است که کنترل‌کننده‌ی IDENTIFY با موفقیت فعال شده است، اما verificationId برگردانده شده در IdentifyResponse با هیچ یک از دستگاه‌های موجود در HomeGraph شما مطابقت ندارد. بیایید چند گزارش سفارشی اضافه کنیم تا دلیل آن را بفهمیم.

اضافه کردن لاگ‌های سفارشی

اگرچه خطای DEVICE_VERIFICATION_FAILED توسط SDK محلی نمایش داده می‌شود، اما در یافتن علت اصلی کمکی نمی‌کند. بیایید چند گزارش سفارشی اضافه کنیم تا مطمئن شویم که داده‌های اسکن را به درستی می‌خوانیم و پردازش می‌کنیم و توجه داشته باشید که اگر promise را با یک خطا رد کنیم، پیام خطا در واقع به Cloud Logging نیز ارسال می‌شود.

فایل محلی/index.ts

identifyHandler(request: IntentFlow.IdentifyRequest):
    Promise<IntentFlow.IdentifyResponse> {
  console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));

  const scanData = request.inputs[0].payload.device.udpScanData;
  if (!scanData) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_request', 'Invalid scan data');
    return Promise.reject(err);
  }

  // In this codelab, the scan data contains only local device id.
  // Is there something wrong here?
  const localDeviceId = Buffer.from(scanData.data);
  console.log(`IDENTIFY handler: received local device id
      ${localDeviceId}`);

  // Add custom logs
  if (!localDeviceId.toString().match(/^deviceid[0-9]{3}$/gi)) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_device', 'Invalid device id from scan data ' +
        localDeviceId);
    return Promise.reject(err);
  }

  const response: IntentFlow.IdentifyResponse = {
    intent: Intents.IDENTIFY,
    requestId: request.requestId,
    payload: {
      device: {
        id: 'washer',
        verificationId: localDeviceId.toString(),
      }
    }
  };
  console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));

  return Promise.resolve(response);
}

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

فایل محلی/index.ts

const localHomeSdk = new App('1.0.1');

پس از افزودن گزارش‌های سفارشی، باید برنامه را دوباره کامپایل کرده و دوباره در Firebase مستقر کنید.

$ cd ../app-faulty/local
$ npm run build
$ firebase deploy --only hosting

حالا، دستگاه گوگل هوم خود را ریبوت کنید تا بتواند برنامه‌ی خانگی به‌روزرسانی‌شده را بارگذاری کند. می‌توانید با نگاه کردن به گزارش‌های کنسول در ابزارهای توسعه‌دهنده‌ی کروم، ببینید که آیا دستگاه گوگل هوم از نسخه‌ی مورد انتظار استفاده می‌کند یا خیر.

ecc56508ebcf9ab.png

دسترسی به ثبت وقایع ابری

بیایید نگاهی به نحوه استفاده از Cloud Logging برای یافتن خطاها بیندازیم. برای دسترسی به Cloud Logging برای پروژه خود:

  1. در کنسول پلتفرم ابری، به صفحه پروژه‌ها بروید.
  2. پروژه خانه هوشمند خود را انتخاب کنید.
  3. در بخش عملیات ، گزینه ثبت وقایع > کاوشگر گزارش‌ها را انتخاب کنید.

دسترسی به داده‌های ثبت وقایع از طریق مدیریت هویت و دسترسی (IAM) برای کاربران پروژه یکپارچه‌سازی شما مدیریت می‌شود. برای جزئیات بیشتر در مورد نقش‌ها و مجوزهای مربوط به داده‌های ثبت وقایع، به کنترل دسترسی ثبت وقایع ابری مراجعه کنید.

استفاده از فیلترهای پیشرفته

ما می‌دانیم که خطاهایی در IDENTIFY intent رخ می‌دهد، زیرا مسیر محلی به دلیل عدم شناسایی دستگاه محلی کار نمی‌کند. با این حال، می‌خواهیم دقیقاً بدانیم مشکل چیست، بنابراین ابتدا خطاهایی را که در IDENTIFY handler رخ می‌دهند، فیلتر می‌کنیم.

روی گزینه‌ی «نمایش پرس‌وجو» کلیک کنید، باید به یک کادر سازنده‌ی پرس‌وجو تبدیل شود. jsonPayload.intent="IDENTIFY" را در کادر سازنده‌ی پرس‌وجو وارد کنید و روی دکمه‌ی اجرای پرس‌وجو کلیک کنید.

4c0b9d2828ee2447.png

در نتیجه، تمام گزارش‌های خطایی که در کنترل‌کننده‌ی IDENTIFY ارسال می‌شوند را دریافت می‌کنید. در مرحله‌ی بعد، آخرین خطا را بسط دهید. errorCode و debugString را که هنگام رد promise تنظیم کرده‌اید، در کنترل‌کننده‌ی IDENTIFY خواهید یافت.

71f2f156c6887496.png

از debugString می‌توانیم بفهمیم که شناسه دستگاه محلی در قالب مورد انتظار نیست. برنامه Local Home انتظار دارد شناسه دستگاه محلی را به صورت رشته‌ای که با deviceid شروع می‌شود و به دنبال آن ۳ رقم قرار دارد، دریافت کند، اما شناسه دستگاه محلی در اینجا یک رشته هگز است.

خطا را برطرف کنید

با بازگشت به کد منبع، جایی که شناسه دستگاه محلی را از داده‌های اسکن تجزیه می‌کنیم، متوجه می‌شویم که هنگام تبدیل رشته به بایت، کدگذاری را ارائه نکرده‌ایم. داده‌های اسکن به صورت یک رشته هگز دریافت می‌شوند، بنابراین hex را به عنوان کدگذاری کاراکتر هنگام فراخوانی Buffer.from() ارسال کنید.

فایل محلی/index.ts

identifyHandler(request: IntentFlow.IdentifyRequest):
    Promise<IntentFlow.IdentifyResponse> {
  console.log("IDENTIFY intent: " + JSON.stringify(request, null, 2));

  const scanData = request.inputs[0].payload.device.udpScanData;
  if (!scanData) {
    const err = new IntentFlow.HandlerError(request.requestId,
        'invalid_request', 'Invalid scan data');
    return Promise.reject(err);
  }

  // In this codelab, the scan data contains only local device id.
  const localDeviceId = Buffer.from(scanData.data, 'hex');
  console.log(`IDENTIFY handler: received local device id
      ${localDeviceId}`);

  if (!localDeviceId.toString().match(/^deviceid[0-9]{3}$/gi)) {
    const err = new IntentFlow.HandlerError(request.requestId,
      'invalid_device', 'Invalid device id from scan data ' +
      localDeviceId);
    return Promise.reject(err);
  }

  const response: IntentFlow.IdentifyResponse = {
    intent: Intents.IDENTIFY,
    requestId: request.requestId,
    payload: {
      device: {
        id: 'washer',
        verificationId: localDeviceId.toString(),
      }
    }
  };
  console.log("IDENTIFY response: " + JSON.stringify(response, null, 2));

  return Promise.resolve(response);
}

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

فایل محلی/index.ts

const localHomeSdk = new App('1.0.2');

پس از رفع خطا، برنامه را کامپایل کرده و دوباره در Firebase مستقر کنید. در app-faulty/local ، دستور زیر را اجرا کنید:

$ npm run build
$ firebase deploy --only hosting

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

پس از نصب، دستگاه گوگل هوم خود را مجدداً راه‌اندازی کنید تا بتواند برنامه به‌روزرسانی‌شده هوم محلی را بارگیری کند. مطمئن شوید که نسخه برنامه هوم محلی ۱.۰.۲ است و این بار، نباید هیچ خطایی در کنسول ابزارهای توسعه‌دهندگان کروم مشاهده کنید.

c8456f7b5f77f894.png

حالا می‌توانید دوباره سعی کنید دستورات را به دستگاه خود ارسال کنید.

«هی گوگل، محلی را اجباری کن.»

«هی گوگل، ماشین لباسشویی من را خاموش کن.»

«هی گوگل، ماشین لباسشویی من را روشن کن.»

...

«هی گوگل، تنظیمات پیش‌فرض را اجباری کن.»

۶. اجرای مجموعه تست برای خانه هوشمند

پس از تأیید دستگاه خود با استفاده از کنترل‌های لمسی در برنامه Google Home یا از طریق دستورات صوتی، می‌توانید از مجموعه تست خودکار برای خانه هوشمند استفاده کنید تا موارد استفاده را بر اساس نوع دستگاه و ویژگی‌های مرتبط با ادغام خود اعتبارسنجی کنید. مجموعه تست مجموعه‌ای از آزمایش‌ها را برای تشخیص مشکلات در ادغام شما اجرا می‌کند و پیام‌های آموزنده‌ای را برای موارد تست ناموفق نشان می‌دهد تا اشکال‌زدایی شما را قبل از ورود به گزارش‌های رویداد تسریع کند.

اجرای مجموعه تست برای خانه هوشمند

برای آزمایش ادغام ابر به ابر خود توسط Test Suite، این دستورالعمل‌ها را دنبال کنید:

  1. در مرورگر وب خود، مجموعه تست خانه هوشمند را باز کنید.
  2. با استفاده از دکمه‌ای که در گوشه بالا سمت راست قرار دارد، وارد گوگل شوید. این به مجموعه تست اجازه می‌دهد تا دستورات را مستقیماً به دستیار گوگل ارسال کند.
  3. در فیلد شناسه پروژه ، شناسه پروژه ادغام ابر به ابر خود را وارد کنید. و سپس برای ادامه روی بعدی کلیک کنید.
  4. در مرحله تنظیمات تست ، باید ماشین لباسشویی معیوب خود را در بخش دستگاه‌ها و ردیابی‌ها مشاهده کنید.
  5. گزینه Test Request Sync را غیرفعال کنید زیرا برنامه ماشین لباسشویی نمونه هیچ رابط کاربری برای اضافه کردن/حذف کردن/تغییر نام ماشین لباسشویی ندارد. در یک سیستم عملیاتی، هر زمان که کاربر دستگاه‌ها را اضافه/حذف/تغییر نام می‌دهد، باید Request Sync را فعال کنید.
  6. گزینه Local Home SDK را فعال بگذارید، زیرا قرار است هم مسیرهای محلی و هم مسیرهای ابری را آزمایش کنیم.
  7. برای شروع اجرای تست، روی Next: Test environment کلیک کنید.

67433d9190fa770e.png

وقتی تست‌ها کامل شدند، متوجه خواهید شد که تست‌های Pause/Resume در مسیر محلی با شکست مواجه می‌شوند در حالی که تست‌های Pause/Resume در مسیر ابری با موفقیت انجام می‌شوند.

d1ebd5cfae2a2a47.png

تحلیل پیام خطا

نگاهی دقیق‌تر به پیام‌های خطا در موارد تست ناموفق بیندازید. آن‌ها به شما می‌گویند که حالت مورد انتظار برای آن تست چیست و حالت واقعی چه بوده است. در این مورد، برای "Pause the Washer"، حالت مورد انتظار isPaused: true ، اما در حالت واقعی isPaused: false دریافت کردیم. به طور مشابه، برای "Pause the Washer"، حالت مورد انتظار isPaused: true است، اما در حالت واقعی isPaused: false دریافت کردیم.

6bfd3acef9c16b84.png

از پیام‌های خطا، به نظر می‌رسد که در مسیر محلی، ما حالت isPaused را به صورت معکوس تنظیم می‌کنیم.

شناسایی و رفع خطا

بیایید کد منبعی را پیدا کنیم که برنامه Local Home دستور اجرا را به دستگاه ارسال می‌کند. getDataCommand() تابعی است که توسط executeHandler() فراخوانی می‌شود تا payload را در دستور اجرای ارسال شده به دستگاه تنظیم کند.

فایل محلی/index.ts

getDataForCommand(command: string, params: IWasherParams): unknown {
    switch (command) {
        case 'action.devices.commands.OnOff':
            return {
                on: params.on ? true : false
            };
        case 'action.devices.commands.StartStop':
            return {
                isRunning: params.start ? true : false
            };
        case 'action.devices.commands.PauseUnpause':
            return {
                // Is there something wrong here?
                isPaused: params.pause ? false : true
            };
        default:
            console.error('Unknown command', command);
            return {};
    }
}

ما در واقع isPause در حالت معکوس تنظیم می‌کنیم، وقتی params.pause true است، باید روی true تنظیم شود و در غیر این صورت، false . بنابراین، بیایید این مشکل را حل کنیم.

فایل محلی/index.ts

getDataForCommand(command: string, params: IWasherParams): unknown {
    switch (command) {
        case 'action.devices.commands.OnOff':
            return {
                on: params.on ? true : false
            };
        case 'action.devices.commands.StartStop':
            return {
                isRunning: params.start ? true : false
            };
        case 'action.devices.commands.PauseUnpause':
            return {
                isPaused: params.pause ? true : false
            };
        default:
            console.error('Unknown command', command);
            return {};
    }
}

نسخه برنامه خانگی محلی را تغییر دهید تا بتوانیم تشخیص دهیم که آیا از نسخه صحیح استفاده می‌کنیم یا خیر.

فایل محلی/index.ts

const localHomeSdk = new App('1.0.3');

به یاد داشته باشید که برنامه را دوباره کامپایل کنید و دوباره در Firebase مستقر کنید. در app-faulty/local ، دستور زیر را اجرا کنید:

$ npm run build
$ firebase deploy --only hosting

حالا، دستگاه گوگل هوم خود را ریبوت کنید تا بتواند برنامه به‌روزرسانی‌شده لوکال هوم را بارگذاری کند. مطمئن شوید که نسخه برنامه لوکال هوم ۱.۰.۳ است.

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

اکنون، مجموعه تست خانه هوشمند را با همان تنظیمات دوباره اجرا کنید و متوجه خواهید شد که همه موارد تست با موفقیت پشت سر گذاشته شده‌اند.

b7fc8c5d3c727d8d.png

۷. تبریک

764dbc83b95782a.png

تبریک! شما با موفقیت یاد گرفتید که چگونه با استفاده از Test Suite for smart home & Cloud Logging، یک برنامه Local Home را عیب‌یابی کنید.

اطلاعات بیشتر

در اینجا چند مورد اضافی وجود دارد که می‌توانید امتحان کنید:

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