תוכן עניינים:

ניטור כבישים: 15 שלבים
ניטור כבישים: 15 שלבים

וִידֵאוֹ: ניטור כבישים: 15 שלבים

וִידֵאוֹ: ניטור כבישים: 15 שלבים
וִידֵאוֹ: ילד בן 11 גנב, שבר חלון ושילם על כך ביוקר! 2024, נוֹבֶמבֶּר
Anonim
ניטור כבישים
ניטור כבישים

היום נראה לך כיצד הקמנו מערכת ניטור חריגות בכבישים המבוססת על מדי תאוצה, 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 Lambda

נדגים את השלבים הדרושים להקמת תשתית זו, החל בלמבדה.

  1. היכנס באמצעות חשבון AWS שלך, ומהדף הראשי של הקונסולה ועבור למבדה
  2. לחץ על צור פונקציה
  3. בחלק העליון של הדף יש לבחור באפשרות מחבר מגרד. לאחר מכן השלם את השדות האחרים כמו בתמונה ולאחר מכן לחץ על צור פונקציה
  4. כעת, לאחר שיצרת פונקציית Lambda של AWS, עבור אל https://github.com/roadteam/data-server והעתק את תוכן הקובץ aws_lambda.py לעורך שתמצא את החצי השני של הדף. פונקציית ה- Lambda שלך מוכנה כעת:)

שלב 5: הגדר זרם נתונים של AWS Kinesis Firehose

הגדר זרם נתונים של AWS Kinesis Firehose
הגדר זרם נתונים של AWS Kinesis Firehose
  1. חזור עכשיו לדף הראשי של מסוף AWS, ושירותים עבור אל Kinesis
  2. עכשיו אתה בעמוד הראשי של קינסיס. מימין לדף, תחת 'זרמי משלוח של Kinesis Firehose', בחר 'צור זרם משלוחים חדש'
  3. ב'שם זרם משלוחים 'כתוב' זרם ניטור כבישים '. השאר את השדות האחרים כברירת מחדל ולחץ על הבא
  4. כעת תחת 'שנה רשומות מקור עם AWS Lambda' בחר מופעל, ובתור פונקציית Lambda לחץ על 'ניטור הכבישים-למבדה' החדש שנוצר. אל תדאג אם תופיע אזהרה לגבי פסק הזמן של הפונקציה, מכיוון שהפעולה שאנו מבצעים אינה יקרה מבחינה חישובית. השאר את השדות האחרים כברירת מחדל ולחץ על הבא
  5. כיעד בחר באמזון S3, וכיעד S3 בחר צור חדש. כשם הדלי הזן 'דלי ניטור כבישים' ואז לך. כעת השאר את שאר השדות כברירת מחדל ולחץ על הבא
  6. ייתכן שתרצה להגדיר את גודל המאגר ל- 1MB ואת מרווח המאגר ל -60 שניות. המאגר ישטף ל- S3 בכל פעם שאחד משני התנאים מתקיים. אל תעזוב את הדף, עיין בשלב הבא

שלב 6: הגדרת תפקיד IAM לקינסיס

הגדרת תפקיד IAM לקינסיס
הגדרת תפקיד IAM לקינסיס

כעת הגדרנו את הרשאות האבטחה עבור קינסיס, מכיוון שהוא חייב לקרוא לפונקציית למבדה לעיבוד מוקדם ואז היא תכתוב ב- S3

  1. בתחתית הדף שאתה נמצא ב'תפקיד IAM 'בחר' צור חדש לבחירה ', צור תפקיד IAM חדש כמו בתמונה ולחץ על אפשר
  2. כעת חזרת לדף הקודם, לחץ על הבא. כעת ייתכן שתרצה לבדוק שוב את כל הפרמטרים. בסיום לחץ על 'צור זרם משלוחים'

צינור קינסיס-למבדה-S3 פועל!

שלב 7: הגדרת AWS EC2

הגדר AWS EC2
הגדר AWS EC2

