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

‫1. قبل البدء

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

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

72ffb320986092c.png

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

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

ما ستنشئه

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

أهداف الدورة التعليمية

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

المتطلبات

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

‫2. تشغيل تطبيق الغسالة

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

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

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

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

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

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

الربط مع Firebase

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

انتقِل إلى الدليل app-faulty، ثمّ أعدّ Firebase CLI باستخدام مشروع الدمج الذي أنشأته في الدرس التطبيقي حول الترميز Enable local fulfillment for Cloud-to-cloud integrations:

$ 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

ينشر هذا الأمر تطبيق ويب، بالإضافة إلى العديد من وظائف 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" يردّ بعبارة "عذرًا، يبدو أنّ الغسالة المعطّلة غير متاحة حاليًا" عند محاولة التحكّم في الغسالة بعد استخدام الأمر "force local".

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

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

5. تصحيح أخطاء تطبيق Local Home

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

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

لربط أداة تصحيح الأخطاء بتطبيق تنفيذ الطلبات المحلي، اتّبِع الخطوات التالية:

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

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

567f97789a7d8846.png

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

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

774c460c59f9f84a.png

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

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

على الرغم من ظهور الخطأ 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);
}

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

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

الوصول إلى Cloud Logging

لنلقِ نظرة على كيفية استخدام Cloud Logging للعثور على الأخطاء. للوصول إلى Cloud Logging لمشروعك، اتّبِع الخطوات التالية:

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

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

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 أو من خلال الطلبات الصوتية، يمكنك استخدام مجموعة الاختبارات الآلية للمنزل المزوّد بأجهزة ذكية للتحقّق من صحة حالات الاستخدام استنادًا إلى أنواع الأجهزة وسماتها المرتبطة بعملية الدمج. تُجري "مجموعة الاختبارات" سلسلة من الاختبارات لرصد المشاكل في عملية الدمج، وتعرض رسائل إعلامية لحالات الاختبار التي لم تنجح من أجل تسريع عملية تصحيح الأخطاء قبل الانتقال إلى سجلّات الأحداث.

تشغيل "مجموعة الاختبارات للمنزل الذكي"

اتّبِع التعليمات التالية لاختبار عملية الربط بين الخدمات السحابية باستخدام "مجموعة الاختبارات":

  1. في متصفّح الويب، افتح مجموعة الاختبارات للمنزل الذكي.
  2. سجِّل الدخول إلى Google باستخدام الزرّ في أعلى يسار الصفحة. يتيح ذلك لـ Test Suite إرسال الأوامر مباشرةً إلى "مساعد Google".
  3. في حقل معرّف المشروع، أدخِل رقم تعريف المشروع الخاص بعملية الربط بين الخدمات المستندة إلى السحابة الإلكترونية. بعد ذلك، انقر على التالي للمتابعة.
  4. في خطوة إعدادات الاختبار، من المفترض أن ترى "الغسالة المعطّلة" في قسم الأجهزة والسمات.
  5. أوقِف الخيار مزامنة طلب الاختبار لأنّ تطبيق الغسالة النموذجية لا يتضمّن واجهة مستخدم لإضافة الغسالة أو إزالتها أو إعادة تسميتها. في نظام الإنتاج، عليك تفعيل طلب المزامنة كلما أضاف المستخدم أجهزة أو أزالها أو أعاد تسميتها.
  6. اترك خيار Local Home 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 وحلّها باستخدام "مجموعة الاختبارات للمنزل المزوّد بأجهزة ذكية" و"تسجيل الدخول إلى السحابة الإلكترونية".

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

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

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