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

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

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

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

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

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

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

📝 ملخص الصفحة

📚 تمارين برمجة MQTT و EMQX

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

وسيط EMQX العام: وسيط MQTT عام مجاني يستخدم لتطوير النماذج الأولية لتطبيقات إنترنت الأشياء.

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

```markmap

7. الرسائل في إنترنت الأشياء

تصميم وبرمجة جهاز ذكي (صفحة 273)

مشروع: إدارة النفايات الذكية

#### المشكلة: اكتظاظ سكاني يؤدي لتراكم النفايات

#### الحل: استخدام حاويات نفايات ذكية

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

##### تحلل البيانات لتحسين العملية

#### التنفيذ: نموذج أولي لحاوية ذكية

##### يحسب متوسط مرات الاستخدام للوصول للسعة الكاملة

##### يرسل رسالة إلى وسيط (MQTT) عند كل استخدام

##### يرسل رسالة عند الامتلاء إلى متحكم النظام

#### التقنيات المستخدمة

##### متحكم أردوينو (Arduino)

##### برمجة باستخدام بروتوكول Firmata ولغة بايثون

##### منصة MQTT (مثل EMQX) لتوزيع الرسائل

مكونات وأدوات المشروع (صفحة 274)

الترانزستور الضوئي (Phototransistor)

#### الوظيفة: كشف الضوء وتحويله لإشارات كهربائية

#### الرمز التخطيطي: رمز ترانزستور مع سهمين باتجاه القاعدة

#### المظهر الفعلي: جسم بلاستيكي صغير بثلاثة أطراف ونافذة شفافة

مستشعر الإمالة (Tilt Sensor)

#### الوظيفة: قياس درجة الميل بالنسبة للجاذبية

#### الرمز التخطيطي: دائرة تحتوي على دوائر صغيرة تمثل آلية الكرة أو الزئبق

#### المظهر الفعلي: مكون مستطيل أسود بثلاثة أطراف

النموذج الأولي باستخدام الأردوينو (صفحة 275)

آلية عمل النموذج

#### مستشعر الإمالة: يسجل حدث الفتح/الإمالة في كل مرة.

#### الترانزستور الضوئي: يعمل كمستشعر عند الوصول إلى حد معين (يعني أن الحاوية مليئة).

المكونات المطلوبة

#### لوحة أردوينو أونو R3

#### لوحة توصيل الدوائر الصغيرة (Breadboard)

#### ترانزستور ضوئي

#### مستشعر إمالة

#### مقاومتان (1 كيلو أوم)

الاتصال ببسيط EMXQ العام (صفحة 276)

خطوات التثبيت والاتصال

#### 1. تثبيت تطبيق MQTTX

##### زيارة موقع: https://mqttx.app/

##### تنزيل أحدث إصدار وتشغيل المثبت

#### 2. تكوين الاتصال بالوسيط (EMQX)

##### فتح تطبيق MQTTX وإنشاء اتصال جديد

##### إدخال بيانات الاتصال:

###### الاسم (Name): مثال: desktop_connection

###### المضيف (Host): mqtt://broker.emqx.io

###### المنفذ (Port): 1883

دائرة الأردوينو (صفحة 277)

تثبيت المكونات

#### 1. لوحة أردوينو أونو R3

#### 2. لوحة توصيل الدوائر الصغيرة (Breadboard)

#### 3. مستشعر الضوء (Phototransistor)

#### 4. مستشعر الإمالة بأربعة أطراف (4-pin Tilt Sensor)

#### 5. مقاومتان (Resistor)

توصيل المكونات (صفحة 278)

توصيل الترانزستور الضوئي

#### 1. الباعث (Emitter) → الطرف التناظري A0 (سلك أصفر)

#### 2. المقاومة: طرف مع الباعث، والطرف الآخر → العمود السالب للوحة

#### 3. 5V من الأردوينو → المقاومة الموجبة للوحة (سلك أحمر)

#### 4. GND من الأردوينو → العمود السالب للوحة (سلك أسود)

#### 5. المجمع (Collector) → العمود الموجب للوحة

توصيل مستشعر الإمالة

#### 1. المقاومة الثانية → الطرف الثاني للمستشعر

#### 2. الطرف الثاني للمستشعر → الطرف الرقمي 3 للأردوينو (سلك أحمر)

#### 3. الطرف الرابع للمستشعر → العمود الموجب للوحة (سلك أحمر)

#### 4. المقاومة: طرف → العمود السالب للوحة (سلك أسود)

الدائرة بشكلها النهائي (صفحة 279)

الشكل النهائي للدائرة

#### شكل 7.16: مخطط تخطيطي للدائرة الكاملة

##### يوضح لوحة أردوينو أونو متصلة بلوحة توصيل

##### يظهر المكونات: مقاومة، LED، ترانزستور

##### يظهر أسلاك التوصيل (أحمر، أصفر، أخضر، أسود، برتقالي)

#### شكل 7.17: صورة فعلية للدائرة

##### تمثل الشكل الحقيقي للدائرة عند بنائها

##### تظهر المكونات نفسها في الواقع

#### شكل 7.18: توصيل الأطراف بالمكونات

##### يوضح كيفية توصيل مكونات محددة بأطراف الأردوينو

##### يظهر مكونًا مربعًا أسود

##### يظهر مكونًا دائريًا موصولًا بالطرف D3

##### يظهر مكونًا دائريًا موصولًا بالطرف A0

برمجة الأردوينو (صفحة 280)

إعداد بيئة البرمجة

#### 1. تشغيل بروتوكول StandardFirmata على الأردوينو

#### 2. تثبيت حزمة paho-mqtt في بايثون

##### الأمر: pip install paho-mqtt

#### 3. إنشاء ملف بايثون جديد (mqtt_arduino.py)

#### 4. استيراد المكتبات المطلوبة

##### datetime: لإنشاء طوابع زمنية

##### time: للتحكم في سير البرنامج

##### json: للعمل مع كائنات JSON

##### pyfirmata: للتواصل مع الأردوينو

##### paho.mqtt.client: لإنشاء عميل MQTT

#### 5. تعريف متغيرات عميل MQTT

##### CLIENT_ID: معرف العميل (مثال: "PUBLISHER_01")

##### MQTT_BROKER: عنوان الوسيط (مثال: "broker.emqx.io")

##### TOPIC: اسم الموضوع (مثال: "waste/drops")

##### PORT: منفذ الخادم الافتراضي (1883)

##### FLAG_CONNECTED: متغير إشارة للاتصال

تهيئة الاتصال وبرمجة المتغيرات (صفحة 281)

تهيئة الاتصال بالأردوينو

#### استخدام مكتبة pyfirmata للاتصال عبر منفذ معين (مثل COM4)

#### تحديد أطراف المستشعرات:

##### مستشعر الإضاءة: الطرف التناظري A0

##### مستشعر الإمالة: الطرف الرقمي 3

إنشاء متغيرات المشروع

#### can_full: متغير منطقي (True/False) يحدد ما إذا كانت الحاوية ممتلئة.

#### garbage_drops: عداد لتتبع عدد مرات الاستخدام (الإمالة).

إنشاء دالة لإعادة التعيين

#### reset_can(): تعيد تعيين متغيري can_full و garbage_drops إلى القيم الافتراضية عند امتلاء الحاوية.

إنشاء رسالة JSON (صفحة 282)

خطوات إنشاء الدالة publish_message()

#### 1. إنشاء متغير timestamp بتنسيق الوقت (مثال: "%H:%M:%S")

#### 2. إنشاء كائن قاموس (Dictionary) يحتوي على:

##### timestamp

##### garbage_drops

##### can_full

#### 3. تحويل القاموس إلى كائن JSON باستخدام json.dumps()

#### 4. نشر الرسالة إلى الموضوع المشترك (مثال: "waste/drops") عبر client.publish()

#### 5. التعامل مع الأخطاء المحتملة أثناء النشر

الاتصال بـ MQTT (صفحة 282)

إنشاء دالة معالج الأحداث on_connect()

#### الوظيفة: إرسال رسالة تأكيد إلى الواجهة الطرفية (Terminal) حول نجاح الاتصال أو فشله.

#### الوسيط rc: يرسل من خلال مكتبة paho ليعرض حالة الاتصال.

##### إذا كان rc == 0: الاتصال ناجح.

##### إذا كان rc != 0: الاتصال فاشل.

البرنامج الرئيسي (صفحة 283)

تهيئة عميل MQTT والاشتراك

#### تهيئة عميل MQTT باستخدام معرف العميل (CLIENT_ID).

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

#### الاتصال بالوسيط (MQTT_BROKER) على المنفذ المحدد (PORT).

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

التكرار الرئيسي للبرنامج

#### قراءة قيم المستشعرات (light_value, tilt_value) بشكل مستمر.

#### طباعة القيم المقروءة وعداد القمامة (garbage_drops).

#### زيادة العداد (garbage_drops) عند حدوث إمالة (tilt_value == True).

#### إذا حدثت إمالة وكانت الحاوية ممتلئة (light_value <= 0.200):

##### تعيين can_full = True.

##### نشر رسالة عبر publish_message().

##### إعادة تعيين الحاوية عبر reset_can().

##### نشر رسالة أخرى.

#### الانتظار لمدة ثانية (time.sleep(1)) قبل التكرار التالي.

البرنامج بشكله النهائي (صفحة 284)

الكود الكامل

#### استيراد المكتبات:

##### datetime, time, json, pyfirmata, paho.mqtt.client

#### تعريف متغيرات عميل MQTT:

##### CLIENT_ID, MQTT_BROKER, TOPIC, PORT, FLAG_CONNECTED

#### تهيئة الاتصال بالأردوينو:

##### تحديد منفذ الاتصال (مثل 'COM4')

##### بدء مكرر (Iterator) للوحة

#### تحديد أطراف المستشعرات:

##### light_sensor_pin: الطرف التناظري A0

##### tilt_sensor_pin: الطرف الرقمي 3

#### تعريف متغيرات المشروع:

##### can_full: حالة امتلاء الحاوية

##### garbage_drops: عداد مرات الاستخدام

#### تعريف دالة reset_can():

##### إعادة تعيين garbage_drops = 0

##### إعادة تعيين can_full = False

الكود البرمجي (صفحة 285)

دالة publish_message()

#### الوظيفة: إنشاء ونشر رسالة JSON إلى وسيط MQTT.

#### الخطوات:

##### إنشاء طابع زمني (timestamp) بتنسيق "YYYY-MM-DD HH:MM:SS".

##### إنشاء قاموس يحتوي على: timestamp, garbage_drops, can_full.

##### تحويل القاموس إلى سلسلة JSON.

##### محاولة نشر الرسالة إلى الموضوع (TOPIC) باستخدام client.publish().

##### التعامل مع الأخطاء أثناء النشر.

##### الانتظار لمدة ثانيتين (time.sleep(2)) وطباعة تأكيد الإرسال.

دالة on_connect()

#### الوظيفة: معالج حدث الاتصال بوسيط MQTT.

#### آلية العمل:

##### تستقبل معامل rc الذي يمثل رمز النتيجة.

##### إذا كان rc == 0: الاتصال ناجح، يتم تعيين FLAG_CONNECTED = True.

##### إذا كان rc != 0: الاتصال فاشل.

البرنامج الرئيسي (صفحة 286)

الحلقة الرئيسية (Main Loop)

#### تهيئة عميل MQTT والاشتراك

##### client = mq.Client(CLIENT_ID)

##### client.on_connect = on_connect

##### client.connect(MQTT_BROKER, PORT)

##### client.subscribe(TOPIC, 0)

#### التكرار المستمر (while True)

##### قراءة قيم المستشعرات:

###### light_value = light_sensor_pin.read()

###### tilt_value = tilt_sensor_pin.read()

##### طباعة القيم إذا كانت موجودة.

##### زيادة عداد القمامة (garbage_drops) عند حدوث إمالة (tilt_value == True).

##### التحقق من امتلاء الحاوية (light_value <= 0.200):

###### إذا كانت ممتلئة:

####### تعيين can_full = True.

####### نشر رسالة.

####### إعادة تعيين الحاوية (reset_can()).

##### نشر رسالة في كل تكرار.

##### الانتظار ثانية واحدة (time.sleep(1)).

اختبار الوسيط (صفحة 287)

الغرض من الاختبار

#### التحقق من نشر الرسائل بشكل صحيح قبل تنفيذ كود بايثون.

#### استخدام عميل MQTTX للاشتراك في موضوع واستقبال الرسائل.

خطوات استخدام MQTTX للاشتراك

#### 1. في تبويبة desktop_connection، اضغط على زر New Subscription.

#### 2. في مربع نص Topic، اكتب "waste/drops".

#### 3. اضغط على زر Confirm.

عرض الرسائل من خلال عميل MQTTX (صفحة 288)

نتيجة تنفيذ البرنامج

#### بعد تنفيذ مقاطع بايثون وبدء نشر الرسائل، يتم استقبالها في عميل MQTTX.

شكل واجهة عميل MQTTX

#### تحتوي على:

##### لوحة Connections مع اتصال desktop_connection.

##### زر New Subscription للاشتراك في مواضيع جديدة.

##### سجل الرسائل المستلمة.

مثال على الرسالة المستلمة

#### Topic: waste/drops

#### QoS: 0

#### Payload (JSON):

##### {"timestamp":"2022-10-03 11:14:54", "garbage_drops":9, "can_filled":false}

تمارين (صفحة 289)

تمرين 1: رسم مخطط

#### المطلوب: إنشاء مخطط لشبكة MQTT مع لوحة أردوينو واحدة تعمل كناشر واثنتان تعملان كمستقبلات.

#### أداة المساعدة: شبكة تفصيلية (Grid) مرفقة للرسم.

تمرين 2: الوصف والمكونات

#### المطلوب: تقديم وصف للترانزستور الضوئي ومكونات مستشعر الإمالة وحالات استخدامها.

تمارين تطبيقية (صفحة 290)

تمرين 3: تحليل وسيط EMQX العام

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

تمرين 4: تحديث معالج الحدث on_connect

#### المطلوب: تحديث معالج الحدث on_connect ليطبع معلومات التكوين إلى وحدة التحكم المقدمة إلى عميل MQTT.

تمرين 5: تحديث دالة publish_message

#### المطلوب: تحديث دالة publish_message لنشر رسالة زمنية تعرض التاريخ والوقت بأكملهما، وخاصية جديدة تحتوي على معرف العميل.

```

