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

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

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

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

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

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

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

📝 ملخص الصفحة

📚 تحديث البيانات والجزء الرئيسي للبرنامج (صفحة 300)

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

تحديث ملف البيانات: عملية إلحاق كائن التقرير الجديد بمصفوفة الكائنات الموجودة في ملف JSON، ثم كتابة المصفوفة المحدثة إلى الملف.

خريطة المفاهيم

```markmap

تحديث البيانات والجزء الرئيسي للبرنامج (صفحة 300)

تحديث محتويات ملف البيانات

العملية:

#### إلحاق كائن التقرير (report) بمصفوفة data_file_objects.

#### كتابة مصفوفة data_file_objects المحدثة إلى ملف JSON.

#### إلحاق كائن التقرير بمصفوفة reports.

#### تفريغ مصفوفة messages_stack.

الجزء الرئيسي للبرنامج

العملية:

#### التحقق من وجود ملف البيانات (data.json) قبل قراءته.

#### قراءة محتويات ملف JSON وتخزينها في data_file_objects.

#### تهيئة عميل MQTT.

#### ربط معالج الأحداث on_connect بالدالة المناسبة.

#### ربط معالج الأحداث on_message بالدالة المناسبة.

#### الاتصال بوسيط MQTT باستخدام العنوان والمنفذ.

#### الاشتراك في الموضوع المحدد (TOPIC).

#### الاستماع بشكل مستمر للرسائل الواردة (loop_forever).

```

نقاط مهمة

  • يتم إنشاء كائن التقرير (`report`) الذي يحتوي على `id` و `garbage_drops` و `time_to_fill`.
  • يتم إلحاق هذا الكائن أولاً بمصفوفة `data_file_objects` ثم كتابة المصفوفة كاملة إلى ملف JSON.
  • يتم إلحاق التقرير أيضاً بمصفوفة `reports` المحلية وتفريغ `messages_stack` للبدء بدورة جديدة.
  • في الجزء الرئيسي، يتم التحقق من وجود ملف البيانات وقراءته قبل تهيئة عميل MQTT وبدء الاستماع للرسائل.

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

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

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

time_to_fill = time_delta.total_seconds() / 60 report_id = len(reports) # This will be used for object indexing # The JSON object that will be appended to the JSON data file report = { "id": report_id, "garbage_drops": garbage_drops, "time_to_fill": time_to_fill } # Append the new report to the objects of the data file # and write the data_file_objects array to the data file data_file_objects.append(report) with open(data_file, 'w') as file: json.dump(data_file_objects, file, indent=4, separators=(' ,', ': ')) # Append the report object to the reports array and to the JSON data file # and clear the messages stack reports.append(report) messages_stack = [] # Check if the data file exists if path.isfile(data_file) is False: raise Exception("Data file not found") # Read the contents of the JSON data file with open(data_file, 'r') as fp: data_file_objects = json.load(fp) client = mqtt.Client(CLIENT_ID) # Initialize an MQTT client client.on_connect = on_connect # Bind the on_connect event handler client.on_message = on_message # Bind the on_message event handler client.connect(MQTT_BROKER, PORT) # Connect on the specified MQTT broker client.subscribe(TOPIC, 0) # Subscribe to the specified topic client.loop_forever() # Listen continuously for messages

نوع: NON_EDUCATIONAL

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

نوع: METADATA

300

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

time_to_fill = time_delta.total_seconds() / 60 report_id = len(reports) # This will be used for object indexing # The JSON object that will be appended to the JSON data file report = { "id": report_id, "garbage_drops": garbage_drops, "time_to_fill": time_to_fill } # Append the new report to the objects of the data file # and write the data_file_objects array to the data file data_file_objects.append(report) with open(data_file, 'w') as file: json.dump(data_file_objects, file, indent=4, separators=(' ,', ': ')) # Append the report object to the reports array and to the JSON data file # and clear the messages stack reports.append(report) messages_stack = [] # Check if the data file exists if path.isfile(data_file) is False: raise Exception("Data file not found") # Read the contents of the JSON data file with open(data_file, 'r') as fp: data_file_objects = json.load(fp) client = mqtt.Client(CLIENT_ID) # Initialize an MQTT client client.on_connect = on_connect # Bind the on_connect event handler client.on_message = on_message # Bind the on_message event handler client.connect(MQTT_BROKER, PORT) # Connect on the specified MQTT broker client.subscribe(TOPIC, 0) # Subscribe to the specified topic client.loop_forever() # Listen continuously for messages وزارة التعليم Ministry of Education 2025 - 1447 300

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

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

ما هي الوظيفة الأساسية للدالة `json.dump()` في سياق برمجة إنترنت الأشياء كما وردت في المثال؟

  • أ) قراءة البيانات من ملف نصي بتنسيق JSON وتحويلها إلى كائنات Python.
  • ب) إرسال البيانات عبر بروتوكول MQTT إلى وسيط (Broker).
  • ج) كتابة البيانات المنظمة (كائنات Python) إلى ملف نصي بتنسيق JSON.
  • د) تشفير البيانات قبل تخزينها في قاعدة بيانات.

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

الإجابة: كتابة البيانات المنظمة (كائنات Python) إلى ملف نصي بتنسيق JSON.

الشرح: 1. تأخذ الدالة `json.dump()` كائناً من بيانات Python (مثل القاموس `report`). 2. تفتح ملفاً للكتابة باستخدام `with open(...)`. 3. تكتب محتوى الكائن إلى الملف بتنسيق JSON قابل للقراءة والاستخدام لاحقاً.

تلميح: تتعلق هذه الدالة بحفظ البيانات بعد معالجتها في نظام ملفات.

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

في سياق اتصال إنترنت الأشياء باستخدام MQTT، ما هي الخطوة التي تلي `client.connect(MQTT_BROKER, PORT)` مباشرةً؟

  • أ) بدء حلقة الاستماع المستمرة للرسائل باستخدام `client.loop_forever()`.
  • ب) كتابة تقرير إلى ملف JSON باستخدام `json.dump()`.
  • ج) الاشتراك في موضوع (Topic) محدد للاستماع للرسائل الواردة.
  • د) إغلاق الاتصال بالوسيط (Broker) بعد استلام الرسالة الأولى.

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

الإجابة: الاشتراك في موضوع (Topic) محدد للاستماع للرسائل الواردة.

الشرح: 1. تهيئة عميل MQTT: `client = mqtt.Client(CLIENT_ID)`. 2. ربط معالجات الأحداث (مثل `on_connect`, `on_message`). 3. الاتصال بالوسيط (Broker): `client.connect(...)`. 4. الخطوة التالية مباشرة هي الاشتراك في موضوع معين: `client.subscribe(TOPIC, 0)`.

تلميح: بعد إنشاء الاتصال بالوسيط (Broker)، يجب تحديد القناة التي سيتلقى منها الجهاز البيانات.

التصنيف: صيغة/خطوات | المستوى: متوسط

ما هو الغرض من استدعاء الدالة `client.loop_forever()` في برنامج عميل MQTT؟

  • أ) لإعادة تشغيل العميل تلقائياً عند فقدان الاتصال بالإنترنت.
  • ب) للحفاظ على اتصال العميل نشطاً والاستماع بشكل مستمر ومتكرر للرسائل الواردة على المواضيع المشترك فيها.
  • ج) لتحويل الرسائل المستلمة تلقائياً إلى تنسيق JSON وحفظها في ملف.
  • د) لإرسال رسالة اختبار (ping) دورية إلى الوسيط (Broker) للتحقق من جودة الاتصال.

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

الإجابة: للحفاظ على اتصال العميل نشطاً والاستماع بشكل مستمر ومتكرر للرسائل الواردة على المواضيع المشترك فيها.

الشرح: 1. تقوم `client.loop_forever()` ببدء حلقة لا نهائية (أو طويلة الأمد). 2. داخل هذه الحلقة، يبقى العميل متصلاً بوسيط MQTT. 3. يقوم العميل باستمرار بفحص واستقبال أي رسائل جديدة تصل على المواضيع التي اشترك فيها. 4. هذا ضروري لأنظمة إنترنت الأشياء التي تحتاج للاستجابة للأحداث في الوقت الفعلي.

تلميح: هذه الدالة تمنع البرنامج من إنهاء اتصاله بعد تنفيذ الأوامر السابقة مباشرة.

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