الرئيسية قاعدة المعرفة الشبكات والاتصالات بروتوكول MQTT: لغة الإنترنت الصناعي
الشبكات والاتصالات

بروتوكول MQTT: لغة الإنترنت الصناعي

بروتوكول MQTT: جسر المصنع إلى السحابة

تصوّر أن لديك 500 حساس حرارة منتشرة في مصنع نسيج كبير، وتريد إرسال قراءاتها كل ثانية إلى منصة مراقبة سحابية. بروتوكول HTTP التقليدي سيُغرق الشبكة بحزم ضخمة وترويسات متكررة. هنا يظهر MQTT — البروتوكول الخفيف الذي صُمّم خصيصاً لهذا النوع من التحديات.

MQTT (Message Queuing Telemetry Transport) هو بروتوكول مراسلة خفيف الوزن يعمل فوق TCP/IP، صمّمه Andy Stanford-Clark من IBM وArlen Nipper عام 1999 لمراقبة خطوط أنابيب النفط عبر الأقمار الصناعية. اليوم أصبح العمود الفقري لإنترنت الأشياء الصناعي (IIoT).

نموذج النشر والاشتراك (Publish/Subscribe)

بدلاً من نموذج الطلب والاستجابة (Request/Response) المعتاد في HTTP، يعمل MQTT بنموذج النشر والاشتراك. الفكرة بسيطة لكنها قوية:

  • الناشر (Publisher): الجهاز الذي يُرسل البيانات (مثل حساس حرارة)
  • المشترك (Subscriber): الجهاز الذي يستقبل البيانات (مثل لوحة مراقبة)
  • الوسيط (Broker): الخادم المركزي الذي يستقبل الرسائل من الناشرين ويوزّعها على المشتركين

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

المواضيع (Topics): نظام عنونة ذكي

الرسائل في MQTT لا تُرسل لعنوان IP محدد، بل تُنشر على موضوع (Topic) — وهو مسار نصي هرمي يشبه مسارات المجلدات:

factory/line1/motor1/temperature
factory/line1/motor1/vibration
factory/line2/pump3/pressure

المشترك يختار المواضيع التي يريد متابعتها، ويدعم أحرف البدل (Wildcards):

الرمز المعنى المثال النتيجة
+ مستوى واحد factory/+/motor1/temperature كل خطوط الإنتاج، المحرك 1 فقط
# كل المستويات factory/line1/# كل شيء في الخط الأول

نصيحة عملية: صمّم هيكل المواضيع بعناية من البداية. تغييره لاحقاً في نظام يضم آلاف الأجهزة كابوس حقيقي. القاعدة الذهبية: من العام إلى الخاص — site/area/device/measurement.

مستويات جودة الخدمة (QoS)

ليست كل الرسائل بنفس الأهمية. قراءة حرارة دورية يمكن أن تضيع بدون مشكلة — لكن إنذار حريق يجب أن يصل مهما حدث. MQTT يقدم ثلاثة مستويات:

QoS 0: أرسل وانسَ (At Most Once)

  • الناشر يرسل الرسالة مرة واحدة ولا ينتظر تأكيداً
  • أسرع وأخف — مثالي لقراءات الحساسات الدورية
  • قد تضيع الرسالة إذا انقطع الاتصال لحظة الإرسال

QoS 1: تأكيد الاستلام (At Least Once)

  • الوسيط يرسل تأكيد PUBACK للناشر
  • إذا لم يصل التأكيد، الناشر يعيد الإرسال
  • الرسالة تصل مرة واحدة على الأقل — لكن قد تصل مرتين (تكرار)
  • مناسب لمعظم تطبيقات المراقبة الصناعية

QoS 2: مرة واحدة بالضبط (Exactly Once)

  • أربع خطوات مصافحة: PUBLISH → PUBREC → PUBREL → PUBCOMP
  • يضمن وصول الرسالة مرة واحدة فقط — لا ضياع ولا تكرار
  • الأبطأ والأكثر استهلاكاً للموارد
  • ضروري للأوامر الحرجة: فتح صمام، إيقاف طوارئ
المعيار QoS 0 QoS 1 QoS 2
الضمان قد تضيع مرة على الأقل مرة واحدة بالضبط
الرسائل المتبادلة 1 2 4
الحمل على الشبكة أدنى متوسط أعلى
الاستخدام قراءات دورية بيانات مراقبة أوامر تحكم حرجة

الرسائل المحتفظة (Retained Messages)

تخيّل أن لوحة مراقبة جديدة تتصل بالوسيط — كيف تعرف آخر قراءة حرارة إذا كان الحساس يرسل كل 5 دقائق؟ الجواب: Retained Messages.

عندما يُنشر رسالة بعلامة retain = true، يحتفظ الوسيط بآخر نسخة منها. أي مشترك جديد يحصل فوراً على آخر قيمة دون انتظار القراءة التالية.

هذا مفيد جداً لـ:

  • حالة الأجهزة (متصل/غير متصل)
  • آخر قراءة لكل حساس
  • إعدادات التهيئة

وصية الوداع (Last Will and Testament)

ماذا لو انقطع الاتصال بحساس فجأة؟ MQTT يوفر آلية LWT: عند اتصال العميل بالوسيط، يُسجّل رسالة "وصية" تُنشر تلقائياً إذا انقطع الاتصال بشكل غير طبيعي.