نقاط مهمة

  • الصفحة تحتوي على ثلاثة تمارين تطبيقية لبرمجة MQTT.
  • التمارين تركز على تحليل الوسيط وتحديث معالجات الأحداث ودوال النشر.
  • يجب تحديث معالج حدث `on_connect` لطباعة معلومات التكوين.
  • يجب تحديث دالة `publish_message` لتضمين طابع زمني كامل ومعرف العميل.

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

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

نوع: QUESTION_HOMEWORK

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

نوع: QUESTION_HOMEWORK

قم بتحديث معالج الحدث لحدث on_connect الذي يطبع معلومات التكوين إلى وحدة التحكم المقدمة إلى عميل MQTT.

نوع: QUESTION_HOMEWORK

قم بتحديث الدالة ( publish_message ) لنشر رسالة زمنية timestamp تعرض التاريخ والوقت بأكملهما، وخاصية جديدة تحتوي على معرف العميل.

نوع: METADATA

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

نوع: METADATA

290

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

قم بتحليل ماهية وسيط EMQX العام ومدى مساهمته في تطوير تطبيقات النماذج الأولية لإنترنت الأشياء. قم بتحديث معالج الحدث لحدث on_connect الذي يطبع معلومات التكوين إلى وحدة التحكم المقدمة إلى عميل MQTT. قم بتحديث الدالة ( publish_message ) لنشر رسالة زمنية timestamp تعرض التاريخ والوقت بأكملهما، وخاصية جديدة تحتوي على معرف العميل. وزارة التعليم Ministry of Education 2025 - 1447 290

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

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

سؤال 3: قُم بتحليل ماهية وسيط EMQX العام ومدى مساهمته في تطوير تطبيقات النماذج الأولية لإنترنت الأشياء.

الإجابة: س3: وسيط EMQX هو خادم عام متاح للتجريب، يسهّل تطوير النماذج الأولية واختبار الربط بين الأجهزة (مثل Arduino) بسرعة، لكن لا يناسب الاستخدام الإنتاجي لكونه مشتركاً.

خطوات الحل:

  1. **الشرح:** لنفهم هذا السؤال، فهو يتحدث عن أداة تقنية تُسمى وسيط (Broker) اسمه EMQX. الفكرة هنا هي أن هذا الوسيط هو خدمة عامة متاحة على الإنترنت. دوره الأساسي هو تسهيل عملية تطوير واختبار تطبيقات إنترنت الأشياء (IoT) في مراحلها الأولى، أي مرحلة النماذج الأولية. فهو يسمح للمطورين بربط أجهزة تجريبية (مثل لوحات Arduino) والتواصل بينها بسرعة دون الحاجة إلى إعداد خادم خاص ومعقد. ومع ذلك، من المهم أن ندرك أن كونه عاماً ومشتركاً بين عدة مستخدمين يعني أنه ليس مصمماً للاستخدام النهائي أو الإنتاجي للتطبيقات، حيث قد يؤثر ذلك على الأداء والأمان والموثوقية. إذن الإجابة هي: **وسيط EMQX هو خادم عام متاح للتجريب، يسهّل تطوير النماذج الأولية واختبار الربط بين الأجهزة (مثل Arduino) بسرعة، لكن لا يناسب الاستخدام الإنتاجي لكونه مشتركاً.**

سؤال 4: قُم بتحديث معالج الحدث لحدث on_connect الذي يطبع معلومات التكوين إلى وحدة التحكم المُقدمة إلى عميل MQTT.

الإجابة: س4: يتم تحديث دالة on_connect لطباعة معلومات التكوين (الوسيط، المنفذ، Topic) عند نجاح الاتصال، وطباعة رمز الخطأ عند الفشل للمساعدة في التتبع.

خطوات الحل:

  1. **الشرح:** الفكرة في هذا السؤال تتعلق ببرمجة تطبيقات MQTT، حيث يوجد حدث (Event) يُسمى on_connect يحدث عند محاولة الاتصال بخادم MQTT (الوسيط). يطلب السؤال تحديث معالج هذا الحدث (أي الدالة البرمجية المسؤولة عنه) بحيث تقوم بطباعة معلومات التكوين (Configuration) إلى وحدة التحكم (Console). هذه المعلومات تشمل تفاصيل مثل عنوان الوسيط، رقم المنفذ المستخدم، وربما الموضوع (Topic) المحدد. الهدف من هذا التحديث هو تسهيل عملية التتبع والتصحيح (Debugging)؛ فطباعة هذه المعلومات عند نجاح الاتصال تساعد المطور على التأكد من أن الإعدادات صحيحة، وطباعة رمز الخطأ عند فشل الاتصال يساعد في تحديد سبب المشكلة بسرعة. إذن الإجابة هي: **يتم تحديث دالة on_connect لطباعة معلومات التكوين (الوسيط، المنفذ، Topic) عند نجاح الاتصال، وطباعة رمز الخطأ عند الفشل للمساعدة في التتبع.**

