تصحيح أخطاء المنزل المحلي

1- قبل البدء

تسمح عمليات الدمج في المنزل المزوّد بأجهزة ذكية لخدمة "مساعد Google" بالتحكّم في الأجهزة المتصلة في منازل المستخدمين. لإنشاء إجراء للمنزل المزوّد بأجهزة ذكية، عليك توفير نقطة نهاية للردّ التلقائي على الويب على السحابة الإلكترونية يمكنها التعامل مع أهداف المنزل المزوّد بأجهزة ذكية. على سبيل المثال، عندما يقول المستخدم "Ok Google، أريد إضاءة المصابيح"، يرسل "مساعد Google" الطلب إلى طريقة التنفيذ على السحابة الإلكترونية لتعديل حالة الجهاز.

تعمل حزمة تطوير البرامج (SDK) للمنزل المحلي على تحسين عملية دمج المنزل المزوّد بأجهزة ذكية من خلال إضافة مسار محلي لتوجيه أهداف المنزل المزوّد بأجهزة ذكية مباشرةً إلى جهاز Google Home، ما يعزّز الموثوقية ويقلل من وقت الاستجابة في معالجة أوامر المستخدمين. تسمح لك هذه السياسة بكتابة تطبيق تنفيذ محلي ونشره في TypeScript أو JavaScript يحدّد الأجهزة وينفّذ الأوامر على أي مكبّر صوت ذكي من Google Home أو شاشة Google Nest ذكية. يتواصل تطبيقك بعد ذلك مباشرةً مع الأجهزة الذكية الحالية الخاصة بالمستخدمين عبر شبكة الاتصال المحلية باستخدام البروتوكولات العادية الحالية لتنفيذ الأوامر.

72ffb320986092c.png

إنّ تصحيح أخطاء إجراءات المنزل المزوّد بأجهزة ذكية هو خطوة مهمة لتطوير إجراءاتك بجودة إنتاجها، ومع ذلك، فإنّه يشكّل تحديًا ويستغرق وقتًا طويلاً من دون توفير أدوات اختبارية وغنية بالمعلومات وسهلة الاستخدام لتحديد المشاكل وحلّها. لتسهيل تصحيح أخطاء إجراءات المنزل المزوّد بأجهزة ذكية، تتوفّر مقاييس وتسجيل ومجموعة اختبارية للمنزل المزوّد بأجهزة ذكية في Google Cloud Platform (GCP) لمساعدتك في تحديد مشاكل الإجراءات وحلّها.

المتطلبات الأساسية

ما ستقوم بإنشائه

في هذا الدرس التطبيقي حول الترميز، سيكون عليك إنشاء تنفيذ محلي للإجراءات المتعلّقة بالمنزل المزوّد بأجهزة ذكية وربطه بخدمة "مساعد Google"، ثم تصحيح الأخطاء في تطبيق Local Home عبر "حزمة الاختبار" للمنزل المزوّد بأجهزة ذكية ومقاييس Google Cloud Platform (GCP) والتسجيل.

ما ستتعرَّف عليه

  • طريقة استخدام مقاييس Google Cloud Platform وتسجيل الدخول لتحديد مشاكل الإنتاج وحلّها
  • كيفية استخدام "حزمة الاختبار" لتحديد المشاكل الوظيفية والمشاكل المتعلّقة بواجهة برمجة التطبيقات
  • كيفية استخدام أدوات مطوّري البرامج في Chrome أثناء تطوير تطبيق Local Home.

المتطلبات

  • أحدث إصدار من Google Chrome
  • جهاز iOS أو Android يتضمّن تطبيق Google Home
  • مكبّر صوت ذكي من Google Home أو شاشة Google Nest ذكية
  • الإصدار 10.16 من Node.js أو إصدار أحدث
  • حساب Google
  • حساب فوترة على Google Cloud

2- تشغيل تطبيق الغسّالة

الحصول على رمز المصدر

انقر على الرابط التالي لتنزيل نموذج هذا الدرس التطبيقي حول الترميز على جهاز التطوير الذي تستخدمه:

...أو يمكنك استنساخ مستودع جيت هب من سطر الأوامر:

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

لمحة عن المشروع

يحتوي تطبيق المبتدئين على أدلة فرعية ووظائف السحابة الإلكترونية مشابهة للدرس التطبيقي حول ترميز تفعيل التنفيذ المحلي لإجراءات المنزل المزوّد بأجهزة ذكية. ولكن بدلاً من app-start، لدينا app-faulty هنا. سنبدأ بتطبيق منزل محلي يعمل ولكن ليس بشكل جيد.

