Mundarija:

Yo'l monitoringi: 15 qadam
Yo'l monitoringi: 15 qadam

Video: Yo'l monitoringi: 15 qadam

Video: Yo'l monitoringi: 15 qadam
Video: Telefonning 15 ta siz bilmagan maxfiy kodlari/Телефоннинг сиз билмаган 15 та махфий кодлари 2024, Noyabr
Anonim
Yo'l monitoringi
Yo'l monitoringi

Bugun biz akselerometrlar, LoRaWAN, Amazon Web Services va Google Cloud API -ga asoslangan yo'l anomaliyalarini kuzatish tizimini qanday o'rnatganimizni ko'rsatamiz.

1 -qadam: talablar

  • DISCO-L072CZ-LRWAN1 kartasi
  • X-NUCLEO-IKS01A2 kengaytirish moduli (akselerometr uchun)
  • X-NUCLEO-GNSS1A1 (mahalliylashtirish uchun)
  • AWS hisobi
  • Google Cloud Platform hisob qaydnomasi

2 -qadam: Sensor dasturini yaratish va o'chirish

IKS01A2 va GNSS1A1 ni taxtaning yuqori qismiga GPIO pinlari orqali ulang. GitHub -dan dasturiy ta'minot kodini yuklab oling. ARM Mbed -da hisob qaydnomasini yarating (agar sizda hali bo'lmasa) va onlayn kompilyatordagi repo -dagi kodni import qiling. Maqsadli platformani DISCO-L072CZ-LRWAN1 ga o'rnating va loyihani saqlang. Endi Things Network -ga o'ting va agar sizda hisob qaydnomasi bo'lmasa. Ilova yarating, dastur ichida yangi qurilma yarating va ulanish rejimini OTAA ga o'rnating. Mbed_app.json faylidagi "lora.appskey", "lora.nwkskey", "lora.device-address" maydonlarini to'ldirish uchun mos parametrlarni oling.

Sensor vaqti -vaqti bilan akselerometr va GNSS ma'lumotlarini yozib oladi va ularni LoRa aloqasi orqali eng yaqin shlyuzga yuboradi, bu esa ularni Things Network -dagi ilovamizga yuboradi. Keyingi qadam - bulutli server va TTN -da HTTP -ni birlashtirish.

3 -qadam: Bulutni sozlash

Bulutni sozlash
Bulutni sozlash

Endi biz bulutli infratuzilmani o'rnatishga tayyormiz, u barcha joylashtirilgan taxtalardan ma'lumotlarni to'playdi va birlashtiradi. Ushbu infratuzilma quyidagi rasmda ko'rsatilgan va u quyidagilardan iborat.

  • Kinesis, kiruvchi ma'lumotlar oqimini boshqarish uchun;
  • Lambda, ma'lumotlarni saqlashdan oldin filtrlash va qayta ishlash;
  • S3, barcha ma'lumotlarni saqlash uchun;
  • EC2, ma'lumotlarni tahlil qilish va bizning old qismini joylashtirish.

4 -qadam: AWS Lambda -ni o'rnating

AWS Lambda -ni o'rnating
AWS Lambda -ni o'rnating

Biz Lambda -dan boshlab, ushbu infratuzilmani o'rnatish uchun zarur bo'lgan qadamlarni tasvirlab beramiz.

  1. AWS hisob qaydnomangiz bilan kiring va konsolning asosiy sahifasidan Lambda -ga o'ting
  2. Yaratish funktsiyasini bosing
  3. Sahifaning yuqori qismida Scratch -dan Muallif tanlanishi kerak. Keyin rasmdagi kabi boshqa maydonlarni to'ldiring va "Funktsiya yaratish" ni bosing
  4. AWS Lambda funktsiyasini yaratganingizdan so'ng, https://github.com/roadteam/data-server saytiga o'ting va aws_lambda.py faylining mazmunini sahifaning ikkinchi yarmida topilgan tahrirlovchiga ko'chiring. Sizning Lambda funktsiyasi hozir tayyor:)

5 -qadam: AWS Kinesis Firehose ma'lumotlar oqimini o'rnating

