بروتوكول MQTT ومشروع العميل المفتوح MQTT على دلفي


يستخدم بروتوكول MQTT للمراسلة على إنترنت الأشياء. بادئ ذي بدء ، إنه مثير للاهتمام لأنه مدعوم من أكبر مزودي الخدمات السحابية ، مثل IBM و Microsoft و Amazon.
يمكنك الحصول على حساب في هذه الخدمات مجانًا ، وإعداد خدمة لاستقبال رسائل MQTT هناك ومشاهدة حياة أجهزتك من خلال هذه الخدمات ، على سبيل المثال ، في منزل ذكي. أيضًا ، من خلال هذه الخدمات ، يمكن للأجهزة التواصل مع بعضها البعض.

تم تضمين عرض توضيحي لاتصال العميل بخدمة MQTT من سحابة IBM Bluemix.



وصف قصير.


MQTT بدائية للغاية: مع رأس قصير ، بدون تحكم في السلامة ، لا تفرض أي قيود على الهيكل أو التشفير أو مخطط البيانات. الشرط الوحيد للبيانات في كل رزمة هو أنه يجب أن يكون مصحوبًا بمعرف لقناة المعلومات. يسمى هذا المعرف في المواصفات اسم الموضوع أو موضوع أبسط. يتم إرسال البيانات إلى الحزم عبر TCP. يمكن أن تكون كمية البيانات في حزمة من بايت واحد إلى 268،435،455 بايت. مرن جدا! على الرغم من أن الخدمات السحابية العامة تفرض قيودًا أكثر صرامة ، تصل إلى عدة كيلوبايت.
يتطلب بروتوكول MQTT وسيط بيانات. هذه هي الفكرة المركزية للتكنولوجيا. ترسل جميع الأجهزة البيانات فقط إلى الوسيط وتستقبل البيانات منه فقط. الوسيط هو برنامج يعمل كخادم TCP مع قاعدة بيانات ديناميكية.

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

ما هو المهم هنا أيضا.


• الأجهزة هي أول من يقيم اتصالاً مع وسيط. على سبيل المثال قد تكون الأجهزة موجودة خلف مترجمين لعناوين الشبكة (NAT) وقد لا تحتوي على عناوين IP ثابتة وهذا لن يتداخل مع الاتصال.
• يمكن استخدام SSL لتشفير حركة المرور. ولكن يمكنك العمل بدون SSL حتى مع خدمات IBM ، مما يجعل التصحيح أسهل.
• في الحالات الصعبة للغاية ، يسمح لك وسطاء MQTT بالاتصال بهم من خلال بروتوكول WebSocket على المنفذ 80.
• يمكن أيضًا تغيير منفذ بروتوكول MQTT القياسي بشكل تعسفي.
• يمكن وضع كل من العميل / العملاء مع واجهة مستخدم رسومية ووسيط على نفس جهاز الكمبيوتر. على سبيل المثال يمكن أن يكون الحل محليًا تمامًا وقابل للتوسع العالمي بنقرة واحدة.
• يمكن للوسطاء المختلفين التواصل مع بعضهم البعض من خلال الاشتراك في الرسائل من بعضهم البعض.
• مفهوم المواضيع يتناسب بشكل جيد مع تقنية قاعدة بيانات NoSQL. لنفس الغرض ، تشجع الخدمات السحابية المستخدمين على استخدام ترميز بيانات JSON.

مشاريع مفتوحة


اختيار وسطاء MQTT كبير للغاية. ولكن الغريب أنه لا يوجد عمليا أي عملاء مناسبين مع واجهة مستخدم نافذة تحت Windows. ومثل هذا العميل لإتقان بروتوكول MQTT ضروري ببساطة لأن هناك العديد من الفروق العملية الدقيقة لعمل الوسطاء بما يتجاوز المواصفات وكلهم بحاجة إلى الدراسة والاختبار بطريقة ما.
تقرر تنفيذ عميل MQTT على دلفي.
يمكن لـ Google for Delphi تقديم مكون TMQTTClient فقط. لكن هذا عنصر قديم ولا يعمل. من الصعب للغاية دمج معظم العملاء الآخرين المكتوبين بلغة Java و Erlang و Haskell و Javscript في دلفي.
وجدت المشروع المناسب الوحيد - Mosquitto
مكتوب بلغة C-i خالصة. يجمع لأنظمة التشغيل المختلفة. لديها مخطوطات توليد المشروع لبرنامج Visual Studio. عند الخروج تحت Windows ، نحصل على ملفات dll مع تنفيذ وظائف العميل والوسيط. استخدام C مشجع من حيث السرعة. والمكتبات الديناميكية المكتوبة بلغة C تتصل بسهولة ببرامج دلفي.
تعتبر دلفي نفسها ، ممثلة بـ Embarcadero RAD Studio XE8 ، أداة قوية جدًا لإنشاء واجهات مستخدم مرنة ومريحة لنظام Windows ، خاصة إذا كانت مجهزة بـ DevExpress ، TeeChart ، RxLib ، FireDAC ، إلخ.

الأدوات اللازمة


سنحتاج إلى بيئة تطوير MS Visual Studio 2015 . ستقوم بتجميع مشروع البعوض وجميع المشاريع الداعمة التي يعتمد عليها البعوض . بدلاً من ذلك ، يمكن تجميع Mosquitto لنظام التشغيل Windows باستخدام حزمة Cygwin ، ولكن بدا Visual Studio أكثر ملاءمة.
لإنشاء ملفات مشروع Visual Studio ، تحتاج إلى تنزيل الأداة المساعدة Cmake وتثبيتها . المصدر cmake.org
وبالطبع تحتاج إلى RAD Studio XE8 . بالإضافة إلى ذلك ، في RAD Studio ، يجب تثبيت إصدار حزمة مكون DevExpress VCL لا يقل عن 14.2.2. على الرغم من أن هذا ليس له أهمية أساسية ، يمكن إعادة تصميم واجهة المستخدم بسهولة لمكونات RAD Studio القياسية.

إجراء تثبيت البرنامج


يعتمد Mosquitto على العديد من مشاريع الجهات الخارجية ، وهي:
OpenSSL v 1.0.2e . المصدر - http://slproweb.com/download/Win32OpenSSL-1_0_2e.exe
Pthreads v 2.9.1 . المصدر - ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip
Libwebsockets v 1.4 . المصدر - https://github.com/warmcat/libwebsockets

قم بتنزيل هذه المشاريع. لا
نقوم بتجميع OpenSSL ، ولكننا نأخذ الملفين الضروريين على الفور من هناك: libeay32.dll و ssleay32.dll من دليل bin . غالبًا ما يحدث أنها مثبتة بالفعل على الكمبيوتر من مشاريع أخرى. يجب التحقق من ذلك.
pthreadsنحن لا نقوم أيضًا بالترجمة ، لكننا نأخذ ملف pthreadVC2.dll المترجمة بالفعل من دليل dll \ x86 . يأتي
Libwebsockets بدون ملفات مجمعة مسبقًا وبدون مشروع لبرنامج Visual Studio ، ولكنه يحتوي على ملف تكوين CMakeLists.txt . في هذه الحالة ، باستخدام الأداة المساعدة Cmake ، نقوم بإنشاء ملف مشروع Visual Studio في دليل منفصل (دليل libwebsockets_VS_proj). ثم فتح ملف المشروع الذي تم إنشاؤه في Visual Studio نقوم بتجميعه. نحصل على ملف websockets.dll الذي نحتاج إليه .
بعد كل الخطوات السابقة ، يمكنك تجميع مشروع البعوض. هنا ، تحتاج أولاً إلى إنشاء ملف مشروع Visual Studio (دليل Mosquitto_VS_proj) من ملف التكوين CMakeLists.txt المرفق . لا يعمل المشروع الذي تم إنشاؤه تمامًا ، سيكون عليك تغيير المسارات إلى بعض ملفات الرأس والمكتبات الخارجية ، وتضمين بعض وحدات الماكرو في المشروع ، وتعديل النصوص المصدر قليلاً. نتيجة لذلك ، نحصل على ملف mosquitto.dll .
من أجل البساطة ، يتم تضمين جميع الملفات وبنية الدليل مع المشاريع المذكورة في ملف الأرشيف المرفق بالمقال.
إلى جانب مكتبة العميل ، يعطينا تجميع مشروع Mosquitto الملف القابل للتنفيذ من وسيط MQTT - mosquitto.exe .
وبالتالي ، نحصل على الفور على كل من العميل ووسيط MQTT ، أي كل ما تحتاجه تقريبًا لتنظيم إنترنت فعال للأشياء.

إنشاء مشروع عميل MQTT في دلفي



لدمج مكتبة mosquitto.dll في دلفي ، تحتاج إلى إنشاء وحدة إعلانات تعريفات وظيفة مكتبة على Object Pascal . للقيام بذلك، وقد تم إجراء تحويل ملف mosquitto.h ملف MOSQUITTO.PAS .
مشروع العميل بسيط للغاية ، ويتكون من 4 ملفات مصدر فقط. يوضح العميل الاتصال والفصل ، وتشكيل وصية ( Will ) ، وإرسال البيانات مع حزمة PUBLISH إلى الوسيط ، وتلقي البيانات مع حزمة PUBLISH من الوسيط ، والاشتراك وإلغاء الاشتراك.
يحفظ البرنامج جميع سمات الاتصال ، المشار إليها بمصطلح الملف الشخصي في جدول ملف التعريف المخزن على القرص. يتم أيضًا حفظ سجلات حزم النشر المستلمة والمرسلة على القرص بشكل منفصل .

