תוכן עניינים:
- שלב 1: דרישות
- שלב 2: בנייה והבהקה של קושחת החיישן
- שלב 3: הגדרת הענן
- שלב 4: הגדרת AWS Lambda
- שלב 5: הגדר זרם נתונים של AWS Kinesis Firehose
- שלב 6: הגדרת תפקיד IAM לקינסיס
- שלב 7: הגדרת AWS EC2
- שלב 8: הגדר את תפקיד האבטחה של IAM עבור EC2
- שלב 9: גש למופע EC2 שלך
- שלב 10: אחזור API של מפות Google
- שלב 11: הפעל שרת
- שלב 12: בצע שילוב HTTP ברשת Things
- שלב 13: עיבוד נתונים
- שלב 14: ויזואליזציה
- שלב 15: זיכויים וקישורים חיצוניים
וִידֵאוֹ: ניטור כבישים: 15 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:15
היום נראה לך כיצד הקמנו מערכת ניטור חריגות בכבישים המבוססת על מדי תאוצה, LoRaWAN, Amazon Web Services ו- Google Cloud API.
שלב 1: דרישות
- לוח DISCO-L072CZ-LRWAN1
- מודול הרחבה X-NUCLEO-IKS01A2 (עבור מד התאוצה)
- X-NUCLEO-GNSS1A1 (ללוקליזציה)
- חשבון AWS
- חשבון Google Cloud Platform
שלב 2: בנייה והבהקה של קושחת החיישן
חבר את ה- IKS01A2 ו- GNSS1A1 על גבי הלוח דרך סיכות GPIO. הורד את קוד הקושחה מ- GitHub. צור (אם עדיין אין לך) חשבון ב- ARM Mbed וייבא את הקוד במאגר המהדר המקוון. הגדר את פלטפורמת היעד ל- DISCO-L072CZ-LRWAN1 ושמור את הפרויקט. כעת עבור אל רשת הדברים וצור חשבון אם עדיין אין לך אותו. צור יישום, צור מכשיר חדש בתוך האפליקציה והגדר את מצב החיבור ל- OTAA. תפוס את הפרמטרים המתאימים למילוי השדות הבאים בקובץ mbed_app.json: "lora.appskey", "lora.nwkskey", "lora.device-address".
החיישן יתעד מדי פעם נתוני מד תאוצה ו- GNSS וישלח אותם דרך חיבור LoRa לשער הקרוב ביותר, שיעביר אותם ליישום שלנו ברשת The Things Network. השלב הבא הוא הגדרת שרת ענן ושילוב HTTP ב- TTN.
שלב 3: הגדרת הענן
כעת אנו מוכנים להקים את תשתית הענן שתאסוף ותצבור את הנתונים מכל הלוחות הפרוסים. תשתית זו מוצגת באיור שלהלן והיא מורכבת על ידי:
- Kinesis, לטיפול בזרם הנתונים הנכנס;
- למבדה, כדי לסנן ולעבד את הנתונים לפני אחסוןם;
- S3, לאחסון כל הנתונים;
- EC2, לנתח נתונים ולארח את הפרונט-אנד שלנו.
שלב 4: הגדרת AWS Lambda
נדגים את השלבים הדרושים להקמת תשתית זו, החל בלמבדה.
- היכנס באמצעות חשבון AWS שלך, ומהדף הראשי של הקונסולה ועבור למבדה
- לחץ על צור פונקציה
- בחלק העליון של הדף יש לבחור באפשרות מחבר מגרד. לאחר מכן השלם את השדות האחרים כמו בתמונה ולאחר מכן לחץ על צור פונקציה
- כעת, לאחר שיצרת פונקציית Lambda של AWS, עבור אל https://github.com/roadteam/data-server והעתק את תוכן הקובץ aws_lambda.py לעורך שתמצא את החצי השני של הדף. פונקציית ה- Lambda שלך מוכנה כעת:)
שלב 5: הגדר זרם נתונים של AWS Kinesis Firehose
- חזור עכשיו לדף הראשי של מסוף AWS, ושירותים עבור אל Kinesis
- עכשיו אתה בעמוד הראשי של קינסיס. מימין לדף, תחת 'זרמי משלוח של Kinesis Firehose', בחר 'צור זרם משלוחים חדש'
- ב'שם זרם משלוחים 'כתוב' זרם ניטור כבישים '. השאר את השדות האחרים כברירת מחדל ולחץ על הבא
- כעת תחת 'שנה רשומות מקור עם AWS Lambda' בחר מופעל, ובתור פונקציית Lambda לחץ על 'ניטור הכבישים-למבדה' החדש שנוצר. אל תדאג אם תופיע אזהרה לגבי פסק הזמן של הפונקציה, מכיוון שהפעולה שאנו מבצעים אינה יקרה מבחינה חישובית. השאר את השדות האחרים כברירת מחדל ולחץ על הבא
- כיעד בחר באמזון S3, וכיעד S3 בחר צור חדש. כשם הדלי הזן 'דלי ניטור כבישים' ואז לך. כעת השאר את שאר השדות כברירת מחדל ולחץ על הבא
- ייתכן שתרצה להגדיר את גודל המאגר ל- 1MB ואת מרווח המאגר ל -60 שניות. המאגר ישטף ל- S3 בכל פעם שאחד משני התנאים מתקיים. אל תעזוב את הדף, עיין בשלב הבא
שלב 6: הגדרת תפקיד IAM לקינסיס
כעת הגדרנו את הרשאות האבטחה עבור קינסיס, מכיוון שהוא חייב לקרוא לפונקציית למבדה לעיבוד מוקדם ואז היא תכתוב ב- S3
- בתחתית הדף שאתה נמצא ב'תפקיד IAM 'בחר' צור חדש לבחירה ', צור תפקיד IAM חדש כמו בתמונה ולחץ על אפשר
- כעת חזרת לדף הקודם, לחץ על הבא. כעת ייתכן שתרצה לבדוק שוב את כל הפרמטרים. בסיום לחץ על 'צור זרם משלוחים'
צינור קינסיס-למבדה-S3 פועל!
שלב 7: הגדרת AWS EC2
כעת נקים מופע EC2 עם כמה ממשקי API שיאפשרו לנו לדחוף ולמשוך נתונים מענן AWS וגם מהשרת היכן לארח את חזית היישומים שלנו. בסביבת הייצור, ייתכן שתרצה לפרסם API באמצעות שער ה- API של AWS הניתן להרחבה.
- מהעמוד הראשי של מסוף AWS, עבור אל שירות EC2
- לחץ על מופע הפעלה
- בשורת החיפוש העליונה הדבק את הקוד הזה: 'ami-08935252a36e25f85', זהו הקוד המזהה של המחשב הווירטואלי שהוגדר מראש לשימוש. לחץ על בחר מימין
- בחר t2.micro מהעמודה 'סוג' ולחץ על 'סקור והפעל'. אל תפעיל את המופע עדיין, עבור לשלב הבא
שלב 8: הגדר את תפקיד האבטחה של IAM עבור EC2
- לפני ההשקה אנו רוצים לשנות את קבוצת האבטחה של המופע שלנו. לשם כך, בפינה השמאלית הקיצונית של הקטע 'קבוצות אבטחה' לחץ על 'ערוך קבוצות אבטחה' הגדר קבוצת אבטחה חדשה כדלקמן. זה בעצם מגדיר את חומת האש של המופע שלך שחושף את יציאת 22 לחיבור SSH ויציאה 80 לשירותי
- לחץ שוב על 'סקור והפעל'. עכשיו בדוק שכל הפרמטרים מוגדרים. בסיום לחץ על הפעלה
- בלחיצה חלון חדש יופיע כדי להגדיר זוג מפתחות לחיבור ssh למופע. בחר 'צור זוג מפתחות חדש' וכשם הזן 'ec2-road-monitoring'. לחץ על הורד זוג מפתחות. חשוב ביותר שקובץ זה ילך לאיבוד או (גרוע מכך) יאוחסן בצורה לא מאובטחת: לא תוכל להוריד את המפתח שוב. לאחר הורדת מפתח.pem המופע מוכן להפעלה
שלב 9: גש למופע EC2 שלך
מופע ה- EC2 הטרי שלך נמצא בענן AWS. אתה יכול להתחבר אליו באמצעות קובץ המפתח שהורד לפני (להדרכה זו אנו מניחים שאתה יודע את היסודות של ssh). תוכל לאחזר את כתובת ה- IP של המופע על ידי בחירתו בלוח המחוונים בקטע 'תיאור' כדלקמן: תוכל להשתמש ב- IP הציבורי שלך או ב- DNS הציבורי שלך זהה. עם לקוח ssh הזן כעת את הפקודה:
ssh -i ec2-road-monitoring.pem ec2-user@YOUR-IP-ADDR-OR-DNS
כאשר ec2-road-monitoring.pem הוא המפתח שלך שנוצר בעבר.
כעת המשך למשוך את הקוד בצד השרת
git clone-recursive
שלב 10: אחזור API של מפות Google
כמעט סיימנו. כעת עלינו להגדיר את ממשק ה- API של google maps בדף ה- HTML שלנו על מנת להציג את המפה עם נקודות הציון בפני המשתמש:
- היכנס לחשבון Google שלך ועבור אל
- לחץ על 'התחל בעבודה' בצד שמאל של הדף
- בחר 'מפות' בתפריט ולאחר מכן לחץ על המשך
- כשם הפרויקט הזן 'ניטור כבישים' ולחץ על הבא
- הזן את פרטי החיוב שלך ולחץ על המשך
- כעת הפרויקט שלך מוכן ואנו מקבלים את מפתח ה- API על ידי לחיצה על APIs & Services -> אישורים
שלב 11: הפעל שרת
והנה זהו מפתח ה- API שלך. הדבר האחרון שעליך לעשות הוא להיכנס ל- data_visualization/anomalies_map.html ולהעתיק את המפתח שלך לסוף הקובץ כך, ולהחליף את 'YOUR-KEY-HERE'
עכשיו הכל מוכן ומוכן לדרך! כדי לגרום לו להתחיל לבצע במופע EC2: 'שרת נתוני cd' 'python flask_app.py'
הזן בדפדפן שלך את כתובת ה- ip או dns של מופע EC2 שלך, אתה אמור לראות את מפת החריגות עם כמה נתוני דמה
שלב 12: בצע שילוב HTTP ברשת Things
כעת, כאשר יש לנו את כל התשתית backend הפעלה אנו יכולים לעבד לביצוע שילוב
- צור יישום חדש ורשום את המכשיר שלך. אנו מניחים ידע בסיסי ב- TTN, אם לא עיין במדריך ההתחלה המהירה
- בתפריט היישומים שלך בחר 'אינטגרציות' ולאחר מכן 'הוסף אינטגרציה'
- בחר שילוב
- הזן את השדות העוקבים אחר התמונה והחלף ב- EC2 ip או ב- DNS הציבורי שלך
שלב 13: עיבוד נתונים
עבור כל זוג נתונים T שנאסף מהחיישן עליך לבצע את השלבים הבאים:
- קבל את קבוצת הזוגות שיש להן קואורדינטות GPS שנופלות באזור המקומי של T. האזור המקומי הוא כל החבטות שנמצאות 100 מטרים סביב T.
- עבור כל Tuple הקרוב N מחשב את הממוצע המרובע של ציר Z תאוצה ב- N ב- Pseudocode: mean = sum ([x. Z_accel ** 2 עבור x בקרוב]) / near.size
- חשב את סטיית התקן בריבוע. בפסאודוקוד: std = sum ([(x. Z_accel ** 2 - ממוצע) ** 2 עבור x בקרוב])
- פלט בפורמט זה: lat, long, Z_accel ** 2, ממוצע, std
כדי לחשב את האזור המקומי השתמש במרחק ה- GPS במטרים. ב- C ++:
#define D2R (M_PI / 180.0)
#define EARTH_RAY 6371 מרחק כפול (כפול lat1, כפול long1, כפול lat2, כפול long2) {double dlong = (long2 - long1) * D2R; dlat כפול = (lat2 - lat1) * D2R; כפול a = pow (sin (dlat/2.0), 2) + cos (lat1 * D2R) * cos (lat2 * D2R) * pow (sin (dlong/2.0), 2); כפול c = 2 * atan2 (sqrt (a), sqrt (1-a));
כעת, בעזרת נתוני הביניים שנוצרו בשלב הקודם, גלה את החריגות ועשה סיווג נאיבי באמצעות החיתוך המוחל על כל שורה:
קו = מפה (float, line.split (","))
v = קו [2] ממוצע = שורה [3] std = שורה [4] אם v (ממוצע + std*3): אם v (ממוצע + std*2): אם v (ממוצע + std): o.append ([1, שורה [0], שורה [1]) אחר: o.append ([2, שורה [0], שורה [1]) אחר: o.append ([3, שורה [0], שורה [1])
החריגות מסווגות לפי חוק 68–95–99.7
עכשיו יש לך אוסף עם פורמט זה [סוג, lat, ארוך].
משמעות הסוג היא כדלקמן:
- חריגה קלה, כנראה לא רלוונטית
- אנומליה בינונית
- אנומליה קריטית
שלב 14: ויזואליזציה
כדי להבין ואולי לשנות את חלק ההדמיה, עלינו ללמוד כיצד להשתמש בסמנים מותאמים אישית, תכונה של ממשק API של מפות Google
ראשית, יש להתחיל את המפה בחיוג חוזר:
function initMap () {
data = queryData (); מפה = חדש google.maps. Map (document.getElementById ('מפה'), {zoom: 15, מרכז: {lat: data [0] [1], lng: data [0] [2]}}); הֶעָרָה(); }
ציין את שם החזרה הזו בכתובת ה- URL (הכנסנו כאן לפני מפתח ה- API שלנו) בתג HTML:
script async defer src = "https://maps.googleapis.com/maps/api/js?key=[KEY]&callback=initMap"
ניתן להכניס סמן למפה בעת יצירת האובייקט:
חדש google.maps. Marker ({מיקום: {lat: LATITUDE, lng: LONGITUDE}, מפה: מפה, אייקון: "/path/to/icon.png"})
אתה יכול לראות בקוד שלכל נתונים במערך הנתונים של החריגות מוכנס סמן (ראו את הפונקציה הערה ()) והסמל מבוסס על מחלקת החריגות. כאשר מפעילים זאת בדפדפן נוכל לחקור מפה בה ניתן לסנן חריגות באמצעות תיבות סימון, כפי שניתן לראות בתמונה.
שלב 15: זיכויים וקישורים חיצוניים
פרויקט זה נערך על ידי ג'ובאני דה לוקה, אנדראה פיורלדי ופייטרו ספאדצ'ינו, שנה ראשונה לתואר שני בהנדסה במדעי המחשב באוניברסיטת סאפיינצה ברומא.
-
שקופיות בהן השתמשו המחברים כדי להציג הוכחת מושג זו:
www.slideshare.net/PietroSpadaccino/road-m…
-
GitHub מאוחסן מחדש עם כל הקוד:
github.com/roadteam
מוּמלָץ:
Ubidots + ESP32- ניטור מכונות חיזוי: 10 שלבים
Ubidots + ESP32- ניטור מכונות חיזוי: ניתוח חיזוי של רטט וטמפ 'במכונה על ידי יצירת אירועי דואר ותיעוד של רטט בגיליון Google באמצעות Ubidots
מערכת ניטור חזותי מבוסס LoRa לחקלאות Iot. עיצוב יישום חזית באמצעות Firebase & Angular: 10 שלבים
מערכת ניטור חזותי מבוסס LoRa לחקלאות Iot. עיצוב יישום חזית באמצעות Firebase & Angular: בפרק הקודם אנו מדברים על איך החיישנים עובדים עם מודול loRa לאכלס את מסד הנתונים של RealBase באש, וראינו את התרשים ברמה גבוהה מאוד כיצד כל הפרויקט שלנו עובד. בפרק זה נדבר על איך אנחנו יכולים
Arduino, ניטור פתיחת דלת באמצעות Gmail: 6 שלבים
Arduino, ניטור פתיחת דלת באמצעות Gmail: במדריך זה אני הולך להראות לך כיצד לזהות את אירוע פתיחת הדלת ולשלוח הודעה באמצעות Gmail באמצעות Arduino Uno. אם אתה מתחיל, תוכל ללמוד על wifi וחיישן. ב- Arduino - WiFi ו- Arduino - מדריכי חיישן דלתות. בואו
מבני כבישים קלים Semarang: 8 שלבים
מבני כבישים קלים Semarang: פרויקט בית ספר כפרויקט בית ספר לאוניברסיטת רוטרדם למדעים יישומיים היינו צריכים למצוא פתרון הן להעלאת מפלס המים והן לשקיעת הקרקע בסמרנג, אינדונזיה. המוצרים הבאים מיוצרים במהלך שלב זה
מארז כבישים זול: 8 שלבים
מארז כביש זול: הייתי צריך דרך להעביר את המגבר שלי מבלי שזה יתקלקל. התכוונתי להכין מתלה מגבר מעץ, לשים עליו שטיח וגלגלים … אבל זה לא באמת מה שרציתי. רציתי אחד מגניבי הרוטו המעוצבים שעולים 100 $+. לכן