إنشاء حل ذكي لإدارة النفايات هو عنوان الدرس الثالث من الوحدة السابعة التي تحمل اسم ” الرسائل في إنترنت الأشياء” من مقرر “إنترنت الأشياء 2-1” الفصل الدراسي الثالث.
ستتعرَّف في هذا الموضوع على كيفية إنشاء حل لإدارة النفايات، وذلك بتحليل ومعالجة البيانات لمشروع الموضوع السابق، بالإضافة إلى برمجة وإنشاء ملف بيانات JOSN.
لذا قم بقراءة نواتج التعلُّم بعناية، ثم أعد قراءتها وتأكَّد من تحصيل محتوياتها بعد انتهائك من دراسة الموضوع.
أهداف التعلُّم
إنشاء حل لإدارة النفايات الذكية.
تحليل ومعالجة البيانات لمشروع إدارة النفايات.
برمجة وإنشاء ملف بيانات JOSN.
هيا لنبدأ!
إدارة النفايات الذكية وتحليل البيانات (Smart Waste Management and Data Analysis)
لقد قمنا في الموضوع السابق بإنشاء نموذج أولي ذكي لإدارة حاوية نفايات باستخدام متحكم أردوينو دقيق يراقب بيئته المحيطة.
ثم ينتج البيانات من المستشعرات وينشرها كرسائل إلى موضوع في MQTT
يجب أن يتم جمع البيانات ثم معالجتها لتكوين تصورات مختلفة ووضع الخطط على هذه البيانات.
سنقوم في هذا الموضوع بإنشاء مقطع في بايثون يشترك في نفس الموضوع الخاص بوسيط MQTT الذي تم نشر الرسائل عليه. سيتم جمع الرسائل، وفي كل مرة يتم ملء فيها سلة النفايات، سيتم إنشاء تقرير وتخزينه في ملف آخر. سيحتوي هذا الملف فقط على البيانات من التقارير التي تم إنشاؤها، ثم سننشئ بعد ذلك مفكرة جوبيتر تقوم بفتح الملف وتحليل البيانات وإنشاء رؤى وتصورات حولها.
سيتم تسمية هذين الملفين باسم MQTT_reciver.py وdata_analysis.ipynb على التوالي، سيكتب البرنامج الأول البيانات المحفوظة في ملف JSON، وسيقرأ البرنامج الثاني البيانات من ملف JSON ويقوم بتحليلها.
إنشاء ملف بيانات جسون (Creating the JSON File)
سنقوم بإنشاء ملف بيانات JSON بواسطة مصفوفة فارغة.
سيقوم البرنامج py بإلحاق كل تقرير تم إنشاؤه ككائن JSON بالمصفوفة.
ثم سيفتح ملف py ملف JSON هذا.
وسيقرأ محتويات مصفوفة JSON السابقة ويقوم بعمليات تحليل البيانات.
الخطوات:
افتح PyCharm ثم أنشئ ملفًا جديدًا باسم json.
ثم أنشئ كائنًا لمصفوفة فارغة داخل الملف كما هو موضح أدناه.
سيُلحق py كائنات JSON الخاصة بالتقارير المنشأة بالمصفوفة المعروضة.
احفظ ملف json ثم أغلقه.
قم بإنشاء ملف بايثون جديد باسم mqtt_reciver.py وفي بداية المقطع البرمجي قم باستيراد الحزم التالية:
datetime: تُنشئ طابعًا زمنيًا للرسائل المرسلة.
json: للتعامل مع كائنات json.
mqtt.client: لإنشاء عملاء للتواصل مع mqtt.
os: للتعامل مع الملفات الموجودة على حاسبك الخاص.
أنشئ المتغيرات التالية والتي ستتفاعل مع ملف json:
data_file.
.data_file_objects
بإمكانك مراجعة محتوى “إنشاء حل ذكي لإدارة النفايات” من بدايته وحتى هذه النقطة، من خلال الرابط التالي:
أنشئ المتغيرات التي سيتم استخدامها لعميل MQTT الذي ستنشئه.
CLIENT_ID: سيكون اسم العميل.
MQTT_BROKER: عنوان الوسيط العام الذي توفره EMQX الذي ستتصل به.
TOPIC: تشير إلى اسم موضوع سيشترك به العميل.
PORT: تشير إلى منفذ الخادم الافتراضي للاتصال بالوسيط.
FALG_CONNECTED: سيستخدم كمتغير إشارة في دالة معالج الأحداث لاحقًا.
أنشئ المتغيرات التالية ستستخدم لتخزين المعلومات مع الرسائل المنشورة:
messages_stack.
reports.
قم بإنشاء دالة معالج الأحداث التالية والتي تطبع رسالة تأكيد إلى الواجهة الطرفية باستخدام Terminal حول نجاح الاتصال بالعميل من عدمه.
وسيطات الدالة هي وسيطات افتراضية يجب استخدامها لربط هذه الدالة بمعالج الأحداث المناسب الذي توفره المكتبة paho.mqtt.client.
قم بإنشاء الدالة التالية generate_report والتي ستنشئ كائن JSON للتقرير وتلحقه بملف البيانات في كل مرة تُستلم فيها رسالة تشير إلى امتلاء حاوية النفايات.
ستتحقق في الجزء الرئيس من البرنامج مما إذا كانت البيانات موجودة وتقوم بفتحها، ثم سيقوم بتهيئة عمل MQTT، وتربط معالج الأحداث on_connect وon_message بالدوال المذكورة أعلاه، ثم تقوم بالاتصال بوسيط MQTT، والاشتراك في الموضوع المحدد والاستماع إلى الرسائل الواردة.
البرنامج بشكله النهائي (Complete Code)
بإمكانك مراجعة محتوى موضوع “إنشاء حل ذكي لإدارة النفايات” بداية قسم “إنشاء المتغيرات التي ستُستخدم لعميل ” حتى نهاية هذا القسم، من خلال الرابط التالي:
بإمكانك مراجعة محتوى موضوع “إنشاء حل ذكي لإدارة النفايات” بدايةً من “إنشاء المتغيرات التي تُستخدَم لعميل MQTT” وحتى نهاية هذا القسم، من خلال الرابط التالي:
تحليل البيانات في جوبيتر (Data Analysis in Jupyter Notebook)
سنستخدم الآن مفكرة جوبيتر لإجراء عملية تحليل البيانات على ملف بيانات JSON. ونظرًا لأن جمع البيانات وتحليلها سيستغرق وقتًا طويلًا، فقد تم توفير مجموعة بيانات JSON جاهزة لكي تستخدمها.
تحاكي مجموعة البيانات هذه ترك نموذج الأردوينو الأولي قيد التشغيل لفترة طويلة من الوقت.