طريقة استخدام العميل



قم بتشغيل الملف TMQTTC.exe .
من أجل أن يكون هناك شخص لإيصال فريق وسيط اختبار المدى Run_mosquitto.cmd في دليل Mosquitto_1_4_5_bin . للراحة ، يتم تكوين الوسيط للاتصال بدون SSL والتحقق من كلمة المرور.
املأ الحقول كما في لقطة الشاشة.



كلمة المرور واسم المستخدم اختياريان. في المستكشف ، انقر فوق زر الالتزام لحفظ البيانات في الجدول. ثم انقر فوق زر الاتصال .
بعد الاتصال ، تصبح أوامر النشر والاشتراك متاحة. أوامر PING العميل Mosquitto يولد تلقائيا.
لكي يحصل العميل على شيء ما ، يجب عليك مرة أخرى تشغيل برنامج TMQTTC.exe بمعرف عميل مختلف واشتراك عميل واحد لتلقي البيانات من آخر.

اتصل بـ IBM Bluemix



أول شيء تفعله هو الحصول على حساب في Bluemix
بعد استلام الحساب ، ننتقل إلى لوحة التحكم الخاصة بنا على Bluemix . هنا يجب عليك التبديل فورًا إلى منطقة جنوب الولايات المتحدة . للقيام بذلك ، انقر فوق رمز الحساب في الزاوية العلوية اليمنى وقم بتغيير القيمة في حقل المنطقة . هناك ثلاث مناطق في المجموع ، ولكن جنوب الولايات المتحدة يمنحك الفرصة لتجربة معظم الخدمات. بعد ذلك ، قم بإنشاء مساحة . يجب أن تبدو الشاشة مثل crinshot أدناه. هنا ، يتم إنشاء منظمة INDEMSYS و Space INDEMSYS SPACE .


انقر الآن على CATALOG في القائمة العلوية. ننزل إلى الأسفل ونختارمؤسسة إنترنت الأشياء .


لا نغير الحقول المقترحة افتراضيًا وننقر على إنشاء


مؤسسة إنترنت الأشياء - وهي خدمة تتضمن وسيط MQTT وواجهة المستخدم الخاصة به.
بعد الإنشاء في النافذة التي تظهر ، انقر فوق الزر المسمى Launch dashboard .



هذه هي لوحة تحكم إنترنت الأشياء. الآن نحن بحاجة إلى إنشاء أجهزة. انقر فوق إضافة جهاز . في مربعات الحوار التي تظهر ، قم بإنشاء نوع الجهاز ( إنشاء نوع الجهاز ). أعطه الاسم Type1 ، لا تملأ الحقول المتبقية من أجل البساطة. انقر فوق التالي -> التالي -> إنشاء -> التالي. قم بتسمية الجهاز Device1. التالي التالي -> التالي -> التالي -> إضافة. نتيجة لذلك ، نحصل على النافذة التالية:


كل شيء هنا لدينا كل المتطلبات لربط جهاز الاول ل MQTT سيط Bluemix .
سنختبر ما إذا كان عميلنا يمكنه الاتصال به. أدخل التفاصيل في نافذة العميل.


كما ترى ، اتصل العميل بنجاح بـ Bluemix . هنا يجب الانتباه إلى اسم المضيف. يبدأ بمعرف المؤسسة الذي تم الحصول عليه عند إنشاء مؤسسة إنترنت الأشياء . حقل معرف المستخدم مركب أيضًا ويتم ترميزه على النحو التالي: d : < Organization ID >: < Device Type >: < Device ID >. يحتوي حقل اسم المستخدم على سلسلة ثابتةاستخدام رمز المصادقة . لا يمكن أن تحتوي
مواضيع الرسائل لشركة Bluemix broker ، على عكس وسيط Mosquitto ، على بيانات عشوائية. يتم ترميزها وفقًا لقواعد معينة. يجب دراسة هذه القواعد في توثيق مؤسسة إنترنت الأشياء . تُظهر لقطة الشاشة أحد الموضوعات الصالحة المحتملة.

مستودع المشروع: https://github.com/Indemsys/Delphi_MQTT_mosquitto

Source: https://habr.com/ru/post/ar388231/


All Articles