الربط بمنصة Firebase

سنستخدم المشروع نفسه الذي أنشأته في الدرس التطبيقي حول ترميز تفعيل التنفيذ المحلي لإجراءات المنزل المزوّد بأجهزة ذكية، ولكنّنا سننشر الملفات التي تم تنزيلها في هذا الدرس التطبيقي حول الترميز.

انتقِل إلى دليل app-faulty، ثم اضبط واجهة سطر الأوامر في Firebase باستخدام مشروع الإجراءات الذي تم إنشاؤه في تفعيل التنفيذ المحلي لإجراءات المنزل المزوّد بأجهزة ذكية.

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

النشر على Firebase

يمكنك الانتقال إلى المجلد 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: مخرجات JavaScript مجمّعة تحتوي على التطبيق المحلي والتبعيات.
  • index.html: صفحة الاستضافة المحلية المستخدمة لعرض التطبيق للاختبار على الجهاز.

الآن بعد أن قمت بتثبيت التبعيات وإعداد مشروعك، فأنت جاهز لتشغيل التطبيق لأول مرة.

$ firebase deploy

هذه هي مخرجات وحدة التحكم التي يُفترض أن تظهر لك:

...

✔ Deploy complete!

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

يؤدي هذا الأمر إلى نشر تطبيق ويب، مع العديد من دوال Cloud لمنصة Firebase.

تعديل HomeGraph

افتح عنوان URL للاستضافة في متصفّحك (https://<project-id>.web.app) لعرض تطبيق الويب. في واجهة مستخدم الويب، انقر على الزر إعادة تحميل ae8d3b25777a5e30.png لتعديل HomeGraph عبر طلب المزامنة باستخدام أحدث البيانات الوصفية للجهاز من تطبيق الغسّالة الذي يتضمّن عيوبًا:

fa3c47f293cfe0b7.png

يُرجى فتح تطبيق Google Home والتأكّد من ظهور اسم جديد للغسّالة هو "الغسّالة". تذكَّر تعيين الجهاز لغرفة تتضمن جهاز Nest.

2a082ee11d47ad1a.png

3- تشغيل الغسّالة الذكية

إذا كنت قد شغّلت الدرس التطبيقي حول ترميز تفعيل التنفيذ المحلي لإجراءات المنزل المزوّد بأجهزة ذكية، من المفترض أنّك سبق وبدأت تشغيل الغسّالة الذكية الافتراضية. وإذا كان متوقفًا، يُرجى إعادة تشغيل الجهاز الافتراضي.

تشغيل الجهاز

انتقِل إلى دليل 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

4- اختبار تطبيق Local Home

يمكنك إرسال طلبات إلى جهازك من خلال الطلبات الصوتية إلى جهاز Google Home، مثل:

"Ok Google، أريد تشغيل غسّالة ملابسي"

"Ok Google، أريد تشغيل الغسّالة"

"Ok Google، فرض الإعدادات المحلية"

"Ok Google، أريد إيقاف الغسّالة"

ملاحظة: عند محاولة التحكّم في الغسّالة بعد "فرض التشغيل المحلي"، سيردّ "مساعد Google" بعبارة "عذرًا، يبدو أنّ الغسالة غير متاحة حاليًا".

وهذا يعني أنّه لا يمكن الوصول إلى الجهاز من خلال مسار محلي. وقد تم ذلك قبل إصدار عبارة "Ok Google، أريد فرض ضبط الجهاز على الجهاز" لأنّنا سنعود إلى استخدام المسار على السحابة الإلكترونية عندما يتعذّر الوصول إلى الجهاز من خلال مسار محلي. ومع ذلك، بعد "فرض محلي"، سيتم إيقاف خيار الرجوع إلى مسار السحابة الإلكترونية.

لمعرفة المشكلة، يمكننا الاستفادة من الأدوات المتوفّرة لدينا: مقاييس Google Cloud Platform (GCP) والتسجيل وأدوات مطوّري برامج Chrome.

5- تصحيح الأخطاء في تطبيق Local Home

في القسم التالي، ستستخدم الأدوات المقدَّمة من Google لمعرفة سبب عدم إمكانية الوصول إلى الجهاز من خلال المسار المحلي. يمكنك استخدام أدوات المطوّرين في Google Chrome للاتصال بجهاز Google Home والاطّلاع على سجلات وحدة التحكّم وتصحيح الأخطاء في تطبيق Local Home. ويمكنك أيضًا إرسال سجلّات مخصّصة إلى ميزة تسجيل الدخول في السحابة الإلكترونية حتى تطّلع على أهم الأخطاء التي يعثر عليها المستخدمون في تطبيق Local Home.

ربط أدوات مطوّري برامج Chrome

لربط برنامج تصحيح الأخطاء بتطبيق توصيل الطلبات على الجهاز، اتّبِع الخطوات التالية:

  1. تأكَّد من ربط جهاز Google Home بمستخدم لديه إذن الوصول إلى مشروع وحدة تحكّم الإجراءات.
  2. يُرجى إعادة تشغيل جهاز Google Home، ما يتيح له الحصول على عنوان URL لملف HTML بالإضافة إلى إعدادات الفحص التي تضبطها في وحدة التحكّم في الإجراءات.
  3. شغِّل متصفِّح Chrome على جهاز التطوير.
  4. افتح علامة تبويب جديدة في Chrome وأدخِل chrome://inspect في حقل العنوان لتشغيل أداة الفحص.

من المفترض أن تظهر قائمة بالأجهزة على الصفحة، ومن المفترض أن يظهر عنوان URL لتطبيقك تحت اسم جهاز Google Home.

567f97789a7d8846.png

تشغيل أداة الفحص

انقر على فحص أسفل عنوان URL لتطبيقك لتشغيل "أدوات مطوّري برامج Chrome". اختَر علامة التبويب وحدة التحكّم وتأكَّد من أنّه يمكنك الاطّلاع على محتوى IDENTIFY intent المطبوع بواسطة تطبيق TypeScript.

774c460c59f9f84a.png

تشير هذه النتيجة إلى أنّه تم تشغيل معالِج IDENTIFY بنجاح، إلا أنّ قيمة verificationId المعروضة في IdentifyResponse لا تتطابق مع أي جهاز من الأجهزة في قاعدة البيانات Home Graph. لنضِف بعض السجلّات المخصّصة لمعرفة السبب.

إضافة سجلّات مخصّصة

على الرغم من ظهور خطأ DEVICE_VERIFICATION_FAILED مطبوع من خلال حزمة تطوير البرامج (SDK) للمنزل المحلي، إلا أنّه لا يساعد كثيرًا في العثور على السبب الأساسي. سنضيف بعض السجلّات المخصَّصة للتأكُّد من أننا نقرأ بيانات الفحص ونعالجها بشكلٍ صحيح، ويُرجى ملاحظة أنّه في حال رفضنا الوعد مع عرض خطأ، سيتم إرسال رسالة الخطأ بالفعل إلى Cloud Logging أيضًا.

local/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);
}