AWS Kinesis Firehose ma'lumotlar oqimini o'rnating
AWS Kinesis Firehose ma'lumotlar oqimini o'rnating
  1. Endi AWS konsolining asosiy sahifasiga qayting va Xizmatlarga Kinesis -ga o'ting
  2. Endi siz Kinesisning asosiy sahifasidasiz. Sahifaning o'ng tomonida, "Kinesis Firehose etkazib berish oqimlari" ostida "Yangi etkazib berish oqimini yaratish" -ni tanlang.
  3. "Etkazib berish oqimining nomi" ga "yo'lni kuzatish-oqim" deb yozing. Boshqa maydonlarni sukut bo'yicha qoldiring va keyingisini bosing
  4. Endi "AWS Lambda yordamida manba yozuvlarini o'zgartirish" bo'limida "Enabled" -ni tanlang va Lambda funktsiyasi sifatida yangi yaratilgan "road-monitoring-lambda" ni bosing. Vaqt tugashi haqida ogohlantirish paydo bo'lsa, xavotir olmang, chunki biz bajarayotgan operatsiya hisoblash uchun qimmat emas. Boshqa maydonlarni sukut bo'yicha qoldiring va keyingisini bosing
  5. Maqsad sifatida Amazon S3 -ni tanlang va S3 -manzil sifatida Yangi yaratish -ni tanlang. Paqir nomi bilan "yo'lni kuzatish-chelak" ni kiriting va keyin boring. Endi boshqa maydonlarni sukut bo'yicha qoldiring va Keyingiga bosing
  6. Siz bufer hajmini 1 MB va bufer oralig'ini 60 soniya qilib belgilashingiz mumkin. Ikkala shartdan biri bajarilganda, bufer S3 ga tushiriladi. Sahifani tark etmang, keyingi bosqichga qarang

6 -qadam: Kinesis uchun IAM rolini o'rnating

Kinesis uchun IAM rolini o'rnating
Kinesis uchun IAM rolini o'rnating

Endi biz Kinesis uchun xavfsizlik ruxsatnomalarini o'rnatdik, chunki u Lambda funktsiyasini qayta ishlash uchun chaqirishi kerak va u S3 da yoziladi.

  1. Sahifaning pastki qismida "IAM roli" bo'limida "Yangi tanlov yaratish" -ni tanlang, rasmdagi kabi yangi IAM rolini yarating va "Ruxsat berish" ni bosing.
  2. Endi siz oldingi sahifaga qaytdingiz, keyingisini bosing. Endi siz barcha parametrlarni qayta tekshirishingiz mumkin. Ish tugagach, "Yetkazib berish oqimini yaratish" tugmasini bosing.

Kinesis-Lambda-S3 quvuri ishga tushdi!

7 -qadam: AWS EC2 -ni o'rnating

AWS EC2 -ni o'rnating
AWS EC2 -ni o'rnating

Endi biz AWS bulutidan ma'lumotlarni, shuningdek bizning ilovamizning oldingi qismini joylashtiradigan serverdan ma'lumotlarni olib tashlashga imkon beradigan ba'zi API -lar bilan EC2 misolini o'rnatamiz. Ishlab chiqarish muhitida siz API -ni yanada kengaytiriladigan AWS API shlyuzi yordamida nashr qilishni xohlashingiz mumkin.

  1. AWS konsolining asosiy sahifasidan EC2 xizmatiga o'ting
  2. Instansni ishga tushirish -ni bosing
  3. Qidiruv satrining yuqori qismiga ushbu kodni joylashtiring: "ami-08935252a36e25f85", bu oldindan sozlangan virtual mashinaning identifikator kodi. O'ngdagi Tanlash -ni bosing
  4. "Type" ustunidan t2.micro -ni tanlang va "Ko'rib chiqish va ishga tushirish" tugmasini bosing. Namunani hali ishga tushirmang, keyingi bosqichga o'ting

8 -qadam: EC2 uchun IAM xavfsizlik rolini o'rnating

EC2 uchun IAM xavfsizlik rolini o'rnating
EC2 uchun IAM xavfsizlik rolini o'rnating
  1. Ishga tushirishdan oldin, biz namuna xavfsizlik guruhini o'zgartirmoqchimiz. Buning uchun "Xavfsizlik guruhlari" bo'limining o'ng burchagidagi "Xavfsizlik guruhlarini tahrirlash" tugmasini bosing Yangi xavfsizlik guruhini quyidagicha o'rnating. Bu, asosan, sizning SSH ulanish uchun 22 -port va http xizmatlari uchun 80 -portni ko'rsatadigan sizning xavfsizlik devorini sozlaydi
  2. Yana "Ko'rib chiqish va ishga tushirish" ni bosing. Endi barcha parametrlar o'rnatilganligini tekshiring. Ish tugagach, Ishga tushirish -ni bosing
  3. Tugmani bosganingizda, misolga ssh ulanish uchun kalit juftligini o'rnatish uchun yangi oyna ochiladi. "Yangi kalit juftligini yaratish" -ni tanlang va "ec2-road-monitoring" ni kiriting. Yuklab olish tugmachalarini bosing. Bu fayl yo'qolishi yoki (yomonroq) ishonchsiz saqlanishi juda muhim: siz kalitni boshqa yuklab ololmaysiz.. Pem kaliti yuklab olingandan so'ng, misol ishga tushirishga tayyor

9 -qadam: EC2 nusxasiga kiring

EC2 misolingizga kiring
EC2 misolingizga kiring

Sizning yangi EC2 misolingiz AWS bulutida. Siz unga ilgari yuklangan kalit fayl bilan ulanishingiz mumkin (bu darslik uchun siz ssh asoslarini bilasiz deb o'ylaymiz). Siz namunani IP -ni "Tavsif" bo'limidagi asboblar panelida quyidagi tarzda tanlab olishingiz mumkin: Siz ham umumiy IP -dan, ham umumiy DNS -dan foydalanishingiz mumkin, bu bir xil. Ssh mijozi bilan endi buyruqni kiriting:

ssh -i ec2-road-monitoring.pem ec2-user@SIZNING-IP-ADDR-OR-DNS

bu erda ec2-road-monitoring.pem-bu sizning kalitingiz.

Endi server tomonidagi kodni o'tishga o'ting

git klon-takroriy

10 -qadam: Google Maps API -ni oling

Google Maps API -ni oling
Google Maps API -ni oling

Biz deyarli tugatdik. Endi biz xaritani yo'l nuqtalari bilan xaritaga ko'rsatish uchun html sahifamizda Google Maps API -ni o'rnatishimiz kerak:

  1. Google hisobingizga kiring va https://cloud.google.com/maps-platform/ saytiga o'ting.
  2. Sahifaning chap tomonidagi "Ishga tushirish" ni bosing
  3. Menyudan "Xaritalar" -ni tanlang va keyin davom etish -ni bosing
  4. Loyihaning nomi sifatida "yo'lni kuzatish" ni kiriting va "Keyingi" ni bosing
  5. Hisob -kitob ma'lumotlarini kiriting va Davom etish -ni bosing
  6. Endi sizning loyihangiz tayyor va biz API kalitlari API va xizmatlar -> hisob ma'lumotlarini bosish orqali olamiz

11 -qadam: Serverni ishga tushiring

Serverni ishga tushirish
Serverni ishga tushirish

Va bu sizning API kalitingiz. Siz qilishingiz kerak bo'lgan oxirgi narsa-data_visualization/anomalies_map.html-ga o'ting va kalitni "SIZNING KEY-BU YERDA" o'rniga faylning oxirigacha nusxalash.

Endi hamma narsa tayyor va ketishga tayyor! Uni EC2 misolida bajarilishini boshlash uchun: 'cd data-server' 'python flask_app.py'

Brauzeringizga EC2 nusxangizning IP yoki DNS manzilini kiriting, siz anomaliyalar xaritasini ba'zi qo'pol ma'lumotlar bilan ko'rishingiz kerak.

12 -qadam: Things Network -da HTTP integratsiyasini bajaring

Things Network -da HTTP integratsiyasini bajaring
Things Network -da HTTP integratsiyasini bajaring

Endi bizda barcha infratuzilma mavjud va biz HTTP integratsiyasini amalga oshirishimiz mumkin.

  1. Yangi ilova yarating va qurilmangizni ro'yxatdan o'tkazing. Biz TTN haqida asosiy bilimlarga ega bo'lamiz, agar tez ishga tushirish qo'llanmasiga murojaat qilmasak
  2. Ilova menyusida "Integratsiyalarni", so'ng "integratsiyani qo'shishni" tanlang.
  3. HTTP integratsiyasini tanlang
  4. Rasmdan keyingi va EC2 ip yoki umumiy DNS bilan almashtirilgan maydonlarni kiriting

13 -qadam: ma'lumotlarni qayta ishlash

Sensordan yig'ilgan T ma'lumotlarining har bir to'plami uchun siz quyidagi amallarni bajarishingiz kerak:

  1. T mahalliy hududiga GPS koordinatalari tushgan guruhlar to'plamini oling. Mahalliy maydon - bu T atrofida 100 metrga yaqin bo'lgan barcha guruhlar.
  2. Har bir eng yaqin N to'plami uchun, N o'qidagi akselerometr Z o'qining kvadrat o'rtacha o'rtacha qiymatini hisoblang: psevdokodda: o'rtacha = yig'indisi
  3. Kvadrat standart og'ishni hisoblang. Psevdokodda: std = sum ([(x. Z_accel ** 2 - o'rtacha) ** 2 x yaqinida])
  4. Bu formatdagi chiqish: lat, long, Z_accel ** 2, mean, std

Mahalliy maydonni hisoblash uchun GPS masofasini metr bilan ishlating. C ++ da:

#D2R ni aniqlang (M_PI / 180.0)

#define EARTH_RAY 6371 ikki masofali (er -xotin lat1, er -xotin uzun1, er -xotin lat2, er -xotin uzun2) {dlong = (uzun2 - uzun1) * D2R; er -xotin dlat = (lat2 - lat1) * D2R; er -xotin a = pow (sin (dlat/2.0), 2) + cos (lat1 * D2R) * cos (lat2 * D2R) * pow (sin (dlong/2.0), 2); er-xotin c = 2 * atan2 (sqrt (a), sqrt (1-a));

Endi, oldingi bosqichda hosil qilingan oraliq ma'lumotlardan foydalanib, anomaliyalarni aniqlang va har bir satrga qo'llaniladigan sodda tasnifni bajaring:

chiziq = xarita (float, line.split (","))

v = chiziq [2] o'rtacha = chiziq [3] std = chiziq [4] agar v (o'rtacha + std*3): agar v (o'rtacha + std*2): agar v (o'rtacha + std) bo'lsa: o. qo'shish ([1, qator [0], satr [1]) boshqa: o.qo'shish ([2, satr [0], satr [1]) boshqa: o. qo'shish ([3, qator [0], qator [1])

Anomaliyalar https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80… 68-95-99.7 qoidalari bo'yicha tasniflanadi.

Endi sizda [type, lat, long] formatidagi to'plam mavjud.

Turning ma'nosi quyidagicha:

  1. Engil anomaliya, ehtimol ahamiyatsiz
  2. O'rtacha anomaliya
  3. Kritik anomaliya

14 -qadam: Vizualizatsiya

Vizualizatsiya
Vizualizatsiya

Vizualizatsiya qismini tushunish va o'zgartirish uchun biz Google Maps API xususiy markerlaridan foydalanishni o'rganishimiz kerak

Birinchidan, qayta qo'ng'iroq qilishda xaritani boshlash kerak:

initMap () {funktsiyasi

ma'lumotlar = queryData (); map = yangi google.maps. Map (document.getElementById ('xarita'), {zoom: 15, markaz: {lat: ma'lumotlar [0] [1], lng: ma'lumotlar [0] [2]}}); izoh (); }

URL manzilida ushbu qayta qo'ng'iroq nomini ko'rsating (biz API kalitidan oldin bu erga kiritganmiz) HTML tegida:

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

Ob'ekt yaratilganda markerni xaritaga kiritish mumkin:

yangi google.maps. Marker ({pozitsiya: {lat: LATITUDE, lng: LONGITUDE}, xarita: xarita, belgi: "/path/to/icon.png"})

Siz kodda ko'rishingiz mumkinki, anomaliyalar to'plamiga har bir ma'lumot uchun marker qo'yiladi (remark () funktsiyasiga qarang) va belgi anomaliya sinfiga asoslangan. Buni brauzerda ishga tushirganda, rasmda ko'rinib turganidek, katakchalar yordamida anomaliyalarni filtrlash mumkin bo'lgan xaritani o'rganishimiz mumkin.

15 -qadam: Kreditlar va tashqi havolalar

Ushbu loyiha Jovanni De Luka, Andrea Fioraldi va Pietro Spadaccino tomonidan Rim Sapienza universitetida kompyuter fanlari muhandisligi bo'yicha birinchi kurs talabalari tomonidan ishlab chiqilgan.

  • Mualliflar ushbu kontseptsiyani isbotlash uchun foydalangan slaydlar:

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

  • GitHub barcha kodli repo:

    github.com/roadteam

Tavsiya: