افتح مشروع عميل MQTT على دلفي. استمرار


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

تم استكمال مشروع عميل MQTT على دلفي بلوحة تحكم لرصد تدفق المعلومات من إنترنت الأشياء في الوقت الحقيقي ومولد منشور دوري لاختبار وسطاء MQTT. تم اعتماد تنسيق JSON لنقل المعلومات ، لأنه المعيار لخدمات الإنترنت.
وانظر أيضًا ما يمكن أن يقدمه IBM Bluemix لتنظيم المراقبة عن بُعد وإدارة الأشياء على الإنترنت.


ما الجديد


بعد أن قام الإصدار السابق من العميل بتنفيذ القدرة على تلقي حزم MQTT وإرسالها والاشتراك فيها ، فقد حان دور تنفيذ تدفق تدفق الرسائل لاختبار تشغيل وسطاء MQTT. كانت المهمة الأخرى هي تحديد هيكل نص الرسالة. هنا ، تم استخدام طريقة لتنظيم المعلومات المستخدمة في خدمة IBM Bluemix IoTF للمساعدة. حتى إذا لم تكن الهيكلة المطبقة هناك مثالية ، فهناك سبب للالتزام بهذه القواعد لفترة ، لأن IBM هي علامة تجارية موثوقة للغاية.
البنية في هذا السياق هي كيف يتم ترميز المعلومات في كل حزمة وفي التكوين الذي يتم نقله. من الضروري أن نقرر ما إذا كنا ننقل بمتغير واحد أو بالمجموعات ، إذا بالمجموعات ، كيفية فصل المتغيرات عن بعضها البعض ، وكيفية التمييز بين المتغيرات والبيانات الوصفية وما إلى ذلك ، وكيفية مقارنة المتغيرات مع وصفها أو أسمائها ، وما إذا كان يجب في جميع الحالات أن تكون المتغيرات مصحوبة بأسماء أو مؤشرات كافية و الخ. لا ينظم بروتوكول MQTT هذه المشكلة بأي شكل من الأشكال ، باستثناء أن البيانات النصية يتم ترميزها بتنسيق UTF8 ، وهو أيضًا ليس سيئًا من حيث المبدأ ، لأنه يسمح لك باستدعاء الموضوعات باللغة الروسية.
اختار عمالقة الإنترنت تنسيق JSON لحل مشكلة الهيكلة ، على الرغم من أن MQTT كانت ستنقل كل من XML و ASN.1 بهدوء في أي ترميز وتنسيقات أخرى. بالمناسبة ، يحتوي JSON على العديد من مواصفات الضغط ، إذا كانت هناك شكاوى حول تكرار تنسيق النص.

توليد حركة المرور MQTT


لذا ، أصبح عميلنا الآن قادرًا على إرسال حزم تحتوي على بيانات نصية بتنسيق JSON وترميزها بتنسيق UTF8. للقيام بذلك ، يحتوي على علامة تبويب "منشور دوري". يعني النشر على MQTT عامية ببساطة إرسال حزمة من البيانات إلى العقد الأخرى على شبكة إنترنت الأشياء.