العميل عند الاتصال: "إذا انقطعتُ، انشر على factory/line1/motor1/status الرسالة: offline"

هذا يسمح لنظام المراقبة باكتشاف فشل الأجهزة فوراً.

وسيط Mosquitto: الخيار المفتوح المصدر

Eclipse Mosquitto هو أشهر وسيط MQTT مفتوح المصدر. خفيف ومناسب حتى للتشغيل على Raspberry Pi:

  • الترخيص: EPL/EDL (مفتوح المصدر)
  • البروتوكولات: MQTT 3.1, 3.1.1, 5.0
  • الأمان: TLS/SSL, مصادقة بكلمة مرور أو شهادات
  • الأداء: يعالج عشرات آلاف الاتصالات المتزامنة
  • الجسور (Bridges): يربط وسطاء متعددين معاً

في بيئة إنتاج حقيقية، ضع Mosquitto خلف جدار حماية واستخدم TLS دائماً. MQTT بدون تشفير يعني أن أي شخص على الشبكة يستطيع قراءة بيانات حساساتك.

مقارنة MQTT مع بروتوكولات أخرى

المعيار MQTT HTTP REST OPC UA AMQP
النموذج Pub/Sub Request/Response Client/Server + Pub/Sub Pub/Sub + Queue
حجم الترويسة 2 بايت مئات البايت متوسط متوسط
QoS 0, 1, 2 لا يوجد نعم نعم
ثنائي الاتجاه نعم لا (يحتاج WebSocket) نعم نعم
مناسب لأجهزة محدودة ممتاز ثقيل ثقيل ثقيل
معيار صناعي IIoT, IoT ويب أتمتة صناعية مراسلة مؤسسية

مواصفة Sparkplug B: MQTT بلغة صناعية

MQTT بحد ذاته لا يحدد شكل البيانات — يمكنك إرسال أي شيء. هذا يخلق مشكلة: كل شركة تستخدم تنسيقاً مختلفاً. Sparkplug B هو مواصفة من Eclipse Foundation تحل هذه المشكلة:

ماذا يضيف Sparkplug B؟

  • هيكل مواضيع موحد: spBv1.0/{group_id}/{message_type}/{edge_node_id}/{device_id}
  • تنسيق بيانات موحد: Google Protocol Buffers (protobuf) — ثنائي وسريع
  • إدارة الجلسات: رسائل NBIRTH (ولادة العقدة) وNDEATH (موت العقدة)
  • أنواع بيانات صناعية: عدد صحيح، عشري، نص، تاريخ/وقت، مصفوفات
  • حالة متسقة (State Awareness): الوسيط والأجهزة يعرفون حالة بعضهم دائماً

مثال عملي

بدلاً من:

factory/line1/motor1/temp → "45.2"  (نص؟ رقم؟ بأي وحدة؟)

مع Sparkplug B:

spBv1.0/Factory1/DDATA/Line1/Motor1 → {
  metrics: [
    { name: "temperature", value: 45.2, type: Float, unit: "°C", timestamp: 1680000000 }
  ]
}

الفرق واضح: البيانات منظمة، مؤرخة، ومفهومة لأي نظام يدعم Sparkplug B.

ربط الحساسات بالسحابة: سيناريو عملي

تصوّر مصنعاً صغيراً يريد مراقبة 50 حساساً عن بعد:

  1. الحساسات ترسل قراءات عبر Modbus RTU إلى بوابة محلية
  2. البوابة (Edge Gateway) تحوّل البيانات إلى MQTT وتنشرها على وسيط محلي
  3. Mosquitto المحلي يخزّن البيانات مؤقتاً ويوجهها عبر جسر (Bridge) إلى السحابة
  4. الوسيط السحابي (مثل AWS IoT Core أو HiveMQ Cloud) يستقبل البيانات
  5. لوحة المراقبة (Grafana أو Node-RED) تعرض البيانات في الوقت الحقيقي

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

أفضل الممارسات

أمان الشبكة: استخدم TLS دائماً. فعّل المصادقة بالشهادات لبيئات الإنتاج. لا تعرض منفذ 1883 (غير المشفر) للإنترنت أبداً — استخدم 8883 (TLS).

تصميم المواضيع: ابدأ بهيكل واضح من اليوم الأول. استخدم أسماء إنجليزية صغيرة بدون مسافات. تجنّب المواضيع العميقة جداً (أكثر من 5 مستويات).

QoS المناسب: لا تستخدم QoS 2 لكل شيء — الحمل الإضافي غير مبرر لقراءات دورية. استخدم QoS 0 للقراءات المتكررة، QoS 1 للأحداث المهمة، وQoS 2 فقط للأوامر الحرجة.

خلاصة

MQTT أصبح لغة التخاطب المشتركة بين المصانع والسحابة. خفته وبساطته تجعله مثالياً لآلاف الحساسات، ومستويات QoS تضمن وصول الرسائل المهمة. مع Sparkplug B، يتحول من بروتوكول نقل بسيط إلى منصة بيانات صناعية متكاملة. إذا كنت تبني نظام IIoT، فإن إتقان MQTT ليس خياراً — إنه ضرورة.

MQTT publish-subscribe broker IoT QoS Sparkplug بروتوكول MQTT النشر والاشتراك الوسيط إنترنت الأشياء جودة الخدمة سبارك بلج