سؤال 5: قُم بتحديث الدالة ( publish_message ) لنشر رسالة زمنية timestamp تعرض التاريخ والوقت بأكملهما، وخاصية جديدة تحتوي على مُعرّف العميل.

الإجابة: س5: يتم تحديث دالة publish_message لإضافة الطابع الزمني (timestamp) ومعرف العميل (client_id) إلى حمولة الرسالة (JSON) قبل نشرها.

خطوات الحل:

  1. **الشرح:** لنفهم هذا السؤال، فهو يتناول دالة برمجية اسمها publish_message تُستخدم في بروتوكول MQTT لنشر الرسائل. يطلب السؤال تحديث هذه الدالة لإضافة محتوى جديد إلى الرسالة قبل نشرها. المحتوى الجديد يتضمن عنصرين: 1. طابع زمني (timestamp): وهو قيمة تعرض التاريخ والوقت الكاملين، مما يساعد في تتبع وقت إرسال كل رسالة. 2. مُعرّف العميل (client_id): وهو خاصية جديدة تُضاف إلى الرسالة لتحديد هوية الجهاز أو التطبيق الذي أرسلها. الفكرة هنا هي تحسين الرسالة لجعلها أكثر فائدة وغنية بالمعلومات. عادةً، يتم تنظيم هذه البيانات في صيغة مثل JSON داخل حمولة الرسالة (Payload) لسهولة المعالجة. إذن الإجابة هي: **يتم تحديث دالة publish_message لإضافة الطابع الزمني (timestamp) ومعرف العميل (client_id) إلى حمولة الرسالة (JSON) قبل نشرها.**

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

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

ما هو الغرض الأساسي من استخدام وسيط MQTT عام مثل EMQX في تطوير تطبيقات إنترنت الأشياء؟

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

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

الإجابة: تسهيل تطوير النماذج الأولية واختبار الربط بين الأجهزة بسرعة، لكنه لا يناسب الاستخدام الإنتاجي لكونه مشتركاً.

الشرح: 1. وسيط MQTT العام (مثل EMQX) هو خدمة جاهزة على الإنترنت. 2. يهدف إلى تسريع عملية بناء واختبار الأفكار الأولية (النماذج الأولية). 3. يسمح بربط الأجهزة (مثل Arduino) والتواصل بينها دون إعداد خادم خاص. 4. عيبه الرئيسي هو أنه مشترك وغير مخصص للاستخدام النهائي (الإنتاجي) بسبب قيود الأداء والأمان.

تلميح: فكر في المرحلة التطويرية التي لا تتطلب إعداد بنية تحتية معقدة.

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

ما الهدف من تحديث معالج الحدث `on_connect` في عميل MQTT لطباعة معلومات التكوين إلى وحدة التحكم؟

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

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

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

الشرح: 1. حدث `on_connect` يحدث عند محاولة الاتصال بالوسيط. 2. طباعة معلومات التكوين (مثل عنوان الوسيط والمنفذ) عند النجاح تساعد في التأكد من صحة الإعدادات. 3. طباعة رمز الخطأ عند الفشل تساعد المطور على تحديد مصدر المشكلة بسرعة. 4. هذه الممارسة جزء أساسي من عملية تطوير البرمجيات تُعرف بالتصحيح (Debugging).

تلميح: فكر في الأدوات التي يستخدمها المطورون لفهم سلوك البرنامج وإصلاح الأخطاء.

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

عند تحديث دالة `publish_message` في نظام MQTT، ما العنصران الرئيسيان اللذان يُضافان عادةً إلى حمولة الرسالة (Payload) لتحسين فائدتها؟

  • أ) عنوان IP للوسيط ورقم المنفذ.
  • ب) الطابع الزمني (timestamp) ومعرف العميل (client_id).
  • ج) نوع جهاز الاستشعار ومستوى البطارية.
  • د) مفتاح التشفير ورمز المصادقة.

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

الإجابة: الطابع الزمني (timestamp) ومعرف العميل (client_id).

الشرح: 1. الطابع الزمني (timestamp): يسجل التاريخ والوقت الدقيق لإرسال الرسالة، مما يسمح بتحليل تسلسل الأحداث. 2. معرف العميل (client_id): يحدد هوية الجهاز أو التطبيق المرسل، مما يساعد في تتبع مصدر البيانات. 3. تُضاف هذه البيانات عادةً إلى بنية الرسالة (مثل JSON) قبل نشرها عبر الوسيط.

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

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