في لقطة الشاشة ، يتوافق كل سطر في الجدول مع رسالة محددة. جميع الرسائل في هذا المثال لها نفس الموضوع. هنا السياسة هي: كلما قل عدد الموضوعات المختلفة ، قل العبء الواقع على الوسيط في تحليل هذه المواضيع والبحث عنها وحفظها. يتم اختيار الموضوعات بالتنسيق الذي يتم قبولها به بواسطة خدمة IBM Bluemix IoTF. يحتوي عمود الحمولة على نص الرسالة. يتم تقديمه بتنسيق JSON ، ولكن في متغير واحد ، يجوز استخدام محدد التنسيق وفقًا لقواعد وظيفة التنسيق للغة دلفي. في هذه الحالة ، يتم استخدام محدد٪ g. في مكانها سيتم استبدال قيمة المتغير الذي تم إنشاؤه وفقًا للقواعد المحددة في الأعمدة: المهلة (فترة إرسال الرسالة) ، الوظيفة (لا يوجد سوى خيار بين متغير عشوائي ووظيفة الجيب) ، Min ، Max (الحد الأدنى والحد الأقصى للقيمة المولدة) ،المدة (فترة دالة الجيب ، المحددة في عدد العينات) ، Offs (إزاحة وسيطة دالة الجيب ، المحددة بعدد العينات). تحدد أعمدة QoS والاحتفاظ سمات حزمة MQTT. يشير الحقل "ممكّن" إلى ما إذا كان سيتم تنشيط هذه الرسالة عند النقر فوق الزر "ابدأ". يصبح زر "Start" نشطًا فقط بعد إنشاء اتصال مع الوسيط.
هام! تعد خدمة IBM Bluemix IoTF حساسة للغاية تجاه بناء الجملة وتقطع الاتصال فورًا إذا كان الموضوع لا يتناسب مع التنسيق.
يوجد في أسفل النموذج السجلات: عام ، سجل رسائل النشر المرسلة وسجل رسائل النشر المستلمة. يمكن مسح السجلات أو تعطيلها. يسرع حظر السجل توليد الحزم واستقبالها.

تصور البيانات من عقد IoT




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


يحتوي عمود "Variable Name" على نفس اسم المتغير (مفتاح في مصطلحات JSON) كما هو مسجل في الرسالة بتنسيق JSON. يحتوي حقل "التسمية التوضيحية المتغيرة" على اسم المتغير المعروض على المكون المرئي. يقوم عمود "فئة الأدوات" بتعيين نوع المكون المرئي. هنا يمكنك تحديد أي مقياس أو نقش على شكل شاشة LCD / LED أو رسم بياني.
بعد تحرير الجدول ، انقر فوق الزر Widgets ورتب المكونات المرئية في النموذج. في البداية ، ستكون جميع المكونات في كومة في الزاوية اليسرى العليا. تحتاج إلى سحبها ووضعها في النموذج في التكوين المطلوب. يتم تذكر موقع المكونات وتشغيلها بعد الافتتاح التالي للنموذج. يتبع نمط إرساء المكونات نمط IDE RAD Studio أو MS Visual Studio.


إذا تم تأسيس اتصال مع وسيط واشتراكه ، فعندها في حالة الرسائل ذات المتغيرات المقابلة ، ستنعكس قيمها على الفور في نافذة المكونات المرئية.

يحفظ البرنامج جميع الإعدادات والسجلات في ملفات JSON على القرص ، والتي يمكن تحريرها يدويًا.
يحتوي المستودع على نسخة من البرنامج مع التهيئة المعدة والمحفوظة في ملفات JSON الجاهزة للاختبار باستخدام وسيط Mosquitto المتضمن محليًا.
الوسيط ، الجاهز للإطلاق ، موجود في المستودع في أرشيف Mosquitto_broker_projs.zip في دليل Mosquitto_1_4_5_bin. يجب تشغيل الملف Run_mosquitto.cmd.

حول تحليل JSON


يستخدم البرنامج محلل JSON من جهة خارجية من المشروع https://github.com/hgourvest/superobject على الرغم من حقيقة أن RAD Studio XE8 يحتوي على محلل JSON مدمج ، فقد بدا superobject أكثر إثارة للاهتمام وأكثر قوة من حيث القدرات. عند وصول رسالة ، يقوم برنامج عميل MQTT بتحليل نص الرسالة وتحديد أزواج قيمة المفتاح الفردية فيها. في حالة مواجهة مصفوفة ، يتم تجاهلها لأن الكائنات الموجودة في الصفيف ليس لها أسماء ، ولا توجد آلية (في هذا البرنامج) لربطها بأي متغير مسمى في العميل. يتم فحص الكائنات المسماة المتبقية بعمق متكرر حتى يتم استرداد جميع أزواج قيمة المفتاح. سيكون المفتاح هو اسم المتغير ، سيحاول البرنامج تحويل القيم إلى رقم فاصلة عائمة ؛ إذا فشل ، فإن الرقم يساوي صفر.

تجربة تطبيق IBM IoT Real-Time Insights


