صفحة 296 - كتاب إنترنت الأشياء - الصف 11 - الفصل 1 - المملكة العربية السعودية

الكتاب: كتاب إنترنت الأشياء - الصف 11 - الفصل 1 | المادة: إنترنت الأشياء | المرحلة: الصف 11 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

📚 معلومات الصفحة

الكتاب: كتاب إنترنت الأشياء - الصف 11 - الفصل 1 | المادة: إنترنت الأشياء | المرحلة: الصف 11 | الفصل الدراسي: 1

الدولة: المملكة العربية السعودية | المنهج: المنهج السعودي - وزارة التعليم

نوع المحتوى: درس تعليمي

📝 ملخص الصفحة

📚 إنشاء تقرير

المفاهيم الأساسية

دالة `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 يحتوي على أربعة حقول رئيسية: المعرف، الطابع الزمني، عدد القطرات، ووقت الامتلاء.

📋 المحتوى المنظم

📖 محتوى تعليمي مفصّل

نوع: محتوى تعليمي

قم بإنشاء دالة generate_report الآتية والتي ستنشئ كائن JSON للتقرير وتلحقه بملف البيانات في كل مرة تستلم فيها رسالة تشير إلى امتلاء حاوية النفايات.

نوع: محتوى تعليمي

def generate_report(): global data_file_objects # Access data_file_objects variable global messages_stack # Access messages_stack variable global reports # Access reports variable # Getting the first and last objects from the messages_stack first_msg = messages_stack[0] last_msg = messages_stack[len(messages_stack) - 1] # Converting the string attributes of the messages objects to datetime time_filled_timestamp = last_msg["timestamp"] first_timestamp = datetime.strptime(first_msg["timestamp"], "%H:%M:%S") last_timestamp = datetime.strptime(last_msg["timestamp"], "%H:%M:%S") garbage_drops = last_msg["garbage_drops"] # Calculating the time_to_fill by comparing the timestamps # of the first and last fillings time_delta = last_timestamp - first_timestamp time_to_fill = time_delta.total_seconds() / 60 # This will be used for object indexing report_id = len(reports) # The JSON object that will be appended to the JSON data file report = { "id": report_id, "timestamp": time_filled_timestamp, "garbage_drops": garbage_drops, "time_to_fill": time_to_fill }

نوع: محتوى تعليمي

ستستخدم الرسالتين الأولى والأخيرة لحساب فرق الوقت.

نوع: محتوى تعليمي

تستخدم عملية الطابع الزمني لحساب فرق الوقت.

نوع: METADATA

وزارة التعليم Ministry of Education 2025 - 1447

نوع: METADATA

296

📄 النص الكامل للصفحة

قم بإنشاء دالة generate_report الآتية والتي ستنشئ كائن JSON للتقرير وتلحقه بملف البيانات في كل مرة تستلم فيها رسالة تشير إلى امتلاء حاوية النفايات. def generate_report(): global data_file_objects # Access data_file_objects variable global messages_stack # Access messages_stack variable global reports # Access reports variable # Getting the first and last objects from the messages_stack first_msg = messages_stack[0] last_msg = messages_stack[len(messages_stack) - 1] # Converting the string attributes of the messages objects to datetime time_filled_timestamp = last_msg["timestamp"] first_timestamp = datetime.strptime(first_msg["timestamp"], "%H:%M:%S") last_timestamp = datetime.strptime(last_msg["timestamp"], "%H:%M:%S") garbage_drops = last_msg["garbage_drops"] # Calculating the time_to_fill by comparing the timestamps # of the first and last fillings time_delta = last_timestamp - first_timestamp time_to_fill = time_delta.total_seconds() / 60 # This will be used for object indexing report_id = len(reports) # The JSON object that will be appended to the JSON data file report = { "id": report_id, "timestamp": time_filled_timestamp, "garbage_drops": garbage_drops, "time_to_fill": time_to_fill } ستستخدم الرسالتين الأولى والأخيرة لحساب فرق الوقت. تستخدم عملية الطابع الزمني لحساب فرق الوقت. وزارة التعليم Ministry of Education 2025 - 1447 296

🎴 بطاقات تعليمية للمراجعة

عدد البطاقات: 3 بطاقة لهذه الصفحة

ما الغرض الرئيسي من الدالة generate_report() في سياق نظام إنترنت الأشياء لمراقبة حاويات النفايات؟

  • أ) إرسال تنبيه فوري إلى عامل النظافة عند امتلاء الحاوية.
  • ب) إنشاء كائن JSON للتقرير وإلحاقه بملف البيانات عند امتلاء الحاوية.
  • ج) حذف الرسائل القديمة من مكدس الرسائل لتوفير المساحة.
  • د) إعادة ضعدادات الحاوية إلى القيم الافتراضية بعد إفراغها.

الإجابة الصحيحة: b

الإجابة: إنشاء كائن JSON للتقرير وإلحاقه بملف البيانات عند امتلاء الحاوية.

الشرح: 1. الدالة تُستدعى عند امتلاء حاوية النفايات. 2. تقوم بجمع البيانات من أول وآخر رسالة في المكدس. 3. تحسب الوقت المستغرق لملء الحاوية. 4. تنشئ كائن JSON يحتوي على هذه المعلومات. 5. تُلحق هذا الكائن بملف البيانات.

تلميح: تذكر أن الدالة تُستدعى عند استلام رسالة تشير إلى امتلاء الحاوية.

التصنيف: مفهوم جوهري | المستوى: متوسط

كيف تحسب الدالة generate_report() الوقت المستغرق لملء حاوية النفايات؟

  • أ) بعدّ عدد الرسائل الواردة خلال فترة زمنية ثابتة.
  • ب) بمقارنة الطابع الزمني للرسالة الأولى والأخيرة في المكدس وتحويل الفرق إلى دقائق.
  • ج) باستخدام ساعة النظام الحالية وطرح وقت بدء التشغيل.
  • د) باستعلام قاعدة بيانات خارجية لتسجيلات وقت الملء.

الإجابة الصحيحة: b

الإجابة: بمقارنة الطابع الزمني للرسالة الأولى والأخيرة في المكدس وتحويل الفرق إلى دقائق.

الشرح: 1. تستخرج الرسالة الأولى (first_msg) والرسالة الأخيرة (last_msg) من مكدس الرسائل (messages_stack). 2. تحول الطابع الزمني (timestamp) لكل منهما إلى كائن datetime. 3. تحسب الفرق الزمني بينهما (time_delta). 4. تحول الفرق من ثوانٍ إلى دقائق (total_seconds() / 60). 5. الناتج هو time_to_fill.

تلميح: تستخدم الدالة الرسالتين الأولى والأخيرة من المتغير messages_stack.

التصنيف: خطوات | المستوى: صعب

ما هي البيانات التي يحتويها كائن التقرير (report) الذي تنشئه الدالة generate_report()؟

  • أ) الموقع الجغرافي للحاوية، نوع النفايات، ودرجة الحرارة المحيطة.
  • ب) معرف التقرير، الطابع الزمني لآخر رسالة، عدد قطرات النفايات، والوقت المستغرق للملء.
  • ج) اسم المشغل، سعة الحاوية، وتاريخ الصيانة الأخيرة.
  • د) سرعة الرياح، نسبة الرطوبة، واتجاه الحاوية.

الإجابة الصحيحة: b

الإجابة: معرف التقرير، الطابع الزمني لآخر رسالة، عدد قطرات النفايات، والوقت المستغرق للملء.

الشرح: يحتوي كائن التقرير JSON على أربعة حقول رئيسية: 1. id: معرف فريد للتقرير. 2. timestamp: وقت آخر رسالة (امتلاء الحاوية). 3. garbage_drops: العدد الإجمالي لقطرات النفايات. 4. time_to_fill: الوقت المستغرق لملء الحاوية بالدقائق.

تلميح: انظر إلى الكائن report في الكود المقدم.

التصنيف: مفهوم جوهري | المستوى: سهل