إنشاء حل ذكي لإدارة النفايات - إنترنت الأشياء - ثاني ثانوي

برنامج بايثون
عين 2023
00:37
(0) 0 التقييم التعليقات المشاركة

292 الدرس الثالث إنشاء حل ذكي لإدارة النفايات إدارة النفايات الذكية وتحليل البيانات Smart Waste Management and Data Analysis الدرس الرقمي www.in.edu.s لقد قمت في الدرس السابق بإنشاء نموذج أولي ذكي لإدارة حاوية نمايات باستخدام متحكم أردوينو دقيق يراقب بيئته المحيطة، ثم ينتج البيانات من المستشعرات وينشرها كرسائل إلى موضوع في MQTT يجب أن يتم جمع البيانات ثم معالجتها لتكوين تصورات مختلفة ووضع الخطط بناء على هذه البيانات. MQTT یک مكم matt_receiver.py Ljson} data_analysis.jpynb مدل 721 تحليل بيداد مشروع النفايات الذكية ستقوم في هذا الدرس بإنشاء مقطع برمجي في بايثون يشترك في نفس الموضوع الخاص بوسيط MQTT الذي نشرت عليه الرسائل. سيتم تجمع هذه الرسائل، وفي كل مرة تمثلى فيها سلة النفايات. سينشأ تقرير ويخزن في ملف آخر سيحتوي هذا الملف فقط على البيانات من التقارير التي أنشئت . ثم ستنشى بعد ذلك مفكرة جوبيتر تقوم بفتح الملف وبتحليل البيانات وإنشاء روى وتصورات حولها. سيسمى هذان الملفان باسم data_analysis.ipynb, matt_receiver py على التوالي، سيكتب البرنامج الأول البيانات المحفوظة في ملف JSON وسيقرأ البرنامج الثاني البيانات من ملف ISON ويقوم بتحليلها. جرارة التعليم

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

إدارة النفايات الذكية وتحليل البيانات

شرح إدارة النفايات الذكية وتحليل البيانات

