كيفية بناء بنية IIoT افعل ذلك بنفسك

على مدار العام الماضي ، قمنا بتصميم (وما زلنا ندعم) العديد من مشروعات إنترنت الأشياء. ربما تكون قد سمعت عن IIoT ، ولكن في هذه الحالة فقط ، سنحاول أن نوضح ببساطة ما هو وسبب كونه مثيرًا للاهتمام للمطورين والمهندسين المعماريين والإداريين للحلول المحملة للغاية.



إنترنت الأشياء - إنترنت الأشياء - يتضمن التحكم في الأجهزة المصممة لأداء المهام المنزلية البسيطة (افتح باب المرآب عندما تسحب السيارة ، قم بتشغيل الضوء باستخدام مستشعر الحركة أو الأمر ، ومراقبة درجة حرارة الغرفة) ، ثم تحت إنترنت الأشياء - الإنترنت الصناعي للأشياء - عادة ما يكون هناك في ضوء "رقمنة" البيانات من الصناعات ، والتي يمكن على أساسها إجراء تحليل الخبراء ، غالبًا بمساعدة التعلم الآلي.


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


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


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


في المقالة الأولى ، سنحاول إنشاء بنية IIoT ، والتي سننقل فيها البيانات من أجهزة الاستشعار ، ثم ننقلها إلى نظام يوفر المعالجة والتحليل والتعلم الآلي ومراقبة البيانات الواردة.


العمارة التي تم إنشاؤها


في كثير من الأحيان في إنترنت الأشياء الصناعي لا يوجد وصول مباشر إلى أجهزة الاستشعار وأنظمة التحكم ، وبالتالي ، يتم استخدام بوابة لربط مستويات OT (تكنولوجيا التشغيل) وتكنولوجيا المعلومات (تكنولوجيا المعلومات).


وبالتالي ، تشتمل بنية IIoT عادةً على: الأجهزة الطرفية ، والبوابات ، والمحاور الإقليمية ، وأخيرًا ، أنظمة معالجة وتخزين المعلومات.


يجب أن توفر العمارة التي تم إنشاؤها فرصة:


  • جمع البيانات من أجهزة الاستشعار إلى البوابة
  • نقل البيانات إلى السحابة أو مركز البيانات
  • تحديث تكوينات العبّارة تلقائيًا
  • الحفاظ على نقل البيانات ومعالجتها بشكل آمن

على الصورة: بنية النظام والبرمجيات التي تم إنشاؤها والتي سنستخدمها لبناءها على كل مستوى.



تقوم أجهزة الاستشعار بجمع البيانات وإرسالها إلى البوابة باستخدام مجموعة متنوعة من البروتوكولات السلكية واللاسلكية (Serial ، RS-485 ، MODBUS ، CAN bus ، OPC UA ، BLE ، WiFi ، إلخ). في مثالنا ، سنضع في الاعتبار أن البيانات تأتي إلى البوابة عبر WiFi.


كبوابة ، سنستخدم Raspberry Pi ، حيث سيتم إطلاق وسيط Mosquitto ووكيل MiNiFi. Mosquitto هو وسيط رسائل مفتوح المصدر وخفيف الوزن سوف نستخدمه لنقل البيانات من أجهزة الاستشعار باستخدام بروتوكول MQTT. تضيف MQTT الحد الأدنى من النفقات العامة وبالتالي فهي ملائمة للاستخدام في إنترنت الأشياء عندما تكون موارد الأجهزة للأجهزة الطرفية محدودة (على سبيل المثال ، يتم استخدام الهواتف وأجهزة التحكم الدقيقة).


Apache MiNiFi - مشروع فرعي Apache NiFi - عامل خفيف الوزن يقوم بتنفيذ الوظائف الأساسية لـ Apache NiFi ، المصمم خصيصًا لجمع البيانات على الأجهزة النهائية.


MiNiFi مضغوط ، يستخدم الموارد بشكل طفيف ويسمح بإدارة مركزية لجميع الوكلاء. يتصل بسهولة مع NiFi باستخدام Site-To-Site (S2S) ، والذي يسمح لك ببناء تحكم كامل في تدفق البيانات - قابل للتطوير وآمن ويعطي فكرة واضحة عن جميع مراحل نقل المعلومات.


في نظامنا ، ستشترك MiNiFi في جميع مواضيع وسيط Mosquitto وستعيد توجيه كل رسالة إلى مجموعة NiFi على المستوى الإقليمي. يمكنك أيضًا استخدامه للاتصال بنظام SCADA أو أي مصدر بيانات OT آخر.


على المستوى الإقليمي ، هناك مكونان:


Apache NiFi هو نظام قوي لإدارة تدفق البيانات يدعم أكثر من 200 رابط. تسمح لك الواجهة الرسومية بتصميم تدفقات البيانات بسرعة وسهولة.


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


في نظامنا ، NiFi هو مركز لجمع البيانات يعيد توجيهها إلى أنظمة وتطبيقات مختلفة (HDFS ، HBase ، Kafka ، S3 ، إلخ).


MiNiFi C2 Server (MiNiFi Command & Control) هو مشروع فرعي آخر من Apache NiFi لا يزال قيد التطوير. يتمثل دورها في أن تكون النقطة المركزية لتكوين مئات وآلاف من وكلاء MiNiFi قيد الإنتاج في الميدان (قاعات ومصانع وأقاليم مختلفة). يدير خادم C2 تكوينات دفق MiNiFi (في مصطلحات C2 - فئة التطبيقات ذات الإصدارات) وينشرها من خلال Rest API. يمكن لوكلاء MiNiFi الاتصال بواجهة برمجة التطبيقات هذه بتردد معين لتحديث التكوين الخاص بهم.


لذا ، فلنبدأ في إنشاء نموذجنا الأولي.


اتفاقية اسم المجال


لمزيد من التكوين للأنظمة المختلفة التي يجب أن تتصل ببعضها البعض ، دعنا نتفق على أسماء أسماء النطاقات التي سنستخدمها في التكوينات.


#  Apache NiFi      192.168.0.20 nifi.iot.local #  Apache MiNiFi C2     MiNiFi 192.168.0.20 minifi-c2.iot.local #raspberry pi,      Apache MiNiFi  MQTT  192.168.0.68 iot-hub-1.iot.local 

تحضير التوت بي: MQTT و MiNiFi


لتثبيت وسيط MQTT Mosquitto ووكيل MiNiFi ، قم بتشغيل الأوامر التالية على Raspberry Pi.


بشكل افتراضي ، يحتوي MiNiFi على الحد الأدنى من مجموعة معالجات البيانات. يمكنك إضافة معالجات إضافية من مجموعة NiFI عن طريق إضافة أرشيف NAR (أرشيف NiFi) إلى دليل المكتبة.


باستخدام الأمر الأخير ، نضيف معالج NAR MQTT.


 sudo apt-get update #install and run Mosquitto broker on default port 1883 sudo apt-get install mosquitto mosquitto #install and prepare MiNiFi agent wget http://apache.crihan.fr/dist/nifi/minifi/0.4.0/minifi-0.4.0-bin.tar.gz tar -xvf minifi-0.4.0-bin.tar.gz cd minifi-0.4.0 #add mqtt processor wget https://github.com/ahadjidj-hw/NiFi/raw/master/nifi-mqtt-nar-1.5.0.nar -P ./lib/ 

لنقم الآن بتثبيت خادم إدارة تكوين MiNiFi C2 على الخادم الذي سيكون متاحًا مع Raspberry Pi


تركيب وتكوين خادم MiNiFi C2.


قم بتثبيت خادم MiNiFi C2 على خادم عام سيكون متاحًا مع وكلاء MiNiFi. يمكنك استخدام التوزيع الهرمي لخوادم C2 للبنى التحتية المعقدة للشبكات ، كما هو موضح أدناه. قم بتشغيل الأمر التالي لتثبيت خادم C2:


 wget http://apache.crihan.fr/dist/nifi/minifi/0.4.0/minifi-c2-0.4.0-bin.tar.gz tar -xvf minifi-c2-0.4.0-bin.tar.gz cd minifi-c2-0.4.0 

  • سينشر خادم C2 التكوين المنظم للفئة. يدعم C2 "موفري التكوين" القابلين للتوصيل:
  • CacheConfigurationProvider ، الذي يقوم بتحديث التكوين بناءً على التكوين المحدد في نظام الملفات أو على S3
  • تفويض التفويض ، الذي يمرر التفويض إلى خادم C2 آخر لإنشاء هياكل هرمية لخوادم C2.
  • NiFiRestConfigurationProvider ، الذي يزيل القوالب من خوادم Apache NiFi من خلال REST API.

سنقوم بتكوين خادم C2 لاستخدام NiFi كموفر تكوين. قم بتحرير الملف ./conf/minifi-c2-context.xml ، قم بإلغاء تعليق كتلة xml


 <bean class="org.apache.nifi.minifi.c2.provider.nifi.rest.NiFiRestConfigurationProvider"> 

