📚 إنشاء تقرير
المفاهيم الأساسية
دالة `generate_report()`: دالة تنشئ كائن JSON للتقرير وتلحقه بملف البيانات عند استلام رسالة امتلاء حاوية النفايات.
خريطة المفاهيم
```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: الاتصال فاشل.
برمجة دالة معالجة الرسائل (صفحة 295)
دالة on_message
#### الوظيفة: معالجة الرسائل الواردة من وسيط MQTT.
#### العملية:
##### فك تشفير حمولة الرسالة وتحويلها إلى كائن JSON.
##### إلحاق الكائن بالمصفوفة messages_stack.
##### طباعة الرسالة المستلمة في Terminal.
##### التحقق من وجود العلم can_filled في الكائن.
###### إذا كان True: استدعاء دالة generate_report().
توسعة البرنامج
#### يمكن توسعة البرنامج لمعالجة بيانات JSON تحتوي على المزيد من الحقول والمعلومات حول الناشرين.
برمجة دالة إنشاء التقرير (صفحة 296)
دالة generate_report()
#### الوظيفة: إنشاء كائن JSON للتقرير وإلحاقه بملف البيانات.
#### العملية:
##### الوصول إلى المتغيرات العامة: data_file_objects, messages_stack, reports.
##### استخراج الرسالة الأولى والأخيرة من messages_stack.
##### تحويل الطابع الزمني للرسائل من نص إلى كائن datetime.
##### حساب وقت الامتلاء (time_to_fill) بالدقائق من فرق الطابع الزمني بين الرسالة الأولى والأخيرة.
##### إنشاء كائن التقرير (report) الذي يحتوي على:
###### id: رقم التقرير (طول مصفوفة reports).
###### timestamp: الطابع الزمني للامتلاء.
###### garbage_drops: عدد قطرات النفايات.
###### time_to_fill: الوقت المستغرق لملء الحاوية.
```
نقاط مهمة
- تستخدم الدالة الرسالة الأولى والأخيرة في `messages_stack` لحساب الوقت المستغرق لملء الحاوية.
- يتم حساب `time_to_fill` بتحويل فرق الوقت بين الرسالتين من ثوانٍ إلى دقائق.
- كائن التقرير الناتج هو كائن JSON يحتوي على أربعة حقول رئيسية: المعرف، الطابع الزمني، عدد القطرات، ووقت الامتلاء.