📚 إنشاء عميل MQTT لجمع البيانات
المفاهيم الأساسية
CLIENT_ID: معرف فريد للعميل المتصل بوسيط MQTT.
MQTT_BROKER: عنوان وسيط MQTT (مثل broker.emqx.io) الذي يسهل تمرير الرسائل.
TOPIC: اسم الموضوع الذي يشترك فيه العميل لاستقبال الرسائل (مثل waste/drops).
PORT: منفذ الخادم الافتراضي للاتصال بالوسيط (مثل 1883).
FLAG_CONNECTED: متغير يشير إلى حالة الاتصال (صواب/خطأ) ويستخدم في دوال معالجة الأحداث.
messages_stack: مصفوفة لتخزين الرسائل الخاصة بملء حاوية النفايات.
reports: مصفوفة لتخزين جميع كائنات التقارير المُنشأة.
دالة on_connect: دالة معالج الأحداث التي تُنفذ عند محاولة الاتصال بالوسيط، وتطبع رسالة تأكيد في الواجهة الطرفية (Terminal) عن نجاح أو فشل الاتصال.
خريطة المفاهيم
```markmap
7. الرسائل في إنترنت الأشياء
إدارة النفايات الذكية وتحليل البيانات (صفحة 292)
إنشاء برامج تحليل البيانات
#### ملف mqtt_receiver.py
##### الوظيفة: الاشتراك في موضوع MQTT وجمع الرسائل.
##### المخرجات: حفظ البيانات في ملف JSON.
#### ملف data_analysis.ipynb
##### الوظيفة: قراءة البيانات من ملف JSON وتحليلها.
##### العملية: يقرأ البيانات، يكتب النتائج، يجمع المعلومات.
تدفق البيانات في النظام
#### وسيط MQTT: نقطة تمرير الرسائل بين الحاوية وبرامج التحليل.
#### ملف JSON: وسيط تخزين للبيانات المجمعة قبل تحليلها.
إنشاء ملف بيانات جسون (صفحة 293)
خطوات إنشاء الملف
#### 1. إنشاء ملف جديد باسم data.json
##### المحتوى: مصفوفة فارغة [].
#### 2. دور ملف mqtt_receiver.py
##### إلحاق كائنات JSON (التقارير) بالمصفوفة الموجودة في data.json.
#### 3. دور ملف data_analysis.py
##### فتح ملف data.json.
##### قراءة محتويات مصفوفة JSON.
##### إجراء عمليات تحليل البيانات.
برمجة ملف mqtt_receiver.py
#### استيراد الحزم المطلوبة
##### datetime: لإضافة طابع زمني للرسائل.
##### json: للتعامل مع كائنات JSON.
##### paho.mqtt.client: لإنشاء عملاء MQTT.
##### os: للتعامل مع الملفات.
#### إنشاء المتغيرات للتعامل مع ملف JSON
##### data_file: المسار الكامل لملف JSON.
##### data_file_objects: قائمة لتخزين الكائنات من ملف JSON.
برمجة عميل MQTT (صفحة 294)
إنشاء متغيرات اتصال MQTT
#### CLIENT_ID: معرف العميل (مثل RECEIVER_01).
#### MQTT_BROKER: عنوان الوسيط (مثل broker.emqx.io).
#### TOPIC: موضوع الاشتراك (مثل waste/drops).
#### PORT: منفذ الاتصال (مثل 1883).
#### FLAG_CONNECTED: علم حالة الاتصال (يبدأ بـ False).
إنشاء متغيرات تخزين البيانات
#### messages_stack: مصفوفة لتخزين الرسائل الخاصة بكل حاوية.
#### reports: مصفوفة لتخزين كائنات التقارير.
إنشاء دالة معالج الأحداث on_connect
#### الوظيفة: طباعة رسالة تأكيد الاتصال في Terminal.
#### العملية: تغيير قيمة FLAG_CONNECTED بناءً على رمز الاستجابة (rc).
##### إذا كان rc == 0: الاتصال ناجح.
##### إذا كان rc != 0: الاتصال فاشل.
```
نقاط مهمة
- يتم تعريف متغيرات الاتصال (CLIENT_ID, MQTT_BROKER, TOPIC, PORT, FLAG_CONNECTED) في بداية البرنامج لاستخدامها في إنشاء عميل MQTT.
- تُستخدم مصفوفتي `messages_stack` و `reports` لتخزين البيانات الواردة من الرسائل قبل معالجتها.
- دالة `on_connect` هي دالة رد نداء (callback) تُربط بمعالج الأحداث الخاص بالمكتبة (paho.mqtt.client) وتُنفذ تلقائياً عند حدوث حدث الاتصال.
- داخل الدالة، يتم استخدام المتغير العام `global FLAG_CONNECTED` لتعديل قيمة علم الاتصال.
- رمز الاستجابة `rc` (return code) هو الذي يحدد نجاح (0) أو فشل (أي قيمة أخرى) عملية الاتصال بالوسيط.