بناء لوحة مراقبة للأجهزة
حالة الاستخدام
استخدم هذا النمط للوحة تحكم على مستوى الحساب تعرض اتصال الأجهزة وحالة الملحقات مع إبقاء حركة HTTP قابلة للتنبؤ.
- استخدم قوائم الأجهزة عبر REST للعرض الأولي، والتقسيم إلى صفحات، والمزامنة في الخلفية.
- استخدم استعلام جهاز واحد عندما يحدّث المستخدم صراحةً عرض تفاصيل أو عندما تحتاج عملية إلى تأكيد.
- استخدم أحداث WebSocket لتغيّرات الاتصال والمرحّل والمدخل الرقمي المستمرة.
لا تستعلم باستمرار عن كل جهاز عبر HTTP.
البنية الموصى بها
احتفظ بسجل حالة واحد لكل deviceId. استخدم stateUpdatedAt عند دمج الحالة في وقت التشغيل بحيث لا تستبدل البيانات القديمة البيانات الأحدث. تُحدّث أحداث الاتصال حالة الاتصال؛ يحدّد changes في device.state.changed المرحّلات أو المدخلات الرقمية المتأثرة، بينما peripherals كتلة حالة كاملة وليست تصحيحًا تزايديًا. اقرأ قيم المستشعرات والقيم التناظرية عندما يحدّث المستخدم أو عندما يتطلب سير العمل ذلك؛ لا تستعلم عن جميع الأجهزة بمعدل عالٍ.
التنفيذ خطوة بخطوة
- احصل على access token بصلاحية
device:read. - استدعِ سرد الأجهزة (بالإنجليزية)، واتبع التقسيم إلى صفحات، وخزّن
deviceTypeوstatusوالملحقات وstateUpdatedAtلكل جهاز. - استعلم عن سرد تعريفات نوع الجهاز (بالإنجليزية) واربط كل
deviceTypeبتعريف قدراته. خزّن هذه التعريفات مؤقتًا بدلًا من طلبها مع كل عرض. - أنشئ تذكرة WebSocket (بالإنجليزية) أحادية الاستخدام، وأنشئ الاتصال، وابدأ تدفق نبض القلب الموثّق.
- طبّق أحداث
device.connection.onlineوdevice.connection.offlineوdevice.state.changedعلى سجل الجهاز المطابق. - عندما يطلب المستخدم صراحةً بيانات محدَّثة لجهاز واحد، استدعِ الحصول على جهاز (بالإنجليزية) أو أرسل
device.state.get(بالإنجليزية). - بعد الانقطاع أو إعادة تشغيل العملية، أعِد الاتصال بتذكرة جديدة وأعِد بناء خط الأساس عبر REST قبل الوثوق بالعرض الحيّ مجددًا. حدّث فقط الأجهزة الحرجة للعمل بشكل فردي.
الواجهات والأحداث الرئيسية
| الغرض | المرجع |
|---|---|
| القائمة الأولية والتقسيم إلى صفحات | سرد الأجهزة (بالإنجليزية) |
| واجهة موجّهة بالقدرات | سرد تعريفات نوع الجهاز (بالإنجليزية) |
| تحديث صريح لجهاز واحد | الحصول على جهاز (بالإنجليزية) |
| مصادقة WebSocket | إنشاء WebSocket Ticket (بالإنجليزية) |
| تغيّرات الاتصال | أحداث اتصال الجهاز (بالإنجليزية) |
| تغيّرات حالة الملحقات | حدث تغيّر حالة الجهاز (بالإنجليزية) |
الفشل والتعافي
- عند فقدان WebSocket، ضع علامة على القناة الحيّة كغير متاحة، وأعِد الاتصال بتراجع تدريجي وjitter، وأنشئ
wsTicketجديدًا مع كل محاولة. - الأحداث المفقودة أثناء الانقطاع لا تُعاد. أعِد بناء خط أساس الحالة عبر REST بعد إعادة الاتصال.
- إذا تنافس حدث واستعلام، احتفظ بالحالة ذات
stateUpdatedAtالأحدث. - بعد
429 RATE_LIMITED، انتظرRetry-After. لا تنتقل إلى الاستعلام لكل جهاز لتعويض WebSocket منقطع. - قد يحتوي الجهاز
OFFLINEعلى آخر حالة ملحقات متزامنة. اعرض حالة الاتصال وحداثة الحالة بشكل منفصل.
اعتبارات الإنتاج
- خزّن حالة موحّدة لكل
deviceId؛ حدّد قراءات المستشعرات بـindex + type. - اجعل تطبيق الأحداث تماثليًا (idempotent). توفّر أحداث الاتصال
occurredAt، بينما توفّر أحداث الحالةstateUpdatedAt؛ تجاهل التحديثات الأقدم المنعكسة بالفعل في السجل الحالي. - خزّن الأحداث الحرجة للعمل فورًا، لأن WebSocket لا يعيد تشغيل السجل التاريخي.
- راقب محاولات إعادة الاتصال، وتأخّر الأحداث، وفشل مزامنة REST، وقيم
requestIdدون تسجيل بيانات الاعتماد أو الرموز.
