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

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

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

الدرس: مثال توضيحي لبرنامج مستقبل MQTT

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

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

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

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

📝 ملخص الصفحة

📚 برنامج البايثون دور مستقبل MQTT

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

برنامج مستقبل MQTT: برنامج بايثون يمكنه الاشتراك في موضوع MQTT وجمع الرسائل من عدة ناشري أردوينو في نفس الوقت.

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

```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 تحتوي على المزيد من الحقول والمعلومات حول الناشرين.

```

نقاط مهمة

  • وظيفة `on_message` هي المسؤولة عن استقبال ومعالجة كل رسالة تصل من وسيط MQTT.
  • تقوم الدالة بتحويل حمولة الرسالة من نص إلى كائن JSON يمكن التعامل معه في بايثون.
  • يتم تخزين كل كائن مستلم في مصفوفة `messages_stack` للاحتفاظ بالبيانات.
  • يمكن تصميم البرنامج ليتفاعل مع محتوى الرسالة، مثل استدعاء دالة إنشاء تقرير عند ملء الحاوية (`can_filled == True`).
  • يمكن تطوير البرنامج ليدعم معالجة رسائل من عدة أجهزة أردوينو تحتوي على بيانات أكثر تعقيدًا.

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

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

مثال توضيحي لبرنامج مستقبل MQTT

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

def on_message(client, userdata, msg): global messages_stack # Access the messages_stack variable # Decode the message payload payload = str(msg.payload.decode()) # Convert the payload to a JSON object and append it # to the messages stack payload_object = json.loads(payload) messages_stack.append(payload_object) # When you receive a message, print it to the terminal print("|||---- MESSAGE RECEIVED ----|||\n") print("Payload: " + str(payload_object)) # If the payload object has the can_filled flag set to True # generate a report for the filled can if payload_object["can_filled"] == True: generate_report()

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

يمكن لبرنامج البايثون هذا أن يعمل كمستقبل MQTT لجمع رسائل من عدة ناشري أردوينو في نفس الوقت. يمكن توسعة هذا البرنامج لتتمكن من معالجة بيانات JSON مع إضافة المزيد من الحقول التي تحتوي على معلومات حول الناشرين أيضاً.

🔍 عناصر مرئية

شكل 7.22: يمثل برنامج البايثون دور مستقبل MQTT

A diagram showing three Arduino devices connected via dashed lines to a laptop running Python code. The Python logo is visible on the laptop screen. The diagram illustrates the flow of data from Arduino devices to the Python MQTT client.

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

--- SECTION: مثال توضيحي لبرنامج مستقبل MQTT --- def on_message(client, userdata, msg): global messages_stack # Access the messages_stack variable # Decode the message payload payload = str(msg.payload.decode()) # Convert the payload to a JSON object and append it # to the messages stack payload_object = json.loads(payload) messages_stack.append(payload_object) # When you receive a message, print it to the terminal print("|||---- MESSAGE RECEIVED ----|||\n") print("Payload: " + str(payload_object)) # If the payload object has the can_filled flag set to True # generate a report for the filled can if payload_object["can_filled"] == True: generate_report() يمكن لبرنامج البايثون هذا أن يعمل كمستقبل MQTT لجمع رسائل من عدة ناشري أردوينو في نفس الوقت. يمكن توسعة هذا البرنامج لتتمكن من معالجة بيانات JSON مع إضافة المزيد من الحقول التي تحتوي على معلومات حول الناشرين أيضاً. --- VISUAL CONTEXT --- **DIAGRAM**: شكل 7.22: يمثل برنامج البايثون دور مستقبل MQTT Description: A diagram showing three Arduino devices connected via dashed lines to a laptop running Python code. The Python logo is visible on the laptop screen. The diagram illustrates the flow of data from Arduino devices to the Python MQTT client. Context: Illustrates the architecture of an MQTT client receiving data from multiple IoT devices (Arduinos) using Python.

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

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

ما هو الهدف الأساسي من دالة `on_message` في برنامج مستقبل MQTT بلغة بايثون كما ورد في المثال؟

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

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

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

الشرح: 1. تستقبل الدالة الرسالة من عميل MQTT. 2. تفك تشفير حمولة الرسالة (payload). 3. تحول الحمولة إلى كائن JSON. 4. تخزن الكائن في قائمة (stack). 5. تطبع محتوى الرسالة. 6. تتحقق من وجود حقل معين (can_filled) وتنفذ دالة أخرى (generate_report) إذا كان الشرط صحيحاً.

تلميح: تتلقى هذه الدالة الرسائل وتعالجها عند وصولها.

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

في سياق برنامج مستقبل MQTT بلغة بايثون، ما هي الخطوة التي تلي فك تشفير حمولة الرسالة (payload) مباشرةً؟

  • أ) طباعة عنوان الجهاز الناشر.
  • ب) إغلاق اتصال MQTT.
  • ج) تحويل الحمولة (payload) إلى كائن JSON باستخدام الدالة `json.loads()`.
  • د) إرسال رسالة تأكيد استلام إلى الناشر.

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

الإجابة: تحويل الحمولة (payload) إلى كائن JSON باستخدام الدالة `json.loads()`.

الشرح: تسلسل معالجة الرسالة في دالة `on_message` هو: 1. استقبال الرسالة. 2. فك تشفير الحمولة (decode). 3. تحويل النص الناتج إلى كائن JSON. 4. تخزين الكائن. 5. طباعة المحتوى. 6. التحقق من الشروط.

تلميح: يتم تحويل البيانات النصية إلى هيكل بيانات يمكن معالجته برمجياً.

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

ما الشرط الذي يؤدي إلى استدعاء دالة `generate_report()` في برنامج مستقبل MQTT الموضح؟

  • أ) إذا كان نوع الرسالة هو "alert".
  • ب) إذا كان عدد الرسائل في قائمة messages_stack أكبر من 10.
  • ج) إذا كان حقل `can_filled` في كائن JSON المستلم يساوي القيمة `True`.
  • د) إذا فشل تحويل الحمولة إلى كائن JSON.

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

الإجابة: إذا كان حقل `can_filled` في كائن JSON المستلم يساوي القيمة `True`.

الشرح: يحتوي كائن JSON المستلم على حقول بيانات. بعد تحويل الحمولة إلى كائن، يتحقق البرنامج من قيمة حقل معين يسمى `can_filled`. إذا كانت قيمته المنطقية (Boolean) تساوي `True`، فإنه ينفذ إجراءً إضافياً وهو توليد تقرير.

تلميح: يتم التحقق من قيمة حقل محدد داخل كائن البيانات المستلم.

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

أي مما يلي يمثل ميزة رئيسية لبرنامج مستقبل MQTT بلغة بايثون كما ورد في النص؟

  • أ) القدرة على برمجة الأردوينو مباشرة.
  • ب) القدرة على جمع ومعالجة رسائل من عدة ناشري أردوينو في نفس الوقت.
  • ج) تشفير جميع الرسائل قبل إرسالها.
  • د) استبدال وسيط MQTT (broker) بالكامل.

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

الإجابة: القدرة على جمع ومعالجة رسائل من عدة ناشري أردوينو في نفس الوقت.

الشرح: يصف النص أن برنامج البايثون يمكنه العمل كمستقبل MQTT لجمع رسائل من عدة ناشري أردوينو في نفس الوقت. هذه ميزة أساسية في أنظمة إنترنت الأشياء حيث تتصل عقدة مركزية واحدة (المستقبل) بعدة أجهزة طرفية (الناشرون).

تلميح: يتعلق الأمر بتعدد المصادر التي يمكن للبرنامج التعامل معها.

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