هذا التطبيق هو الثاني من بين اثنين من التطبيقات العملية التي تقدمها IBM لإنترنت الأشياء. أولاً ، تمت مناقشة مؤسسة إنترنت الأشياء في مقال سابق. هناك العديد من التطبيقات التجريبية لإنترنت الأشياء في كتالوج IBM ، ولكنها تتطلب نشر وإطلاق كود مخصص على الخادم ، والذي يتضمن تلقائيًا عداد الدفع.
ولكن لنعد إلى IoT Real-Time Insights. نذهب إلى حسابك. كما هو الحال دائمًا ، حدد منطقة جنوب الولايات المتحدة. انقر في القائمة أعلى الكتالوج. ننزل إلى الأسفل نلاحظ الكثير من الخدمات والتطبيقات المختلفة من IBM. نرى:


انقر على IoT Real-Time Insights. يسمح لك هذا التطبيق بالمراقبة فقط ، ولن تعمل الأجهزة مباشرة منه ، إلا إذا كان للأجهزة قنوات اتصال أخرى غير MQTT.
عند إنشاء التطبيق: حقل ، اترك ترك غير منضم. لا ننشئ تطبيقات إضافية ، لأن IBM تبدأ فورًا في حساب الأموال لها. الخطة الميدانية: اترك Lite. لذلك كل شيء سيكون مجاني لنا.


قبل ذلك ، كان يجب إنشاء خدمة Internet of Things Foundation وتفعيلها بالفعل ، وتم بالفعل إنشاء جهاز واحد على الأقل سيرسل عميل MQTT الخاص به الحزم إليه. تم وصف هذا في مقال سابق.


في الصفحة الرئيسية لتطبيق IoT Real-Time Insights ، نبدأ فورًا بتوصيل مصدر بيانات ، وستكون هذه هي خدمة Internet of Things Foundation التي أنشأناها سابقًا. نحتاج إلى معرفة اسم الرمز (معرف المؤسسة) ومفتاح واجهة برمجة التطبيقات ورمز المصادقة. إذا لم نكن نعرف ، فارجع إلى مؤسسة إنترنت الأشياء وقم بإنشاء ما لا نعرفه.
بعد الاتصال ، في علامة التبويب الأجهزة ، يجب عرض جميع الأجهزة المسجلة من قبلنا. في هذه الحالة ، هناك واحد فقط.


ثم تحتاج إلى تكوين مخططات الرسائل. انقر فوق إدارة المخططات وعلى علامة الجمع إضافة مخطط رسالة جديد. هذه هي الطريقة التي يمكنك من خلالها فهم الإعداد لفك تشفير الرسائل من الجهاز.


في ما يلي مثال على مثل هذا الإعداد للمتغيرات T و L1 و L2 و L3.


المتغير L1 ، على سبيل المثال ، عندما تم تمثيل التحرير بواسطة هذه النافذة.


بعد تكوين المخططات ، يمكنك تكوين التحليلات. على سبيل المثال في الواقع ، قواعد إرسال الرسائل إلى مستقبلات الرسائل الخارجية. الأكثر تكلفة هو إرسال بريد إلكتروني.
هذه هي الطريقة التي تبدو بها قاعدة إرسال البريد الإلكتروني إذا تجاوز المتغير T 24:


ولكن تصل رسالة البريد الإلكتروني هذه:


لكن النقطة المركزية في التطبيق هي لوحات العدادات. يمكن أن يكون هناك العديد من اللوحات. تتكون لوحات المعلومات من مكونات مرئية تعرض قيم المتغيرات التي تم إنشاؤها في علامة التبويب إدارة المخططات في الوقت الفعلي. تُظهر لقطة الشاشة أدناه مثال على لوحة أجهزة القياس لعرض 4 متغيرات: T و L1 و L2 و L3. تم إنشاء الحزم ذات القيم المتغيرة بواسطة عميل MQTT. تم إنشاء المتغير T كرقم عشوائي ، L1 ، L2 ، L3 كدالة للجيب.


انطباعات من IBM IoT Real-Time Insights.


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

لا يزال مشروع عميل MQTT في مكانه القديم: https://github.com/Indemsys/Delphi_MQTT_mosquitto

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


All Articles