Mundarija:
- 1 -qadam: talablar
- 2 -qadam: Sensor dasturini yaratish va o'chirish
- 3 -qadam: Bulutni sozlash
- 4 -qadam: AWS Lambda -ni o'rnating
- 5 -qadam: AWS Kinesis Firehose ma'lumotlar oqimini o'rnating
- 6 -qadam: Kinesis uchun IAM rolini o'rnating
- 7 -qadam: AWS EC2 -ni o'rnating
- 8 -qadam: EC2 uchun IAM xavfsizlik rolini o'rnating
- 9 -qadam: EC2 nusxasiga kiring
- 10 -qadam: Google Maps API -ni oling
- 11 -qadam: Serverni ishga tushiring
- 12 -qadam: Things Network -da HTTP integratsiyasini bajaring
- 13 -qadam: ma'lumotlarni qayta ishlash
- 14 -qadam: Vizualizatsiya
- 15 -qadam: Kreditlar va tashqi havolalar
Video: Yo'l monitoringi: 15 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
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
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
Biz Lambda -dan boshlab, ushbu infratuzilmani o'rnatish uchun zarur bo'lgan qadamlarni tasvirlab beramiz.
- AWS hisob qaydnomangiz bilan kiring va konsolning asosiy sahifasidan Lambda -ga o'ting
- Yaratish funktsiyasini bosing
- Sahifaning yuqori qismida Scratch -dan Muallif tanlanishi kerak. Keyin rasmdagi kabi boshqa maydonlarni to'ldiring va "Funktsiya yaratish" ni bosing
- 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
- Endi AWS konsolining asosiy sahifasiga qayting va Xizmatlarga Kinesis -ga o'ting
- Endi siz Kinesisning asosiy sahifasidasiz. Sahifaning o'ng tomonida, "Kinesis Firehose etkazib berish oqimlari" ostida "Yangi etkazib berish oqimini yaratish" -ni tanlang.
- "Etkazib berish oqimining nomi" ga "yo'lni kuzatish-oqim" deb yozing. Boshqa maydonlarni sukut bo'yicha qoldiring va keyingisini bosing
- 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
- 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
- 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
Endi biz Kinesis uchun xavfsizlik ruxsatnomalarini o'rnatdik, chunki u Lambda funktsiyasini qayta ishlash uchun chaqirishi kerak va u S3 da yoziladi.
- Sahifaning pastki qismida "IAM roli" bo'limida "Yangi tanlov yaratish" -ni tanlang, rasmdagi kabi yangi IAM rolini yarating va "Ruxsat berish" ni bosing.
- 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
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.
- AWS konsolining asosiy sahifasidan EC2 xizmatiga o'ting
- Instansni ishga tushirish -ni bosing
- Qidiruv satrining yuqori qismiga ushbu kodni joylashtiring: "ami-08935252a36e25f85", bu oldindan sozlangan virtual mashinaning identifikator kodi. O'ngdagi Tanlash -ni bosing
- "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
- 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
- Yana "Ko'rib chiqish va ishga tushirish" ni bosing. Endi barcha parametrlar o'rnatilganligini tekshiring. Ish tugagach, Ishga tushirish -ni bosing
- 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
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
10 -qadam: 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:
- Google hisobingizga kiring va https://cloud.google.com/maps-platform/ saytiga o'ting.
- Sahifaning chap tomonidagi "Ishga tushirish" ni bosing
- Menyudan "Xaritalar" -ni tanlang va keyin davom etish -ni bosing
- Loyihaning nomi sifatida "yo'lni kuzatish" ni kiriting va "Keyingi" ni bosing
- Hisob -kitob ma'lumotlarini kiriting va Davom etish -ni bosing
- Endi sizning loyihangiz tayyor va biz API kalitlari API va xizmatlar -> hisob ma'lumotlarini bosish orqali olamiz
11 -qadam: Serverni ishga tushiring
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
Endi bizda barcha infratuzilma mavjud va biz HTTP integratsiyasini amalga oshirishimiz mumkin.
- 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
- Ilova menyusida "Integratsiyalarni", so'ng "integratsiyani qo'shishni" tanlang.
- HTTP integratsiyasini tanlang
- 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:
- T mahalliy hududiga GPS koordinatalari tushgan guruhlar to'plamini oling. Mahalliy maydon - bu T atrofida 100 metrga yaqin bo'lgan barcha guruhlar.
- 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
- Kvadrat standart og'ishni hisoblang. Psevdokodda: std = sum ([(x. Z_accel ** 2 - o'rtacha) ** 2 x yaqinida])
- 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:
- Engil anomaliya, ehtimol ahamiyatsiz
- O'rtacha anomaliya
- Kritik anomaliya
14 -qadam: 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:
NodeMCU yordamida aqlli tarqatilgan IoT ob -havo monitoringi tizimi: 11 qadam
NodeMCU yordamida aqlli tarqatilgan IoT ob -havo monitoringi tizimi: Siz hammangiz an'anaviy ob -havo stantsiyasidan xabardor bo'lishingiz mumkin; lekin u aslida qanday ishlashini hech o'ylab ko'rganmisiz? An'anaviy ob -havo stantsiyasi qimmat va katta hajmga ega bo'lganligi sababli, ushbu stantsiyalarning har bir birlik uchun zichligi juda past, bu esa
Ikki garaj eshigining monitoringi: 4 qadam
Ikkita garaj eshigining monitoringi: 2016 yilda biz yangi uyga ko'chib o'tdik, u erda garaj eshiklari siz ularni uyning asosiy kirish qismidan ko'ra olmaysiz. Shunday qilib, siz eshiklar yopiq yoki ochiq ekanligiga amin bo'lolmaysiz. Faqat kuzatuv uchun, sobiq egalar press -kalitni o'rnatdilar
IoT ob -havo stantsiyasi, VOC monitoringi bilan: 6 qadam
IoT ob-havo stantsiyasi VOClar monitoringi bilan: Bu ko'rsatmada men Internetdagi narsalar (IoT) ob-havo stantsiyasini qanday uchuvchi organik birikmalar (VOC) monitoringi bilan qurishni ko'rsataman. Ushbu loyiha uchun men o'z-o'zidan qilish (DIY) to'plamini ishlab chiqdim. Uskuna va dasturiy ta'minot ochiq manbali
NODE MCU VA BLYNK yordamida harorat va namlik monitoringi: 5 qadam
NODE MCU VA BLYNK yordamida harorat va namlik monitoringi: Salom bolalar, bu ko'rsatmada biz MCT va BLYNK tugunlari yordamida DHT11-harorat va namlik sensori yordamida atmosfera harorati va namligini qanday olishni bilib olamiz
Sigfox orqali elektr iste'moli va atrof -muhit monitoringi: 8 qadam
Sigfox orqali elektr energiyasi iste'moli va atrof-muhit monitoringi: Tavsif Ushbu loyiha sizga uch fazali quvvat taqsimoti bo'yicha xonaning elektr sarfini qanday olish va keyin uni har 10 daqiqada Sigfox tarmog'idan foydalangan holda serverga yuborish yo'llarini ko'rsatadi. Quvvatni qanday o'lchash mumkin? Bizda uchta oqim qisqichi bor