عليك أيضًا تغيير إصدار تطبيق Home المحلي كي نتمكّن من معرفة ما إذا كنا نستخدم الإصدار الصحيح.

local/index.ts

const localHomeSdk = new App('1.0.1');

بعد إضافة السجلّات المخصّصة، عليك تجميع التطبيق مرة أخرى وإعادة نشره في Firebase.

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

الآن، يُرجى إعادة تشغيل جهاز Google Home لتحميل تطبيق الشاشة الرئيسية المحلي المحدّث. ويمكنك معرفة ما إذا كان جهاز Google Home يستخدم الإصدار المتوقع من خلال الاطّلاع على سجلات وحدة التحكم في أدوات مطوّري برامج Chrome.

ecc56508ebcf9ab.png

الوصول إلى التسجيل في السحابة الإلكترونية

لنلقِ نظرة على كيفية استخدام ميزة التسجيل في السحابة الإلكترونية للعثور على الأخطاء. للوصول إلى ميزة "التسجيل في السحابة الإلكترونية" لمشروعك:

  1. في وحدة تحكُّم Cloud Platform، انتقِل إلى صفحة المشاريع.
  2. اختَر مشروع المنزل المزوّد بأجهزة ذكية.
  3. ضمن العمليات، اختَر التسجيل > مستكشف السجلات.

تتم إدارة إمكانية الوصول إلى بيانات التسجيل من خلال "إدارة الهوية وإمكانية الوصول" (IAM) لمستخدمي مشروع "المهام". لمزيد من التفاصيل عن الأدوار والأذونات لتسجيل البيانات، يُرجى الاطِّلاع على التحكُّم في الوصول إلى Cloud Logging.

استخدام الفلاتر المتقدمة

نعلم أنّ الأخطاء تحدث في الغرض من السمة IDENTIFY، لأنّ المسار المحلي لا يعمل بسبب تعذُّر تحديد الجهاز المحلي. مع ذلك، نريد معرفة المشكلة بالضبط، لذا ننصحك بفلترة الأخطاء التي تحدث في معالج IDENTIFY أولاً.

وسِّع مربّع معاينة طلب البحث، ومن المفترض أن يتحول إلى مربّع أداة إنشاء طلبات البحث. أدخل jsonPayload.intent="IDENTIFY" في مربع إنشاء طلبات البحث وانقر على الزر تشغيل الاستعلام.

4c0b9d2828ee2447.png

ونتيجةً لذلك، ستظهر لك جميع سجلّات الأخطاء التي يتم طرحها في معالج IDENTIFY. بعد ذلك، قم بتوسيع الخطأ الأخير. ستظهر لك errorCode وdebugString التي ضبطتها للتو عند رفض الوعد في معالج IDENTIFY.

71f2f156c6887496.png

من خلال debugString، يمكننا معرفة أنّ رقم تعريف الجهاز المحلي ليس بالتنسيق المتوقَّع. يتوقّع تطبيق Local Home الحصول على رقم تعريف الجهاز المحلي كسلسلة تبدأ بـ deviceid متبوعة 3 أرقام، ولكن رقم تعريف الجهاز المحلي هنا هو سلسلة سداسية عشرية.

إصلاح الخطأ

بالعودة إلى رمز المصدر الذي نحلّل فيه رقم تعريف الجهاز المحلي من بيانات الفحص، نلاحظ أنّنا لم نوفّر الترميز عند تحويل السلسلة إلى بايت. يتم تلقّي بيانات المسح الضوئي كسلسلة سداسية عشرية، لذا مرِّر hex كترميز الأحرف عند استدعاء Buffer.from().

local/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);
}

عليك أيضًا تغيير إصدار تطبيق Home المحلي كي نتمكّن من معرفة ما إذا كنا نستخدم الإصدار الصحيح.

local/index.ts

const localHomeSdk = new App('1.0.2');

بعد إصلاح الخطأ، يمكنك تجميع التطبيق وإعادة نشره إلى Firebase. في app-faulty/local، نفِّذ:

$ npm run build
$ firebase deploy --only hosting

اختبار الحلّ

بعد النشر، أعِد تشغيل جهاز Google Home ليتمكّن من تحميل تطبيق الشاشة الرئيسية المحلي المحدَّث. تأكَّد من تثبيت الإصدار 1.0.2 من تطبيق الشاشة الرئيسية المحلي، علمًا بأنّه من المفترض ألا تظهر أي أخطاء هذه في "وحدة تحكُّم أدوات مطوّري البرامج في Chrome" هذه المرة.

c8456f7b5f77f894.png

يمكنك الآن محاولة إرسال الأوامر إلى جهازك مرة أخرى.

"Ok Google، أريد فرض الإعدادات المحلية".

"Ok Google، أريد إيقاف الغسّالة"

"Ok Google، أريد تشغيل غسّالة ملابسي"

...

"Ok Google، أريد فرض الإعدادات التلقائية".

6- تشغيل حزمة الاختبار للمنزل المزوّد بأجهزة ذكية

بعد إثبات ملكية جهازك باستخدام عناصر التحكّم باللمس في تطبيق Google Home أو من خلال الطلبات الصوتية، يمكنك استخدام مجموعة الاختبار الآلية للمنزل المزوّد بأجهزة ذكية للتحقّق من حالات الاستخدام استنادًا إلى أنواع الأجهزة والسمات المرتبطة بالإجراء. تُجري حزمة الاختبار سلسلة من الاختبارات لرصد المشاكل في الإجراء الخاص بك، كما تعرض رسائل مفيدة لحالات الاختبار التي تعذّر إجراؤها من أجل تسريع عملية تصحيح الأخطاء قبل الاطّلاع على سجلات الأحداث.

تشغيل حزمة الاختبار للمنزل المزوّد بأجهزة ذكية

اتّبِع التعليمات التالية لاختبار تنفيذ "المهام مع مساعد Google" في المنزل المزوّد بأجهزة ذكية:

  1. في متصفّح الويب، افتح حزمة اختبارية للمنزل المزوّد بأجهزة ذكية.
  2. سجِّل الدخول إلى Google باستخدام الزر في أعلى يسار الصفحة. يسمح هذا الإجراء لمجموعة الاختبار بإرسال الأوامر مباشرةً إلى "مساعد Google".
  3. في حقل رقم تعريف المشروع، أدخِل رقم تعريف المشروع الخاص بإجراء المنزل المزوّد بأجهزة ذكية. ثم انقر على التالي للمتابعة.
  4. في خطوة إعدادات الاختبار، من المفترض أن تظهر لك غسّالة تتضمّن عيوبًا في قسم الأجهزة والتدريب.
  5. أوقِف خيار اختبار طلب المزامنة لأنّ نموذج تطبيق الغسيل لا يحتوي على واجهة مستخدم لإضافة أو إزالة أو إعادة تسمية الغسّالة. في نظام الإنتاج، يجب تفعيل الخيار طلب المزامنة عندما يضيف المستخدم الأجهزة أو يزيلها أو يعيد تسميتها.
  6. اترك خيار حزمة تطوير البرامج (SDK) للمنزل المحلي مفعَّلاً لأنّنا سنختبر المسارات المحلية والسحابة الإلكترونية.
  7. انقر على التالي لبدء إجراء الاختبار.

67433d9190fa770e.png

عند اكتمال الاختبارات، ستلاحظ فشل اختبارات "الإيقاف المؤقت/الاستئناف" في المسار المحلي أثناء اجتياز اختبارات "الإيقاف المؤقت/الاستئناف" في المسار على السحابة الإلكترونية.

d1ebd5cfae2a2a47.png

تحليل رسالة الخطأ

يمكنك إلقاء نظرة عن كثب على رسائل الخطأ في حالات الاختبار التي تعذّر إجراؤها. حيث يخبركون بالحالة المتوقعة لهذا الاختبار وماذا كانت الحالة الفعلية. في هذه الحالة، بالنسبة إلى "إيقاف الغسّالة مؤقتًا"، تكون الحالة المتوقَّعة isPaused: true، أمّا الحالة الفعلية فهي isPaused: false. وبالمثل، بالنسبة إلى "إيقاف الغسّالة مؤقتًا"، تكون الحالة المتوقَّعة isPaused: true، أما في الحالة الفعلية، فقد حصلنا على isPaused: false.

6bfd3acef9c16b84.png

من رسائل الخطأ، يبدو أنّه في المسار المحلي، يتم ضبط حالة isPaused بشكل عكسي.

تحديد الخطأ وإصلاحه

لنبحث عن رمز المصدر الذي يرسِل فيه تطبيق Local Home أمر التنفيذ إلى الجهاز. getDataCommand() هي الدالة التي يستدعيها executeHandler() لضبط payload في أمر التنفيذ الذي يتم إرساله إلى الجهاز.

local/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 في الحالة العكسية، ويجب ضبطه على true عندما تكون قيمة params.pause هي true وfalse في الحالات الأخرى. إذًا، دعنا نصلح ذلك.

local/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 {};
    }
}

يُرجى تغيير إصدار تطبيق الشاشة الرئيسية المحلي كي نتمكّن من معرفة ما إذا كنا نستخدم الإصدار الصحيح.

local/index.ts

const localHomeSdk = new App('1.0.3');

وتذكَّر تجميع التطبيق مرة أخرى وإعادة نشره على Firebase. في app-faulty/local، نفِّذ:

$ npm run build
$ firebase deploy --only hosting

عليك الآن إعادة تشغيل جهاز Google Home لتحميل التطبيق المحلي المحدَّث. احرص على تثبيت الإصدار 1.0.3 من تطبيق الشاشة الرئيسية المحلي.

اختبار الحلّ

يمكنك الآن إعادة تشغيل "مجموعة أدوات الاختبار" للمنزل المزوّد بأجهزة ذكية باستخدام الإعدادات نفسها وستجد أنّ جميع حالات الاختبار قد انتهت.

b7fc8c5d3c727d8d.png

7- تهانينا

764dbc83b95782a.png

تهانينا! لقد تعلمت بنجاح كيفية تحديد المشاكل في تطبيق Local Home وحلّها من خلال "حزمة الاختبار" للمنزل المزوّد بأجهزة ذكية وميزة "تسجيل الدخول إلى السحابة الإلكترونية".

مزيد من المعلومات

إليك بعض الإجراءات الإضافية التي يمكنك تجربتها:

يمكنك أيضًا الاطّلاع على المزيد من المعلومات حول اختبار الإجراء الخاص بك وإرساله للمراجعة، بما في ذلك عملية الاعتماد لنشر الإجراء الخاص بك للمستخدمين.