وتدوين عنوان خادم NiFi ( http: //nifi.iot.local: 8080 )


 <constructor-arg> <value>http://nifi.iot.local:8080/nifi-api</value> </constructor-arg> 

مزيد من تكوين MiNiFi على Raspberry Pi


بشكل افتراضي ، لإضافة معالجات وتكويناتها ، تحتاج إلى تعديل التكوين ./conf/config.yml. يمكن أيضًا كتابة التكوين يدويًا أو إنشاؤه باستخدام Apache NiFi GUI ، متبوعًا بتصدير التكوين كقالب. القالب هو ملف XML يجب تحويله إلى ملف تكوين MiMLiFi YML باستخدام مجموعة أدوات MiNiFi. فيما يلي مثال لملف التكوين الذي يراقب الملف على الجهاز ويعيد توجيه كل سطر جديد إلى NiFi باستخدام بروتوكول S2S.


بالنسبة لمشروعنا ، لن نستخدم الضبط اليدوي. في الواقع ، إذا كان هناك الكثير من وكلاء MiNiFi ، فلن يكون من السهل التوقف يدويًا وتحرير config.yml وإعادة تشغيل الوكيل في كل مرة يتغير فيها التكوين.


يستخدم MiNiFi Change Ingestor ، والذي يتعرف من خلاله الوكيل على التكوينات الممكنة الجديدة. Change Ingestor هو مكون إضافي ، وهناك ثلاثة ChangeIngestor مدعومة أصلاً بواسطة MiNiFi.


  • FileChangeIngestor
  • RestChangeIngestor
  • PullHttpChangeIngestor

سنستخدم PullHttpChangeIngestor للوصول بشكل دوري إلى خادم C2 وتنزيل التكوين الجديد. لتهيئة هذا Ingestor ، تحتاج إلى تعديل ملف ./conf/bootstrap.conf وإلغاء تعليق الأسطر المقابلة وتعيين الإعدادات التالية:


 nifi.minifi.notifier.ingestors=org.apache.nifi.minifi.bootstrap.configuration.ingestors.PullHttpChangeIngestor # Hostname on which to pull configurations from nifi.minifi.notifier.ingestors.pull.http.hostname=minifi-c2.iot.local # Port on which to pull configurations from nifi.minifi.notifier.ingestors.pull.http.port=10080 # Path to pull configurations from nifi.minifi.notifier.ingestors.pull.http.path=/c2/config # Query string to pull configurations with nifi.minifi.notifier.ingestors.pull.http.query=class=iot-minifi-raspberry-agent # Period on which to pull configurations from, defaults to 5 minutes if commented out nifi.minifi.notifier.ingestors.pull.http.period.ms=60000 

باستخدام هذا التكوين ، سيصل كل وكيل MiNiFi إلى خادم C2 باستخدام بروتوكول REST API على http: //minifi-c2.iot.local: 10080 / c2 / config كل دقيقة ويطلب تكوينًا جديدًا لفئة وكيل iot-minifi-raspberry-agent
نقطة مهمة: يتم ضبط تردد 1 دقيقة للتوضيح فقط. في بيئة الإنتاج ، لن تضطر على الأرجح إلى تحديث العوامل بمثل هذا التردد.


قبل بدء الوكيل ، دعنا ننتقل إلى مستوى التحكم وتكوين خادم MiNiFi C2 و Apache NiFi نفسه.


تثبيت وتكوين خادم NiFi


قم بتثبيت خادم NiFi الذي يمكن الوصول إليه من خادم C2 وابدأ تشغيله.


 wget http://apache.crihan.fr/dist/nifi/1.6.0/nifi-1.6.0-bin.tar.gz tar -xvf nifi-1.6.0-bin.tar.gz cd nifi-1.6.0 ./bin/nifi.sh start 

اتصل بواجهة NiFi على http: // nifi-dev: 8080 / nifi / وقم بإنشاء تدفق سيتم تشغيله على وكلاء MiNiFi ، ولكن قبل ذلك أضف منفذ الإدخال (أضيف بالضغط على زر منفذ الإدخال في القائمة) في الطبقة الجذرية وقم بتسميته من Raspberry MiNiFi. هذا هو المكان الذي ستتلقى فيه NiFi ملفات دفق من MiNiFi.


أضف Funnel وقم بتوصيل منفذ الإدخال بقمع - في المقالات المستقبلية سنتطرق إلى معالجة البيانات على جانب Apache NiFi.


إضافة معالج يستهلك MQTT للاشتراك في وسيط Mosquitto وتوقيعه على جميع المواضيع iot / sensors / * لاحظ أن tcp: // raspberrypi: 1883 يعادل tcp: // localhost: 1883 ، حيث سيتم تشغيل هذا الموضوع على Raspberry Pi



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



أخيرًا ، قم بإضافة مجموعة المعالجة عن بُعد (RPG) - لإرسال الأحداث المستلمة إلى NiFi. اجمع بين هذه العمليات الثلاث.



يجب أن يبدو البث الخاص بك الآن في لقطة الشاشة أدناه. سيتم إطلاق البث الأيسر على Apache NiFi نفسه ، وسيتلقى بيانات من Apache MiNiFi. لن يبدأ الخيط الأيمن داخل Apache Nifi ، الذي تم إنشاؤه لأغراض النماذج الأولية والتكوين ، وسيتم تشغيله على Raspberry Pi.



احفظ التدفق الصحيح كقالب باسم "iot-minifi-raspberry-agent.v1". مبدأ التسمية مهم للغاية هنا. يجب أن نستخدم نفس اسم اسم الفئة المستخدم في تكوين MiNiFi.


من المهم جدًا - تحتاج إلى تسليط الضوء ليس فقط على المكونات المخزنة ، ولكن أيضًا على العلاقات بينها.



التنسيب وإطلاق التطبيق


قبل إطلاق وكلاء MiNiFi على Raspberry Pi ، دعنا نتحقق من تكوين خادم C2 بشكل صحيح. افتح عنوان URL في متصفحك: http: // c2-server: 10080 / c2 / config؟ Class = iot-minifi-raspberry-agent & version = 1 C2 Server يجب أن يستجيب بملف يحتوي على تكوين القالب الذي أنشأناه بتنسيق YML.



إذا قام الخادم ، بدلاً من التكوين ، بطرح استثناء جافا ، فستواجه مشكلة في خادم C2 المذكور هنا:
https://github.com/apache/nifi-minifi/pull/126#issuecomment-388856304
ستحتاج إلى تثبيت الإصدار 0.3.0 أو إزالة ملف javax.ws.rs-api-2.1.jar من المجلد lib الخاص بدليل خادم C2.


إذا نظرت إلى سجلات خادم C2 ، يمكنك أن ترى أن الخادم قد قبل الطلب بالمعلمات {class = [iot-minifi-raspberry-agent]، version = [1]}



الآن بعد أن تم تأسيس الاتصال بين مكونات الهندسة الفردية (MQTT و MiNiFi و NiFi و C2) ، ابدأ وكيل MiNiFi على Raspberry Pi باستخدام الأمر:


 ./bin/minifi.sh start 

بعد بضع ثوانٍ ، سترى سجلات خادم C2. طلب المضيف 192.168.1.50 (في حالتنا ، عنوان IP لجهاز Raspberry Pi) من خادم C2 تقديم أحدث إصدار من فئة "iot-minifi-raspberry-agent". بالمقارنة مع طلبنا السابق ، الذي قمنا به في المتصفح ، يمكنك ملاحظة أن MiNiFi لم يشر إلى الإصدار. إذا فتحت تكوين وكيل MiNiFi في ./conf/config.yml ، فسترى نفس التكوين الذي تلقيناه في المتصفح ، مع ضبط الطلب يدويًا.



يظهر MQTT أن وكيل MiNiFi متصل بالوسيط واشترك في مواضيع iot / sensors / #



التحكم في النقل


رائع ، دعنا الآن نجعل أجهزة الاستشعار الخاصة بنا تبدأ في توليد البيانات ونشرها على MQTT. سيبدأ MiNiFi في تحميل المعلومات وإرسالها إلى NiFi ، كما هو موضح في لقطة الشاشة أدناه.


هام: لكي يبدأ مكون Apache NiFi في العمل ، يجب النقر فوق زر التشغيل.


الآن ، دعنا نلقي نظرة على إحدى هذه المشاركات داخل NiFi. تأتي المعلومات من مستشعر "iot / sensors / LightIntensity / z" ، إصدار التطبيق - 1



تحديث تكوين MiNiFi


الآن بعد أن بدأت بنيتنا التحتية وتعمل البيانات على "مركز البيانات" ، فلنقم بتثبيت تكوين MiNiFi جديد. انتقل إلى واجهة Apache NiFi وقم بتحرير معالج updateAttribute. غيّر سمة "الإصدار" إلى 2 بدلاً من 1 واحفظ النموذج الجديد "iot-minifi-raspberry-agent.v2". هذا كل شيء. سيتم نشر التكوين الجديد تلقائيًا.


يمكنك الاطلاع على سجلات خادم C2 ومعرفة أنه تم الكشف عن إصدار جديد من V2 ، ولم يعثر عليه الخادم في ذاكرة التخزين المؤقت الخاصة به وقام بتحميله.



ثم يكتشف MiNiFi التكوين الجديد ، ويحتفظ بالتكوين السابق ، ويفكك التكوين الجديد ويعيد التشغيل:



في المقالة التالية ، سنتحدث عن كيفية تجميع أجهزة الاستشعار ودمجها في هندستنا. بعد ذلك ، سنتحدث عن تحليل البيانات.

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


All Articles