مراقبة الانقطاع وأحداث الطاقة
حالة الاستخدام
استخدم هذا النمط عندما تحتاج الواجهة الخلفية لديك إلى تحديث التوفّر، أو إطلاق تنبيهات، أو تسجيل إشارات تغيّر الطاقة المدعومة دون استعلام متكرر عن حالة الجهاز.
- يصف
device.connection.onlineوdevice.connection.offlineتغيّرات الاتصال. - يبلّغ
device.power.lostعن إشارة فقدان طاقة من الأجهزة التي توفّر تلك الإشارة. - يبلّغ
device.power.restoredعن استعادة الطاقة، لكنه لا يعني أن اتصال الشبكة متاح. - لا تملك طُرز الأجهزة بالضرورة سلوك كشف طاقة متطابقًا. تحقّق من تعريف نوع الجهاز وتوثيق الجهاز المُسلَّم قبل الوعد بهذه التنبيهات في منتج. إذا لم تكن هناك قدرة موثّقة صراحةً، لا تفترض الدعم.
التدفق الموصى به
يوفّر WebSocket إشعارات فورية، لكنه ليس نظام تسجيل دائمًا. احتفظ بالحالة الحالية في خدمتك الخاصة واستعِدها من REST بعد أي فجوة في الأحداث.
التنفيذ خطوة بخطوة
- ابنِ حالة الحساب الأولية باستخدام سرد الأجهزة (بالإنجليزية).
- راجع سرد تعريفات نوع الجهاز (بالإنجليزية) وتوثيق الجهاز المُسلَّم قبل تفعيل واجهة أو تنبيهات خاصة بالطاقة. قائمة عمليات عامة ليست دليلًا على وجود كشف طاقة.
- أنشئ تذكرة WebSocket (بالإنجليزية)، اتصل، وابدأ Ping/Pong الخاص بالبروتوكول إضافةً إلى
session.ping. - عند
device.connection.offline، توقّف عن عرض الجهاز كقابل للتحكم وسجّلoccurredAt. - عند
device.connection.online، ضع علامة على استعادة الاتصال، لكن لا تفترض أن كل حالة الملحقات متزامنة بالفعل. حدّث الجهاز عند الحاجة إلى الحالة الحالية. - عند
device.power.lost، خزّن الحدث وأطلق التنبيه. عندdevice.power.restored، يمكن إغلاق تنبيه الطاقة، لكن انتظرdevice.connection.onlineقبل معاملة الجهاز كقابل للتحكم. - استخدم فقط الـ topic المنظّم والطوابع الزمنية لأحداث الطاقة. لا تحلّل أو تُبنِ منطق تفرّع على نص البرنامج الثابت الخام.
- بعد إعادة الاتصال، استخدم REST لاستعادة خط أساس الحساب واستعلم فقط عن الأجهزة الحرجة التي تتطلب تأكيدًا فوريًا.
الواجهات والأحداث الرئيسية
| الغرض | المرجع |
|---|---|
| خط أساس الحساب الحالي | سرد الأجهزة (بالإنجليزية) |
| تأكيد جهاز واحد | الحصول على جهاز (بالإنجليزية) |
| أحداث الاتصال والانقطاع | أحداث اتصال الجهاز (بالإنجليزية) |
| دلالة فقدان الطاقة واستعادتها | أحداث طاقة الجهاز (بالإنجليزية) |
| نبض القلب والتعافي | نبض القلب وإعادة الاتصال (بالإنجليزية) |
الفشل والتعافي
- اكتشف الاتصالات المغلقة ومهلات نبض القلب المنتهية، ثم أعِد الاتصال بتراجع تدريجي محدود وjitter عشوائي.
- لا تُعِد استخدام
wsTicketأبدًا؛ أنشئ واحدة جديدة قبيل كل محاولة اتصال مباشرة. - الأحداث لا تُعاد. بعد إعادة الاتصال، أعِد بناء الحالة الحالية بدلًا من افتراض عدم وقوع أي حدث.
- يمكن أن يتكرر تسليم الأحداث حول إعادة المحاولة أو حدود إعادة الاتصال. اجعل المعالجات تماثلية باستخدام الـ topic المتاح، و
deviceId، والطوابع الزمنية، والحالة الناتجة؛ لا تعتمد على حقل لا يحدّده عقد الحدث. - لا يوجد ترتيب مضمون لأحداث الطاقة والاتصال، وقد تصل إحدى الفئتين فقط. لا تستنتج تغيّرات الطاقة من
online/offline.
اعتبارات الإنتاج
- خزّن وقت استلام الحدث منفصلًا عن
occurredAtالخاص بالجهاز، من أجل قابلية الملاحظة. - عرّف قواعد كبت التنبيهات والتعافي بحيث لا تُنتج عواصف إعادة الاتصال حوادث مكررة.
- تعامل مع WebSocket كقناة تحديث حيّة وREST كمسار استعادة الحالة.
- أكّد دعم أحداث الطاقة أثناء تأهيل الجهاز. لا تفترض الدعم فقط لأن نوع جهاز آخر يبلّغ عن هذا الحدث.
