1. قبل البدء
بصفتك مطوّرًا لتطبيقات إنترنت الأشياء (IoT)، يمكنك إنشاء عمليات دمج من السحابة الإلكترونية إلى السحابة الإلكترونية تتيح للمستخدمين التحكّم في أجهزتهم من خلال عناصر التحكّم باللمس في تطبيق Google Home والطلبات الصوتية باستخدام "مساعد Google".
إنّ التعرّف على أدوات تصحيح الأخطاء لعمليات الدمج من السحابة الإلكترونية إلى السحابة الإلكترونية هي خطوة مهمة لبناء عملية دمج بجودة الإنتاج مع "مساعد Google". لتسهيل عملية المراقبة وتصحيح الأخطاء، تتوفّر مقاييس Google Cloud Platform (GCP) والتسجّل ومجموعة الاختبار للمنزل الذكي لمساعدتك في تحديد مشاكل عمليات الدمج وحلّها.
المتطلبات الأساسية
- قراءة دليل المطوّر إنشاء عملية دمج من السحابة الإلكترونية إلى السحابة الإلكترونية
- تشغيل ورشة عمل ربط الأجهزة المنزلية الذكية بخدمة "مساعد Google"
التطبيق الذي ستصممه
في هذا الدليل التعليمي حول الرموز البرمجية، ستنشر عملية دمج من السحابة الإلكترونية إلى السحابة الإلكترونية تتضمّن عيوبَين وتربطها بخدمة "مساعد Google"، ثم تصحّح أخطاء الدمج من خلال مجموعة الاختبار للمنزل الذكي و"مقاييس Google Cloud Platform" و"التسجيل".
ما ستتعرّف عليه
- كيفية استخدام مقاييس "سحابة Google (GCP)" وميزة "التسجّل" لتحديد مشاكل مرحلة الإنتاج وحلّها
- كيفية استخدام Test Suite للأجهزة الذكية لتحديد المشاكل المتعلقة بالوظائف وواجهة برمجة التطبيقات
المتطلبات
- متصفّح ويب، مثل Google Chrome
- جهاز iOS أو Android تم تثبيت تطبيق Google Home عليه
- الإصدار 10.16 من Node.js أو إصدار أحدث
- حساب فوترة على Google Cloud
2. تشغيل التطبيق الذي يتضمّن عيوبًا
الحصول على رمز المصدر
انقر على الرابط التالي لتنزيل نموذج هذا الدليل التعليمي على جهاز التطوير:
...أو يمكنك استنساخ مستودع GitHub من سطر الأوامر:
$ git clone https://github.com/google-home/smarthome-debug.git
لمحة عن المشروع
يحتوي تطبيق الغسالة على الأدلة الفرعية التالية:
public
: واجهة مستخدم أمامية للتحكّم بسهولة في حالة الغسالة الذكية ومراقبتهاfunctions
: خدمة سحابة إلكترونية مُطبَّقة بالكامل تدير الغسّالة الذكية باستخدام وظائف السحابة الإلكترونية لبرنامج Firebase وقاعدة بيانات Firebase في الوقت الفعلي.
الربط بمنصّة Firebase
افتح وحدة الطرفية على جهاز المطوّر. انتقِل إلى الدليل washer-faulty
، ثمّ أعدّ واجهة Firebase CLI باستخدام مشروع الدمج الذي أنشأته في ربط الأجهزة المنزلية الذكية بخدمة "مساعد Google" في دورة تعليمية حول رموز 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
) لعرض تطبيق الويب. في واجهة مستخدم الويب، انقر على الزر تحديث لتعديل HomeGraph من خلال طلب المزامنة باستخدام أحدث البيانات الوصفية للجهاز من تطبيق الغسالة الذي يتضمّن عيوبًا:
افتح تطبيق Google Home وتأكَّد من ظهور جهاز الغسالة المُسمّى غسالة متعطّلة.
3- اختبار عملية الدمج
بعد نشر مشروعك، اختبِر ما إذا كان الدمج يتحكّم في الغسالة.
اختبار الغسالة
تحقَّق من تغيير القيمة عند تجربة أيٍّ من الطلبات الصوتية التالية من خلال هاتفك:
"Ok Google، أريد تشغيل غسّالتي".
"Ok Google، أريد تشغيل غسّالتي".
"Ok Google، أوقِف غسّالتي مؤقتًا".
"Ok Google، أريد استئناف تشغيل غسّالتي".
"Ok Google، أوقِف غسّالتي".
سيستجيب "مساعد Google" عبر الصوت عند إعلامك بحدوث خطأ عند إيقاف الغسالة مؤقتًا أو استئناف تشغيلها:
"عذرًا، تعذّر علينا الوصول إلى <project display name>."
لتصحيح أخطاء هذه المشكلة، تحتاج أولاً إلى مزيد من المعلومات عن الخطأ لتضييق نطاق البحث عن السبب الأساسي وتحديده.
لوحة بيانات "إحصاءات المنزل الذكي"
يمكنك فحص الأخطاء في لوحة بيانات "إحصاءات المنزل الذكي" التي تُجمِّع الرسوم البيانية لمقاييس الاستخدام والأداء لعمليات التنفيذ في السحابة الإلكترونية:
- تعكس مقاييس الاستخدام مؤشر استخدام عملية الدمج من السحابة الإلكترونية إلى السحابة الإلكترونية، بما في ذلك عدد المستخدمين النشطين يوميًا وإجمالي عدد الطلبات التي تم إرسالها إلى عملية الإنجاز.
- تساعدك مقاييس الأداء في رصد حدوث القيم الشاذة في عملية الدمج من السحابة الإلكترونية إلى السحابة الإلكترونية، بما في ذلك وقت استجابة الطلب ونسبة النجاح وتقسيم الأخطاء.
لتضييق نطاق سبب الخطأ، اتّبِع الخطوات التالية للوصول إلى لوحة بيانات المشروع.
- في Developer Console، انتقِل إلى صفحة "المشاريع".
- اختَر مشروع المنزل الذكي.
- انقر على علامة التبويب الإحصاءات في القائمة اليمنى.
- سينقلك هذا الإجراء إلى قائمة لوحات البيانات لمشروعك على Google Cloud. اختَر لوحة البيانات إحصاءات Google Home - دمج السحابة الإلكترونية.
- انتقِل للأسفل إلى الرسم البياني Cloud Fulfillment Errors - Status Breakdown (أخطاء معالجة الطلبات في السحابة الإلكترونية - تقسيم حسب الحالة) لعرض رموز الأخطاء للنطاق الزمني المميّز.
يقدّم رمز الخطأ PARTNER_RESPONSE_MISSING_DEVICE
تلميحًا للسبب الأساسي. بعد ذلك، يمكنك استرداد سجلّات الأحداث استنادًا إلى رمز الخطأ للحصول على مزيد من التفاصيل.
الوصول إلى سجلّات الأحداث
للحصول على مزيد من التفاصيل حول الخطأ، يمكنك الوصول إلى سجلّات الأحداث لعملية الدمج من السحابة الإلكترونية إلى السحابة الإلكترونية من خلال تسجيلات Cloud.
افتح قائمة التنقّل في Google Cloud Platform، وضمن العمليات، اختَر التسجّل > مستكشف السجلات للوصول إلى سجلّات الأحداث لمشروعك. بدلاً من ذلك، يمكنك البحث عن مستكشف السجلات في مربّع البحث.
في حقل الإدخال البحث في جميع الحقول، أدخِل طلب البحث 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
مع إيقاف الغسيل مؤقتًا أو استئنافه، وستلاحظ أنّ السلسلة المراد مطابقتها مع أمر الإيقاف المؤقت أو الاستئناف غير صحيحة:
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);
};
إصلاح الخطأ
بعد تحديد السبب الجذري للخطأ، يمكنك تصحيح سلسلة الأمر "إيقاف مؤقت / استئناف":
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:
firebase deploy --only functions
يُرجى إعادة تنفيذ الأوامر الصوتية التالية، وستلاحظ أنّ "مساعد Google" يستجيب بشكل صحيح الآن عند إيقاف الغسالة مؤقتًا أو استئناف تشغيلها.
"Ok Google، أوقِف غسّالتي مؤقتًا".
=>
"بالتأكيد، سأوقف الغسالة مؤقتًا".
"Ok Google، أريد استئناف تشغيل غسّالتي".
=>
"حسنًا، سنستأنف تشغيل الغسالة."
يمكنك أيضًا اختبار الحالة الحالية لغسالتك من خلال طرح أسئلة.
"Ok Google، هل الغسّالة مفعّلة؟"
"Ok Google، هل تعمل غسّالتي؟"
"Ok Google، ما هي دورة الغسيل التي تستخدمها غسّالتي؟"
4. اختبار عملية الدمج باستخدام "مجموعة الاختبار"
بالإضافة إلى الاختبار يدويًا، يمكنك استخدام مجموعة الاختبار للمنزل الذكي المبرمَجة للتحقّق من حالات الاستخدام استنادًا إلى أنواع الأجهزة والسمات المرتبطة بعملية الدمج. تُجري "مجموعة الاختبار" سلسلة من الاختبارات لرصد المشاكل في عملية الدمج، وتعرض رسائل معلوماتية لحالات الاختبار التي تعذّر إكمالها لتسريع عملية تصحيح الأخطاء قبل الاطّلاع على سجلّات الأحداث.
تشغيل مجموعة اختبارات للمنزل الذكي
اتّبِع التعليمات التالية لاختبار عملية الدمج من السحابة الإلكترونية إلى السحابة الإلكترونية باستخدام Test Suite:
- في متصفّح الويب، افتح مجموعة اختبارات الأجهزة المنزلية الذكية.
- سجِّل الدخول إلى Google باستخدام الزر في أعلى يسار الصفحة. يتيح ذلك لمجموعة الاختبار إرسال الطلبات مباشرةً إلى "مساعد Google".
- في حقل رقم تعريف المشروع، أدخِل رقم تعريف عملية الدمج من السحابة الإلكترونية إلى السحابة الإلكترونية. بعد ذلك، انقر على التالي للمتابعة.
- في خطوة إعدادات الاختبار، ستظهر لك مجموعة الاختبار التي تسرد نوع الجهاز وسمات الغسالة.
- أوقِف خيار مزامنة طلبات الاختبار لأنّ تطبيق غسّالة الملابس التجريبي لا يتضمّن واجهة مستخدم لإضافة غسّالة الملابس أو إزالتها أو تغيير اسمها. في نظام التشغيل، عليك بدء طلب المزامنة كلما أضاف المستخدم أجهزة أو أزالها أو أعاد تسميتها.
- انقر على التالي لبدء إجراء الاختبار.
بعد اكتمال تشغيل مجموعة الاختبار، اطّلِع على نتائج حالات الاختبار. ستلاحظ حالتَي اختبار تعذّر إكمالهما مع ظهور رسالة الخطأ ذات الصلة:
لتصحيح أخطاء عملية الدمج من السحابة إلى السحابة في حال حدوث تعذّر، عليك تحديد السبب الأساسي للخطأ من خلال تحليل رسالة الخطأ أولاً.
تحليل رسالة الخطأ
لمساعدة المطوّرين في تحديد السبب الأساسي، تعرِض "مجموعة الاختبار" رسائل خطأ لكل حالة اختبار تعذّر إكمالها تشير إلى سبب التعذّر.
بالنسبة إلى أول حالة اختبار تعذّر إكمالها أعلاه،
تشير رسالة الخطأ إلى أنّ "مجموعة الاختبار" تتوقّع "isPause": true
في الحالات التي تم الإبلاغ عنها من عملية الدمج من السحابة الإلكترونية إلى السحابة الإلكترونية، ولكنّ الحالات الفعلية تتضمّن "isPause": false
فقط.
بالإضافة إلى ذلك، تشير رسالة الخطأ لحالة الاختبار الثانية التي تعذّر إكمالها إلى أنّ الحالات الواردة في استجابة QUERY
من عملية الدمج من السحابة إلى السحابة تشمل "isPause": true
، والتي تختلف عن "isPause": false
في الحالات التي تم الإبلاغ عنها من عملية الدمج من السحابة إلى السحابة:
وفقًا لكلتا رسالتَي الخطأ، عليك التحقّق ممّا إذا كانت تقارير الدمج تشير إلى isPaused
بالقيمة الصحيحة.
تحديد السبب الأساسي للخطأ
افتح functions/index.js
التي تحتوي على الدالة reportstate
التي تنشر تغييرات الحالة في الرسم البياني للمنزل من خلال حالة التقرير. تحقّق من حمولة Report State، وستلاحظ أنّ الحمولة لا تتضمّن الحالة 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,
});
...
});
إصلاح الخطأ
بعد تحديد السبب الأساسي للخطأ، عليك مراجعة functions/index.js
عن طريق إضافة الحالة isPaused
إلى الحمولة Report State:
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:
$ firebase deploy --only functions
أعِد تشغيل مجموعة الاختبار للمنزل الذكي، وستلاحظ أنّه تم اجتياز جميع حالات الاختبار.
5- تهانينا
تهانينا! لقد تعلّمت بنجاح كيفية تحديد مشاكل الدمج من السحابة الإلكترونية إلى السحابة الإلكترونية وحلّها من خلال "مجموعة الاختبار" للمنزل الذكي ومقاييس Google Cloud Platform وتسجيلها.
مزيد من المعلومات
استنادًا إلى هذا الدرس التطبيقي حول الترميز، جرِّب التمارين التالية واستكشِف مراجع إضافية:
- أضِف المزيد من السمات المتوافقة إلى جهازك واختبر هذه السمات باستخدام "مجموعة الاختبار".
- أنشئ لوحات بيانات، وإعداد التنبيهات، والوصول إلى بيانات المقاييس آليًا للحصول على مقاييس استخدام مفيدة عن عملية الدمج.
- استكشاف الاستلام داخل المتجر للمنزل الذكي
- يمكنك الاطّلاع على نموذج GitHub للتعرّف على مزيد من المعلومات.
يمكنك أيضًا الاطّلاع على مزيد من المعلومات حول اختبار عملية الدمج وإرسالها للمراجعة، بما في ذلك عملية الاعتماد لنشر عملية الدمج للمستخدمين.