إنشاء ملف بيانات جسون Creating the JSON Data File ستقوم بانشاء ملف بيانات JSON بواسطة مصفوفة فارغة وسيقوم البرنامج matt_receiver.py بالحاق كل تقرير أنشئ ككائن JSON بالمصفوفة، ثم سيفتح ملف data analysis. py ملف JSON هذا، وسيقرأ محتويات مصفوفة ISON السابقة ويقوم بعمليات تحليل البيانات افتح PyCharm تم أنشن ملفا حديدا في مجلدك الخاص باسم data.json. ثم أنشن كاتنا المصفوفة فارغة داخل هذا الملف كما هو موضح أدناه سيلحق matt_receiver.py كائنات JSON الخاصة بالتقارير المنشاة بالمصفوفة المعروضة أدباء احفظ الملف data.json ثم أغلقه. [1 قم بإنشاء ملف باستون جديد باسم matt receiver py. وفي بداية المقطع البرمجي. قم باستيراد الحزم الآتية: datetime تنشن طابعاً زمنيا للرسائل المرسلة. json للتعامل مع كائنات JSON. • paho.mgtt.client لإنشاء عملا للتواصل مع وسطا - MATT. 05 للتعامل مع الملفات الموجودة على حاسبك الخاص. from datetime import datetime import json import paho.mqtt.client as mq from os import path قم بإنشاء المتغيرات الآتية data_file و data_file_objects والتي ستتفاعل مع ملف بيانات JSON. data_file = "your file_path" # Absolute path to the JSON data file data_fite_objects = [I #This contains the objects from the JSON data file تاكد من انحال امتداد ملف البيانات الصحيح. وزارة التعليم

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

إنشاء ملف بيانات JSON

شرح إنشاء ملف بيانات JSON

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

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

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

شرح إنشاء المتغيرات

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 ---- " ) print("Payload: " + str(payload_ahject)) # If the payload object has the can_Filled Flag set to True # generate a report for the filled can if payloan_object["can_fatled") == True: generate_report( ) إنشاء بيانات التقرير القمل عند امتلاء حارية القمامة. شکل 7.22 بستر سے ناسخ پایتون اور مستقبل MOTI يمكن لبرنامج مايكون هذا أن يعمل كمستقبل MATT الجمع رسائل مين علة لاشري اردويتو في نفس الوقت يمكن توسعة هذا البرنامج ليتمكن عن معالجة بيانات ISON مع إضافة المزيد من الحقول التي تحتوي على معلومات حول المناصرين أيضا

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

إنشاء بيانات التقرير

شرح إنشاء بيانات التقرير

برنامج بايثون

شرح برنامج بايثون

قم بإنشاء دالة generate_report الآتية والتي تنشئ كائن JSON للتقرير وتلحقه بملف البيانات في كل مرة تسلم فيها رسالة تشير إلى امتلاء حاوية النفايات. مرارة التعليم def generate report(); global data_file_objects #Access data File objects variable global messages_stack global reports # Access messages stack variable # Access reports variaole # Getting the first and last objects from the messages stack first_msg = Last_msg = messages stack [0] messages stack Len(messages stack) - 1] عدم الرسالتان الأولى والأخيرة لعاب طرق الوقت. # Converting the string attributes of the messages objects to datetime time_filled_timestamp = last_msgf*timestamp"] first timestamp = datetime.strptime(first_msg["timestamp"], "%H:%M:%S") last timestamp = datetime.strptime( last insgl timestamp" 1. "H:XM:%S") garbage drops last_msg] "garbage_drops"]. = ستخدم عملية الطابع الرطي العاب قرال الوقت # Calculating the time to fill by comparing the timestamps # of the first and Last fillings - time delta = last_timestamp first timestamp time_to_fill = time_delta.cotal_seconds() / 60 report id = len(reports) # This will be used for object indexing # The JSON object that will be appended to the JSON data file report ( "id": report id, "timestamp": time filled timestamp. "garbage drops": garbage drops, "time_to_fill: time to fill 206

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

إنشاء دالة وكائن

شرح إنشاء دالة وكائن

#Append the new report to the objects of the data file # and write the data file objects array to the data file data file objects.append(report) with open(data file, 'w') as file: تحديث معنويات مصفوفة البيانات وصلت البيانات. json.dump(data_file_objects, file, indent-4, separators=('','')) # Append the report object to the reports array and to the JSON data File # and clear the messages stack reports.append(report) messages stack = 目 ستتحقق في الجزء الرئيس من البرنامج مما إذا كانت البيانات موجودة وتقوم بفتحها . ثم ستقوم بتهيئة عميل MATT . وتربط معالجات الأحداث on message, on_connect بالدوال المذكورة أعلاه، ثم تقوم بالاتصال بوسيط MarT والاشتراك في الموضوع المحدد والاستماع إلى الرسائل الواردة. التأكد من وجود ملف البيانات لتعب الأخطاء. # Check if the data file exists if path.isfile(data_file) is False: raise Exception("Data file not found") # Read the contents of the JSON data file with open(data_file) as fp: data_file_objects = json.load(fp) client mo.Client(CLIENT_ID) client.on_connect on connect client.on message on message client.connect(MQTT BROKER, PORT) client.subscribe(TOPIC, 0) client. Loop forever() # Initialize an MQTT client # Bind the on connect event handler # Gind the on message event handler # Connect on the specified MQTT broker # Subscribe to the specified topic # Listen continuously for messages وزارة التعليم 197

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

تحديث محتويات مصفوفة البيانات

شرح تحديث محتويات مصفوفة البيانات

التأكد من وجود ملف البيانات

شرح التأكد من وجود ملف البيانات

التعليم from datetime import datetime import json import paho.mqtt.client as mq From os import path البرنامج بشكله النهائي Complete Code data_file = "your_file_path" # Absolute path to the JSON daca file data_file_objects = [] # This contains the objects from the JSON data file # 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" PORT 1883 # Topic to subscribe to # Default server port FLAG CONNECTED = False # Connection Flag messages_stack=[] #The array with the messages per can filling. reports = [] The array with all the generated report objects def on_connect(client, userdata, flags, irc): global FLAG CONNECTED # Access the FLAG CONNECTED variable if rc == 0: # If rc is the client connected successfully FLAG_CONNECTED = True else: print("Connected to MQTT Broker!") print("Failed to connect to MQTT Broker!") def on message(client, userdata, msg): global messages stack # Access the messages stack variable 296

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

البرنامج بشكله النهائي

شرح البرنامج بشكله النهائي

299 # 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() def generate report(): global data file objects # Access data file objects variable global messages_stack global reports # Access messages_stack variable # Access reports variable # Getting the first and last objects from the messages_stack first_msg = messages_stack[0] Last_msg = messages stack len(messages stack) - 1] # Converting the string datetimes to datetime objects first_timestamp = datetime.strptime(first_msg["timestamp"], "H:%M:%S") last timestamp = datetime. strptime(last_msgf timestamp 1, %H:%M:%S") garbage drops last_msg"garbage_drops") # Calculating the time to fill by comparing the timestamps of elirst and last fillings - time delta = last timestamp first timestamp

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

البرنامج بشكله النهائي2

شرح البرنامج بشكله النهائي2

time to fill time delta.total_seconds() / 60 = report id len(reports) # This will be used for object indexing # The JSON object that will be appended to the JSON data file report = "id": report 1d, "garbage drops: garbage_drops, "time to fill: vime_to_fill # Append the new report to the objects of the data file # and write the data_file_objects array to the data file data file objects.append(report) with open(data file, 'w') as file: json.dump(data_file_objects, file, indent-4, separators=('','')) # Append the report object to the reports array and to the JSON data file # and clear the messages stack reports.append(report) messages_stack # Check if the data file exists if path.isfile(data_file) is False: raise Exception("Data file not found") # Read the contents of the JSON data file with open(data_file) as fp; data file objects = json.load(fp) client mq.Client(CLIENT_ID) client.on connect on connect client.on message on message: client.connect(MQTT BROKER, PORT) client, soosibe(TOPIC, 0) client. loop forever() # Initialize an MQTT client # Bind the on_connect event handler # Bind the on message event handler # Connect on the specified MQTT broker # Subscribe to the specified topic # Listen continuously for messages 300

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

البرنامج بشكله النهائي3

شرح البرنامج بشكله النهائي3

تحليل البيانات في جوبيتر Data Analysis in Jupyter Notebook ستستخدم الآن مفكرة جوبيتر لإجراء عمليات تحليل البيانات على ملف بيانات ISON. ونظرا لأن جمع البيانات اللازمة وتحليلها يستغرق وقتا طويلا. . فقد تم توفير مجموعة بيانات JSON جاهزة لكي تستخدمها . تحاكي مجموعة البيانات هذه ترند نموذج الأردويتو الأولي قيد التشغيل لفترة طويلة من الوقت. ملف JSON متاح للتنزيل من هنا import os import pandas as pd http://binary-academy.com/dnid/KSA/IOT2/U3_L3_DATA.json ستقوم أولا باستيراد المكتبات المطلوبة وقراءة بيانات JSON من الملفا. # library used for data manipulation import matplotlib.pyplot as plt # Library used. For plotting data # The data that will be used, extracted from the JSON dataset data= pd.read_1son('03 L3_DATA.json', 'records", convert_dates=['timestamp 1) data.describe().round(0) هدا هو ملك السيالات الذي تم تفريطه والذي يحب وضعة في نفس مجلد المشروع. حرارة التعليم ستقوم بعد ذلك يوصف مجموعة البيانات لاستخراج الخصائص الإحصائية. id garbage_drops time_to_fill count 500 50.0 50.0 mean 240 540 152.0 std 150 30.0 1000 min 0.0 20 60 25% 12.0 30.0 60.0 50% 24.0 55.0 1470 75% 370 780 2350 max 490 100.0 3760 لكل 723 وصف البيانات

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

تحليل البيانات في جوبيتر

شرح تحليل البيانات في جوبيتر

381 791 TUN سنقوم بإنشاء مخططين يانيين مجمعين حسب خصائص time_to_fill garbage_drops. # Create histograms for the data using B groupings hist = data.hist(['garbage drops' ], figsize-(10,6),bins=8) data.hist(['time_to_Fill], Figsize-(10,6), bins-8) hist garbage drops ப لكل 720 المسلسلات السياسية Gime to fill ستقوم بعد ذلك بإنشاء مخططين من نوع stem plots لعرض garbage_drops و time_to_fill في كل فترة زمنية. # Create stem plots for the data with diamond-shaped (D) markers plt.stem(data['timestamp'], datal time to fill), markerfmt='0'); plt.sten(data['timestamp'], datal garbage drops'), marker Fmt='B'); 2016-2024 2022222222220092022 صرارة الكلية 0 2221452024 216 2160 20 شكل 7.25 مخطط stem plus سانية 302

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

المخططات البيانية

شرح المخططات البيانية

ستشن في الختام مخططين يجمعان عدد garbage_drops لكل ساعة من اليوم. ولكل ساعة خلال الأسبوع. # Create 2 plots, one that groups mean garbage amount by hour and one by day Fig, (ax1, ax2) plt.subplots(2, Figsize=(12, 8)) Fig. supylabel("garbage_drops') data.groupby(dataf "timestamp" 1.dt.hour I "garbage drops 1.mean().plot(kind='bar', rot 8, xlabel-Hour of the day', axsax1); # Monday 0, Sunday = 6 data.groupby(data["timestamp" 1.dt.day_of_week)[ "garbage drops 1.mean(). plot(kind='bar', rot-0, ax-ax2); Hour of the day . umestamp 7.200 مخطط نجمة حرارة التعليم 303 T

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

إنشاء مخططيين يجمعان عدد لكل ساعة من اليوم

شرح إنشاء مخططيين يجمعان عدد لكل ساعة من اليوم

304 تمرينات 1 قم بانشاء مخطط يوضح العلاقة بين ماشي المايتون وملف ISON المحتفظ بالبيانات. 2 قم بإنشاء ملف بلغة بايتون يتصل بثلاثة موضوعات ويكتب معالج أحداها on_connect الطباعة معلومات التكوين والموضوعات التي اشترك فيها العميل إلى الواجهة الطرفية Terminal دراره

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

قم بإنشاء مخطط يوضح العلاقة بين ملفي البايثون وملف JSON

حل قم بإنشاء مخطط يوضح العلاقة بين ملفي البايثون وملف JSON

قم بإنشاء ملف بلغة بايثون يتصل بثلاثة موضوعات

حل قم بإنشاء ملف بلغة بايثون يتصل بثلاثة موضوعات

قم يتحديث الكائن on_message الطباعة المعلومات إلى الواجهة الطرفية حول العميل الذي نشر البيانات وكذلك الموضوع الذي استلمت البيانات منه. قم بإنشاء ملف ISON جديد يحتوي على جميع القيم من قائمة الرسائل واستخدم دالة (cneate_report الالحاق قيم messages Stack يملك ISON الجديد 5 مذكرة جوبيتر هم بانشاء مخطط معتر Scatter Diagram جديد لنفس البيانات التي قمت بمعالجتها الدرس 6 أحد مقطعا برمجيا آخر بلغة بايلون يستقبل الرسائل التي نشرتها من البرنامج في التمرين السادس من الدرس الثاني عندما تستقبل رسالة اطبع المعلومات المتعلقة بالمناشر والمستقيل والموضوع المشترك على الواجهة الطرقية .Terminal وزارة التعليم

الدرس الثالث: إنشاء حل ذكي لإدارة النفايات

قم بتحديث الكائن لطباعة المعلومات

حل قم بتحديث الكائن لطباعة المعلومات

قم بإنشاء ملق JSON جديد

حل قم بإنشاء ملق JSON جديد

في مفكرة جوبيتر قم بإنشاء مخطط مبعثر

حل في مفكرة جوبيتر قم بإنشاء مخطط مبعثر

أضف مقطعا برمجيا آخر بلغة بايثون يستقبل الرسائل

حل أضف مقطعا برمجيا آخر بلغة بايثون يستقبل الرسائل
التعليقات
لم يتم إضافة أي تعليقات حتى الآن.

الرجاء تسجيل الدخول لكتابة تعليق