Բովանդակություն:

Roadանապարհների մոնիտորինգ. 15 քայլ
Roadանապարհների մոնիտորինգ. 15 քայլ

Video: Roadանապարհների մոնիտորինգ. 15 քայլ

Video: Roadանապարհների մոնիտորինգ. 15 քայլ
Video: HBO 4, ախտորոշում և ինքնուրույն ճշգրտում 2024, Հուլիսի
Anonim
Roadանապարհների մոնիտորինգ
Roadանապարհների մոնիտորինգ

Այսօր մենք ձեզ ցույց կտանք, թե ինչպես ենք մենք ստեղծում ճանապարհային անոմալիաների մոնիտորինգի համակարգ ՝ արագացուցիչների, 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 և պահպանեք նախագիծը: Այժմ գնացեք դեպի The Things Network և ստեղծեք հաշիվ, եթե այն արդեն չունեք: Ստեղծեք ծրագիր, ստեղծեք նոր սարք հավելվածի ներսում և միացրեք ռեժիմը 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. Այժմ, երբ ստեղծել եք AWS Lambda գործառույթը, գնացեք 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- ի գլխավոր էջում: Էջի աջ կողմում ՝ «Kinesis Firehose առաքման հոսքեր» բաժնում, ընտրեք «Ստեղծել առաքման նոր հոսք»
  3. «Առաքման հոսքի անուն» -ում գրեք «ճանապարհի մոնիտորինգ-հոսք»: Մնացած դաշտերը թողեք կանխադրված և կտտացրեք հաջորդը
  4. Այժմ «Փոխակերպեք աղբյուրի գրառումները AWS Lambda- ի հետ» բաժնում ընտրեք Enabled, և որպես Lambda գործառույթ ՝ կտտացրեք նոր ստեղծված «road-monitoring-lambda»-ին: Մի անհանգստացեք, եթե ֆունկցիայի ընդմիջման մասին նախազգուշացում հայտնվի, քանի որ այն գործողությունը, որը մենք անում ենք, հաշվիչորեն թանկ չէ: Մնացած դաշտերը թողեք կանխադրված և կտտացրեք հաջորդը
  5. Որպես նպատակակետ ընտրեք Amazon S3, և որպես S3 նպատակակետ ընտրեք Ստեղծել նոր: Քանի որ դույլի անունը մուտքագրեք «ճանապարհի մոնիտորինգ-դույլ», ապա գնացեք: Այժմ մնացած դաշտերը թողեք կանխադրված և կտտացրեք Հաջորդ
  6. Կարող եք սահմանել բուֆերի չափը 1 ՄԲ, իսկ բուֆերային միջակայքը `60 վայրկյան: Բուֆերը կլցվի S3- ի վրա, երբ երկու պայմաններից մեկը բավարարվի: Մի լքեք էջը, տես հաջորդ քայլը

Քայլ 6. Ստեղծեք IAM- ի դերը Kinesis- ի համար

Ստեղծեք IAM- ի դերը Kinesis- ի համար
Ստեղծեք IAM- ի դերը Kinesis- ի համար

Այժմ մենք ստեղծում ենք անվտանգության թույլտվություններ Kinesis- ի համար, քանի որ այն պետք է կանչի Lambda գործառույթը նախամշակման համար, այնուհետև այն կգրվի S3- ում

  1. Էջի ներքևում, որտեղ դուք գտնվում եք «IAM դերում», ընտրեք «Ստեղծել նոր ընտրյալ», ստեղծեք նոր IAM դեր ՝ ինչպես նկարում և կտտացրեք Թույլատրել
  2. Այժմ դուք վերադարձել եք նախորդ էջին, կտտացրեք հաջորդը: Այժմ գուցե ցանկանաք կրկնակի ստուգել բոլոր պարամետրերը: Ավարտելուց հետո կտտացրեք «Ստեղծեք առաքման հոսք»

Kinesis-Lambda-S3 խողովակաշարը գործարկվում է:

Քայլ 7: Կարգավորեք AWS EC2- ը

Կարգավորել AWS EC2- ը
Կարգավորել AWS EC2- ը

Այժմ մենք կստեղծենք EC2 օրինակ ՝ որոշ API- ներով, որոնք թույլ կտան մեզ մղել և քաշել տվյալները AWS ամպից, ինչպես նաև այն սերվերից, որտեղ պետք է տեղակայվի մեր դիմումը: Արտադրական միջավայրում գուցե ցանկանաք հրապարակել API- ն ՝ օգտագործելով ավելի լայնածավալ AWS API Gateway- ը:

  1. AWS վահանակի հիմնական էջից անցեք EC2 ծառայություն
  2. Կտտացրեք Գործարկման գործարկմանը
  3. Վերին որոնման տողում տեղադրեք այս ծածկագիրը ՝ «ami-08935252a36e25f85», այսինքն ՝ նախապես կազմաձևված վիրտուալ մեքենայի նույնականացման կոդը: Կտտացրեք Ընտրել աջ կողմում
  4. Ընտրեք t2.micro «Տեսակ» սյունակից և կտտացրեք «Վերանայել և գործարկել»: Դեռ մի գործարկեք օրինակը, անցեք հաջորդ քայլին

Քայլ 8. Ստեղծեք IAM անվտանգության դերը EC2- ի համար

Ստեղծեք IAM անվտանգության դերը EC2- ի համար
Ստեղծեք IAM անվտանգության դերը EC2- ի համար
  1. Գործարկելուց առաջ մենք ցանկանում ենք փոփոխել մեր օրինակի անվտանգության խումբը: Դա անելու համար «Անվտանգության խմբեր» բաժնի ծայրամասային աջ մասում կտտացրեք «Խմբագրել անվտանգության խմբերը» Ստեղծեք անվտանգության նոր խումբ հետևյալ կերպ. Սա հիմնականում կազմաձևում է ձեր օրինակի firewall- ը ՝ բացահայտելով 22 -րդ նավահանգիստը SSH միացման համար և 80 -րդ նավահանգիստը ՝ http ծառայությունների համար
  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-ռեկուրսիվ

Քայլ 10: Առբերեք Google Քարտեզների API- ն

Առբերեք Google Քարտեզների API- ն
Առբերեք Google Քարտեզների API- ն

Գրեթե ավարտված ենք: Այժմ մենք պետք է google maps API- ն ստեղծենք մեր html էջում, որպեսզի օգտագործողին ցուցադրենք քարտեզը ճանապարհային կետերով.

  1. Մուտք գործեք ձեր Google հաշիվ և գնացեք
  2. Կտտացրեք «Սկսել» էջի ձախ մասում
  3. Ընտրացանկում ընտրեք «Քարտեզներ» և կտտացրեք շարունակել
  4. Որպես ծրագրի անուն մուտքագրեք «ճանապարհի մոնիտորինգ» և կտտացրեք Հաջորդ
  5. Մուտքագրեք ձեր վճարման տվյալները և կտտացրեք Շարունակել
  6. Այժմ ձեր նախագիծը պատրաստ է, և մենք պատրաստվում ենք ստանալ API բանալին ՝ կտտացնելով դեպի API և ծառայություններ -> հավատարմագրեր

Քայլ 11: Գործարկել սերվերը

Գործարկել սերվերը
Գործարկել սերվերը

Եվ ահա այն ձեր API բանալին է: Վերջին բանը, որ դուք պետք է անեք, գնալ data_visualization/anomalies_map.html և պատճենել ձեր բանալին ֆայլի վերջում, այսպես փոխարինելով «YOUR-KEY-HERE»-ը:

Այժմ ամեն ինչ պատրաստ է և պատրաստ է գնալ: Որպեսզի այն սկսի գործել EC2 օրինակով ՝ «cd data-server» «python flask_app.py»

Մուտքագրեք ձեր զննարկիչում ձեր EC2 օրինակի ip կամ dns հասցեն, դուք պետք է տեսնեք անոմալիաների քարտեզը ՝ որոշ կեղծ տվյալներով

Քայլ 12: Կատարեք HTTP ինտեգրում Things Network- ում

Կատարեք HTTP ինտեգրում Things Network- ում
Կատարեք HTTP ինտեգրում Things Network- ում

Այժմ, երբ մենք ունենք բոլոր ենթակառուցվածքները գործարկված, մենք կարող ենք մշակել HTTP ինտեգրումը կատարելու համար:

  1. Ստեղծեք նոր ծրագիր և գրանցեք ձեր սարքը: Մենք ենթադրում ենք TTN- ի հիմնական գիտելիքներ, եթե ոչ ՝ հղում կատարեք արագ մեկնարկի ուղեցույցին
  2. Ձեր դիմումի ընտրացանկում ընտրեք «Ինտեգրումներ», այնուհետև «ավելացնել ինտեգրացիա»
  3. Ընտրեք HTTP ինտեգրում
  4. Մուտքագրեք պատկերին հաջորդող դաշտերը և դրանք փոխարինեք ձեր EC2 ip- ով կամ հանրային DNS- ով

Քայլ 13: Տվյալների մշակում

Սենսորից հավաքված T տվյալների յուրաքանչյուր փնջի համար դուք պետք է կատարեք հետևյալ քայլերը.

  1. Ձեռք բերեք այն զույգերի հավաքածուն, որոնք ունեն GPS կոորդինատներ, որոնք ընկնում են Տ – ի տարածքում: Տեղական տարածքը բոլոր այն եռյակներն են, որոնք գտնվում են Թ.
  2. N- ի յուրաքանչյուր մոտակա զույգի համար հաշվարկել N.- ում արագացուցիչի Z- առանցքի քառակուսու միջին արժեքը կեղծ կոդով. Միջին = գումար ([x. Z_accel ** 2 x մոտակայքում]) / մոտ.չափ
  3. Հաշվիր քառակուսի ստանդարտ շեղումը: Կեղծ կոդով ՝ std = գումար ([(x. Z_accel ** 2 - միջին) ** 2 x մոտակայքում])
  4. Ելք այս ձևաչափով ՝ լատ, երկար, Z_accel ** 2, միջին, միջին

Տեղական տարածքը հաշվարկելու համար օգտագործեք GPS հեռավորությունը մետրերով: C ++ - ում.

#սահմանի D2R (M_PI / 180.0)

#սահմանել EARTH_RAY 6371 երկակի հեռավորություն (կրկնակի lat1, կրկնակի երկար 1, կրկնակի lat2, կրկնակի երկար 2) {կրկնակի երկար = (երկար 2 - երկար 1) * 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));

Այժմ, օգտագործելով նախորդ քայլում առաջացած միջանկյալ տվյալները, հայտնաբերեք անոմալիաները և միամիտ դասակարգում կատարեք ՝ օգտագործելով յուրաքանչյուր հատվածի վրա կիրառվող այս հատվածը:

line = քարտեզ (float, line.split (","))

v = տող [2] միջին = տող [3] std = տող [4] եթե v (միջին + std*3). եթե v (միջին + std*2). եթե v (միջին + std): [1, տող [0], տող [1]) այլ ՝ o.append ([2, տող [0], տող [1]) այլ ՝ o.append ([3, տող [0], տող [1])

Անոմալիաները դասակարգվում են ՝ օգտագործելով 68–95–99.7 կանոնը ՝

Այժմ դուք ունեք այս ձևաչափով հավաքածու [տեսակ, լատ, երկար]:

Տիպի իմաստը հետևյալն է.

  1. Թեթև անոմալիա, հավանաբար անկապ
  2. Միջին անոմալիա
  3. Կրիտիկական անոմալիա

Քայլ 14: Պատկերացում

Տեսողականացում
Տեսողականացում

Տեսողականացման հատվածը հասկանալու և գուցե փոխելու համար մենք պետք է սովորենք, թե ինչպես օգտագործել հատուկ մարկերներ ՝ Google Քարտեզների API- ի հատկություն

Նախ, քարտեզը պետք է նախաստորագրվի հետադարձ կապի մեջ.

գործառույթը initMap () {

տվյալներ = queryData (); քարտեզ = նոր google.maps. Map (document.getElementById («քարտեզ»), {խոշորացում ՝ 15, կենտրոն ՝ {lat: data [0] [1], lng: տվյալներ [0] [2]}}); դիտողություն (); }

Նշեք այս հետադարձ կապի անունը url- ում (մենք այստեղ տեղադրել ենք մեր API ստեղնից առաջ) HTML պիտակի մեջ.

script async defer src = "https://maps.googleapis.com/maps/api/js?key= [KEY]&callback=initMap"

Մարկեր կարող է տեղադրվել քարտեզի վրա, երբ օբյեկտը ստեղծվում է.

նոր google.maps. Marker ({դիրք ՝ {լատ. LATITUDE, lng: LONGITUDE}, քարտեզ ՝ քարտեզ, պատկերակ ՝ «/path/to/icon.png»})

Կոդում կարող եք տեսնել, որ անոմալիաների տվյալների հավաքածուի յուրաքանչյուր տվյալների համար նշիչ է տեղադրված (տես դիտողություն () գործառույթը), իսկ պատկերակը հիմնված է անոմալիայի դասի վրա: Thisննարկչին սա գործարկելիս մենք կարող ենք ուսումնասիրել մի քարտեզ, որտեղ անոմալիաները կարող են զտվել ՝ օգտագործելով նշման տուփեր, ինչպես երևում է նկարում:

Քայլ 15: Վարկեր և արտաքին հղումներ

Այս նախագիծը կազմել են ovanովաննի Դե Լուկան, Անդրեա Ֆիորալդին և Պիետրո Սպադաչինոն, Հռոմի Սապիենցա համալսարանի համակարգչային գիտության ճարտարագիտության մագիստրոսի առաջին կուրս:

  • Սահիկներ, որոնք հեղինակները օգտագործել են հայեցակարգի այս ապացույցը ներկայացնելու համար.

    www.slideshare.net/PietroSpadaccino/road-m…

  • GitHub- ը պահում է ամբողջ ծածկագիրը.

    github.com/roadteam

Խորհուրդ ենք տալիս: