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

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

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

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

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

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

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

📝 ملخص الصفحة

📚 إنشاء عميل MQTT لجمع البيانات

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

CLIENT_ID: معرف فريد للعميل المتصل بوسيط MQTT.

MQTT_BROKER: عنوان وسيط MQTT (مثل broker.emqx.io) الذي يسهل تمرير الرسائل.

TOPIC: اسم الموضوع الذي يشترك فيه العميل لاستقبال الرسائل (مثل waste/drops).

PORT: منفذ الخادم الافتراضي للاتصال بالوسيط (مثل 1883).

FLAG_CONNECTED: متغير يشير إلى حالة الاتصال (صواب/خطأ) ويستخدم في دوال معالجة الأحداث.

messages_stack: مصفوفة لتخزين الرسائل الخاصة بملء حاوية النفايات.

reports: مصفوفة لتخزين جميع كائنات التقارير المُنشأة.

دالة on_connect: دالة معالج الأحداث التي تُنفذ عند محاولة الاتصال بالوسيط، وتطبع رسالة تأكيد في الواجهة الطرفية (Terminal) عن نجاح أو فشل الاتصال.

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

```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: الاتصال فاشل.

```

نقاط مهمة

  • يتم تعريف متغيرات الاتصال (CLIENT_ID, MQTT_BROKER, TOPIC, PORT, FLAG_CONNECTED) في بداية البرنامج لاستخدامها في إنشاء عميل MQTT.
  • تُستخدم مصفوفتي `messages_stack` و `reports` لتخزين البيانات الواردة من الرسائل قبل معالجتها.
  • دالة `on_connect` هي دالة رد نداء (callback) تُربط بمعالج الأحداث الخاص بالمكتبة (paho.mqtt.client) وتُنفذ تلقائياً عند حدوث حدث الاتصال.
  • داخل الدالة، يتم استخدام المتغير العام `global FLAG_CONNECTED` لتعديل قيمة علم الاتصال.
  • رمز الاستجابة `rc` (return code) هو الذي يحدد نجاح (0) أو فشل (أي قيمة أخرى) عملية الاتصال بالوسيط.

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

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

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

قم بإنشاء المتغيرات الآتية التي ستستخدم لعمل MQTT الذي ستستخدمه باسم CLIENT_ID. بينما يشير ربط العام الذي توفره EMXQ MQTT إلى عنوان الوسيط العام الذي توفره MQTT_BROKER، و PORT إلى منفذ الخادم الافتراضي للاتصال بالوسيط، و TOPIC إلى اسم الموضوع الذي سيشترك فيه العميل، و FLAG_CONNECTED إلى حالة الاتصال التي سيستخدم كمشير إشارة في دالة معالج الأحداث لاحقاً.

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

# Variables to setup MQTT client CLIENT_ID = "RECEIVER_01" # ID of the client MQTT_BROKER = "broker.emqx.io" # Address of the broker TOPIC = "waste/drops" # Topic to subscribe to PORT = 1883 # Default server port FLAG_CONNECTED = False # Connection flag

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

قم بإنشاء المتغيرات الآتية والتي ستستخدم لتخزين المعلومات من الرسائل المنشورة. و reports و messages_stack

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

messages_stack = [] # The array with the messages per can filling reports = [] # The array with all the generated report objects

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

قم بإنشاء دالة معالج الأحداث الآتية والتي تطبع رسالة تأكيد إلى الواجهة الطرفية Terminal حول نجاح الاتصال بالعميل من عدمه. وسيطات الدالة هي يجب استخدامها لربط هذه الدالة بمعالج الأحداث المناسب الذي توفره المكتبة .paho.mqtt.client

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

def on_connect(client, userdata, flags, rc): global FLAG_CONNECTED # Access the FLAG_CONNECTED variable if rc == 0: FLAG_CONNECTED = True print("Connected to MQTT Broker!") else: print("Failed to connect to MQTT Broker!")

نوع: NON_EDUCATIONAL

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

نوع: METADATA

294

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

قم بإنشاء المتغيرات الآتية التي ستستخدم لعمل MQTT الذي ستستخدمه باسم CLIENT_ID. بينما يشير ربط العام الذي توفره EMXQ MQTT إلى عنوان الوسيط العام الذي توفره MQTT_BROKER، و PORT إلى منفذ الخادم الافتراضي للاتصال بالوسيط، و TOPIC إلى اسم الموضوع الذي سيشترك فيه العميل، و FLAG_CONNECTED إلى حالة الاتصال التي سيستخدم كمشير إشارة في دالة معالج الأحداث لاحقاً. # Variables to setup MQTT client CLIENT_ID = "RECEIVER_01" # ID of the client MQTT_BROKER = "broker.emqx.io" # Address of the broker TOPIC = "waste/drops" # Topic to subscribe to PORT = 1883 # Default server port FLAG_CONNECTED = False # Connection flag قم بإنشاء المتغيرات الآتية والتي ستستخدم لتخزين المعلومات من الرسائل المنشورة. و reports و messages_stack messages_stack = [] # The array with the messages per can filling reports = [] # The array with all the generated report objects قم بإنشاء دالة معالج الأحداث الآتية والتي تطبع رسالة تأكيد إلى الواجهة الطرفية Terminal حول نجاح الاتصال بالعميل من عدمه. وسيطات الدالة هي يجب استخدامها لربط هذه الدالة بمعالج الأحداث المناسب الذي توفره المكتبة .paho.mqtt.client def on_connect(client, userdata, flags, rc): global FLAG_CONNECTED # Access the FLAG_CONNECTED variable if rc == 0: FLAG_CONNECTED = True print("Connected to MQTT Broker!") else: print("Failed to connect to MQTT Broker!") وزارة التعليم Ministry of Education 2025 - 1447 294

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

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

في سياق برمجة عميل MQTT باستخدام Python، ما هو الغرض الرئيسي من المتغير CLIENT_ID؟

  • أ) تحديد عنوان IP الخاص بالوسيط (Broker).
  • ب) تحديد منفذ الاتصال الافتراضي للخادم.
  • ج) تحديد هوية العميل بشكل فريد عند الاتصال بالوسيط (Broker).
  • د) تخزين الرسائل الواردة من الموضوع (Topic) المشترك فيه.

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

الإجابة: تحديد هوية العميل بشكل فريد عند الاتصال بالوسيط (Broker).

الشرح: 1. بروتوكول MQTT يعتمد على نموذج الناشر/المشترك (Publisher/Subscriber). 2. الوسيط (Broker) يحتاج إلى معرفة هوية كل عميل متصل لإدارة الاتصالات والرسائل. 3. المتغير CLIENT_ID (مثل 'RECEIVER_01') يوفر هذه الهوية الفريدة.

تلميح: يستخدم الوسيط هذا المتغير لتمييز كل جهاز متصل.

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

في الكود المقدم، ما هو الغرض من استخدام المتغير العام (global) FLAG_CONNECTED داخل دالة on_connect؟

  • أ) لإنشاء متغير جديد خاص بالدالة فقط.
  • ب) لحذف المتغير من الذاكرة بعد انتهاء الدالة.
  • ج) للتعديل على قيمة متغير عام يخزن حالة الاتصال، مما يسمح لأجزاء أخرى من البرنامج بالتحقق منها.
  • د) لتحويل قيمة الوسيط rc من رقم إلى قيمة منطقية (Boolean).

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

الإجابة: للتعديل على قيمة متغير عام يخزن حالة الاتصال، مما يسمح لأجزاء أخرى من البرنامج بالتحقق منها.

الشرح: 1. المتغير FLAG_CONNECTED تم تعريفه خارج الدالة (في النطاق العام). 2. داخل الدالة، لتعيين قيمة جديدة له، يجب استخدام الكلمة المفتاحية 'global' للوصول إليه. 3. هذا يسمح بتحديث حالة الاتصال (True/False) واستخدامها لاحقاً في البرنامج للتحكم في المنطق.

تلميح: المتغيرات داخل الدوال تكون محلية ما لم يتم الإعلان صراحةً عن استخدام متغير عام.

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

أي من المكونات التالية يمثل عنوان الوسيط (MQTT Broker) العام المستخدم في المثال؟

  • أ) 1883
  • ب) "RECEIVER_01"
  • ج) "broker.emqx.io"
  • د) "waste/drops"

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

الإجابة: "broker.emqx.io"

الشرح: 1. الوسيط (Broker) هو الخادم المركزي الذي يدير اتصالات ورسائل MQTT. 2. في الكود، يتم تخزين عنوان هذا الوسيط في المتغير MQTT_BROKER. 3. القيمة "broker.emqx.io" تمثل وسيطاً عاماً مجانياً للاختبار.

تلميح: هذا هو العنوان الذي يتصل به العميل لبدء جلسة MQTT.

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

في برمجة إنترنت الأشياء باستخدام مكتبة MQTT، ماذا تشير القيمة (0) للمتغير `rc` ضمن دالة معالج الأحداث `on_connect`؟

  • أ) فشل الاتصال بالوسيط بسبب خطأ في رقم المنفذ.
  • ب) نجاح الاتصال بوسط MQTT (Broker).
  • ج) انتهاء المهلة المحددة للاتصال (Timeout).
  • د) تغيير عنوان الوسيط (MQTT Broker) تلقائياً.

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

الإجابة: نجاح الاتصال بوسط MQTT (Broker).

الشرح: 1. دالة on_connect هي معالج أحداث يُستدعى تلقائياً عند محاولة الاتصال بالوسيط. 2. المتغير rc يختصر عبارة (Return Code) أو رمز العودة من الخادم. 3. القيمة 0 هي القيمة المعيارية المتفق عليها برمجياً للإشارة إلى نجاح عملية الاتصال. 4. في الكود المرفق، عند تحقق هذا الشرط (rc == 0) يتم تغيير حالة المتصل إلى True وطباعة رسالة تأكيد النجاح.

تلميح: ركز على الشرط البرمجي (if rc == 0) والرسالة التي تُطبع في حالة تحقق هذا الشرط.

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