المقطع البرمجي النهائي (proxy.py) - كتاب إنترنت الأشياء - الصف 11 - الفصل 1 - المملكة العربية السعودية

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

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

الدرس: المقطع البرمجي النهائي (proxy.py)

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

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

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

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

📝 ملخص الصفحة

📚 المقطع البرمجي النهائي (proxy.py)

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

المقطع البرمجي لوحدة التحكم (Controller): يتشابه مع برامج العقد الوسطى في فحص المخزن المؤقت وقراءة الرسالة المستلمة، لكنه يطبع الرسالة الأصلية التي أُنشئت بواسطة عقدة الطرفية (Edge Node).

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

```markmap

أدوات محاكاة إنترنت الأشياء

برنامج كاب كاربون (CupCarbon)

إنشاء مشروع محاكاة جديد

#### الخطوة 1: بدء مشروع جديد

  • اضغط على أيقونة "New Project" (مشروع جديد) من شريط الأدوات.
#### الخطوة 2: حفظ المشروع

  • اختر الموقع المراد حفظ المشروع فيه.
  • اكتب اسم الملف: "My First CupCarbon Simulation".
#### الخطوة 3: تأكيد الحفظ

  • اضغط على زر "Save" (حفظ).

مشروع محاكاة: مراقبة الحريق والتحذيرات

#### إنشاء مشروع جديد للمراقبة

##### الخطوة 1: بدء مشروع جديد

  • اضغط على New Project (مشروع جديد) من شريط الأدوات.
##### الخطوة 2: تسمية المشروع وحفظه

  • اختر الموقع الذي تريد تخزين المشروع فيه.
  • اكتب "Fire Surveillance and Notification" في حقل File name (اسم الملف).
  • اضغط على Save (حفظ).

إنشاء شبكة العقدة بوحدة التحكم الرئيسية والوسطي

#### الخطوة 1: إدراج العقد

  • اضغط على "عقدة إنترنت أشياء (IoT) Node" من شريط Toolbar.
  • اضغط على الخريطة لإضافة العقدة.
  • اضغط على "All" من شريط State.
  • ضع عقدتين أخريين داخل الدائرة الخارجية للعقدة الأولى.
  • اضغط على Esc.
#### الخطوة 2: التعرف على العقد

  • العقدة الأولى المضافة هي وحدة التحكم الرئيسية.
  • العقدتان الأخريان هما عقد الوسطي.
#### الخطوة 3: ضمان الاتصال

  • يجب وضع العقد داخل نصف قطر اتصال وحدة التحكم.
  • إذا لم تكن داخل النطاق، اسحبها وأقلتها بالقرب حتى يظهر سهم اتصال ثنائي الاتجاه.

تابع إضافة العقد الطرفية

#### لإدراج العقد الطرفية:

##### الخطوة 1

  • اضغط على Node IoT (عقدة إنترنت الأشياء) من شريط Toolbar (الأدوات).
##### الخطوة 2

  • ضع عقدتين كل node proxy (عقدة وسطى)، وذلك داخل دائرتها الأخرى.
##### الخطوة 3

  • اضغط على All (الكل) من شريط الحالة.
##### الخطوة 4

  • اضغط على Esc في لوحة المفاتيح.

إنشاء المقاطع البرمجية

#### المكتبات اللازمة

  • `import time`
  • `import random`
#### منطق المحاكاة (العقد الطرفية)

##### توليد حدث حريق عشوائي

  • داخل حلقة `while node.loop():`
  • `fire = random.randint(1, 6)` لتحديد القطاع الذي قد يحدث فيه الحريق.
##### التحقق من وقوع الحريق وإرسال التحذير

  • إذا كانت `fire == 1` (اندلع حريق في القطاع 1):
- `node.print("FIRE!")`

- إنشاء رسالة: `message = "FIRE IN SECTOR " + str(node.id())`

- إرسال الرسالة: `node.send(message)`

##### حالة عدم وجود حريق

  • إذا أنتجت دالة التوليد أي رقم آخر (من 2 إلى 6):
- لا يوجد حريق في القطاع.

- تقوم العقدة بطباعة نص ذاتي فارغ: `node.print("")` لمسح أي نص مطبوع سابقاً.

##### فترة السكون العشوائية

  • تهدف إلى محاكاة الأحداث في الحياة الواقعية.
  • تستخدم الدالة `time.sleep(random.uniform(1, 4))`.
  • فترة السكون تتراوح بين 1 و 4 ثوانٍ.
#### المقطع البرمجي النهائي (edge.py)

#### المقطع البرمجي للعقد الوسطى

##### التحقق من وجود بيانات

  • التحقق من أن حجم المخزن المؤقت أكبر من صفر باستخدام `node.bufferSize() > 0`.
##### قراءة البيانات وإعادة توجيهها

  • قراءة الرسالة المستقبلة باستخدام `message = node.read()`.
  • طباعة رسالة توضيحية: `node.print("FORWARDING...")`.
  • إرسال الرسالة إلى وحدة التحكم الرئيسية (معرفها 1) باستخدام `node.send(message, 1)`.
##### إدارة عرض الرسائل

  • السكون لمدة ثانية واحدة: `time.sleep(1)`.
  • مسح الرسالة المطبوعة: `node.print("")`.
##### ضمان استجابة العقدة

  • السكون لفترة قصيرة جداً (0.01 ثانية) باستخدام `time.sleep(0.01)`.
#### المقطع البرمجي النهائي (proxy.py)

##### منطق العقدة الوسطى (Proxy)

  • `while node.loop():`
- `if node.bufferSize() > 0:`

- `message = node.read()`

- `node.print("FORWARDING...")`

- `node.send(message, 1)` (معامل الرقم 1 هو رقم مُعرّف عُقدة وحدة المتحكم)

- `time.sleep(1)`

- `node.print("")`

- `time.sleep(0.01)`

##### منطق وحدة التحكم (Controller)

  • `while node.loop():`
- `if node.bufferSize() > 0:`

- `message = node.read()`

- `node.print(message)` (يطبع الرسالة الأصلية من العقدة الطرفية)

- `time.sleep(2)`

- `node.print("")`

- `time.sleep(0.01)`

```

نقاط مهمة

  • معامل الرقم في دالة `node.send()` هو رقم مُعرّف عُقدة وحدة المتحكم.
  • وحدة التحكم تفحص المخزن المؤقت وتقرأ الرسالة المستلمة مثل العقد الوسطى، لكنها تطبع الرسالة الأصلية التي أُنشئت في العقدة الطرفية.
  • وحدة التحكم تسكن (تنتظر) لمدة ثانيتين بعد طباعة الرسالة، ثم تطبع نصًا فارغًا، ثم تسكن لفترة قصيرة (0.01 ثانية).

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

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

المقطع البرمجي النهائي (proxy.py)

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

المقطع البرمجي النهائي (proxy.py) Complete code (proxy.py)

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

import time while node.loop(): if node.bufferSize() > 0: message = node.read() node.print("FORWARDING...") node.send(message, 1) time.sleep(1) node.print("") time.sleep(0.01)

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

معامل الرقم في دالة () send هو رقم مُعرّف عُقدة وحدة المتحكم.

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

يتشابه المقطع البرمجي لوحدة التحكم نوعًا ما مع برامج العقد الوسطى، فهو يفحص المخزن المؤقت، ويقرأ الرسالة المستلمة، ولكن الرسالة الذاتية المطبوعة هي نفس الرسالة التي أُنشئت في الأصل بواسطة عقدة الطرفية (Edge Node) .

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

import time while node.loop(): if node.bufferSize() > 0: message = node.read() node.print(message)

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

بعد ذلك وكما حدث في عُقدة الوسطى، ستسكن وحدة التحكم، ولكن لمدة ثانيتين هذه المرة، ثم تطبع نصًا فارغًا. وفي الختام ستسكن لفترة قصيرة بنفس الطريقة التي حدثت مع العقد الوسطى.

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

time.sleep(2) node.print("") time.sleep(0.01)

نوع: METADATA

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

نوع: METADATA

330

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

--- SECTION: المقطع البرمجي النهائي (proxy.py) --- المقطع البرمجي النهائي (proxy.py) Complete code (proxy.py) import time while node.loop(): if node.bufferSize() > 0: message = node.read() node.print("FORWARDING...") node.send(message, 1) time.sleep(1) node.print("") time.sleep(0.01) معامل الرقم في دالة () send هو رقم مُعرّف عُقدة وحدة المتحكم. يتشابه المقطع البرمجي لوحدة التحكم نوعًا ما مع برامج العقد الوسطى، فهو يفحص المخزن المؤقت، ويقرأ الرسالة المستلمة، ولكن الرسالة الذاتية المطبوعة هي نفس الرسالة التي أُنشئت في الأصل بواسطة عقدة الطرفية (Edge Node) . import time while node.loop(): if node.bufferSize() > 0: message = node.read() node.print(message) بعد ذلك وكما حدث في عُقدة الوسطى، ستسكن وحدة التحكم، ولكن لمدة ثانيتين هذه المرة، ثم تطبع نصًا فارغًا. وفي الختام ستسكن لفترة قصيرة بنفس الطريقة التي حدثت مع العقد الوسطى. time.sleep(2) node.print("") time.sleep(0.01) وزارة التعليم Ministry of Education 2025 - 1447 330

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

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

في سياق برمجة عقد إنترنت الأشياء، ما هو دور المعامل الثاني في دالة `node.send(message, 1)` كما ورد في المثال؟

  • أ) هو رقم يمثل حجم الرسالة المرسلة.
  • ب) هو رقم مُعرّف عُقدة وحدة المتحكم (الوجهة).
  • ج) هو رقم يمثل وقت التأخير قبل الإرسال.
  • د) هو رقم يمثل رقم الإصدار للبروتوكول المستخدم.

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

الإجابة: هو رقم مُعرّف عُقدة وحدة المتحكم (الوجهة).

الشرح: 1. دالة `send` تستخدم لإرسال الرسائل بين العقد. 2. المعامل الأول هو الرسالة المراد إرسالها. 3. المعامل الثاني يحدد وجهة الرسالة. 4. في المثال، الرقم 1 يمثل معرف العقدة الهدف (وحدة التحكم).

تلميح: فكر في الغرض من إرسال الرسالة داخل الشبكة.

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

ما الفرق الرئيسي في سلوك وحدة التحكم (Controller) مقارنة بالعقد الوسطى (Intermediate Nodes) في المثال البرمجي المقدم؟

  • أ) وحدة التحكم لا تحتوي على حلقة while، بينما العقد الوسطى تحتوي.
  • ب) وحدة التحكم تطبع محتوى الرسالة الأصلية كما أُنشئت، بينما العقد الوسطى تطبع نص 'FORWARDING...' ثم تُعيد إرسالها.
  • ج) وحدة التحكم تستخدم وقت سكون أطول (ثانيتين) فقط، بينما العقد الوسطى تستخدم وقت سكون أقصر (0.01 ثانية) فقط.
  • د) وحدة التحكم لا تقرأ من المخزن المؤقت، بينما العقد الوسطى تفعل.

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

الإجابة: وحدة التحكم تطبع محتوى الرسالة الأصلية كما أُنشئت، بينما العقد الوسطى تطبع نص 'FORWARDING...' ثم تُعيد إرسالها.

الشرح: 1. العقد الوسطى: تقرأ الرسالة، تطبع 'FORWARDING...'، ثم ترسلها للعقدة التالية. 2. وحدة التحكم: تقرأ الرسالة، تطبع محتوى الرسالة نفسها (message). 3. هذا يوضح أن وحدة التحكم هي الوجهة النهائية التي تعرض البيانات الأصلية.

تلميح: قارن بين ما تطبعه كل عقدة بعد قراءة الرسالة من المخزن المؤقت.

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

ما الخطوة التي تتخذها وحدة التحكم بعد طباعة محتوى الرسالة الأصلية مباشرةً، وفقًا للكود المكتمل؟

  • أ) ترسل الرسالة إلى عقدة أخرى فورًا.
  • ب) تسكن (تنتظر) لمدة ثانيتين، ثم تطبع نصًا فارغًا.
  • ج) تخرج من الحلقة while نهائيًا.
  • د) تطبع رسالة 'PROCESSING COMPLETE'.

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

الإجابة: تسكن (تنتظر) لمدة ثانيتين، ثم تطبع نصًا فارغًا.

الشرح: 1. وحدة التحكم تقرأ الرسالة وتطبعها. 2. الخطوة التالية مباشرة هي: `time.sleep(2)` مما يعني توقف التنفيذ لمدة ثانيتين. 3. بعد انتهاء السكون، تطبع نصًا فارغًا: `node.print('')`. 4. أخيرًا، تسكن لفترة قصيرة جدًا (0.01 ثانية) قبل تكرار الحلقة.

تلميح: ابحث عن الأوامر التي تلي `node.print(message)` في الكود الخاص بوحدة التحكم.

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