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

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

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

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

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

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

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

📝 ملخص الصفحة

📚 تطبيقات على البرمجة - صفحة 305

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

لا تحتوي هذه الصفحة على تعريفات جديدة للمفاهيم.

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

```markmap

تمارين تطبيقية (بايثون و JSON) - صفحة 304

التمرين 1

المطلوب:

#### إنشاء مخطط يوضح العلاقة بين:

##### ملفات البايثون

##### ملف JSON المحتفظ بالبيانات

العنصر المرئي المساعد:

#### شبكة (Grid) فارغة لرسم المخطط المطلوب

التمرين 2

المطلوب:

#### إنشاء ملف بلغة البايثون يقوم بـ:

##### الاتصال بثلاثة موضوعات (Topics)

##### كتابة معالج حدث on_connect

###### لطباعة معلومات التكوين

###### لطباعة الموضوعات المشترك فيها العميل

###### إلى الواجهة الطرفية (Terminal)

التمرين 3 (صفحة 305)

المطلوب:

#### تحديث الكائن on_message لطباعة:

##### معلومات العميل (الناشر) الذي أرسل البيانات

##### الموضوع (Topic) الذي استُلمت البيانات منه

##### على الواجهة الطرفية (Terminal)

التمرين 4 (صفحة 305)

المطلوب:

#### إنشاء ملف JSON جديد يحتوي على:

##### جميع القيم من قائمة الرسائل (messages)

#### استخدام دالة create_report() لـ:

##### إلحاق قيم ملف JSON الجديد بملف JSON جديد

التمرين 5 (صفحة 305)

المطلوب:

#### في مُحرِّكة جوبيتر (Jupyter):

##### إنشاء مخطط مبعثر (Scatter Diagram)

##### لنفس البيانات التي تمت معالجتها في الدرس

التمرين 6 (صفحة 305)

المطلوب:

#### إضافة مقطع برمجي (بايثون) آخر يقوم بـ:

##### استقبال الرسائل المنشورة من برنامج التمرين السادس (الدرس الثاني)

##### عند استقبال رسالة، طباعة:

###### معلومات الناشر

###### معلومات المستقبل

###### الموضوع المشترك

##### على الواجهة الطرفية (Terminal)

```

نقاط مهمة

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

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

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

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

قم بتحديث الكائن on_message لطباعة المعلومات إلى الواجهة الطرفية حول العميل الذي نشر البيانات منه.

3

نوع: QUESTION_HOMEWORK

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

4

نوع: QUESTION_HOMEWORK

قم بإنشاء ملف JSON جديد يحتوي على جميع القيم من قائمة الرسائل، واستخدم دالة create_report() لإلحاق قيم قيم JSON الجديد بملف JSON الجديد.

5

نوع: QUESTION_HOMEWORK

في مُحرِّكة جوپیتر قم بإنشاء مُخطط مُبعثر (Scatter Diagram) لنفس البيانات التي قمت بمعالجتها في الدرس.

6

نوع: QUESTION_HOMEWORK

أضف مُقْطَعًا برمجيًا آخر بلغة البايثون يستقبل الرسائل التي نشرتها من البرنامج في التمرين السادس من الدرس الثاني، عندما تستقبل رسالة، اطبع المعلومات المتعلقة بالناشر والمُستقبل والموضوع المشترك على الواجهة الطرفية Terminal.

نوع: NON_EDUCATIONAL

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

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

قم بتحديث الكائن on_message لطباعة المعلومات إلى الواجهة الطرفية حول العميل الذي نشر البيانات منه. --- SECTION: 3 --- قم بتحديث الكائن on_message لطباعة المعلومات إلى الواجهة الطرفية حول العميل الذي نشر البيانات منه، وكذلك الموضوع الذي استلمت البيانات منه. --- SECTION: 4 --- قم بإنشاء ملف JSON جديد يحتوي على جميع القيم من قائمة الرسائل، واستخدم دالة create_report() لإلحاق قيم قيم JSON الجديد بملف JSON الجديد. --- SECTION: 5 --- في مُحرِّكة جوپیتر قم بإنشاء مُخطط مُبعثر (Scatter Diagram) لنفس البيانات التي قمت بمعالجتها في الدرس. --- SECTION: 6 --- أضف مُقْطَعًا برمجيًا آخر بلغة البايثون يستقبل الرسائل التي نشرتها من البرنامج في التمرين السادس من الدرس الثاني، عندما تستقبل رسالة، اطبع المعلومات المتعلقة بالناشر والمُستقبل والموضوع المشترك على الواجهة الطرفية Terminal. وزارة التعليم 305 Ministry of Education 2025 - 1447

✅ حلول أسئلة الكتاب الرسمية

عدد الأسئلة: 4

سؤال 3: قُمْ بتحديث الكائن on_message لطباعة المعلومات إلى الواجهة الطرفية حول العميل الذي نشر البيانات، وكذلك الموضوع الذي استلمت البيانات منه.

الإجابة: س3: اجعل دالة on_message تطبع في الـ Terminal: معرّف العميل (Client ID) الذي نشر البيانات *(يؤخذ من الـ payload/JSON أو من جزء من اسم الـ topic إذا كان مُضمَّنًا فيه)*، واسم الموضوع المستلم منه *(msg.topic)*، ويفضّل أيضًا طباعة محتوى الرسالة بعد فك الترميز *(payload)*.

خطوات الحل:

  1. **الشرح:** لنفهم هذا السؤال: لدينا دالة on_message في برنامج يستخدم MQTT. هذه الدالة تُستدعى تلقائيًا عند استقبال رسالة. الفكرة هنا هي أن نعدّل هذه الدالة لتقوم بطباعة معلومات مفيدة في Terminal (الواجهة الطرفية). المعلومات المطلوبة هي: 1. **معرّف العميل (Client ID) الذي نشر البيانات**: هذا يمكن الحصول عليه إما من داخل محتوى الرسالة نفسها (payload) إذا كان مضمّنًا فيها كبيانات JSON، أو من جزء من اسم الموضوع (topic) إذا كان مُضمّنًا في هيكل اسم الموضوع. 2. **اسم الموضوع المستلم منه (msg.topic)**: هذا هو الموضوع الذي وصلت منه الرسالة، وهو متاح عادةً كمعامل في الدالة. 3. **محتوى الرسالة بعد فك الترميز (payload)**: يُفضّل أيضًا طباعة محتوى الرسالة نفسه بعد تحويله من ترميز بايتات إلى نص مقروء. إذن، المطلوب هو كتابة كود داخل دالة on_message يقوم باستخراج هذه المعلومات وطباعتها باستخدام أمر مثل print().

سؤال 4: قُمْ بإنشاء ملف JSON جديد يحتوي على جميع القيم من قائمة الرسائل، واستخدم دالة create_report() لإلحاق قيم messages_stack بملف JSON الجديد.

الإجابة: س4: أنشئ ملفًا جديدًا (مثلاً: report.json) واجعل بنيته تحتوي على جميع قيم الرسائل ضمن مصفوفة/قائمة (مثلاً تحت مفتاح مثل "messages")، ثم استدع الدالة create_report() بحيث يكون مدخلها اسم ملف JSON الجديد وقائمة messages_stack ليتم إلحاق/تخزين جميع القيم الموجودة في messages_stack داخل الملف.

خطوات الحل:

  1. **الشرح:** لنفهم هذا السؤال: لدينا قائمة تسمى messages_stack تحتوي على مجموعة من القيم (الرسائل). الفكرة هنا هي إنشاء ملف جديد بتنسيق JSON. هذا الملف يجب أن يحتوي على جميع القيم الموجودة في قائمة messages_stack. عادةً، نضع هذه القيم داخل مصفوفة (قائمة) في JSON تحت مفتاح معين، مثل "messages". بعد ذلك، نستخدم دالة جاهزة تسمى create_report(). هذه الدالة ستأخذ مدخلين: 1. اسم ملف JSON الجديد الذي أنشأناه. 2. قائمة messages_stack. وظيفة الدالة هي أخذ القيم من messages_stack وإلحاقها أو تخزينها داخل ملف JSON هذا. إذن، الخطوة هي كتابة كود ينشئ الملف، ثم يستدعي الدالة create_report() مع المعطيات الصحيحة.

سؤال 5: في مفكرة جوبيتر قم بإنشاء مُخطط مبعثر (Scatter Diagram) جديد لنفس البيانات التي قمت بمعالجتها في الدرس.

الإجابة: س5: في Jupyter Notebook أنشئ Scatter Diagram لنفس البيانات المعالجة بوضع المتغير المستقل على محور x (مثل: الزمن/رقم العينة) والمتغير التابع على محور y (مثل: قيمة المستشعر/درجة الحرارة)، مع إضافة عنوان للمخطط وتسمية للمحاور.

خطوات الحل:

  1. **الخطوة 1 (المفهوم):** المخطط المبعثر (Scatter Diagram) هو نوع من الرسوم البيانية يُستخدم لعرض العلاقة بين متغيرين. نضع نقاطًا على الرسم حيث يمثل كل نقطة زوجًا من القيم. **الخطوة 2 (التطبيق):** بتطبيق هذا على السؤال: لدينا بيانات تم معالجتها مسبقًا في الدرس. هذه البيانات تحتوي على متغيرين: - **المتغير المستقل (x)**: مثل الزمن أو رقم العينة. - **المتغير التابع (y)**: مثل قيمة مستشعر أو درجة حرارة. في Jupyter Notebook، نستخدم مكتبة مثل matplotlib لإنشاء المخطط. نضع المتغير المستقل على محور x والمتغير التابع على محور y. **الخطوة 3 (النتيجة):** لذلك، المطلوب هو كتابة كود في خلية Jupyter Notebook يستخدم البيانات المعالجة، وينشئ مخطط مبعثر مع إضافة عنوان للمخطط وتسمية للمحورين x و y لجعل الرسم واضحًا ومفهومًا.

سؤال 6: أضف مقطعًا برمجيًا آخر بلغة البايثون يستقبل الرسائل التي نشرتها من البرنامج في التمرين السادس من الدرس الثاني. عندما تستقبل رسالة، اطبع المعلومات المتعلقة بالناشر والمستقبل والموضوع المشترك على الواجهة الطرفية Terminal.

الإجابة: س6: أضف برنامج/مقطع Subscriber يتصل بوسيط MQTT ويشترك في نفس الموضوع الذي نُشرت عليه الرسائل في التمرين السادس من الدرس الثاني، ثم عند استقبال أي رسالة اطبع في الـ Terminal: معرّف الناشر *(من بيانات الرسالة/اسم الموضوع حسب تصميمك)*، ومعرّف المستقبل (Client ID للمشترك)، واسم الموضوع المشترك (Topic) الذي وصلت منه الرسالة.

خطوات الحل:

  1. **الشرح:** لنفهم هذا السؤال: في التمرين السادس من الدرس الثاني، كان هناك برنامج ينشر رسائل على وسيط MQTT (مثل broker). الفكرة هنا هي إنشاء برنامج آخر (يسمى Subscriber) بلغة Python. هذا البرنامج سيتصل بنفس وسيط MQTT ويشترك في نفس الموضوع (Topic) الذي نُشرت عليه الرسائل سابقًا. عندما يستقبل هذا البرنامج أي رسالة، يجب أن يطبع معلومات في Terminal (الواجهة الطرفية). المعلومات المطلوبة هي: 1. **معرّف الناشر**: هذا هو العميل الذي أرسل الرسالة. يمكن الحصول عليه من بيانات الرسالة نفسها (payload) أو من اسم الموضوع إذا كان مُضمّنًا فيه، حسب التصميم الذي تم في التمرين السابق. 2. **معرّف المستقبل (Client ID للمشترك)**: هذا هو معرّف العميل الخاص بالبرنامج المشترك نفسه، وهو عادةً يُعرّف عند إنشاء اتصال MQTT. 3. **اسم الموضوع المشترك (Topic)**: هذا هو الموضوع الذي وصلت منه الرسالة، وهو متاح في معاملات دالة الاستقبال. إذن، المطلوب هو كتابة مقطع برمجي كامل يقوم بالاتصال، والاشتراك، ثم عند استقبال رسالة، يستخرج هذه المعلومات ويطبعها باستخدام print().

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

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

ما المعلومات التي يجب أن تطبعها دالة `on_message` في MQTT عند استقبال رسالة لتكون مفيدة في التصحيح؟

  • أ) معرّف العميل الناشر واسم الموضوع المستلم منه فقط.
  • ب) معرّف العميل الناشر، اسم الموضوع المستلم منه، ومحتوى الرسالة بعد فك الترميز.
  • ج) وقت استلام الرسالة ومعرّف الوسيط (Broker) فقط.
  • د) نوع الترميز المستخدم وحجم الرسالة بالبايت.

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

الإجابة: معرّف العميل الناشر، اسم الموضوع المستلم منه، ومحتوى الرسالة بعد فك الترميز.

الشرح: 1. معرّف العميل الناشر: يُستخرج من الـ payload (JSON) أو من جزء من اسم الموضوع. 2. اسم الموضوع: يُأخذ من `msg.topic`. 3. محتوى الرسالة: يُفك ترميز الـ payload ليكون مقروءاً. الهدف: تتبع مصدر البيانات وفهم محتواها.

تلميح: فكر في المعلومات التي تساعد في تتبع مصدر الرسالة ومحتواها.

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

ما الخطوات الصحيحة لإنشاء ملف JSON يحتوي على قائمة من الرسائل واستخدام دالة `create_report()`؟

  • أ) تعديل ملف JSON موجود مباشرة وإضافة القيم يدوياً دون استخدام دوال.
  • ب) إنشاء ملف JSON جديد، وضع قيم الرسائل في مصفوفة تحت مفتاح (مثل 'messages')، ثم استدعاء `create_report()` بمعطيات اسم الملف والقائمة.
  • ج) استدعاء `create_report()` أولاً، ثم كتابة القيم مباشرة في Terminal.
  • د) تحويل القائمة إلى نص عادي وحفظها في ملف .txt.

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

الإجابة: إنشاء ملف JSON جديد، وضع قيم الرسائل في مصفوفة تحت مفتاح (مثل 'messages')، ثم استدعاء `create_report()` بمعطيات اسم الملف والقائمة.

الشرح: 1. إنشاء ملف جديد (مثلاً: report.json). 2. تصميم بنية الملف لتضمين قيم الرسائل في مصفوفة تحت مفتاح مثل 'messages'. 3. استدعاء الدالة `create_report()` وإعطاؤها اسم الملف الجديد وقائمة الرسائل (مثل messages_stack). 4. تقوم الدالة بإلحاق القيم داخل الملف.

تلميح: تتضمن العملية خطوتين: تحضير بنية الملف، ثم تمرير البيانات للدالة.

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

ما المعلومات التي يجب أن يطبعها برنامج المشترك (Subscriber) في MQTT عند استقبال رسالة من ناشر؟

  • أ) الوقت المستغرق لنقل الرسالة وسرعة الاتصال بالإنترنت.
  • ب) معرّف الناشر، معرّف المستقبل (Client ID للمشترك)، واسم الموضوع المشترك.
  • ج) نوع حزمة البيانات (Packet Type) ورمز حالة الاستجابة (Response Code).
  • د) معرّف الجهاز المستقبل ونوع نظام التشغيل الخاص به.

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

الإجابة: معرّف الناشر، معرّف المستقبل (Client ID للمشترك)، واسم الموضوع المشترك.

الشرح: 1. معرّف الناشر: يُستخرج من بيانات الرسالة أو اسم الموضوع. 2. معرّف المستقبل: هو الـ Client ID الخاص بالبرنامج المشترك نفسه. 3. اسم الموضوع المشترك: هو الـ Topic الذي وصلت منه الرسالة. الهدف: توضيح مسار الاتصال بين الأطراف.

تلميح: فكر في هوية كل من أرسل الرسالة، من استقبلها، والقناة التي نُقلت عبرها.

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