כעת נקים מופע EC2 עם כמה ממשקי API שיאפשרו לנו לדחוף ולמשוך נתונים מענן AWS וגם מהשרת היכן לארח את חזית היישומים שלנו. בסביבת הייצור, ייתכן שתרצה לפרסם API באמצעות שער ה- API של AWS הניתן להרחבה.

  1. מהעמוד הראשי של מסוף AWS, עבור אל שירות EC2
  2. לחץ על מופע הפעלה
  3. בשורת החיפוש העליונה הדבק את הקוד הזה: 'ami-08935252a36e25f85', זהו הקוד המזהה של המחשב הווירטואלי שהוגדר מראש לשימוש. לחץ על בחר מימין
  4. בחר t2.micro מהעמודה 'סוג' ולחץ על 'סקור והפעל'. אל תפעיל את המופע עדיין, עבור לשלב הבא

שלב 8: הגדר את תפקיד האבטחה של IAM עבור EC2

הגדר את תפקיד האבטחה של IAM עבור EC2
הגדר את תפקיד האבטחה של IAM עבור EC2
  1. לפני ההשקה אנו רוצים לשנות את קבוצת האבטחה של המופע שלנו. לשם כך, בפינה השמאלית הקיצונית של הקטע 'קבוצות אבטחה' לחץ על 'ערוך קבוצות אבטחה' הגדר קבוצת אבטחה חדשה כדלקמן. זה בעצם מגדיר את חומת האש של המופע שלך שחושף את יציאת 22 לחיבור SSH ויציאה 80 לשירותי
  2. לחץ שוב על 'סקור והפעל'. עכשיו בדוק שכל הפרמטרים מוגדרים. בסיום לחץ על הפעלה
  3. בלחיצה חלון חדש יופיע כדי להגדיר זוג מפתחות לחיבור ssh למופע. בחר 'צור זוג מפתחות חדש' וכשם הזן 'ec2-road-monitoring'. לחץ על הורד זוג מפתחות. חשוב ביותר שקובץ זה ילך לאיבוד או (גרוע מכך) יאוחסן בצורה לא מאובטחת: לא תוכל להוריד את המפתח שוב. לאחר הורדת מפתח.pem המופע מוכן להפעלה

שלב 9: גש למופע EC2 שלך

גש למופע EC2 שלך
גש למופע 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
אחזור API של מפות Google

כמעט סיימנו. כעת עלינו להגדיר את ממשק ה- API של google maps בדף ה- HTML שלנו על מנת להציג את המפה עם נקודות הציון בפני המשתמש:

  1. היכנס לחשבון Google שלך ועבור אל
  2. לחץ על 'התחל בעבודה' בצד שמאל של הדף
  3. בחר 'מפות' בתפריט ולאחר מכן לחץ על המשך
  4. כשם הפרויקט הזן 'ניטור כבישים' ולחץ על הבא
  5. הזן את פרטי החיוב שלך ולחץ על המשך
  6. כעת הפרויקט שלך מוכן ואנו מקבלים את מפתח ה- 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

בצע שילוב HTTP ברשת הדברים
בצע שילוב HTTP ברשת הדברים

כעת, כאשר יש לנו את כל התשתית backend הפעלה אנו יכולים לעבד לביצוע שילוב

  1. צור יישום חדש ורשום את המכשיר שלך. אנו מניחים ידע בסיסי ב- TTN, אם לא עיין במדריך ההתחלה המהירה
  2. בתפריט היישומים שלך בחר 'אינטגרציות' ולאחר מכן 'הוסף אינטגרציה'
  3. בחר שילוב
  4. הזן את השדות העוקבים אחר התמונה והחלף ב- EC2 ip או ב- DNS הציבורי שלך

שלב 13: עיבוד נתונים

עבור כל זוג נתונים T שנאסף מהחיישן עליך לבצע את השלבים הבאים:

  1. קבל את קבוצת הזוגות שיש להן קואורדינטות GPS שנופלות באזור המקומי של T. האזור המקומי הוא כל החבטות שנמצאות 100 מטרים סביב T.
  2. עבור כל Tuple הקרוב N מחשב את הממוצע המרובע של ציר Z תאוצה ב- N ב- Pseudocode: mean = sum ([x. Z_accel ** 2 עבור x בקרוב]) / near.size
  3. חשב את סטיית התקן בריבוע. בפסאודוקוד: std = sum ([(x. Z_accel ** 2 - ממוצע) ** 2 עבור x בקרוב])
  4. פלט בפורמט זה: 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, ארוך].

משמעות הסוג היא כדלקמן:

  1. חריגה קלה, כנראה לא רלוונטית
  2. אנומליה בינונית
  3. אנומליה קריטית

שלב 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

מוּמלָץ: