Мазмуну:

Жол мониторинги: 15 кадам
Жол мониторинги: 15 кадам

Video: Жол мониторинги: 15 кадам

Video: Жол мониторинги: 15 кадам
Video: Тотомидин & Сурма - Ошко / Хит 2017 2024, Июль
Anonim
Жол мониторинги
Жол мониторинги

Бүгүн биз акселерометрлерге, LoRaWANга, Amazon Web Servicesке жана Google Cloud APIге негизделген жол аномалияларына мониторинг системасын кантип орнотконубузду көрсөтөбүз.

1 -кадам: талаптар

  • DISCO-L072CZ-LRWAN1 тактасы
  • X-NUCLEO-IKS01A2 кеңейтүү модулу (accellerometer үчүн)
  • X-NUCLEO-GNSS1A1 (локалдаштыруу үчүн)
  • AWS эсеби
  • Google Cloud Platform аккаунту

2 -кадам: Сенсордун жабдыктарын орнотуу жана жаркыроо

IKS01A2 жана GNSS1A1ди тактанын үстүнө GPIO казыктары аркылуу туташтырыңыз. GitHubдан жабдыктын кодун жүктөп алыңыз. ARM Mbedде каттоо эсебин түзүңүз (эгерде сизде жок болсо) жана онлайн компилятордогу реподогу кодду импорттоңуз. Максаттуу платформаны DISCO-L072CZ-LRWAN1 деп коюп, долбоорду сактап коюңуз. Эми Things Network бөлүмүнө баш багыңыз жана эгерде ал жок болсо, каттоо эсебин түзүңүз. Колдонмо түзүңүз, колдонмонун ичинде жаңы түзмөк түзүңүз жана байланыш режимин OTAAга коюңуз. Mbed_app.json файлындагы төмөнкү талааларды толтуруу үчүн тиешелүү параметрлерди алыңыз: "lora.appskey", "lora.nwkskey", "lora.device-address".

Сенсор мезгил -мезгили менен акселерометрди жана GNSS маалыматын жаздырат жана аларды LoRa туташуусу аркылуу жакынкы шлюзга жөнөтөт, ал аларды Things Network боюнча биздин колдонууга жөнөтөт. Кийинки кадам булут серверин жана TTNде HTTP интеграциясын орнотуу.

3 -кадам: Булутту орнотуу

Булутту орнотуу
Булутту орнотуу

Эми биз булут инфраструктурасын орнотууга даярбыз, ал бардык жайгаштырылган такталардагы маалыматтарды чогултуп, бириктирет. Бул инфраструктура төмөнкү сүрөттө көрсөтүлгөн жана ал төмөнкүлөрдөн турат:

  • Кинис, келген маалымат агымын башкаруу үчүн;
  • Lambda, маалыматтарды сактоодон мурун чыпкалоо жана алдын ала иштетүү;
  • S3, бардык маалыматтарды сактоо үчүн;
  • EC2, маалыматтарды талдоо жана биздин алдыңкы чекитти жайгаштыруу.

4 -кадам: AWS Lambda орнотуу

AWS Lambda орнотуу
AWS Lambda орнотуу

Биз Lambdaдан баштап, бул инфраструктураны орнотуу үчүн зарыл болгон кадамдарды көрсөтөбүз.

  1. AWS эсебиңиз менен кирип, консолдун башкы барагынан Ламбдага өтүңүз
  2. Функцияны түзүү дегенди басыңыз
  3. Барактын жогорку бөлүгүндө Авторду Scratchтан тандоо керек. Андан кийин сүрөттөгүдөй башка талааларды толтуруп, андан кийин Функцияны түзүү дегенди басыңыз
  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 менен булак жазууларын трансформациялоо" бөлүмүнүн астында Иштетилгенди тандаңыз жана Lambda функциясы катары жаңы түзүлгөн "жол-мониторинг-ламбда" чыкылдатыңыз. Функциянын күтүү убактысы жөнүндө эскертүү чыкса, кабатыр болбоңуз, анткени биз жасап жаткан операция эсептөө үчүн кымбат эмес. Башка талааларды демейки абалына калтырып, Кийинкисин басыңыз
  5. Көздөгөн жериңиз катары Amazon S3 тандаңыз, ал эми S3 көздөгөнү катары Жаңы жаратууну тандаңыз. Челектин аталышы катары 'road-monitoring-bucket' кирип, анан кетиңиз. Эми башка талааларды демейки абалына калтырып, Кийинкини басыңыз
  6. Сиз Буфердин өлчөмүн 1МБга жана Буфер аралыгын 60 секундга коюңуз. Буфер эки шарттын бири канааттандырылганда S3кө чайкалат. Барактан чыкпаңыз, кийинки кадамды караңыз

6 -кадам: Kinesis үчүн IAM ролун орнотуу

Kinesis үчүн IAM ролун орнотуңуз
Kinesis үчүн IAM ролун орнотуңуз

Эми биз Kinesis үчүн коопсуздук уруксаттарын орноттук, анткени ал Lambda функциясын алдын ала иштетүү үчүн чакырышы керек, андан кийин ал S3кө жазылат.

  1. Сиз "IAM ролунда" болгон беттин ылдый жагында "Жаңы тандоо" тандап, сүрөттөгүдөй жаңы IAM ролун түзүңүз жана "Уруксат берүү" баскычын чыкылдатыңыз.
  2. Эми сиз мурунку бетке кайтып келдиңиз, кийинки баскычты басыңыз. Эми сиз бардык параметрлерди кайра текшерип көрүшүңүз мүмкүн. Бүткөндөн кийин "Жеткирүү агымын түзүү" баскычын чыкылдатыңыз.

Kinesis-Lambda-S3 трубасы ишке киришти!

7 -кадам: AWS EC2 орнотуу

AWS EC2 орнотуу
AWS EC2 орнотуу

Эми биз AWS булутунан, ошондой эле биздин колдонмонун алдыңкы бөлүгүн жайгаштыра турган серверден маалыматтарды алууга жана алууга мүмкүндүк бере турган кээ бир APIлер менен EC2 экземплярын орнотобуз. Өндүрүш чөйрөсүндө сиз көбүрөөк масштабдуу AWS API Gatewayди колдонуп API жарыялоону каалашыңыз мүмкүн.

  1. AWS консолунун башкы барагынан EC2 кызматына өтүңүз
  2. Launch Instance чыкылдатыңыз
  3. Жогорку издөө тилкесине бул кодду чаптаңыз: 'ami-08935252a36e25f85', бул алдын ала конфигурацияланган виртуалдык машинанын идентификациялык коду. Оң жактагы Тандоо дегенди басыңыз
  4. "Type" тилкесинен t2.micro тандап, "Review and launch" чыкылдатыңыз. Мисалды азырынча ишке киргизбеңиз, кийинки кадамга өтүңүз

8 -кадам: EC2 үчүн IAM коопсуздук ролун орнотуңуз

EC2 үчүн IAM коопсуздук ролун орнотуңуз
EC2 үчүн IAM коопсуздук ролун орнотуңуз
  1. Ишке киргизүүдөн мурун, мисалыбыздын коопсуздук тобун өзгөрткүбүз келет. Бул үчүн, "Коопсуздук топтору" бөлүмүнүн эң оң жагында "Коопсуздук топторун түзөтүү" баскычын чыкылдатыңыз Жаңы коопсуздук тобун төмөнкүдөй орнотуңуз. Бул негизинен SSH туташуусу үчүн 22 портун жана http кызматтары үчүн 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-рекурсивдүү

10 -кадам: Google Карталар API'син алуу

Google Карталар API'син алуу
Google Карталар API'син алуу

Биз дээрлик бүттүк. Эми биз html баракчабызда google maps API орнотушубуз керек, колдонуучуга жол белгилери бар картаны көрсөтүү үчүн:

  1. Google каттоо эсебиңизге кириңиз жана https://cloud.google.com/maps-platform/ дарегине өтүңүз
  2. Барактын сол жагындагы "Баштоо" үчүн чыкылдатыңыз
  3. Менюдан "Карталарды" тандап, анан улантууну басыңыз
  4. Долбоордун аталышы катары "жол мониторингин" киргизип, Кийинкини басыңыз
  5. Эсеп -кысап маалыматыңызды киргизип, Улантууну басыңыз
  6. Эми сиздин проектиңиз даяр жана биз API ачкычын APIs & Services -> Credentials баскычын чыкылдатуу менен алабыз

11 -кадам: Серверди ишке киргизиңиз

Серверди ишке киргизүү
Серверди ишке киргизүү

Жана ал жерде сиздин API ачкычы. Акыркы кылышыңыз керек болгон нерсе data_visualization/anomalies_map.html жана ачкычыңызды файлдын аягына чейин "СЕНИН АЧКЫН-БУЛ ЖЕРДЕ" алмаштыруу

Азыр баары даяр жана кетүүгө даяр! Аны EC2 мисалында аткарууну баштоо үчүн: 'cd data-server' 'python flask_app.py'

Браузериңизге EC2 экземплярыңыздын IP же DNS дарегин киргизиңиз, аномалиялар картасын кээ бир жасалма маалыматтар менен көрүшүңүз керек

12 -кадам: Things Network боюнча HTTP интеграциясын аткарыңыз

Things Network боюнча HTTP интеграциясын аткарыңыз
Things Network боюнча HTTP интеграциясын аткарыңыз

Эми бизде бардык инфраструктура иштеп, HTTP интеграциясын ишке ашыруу үчүн иштете алабыз.

  1. Жаңы колдонмо түзүп, түзмөгүңүздү каттоодон өткөрүңүз. Биз TTN боюнча негизги билимге ээбиз, эгерде тез баштоо көрсөтмөсүнө кайрылбасак
  2. Колдонмо менюңузда 'Интеграцияларды', андан кийин 'интеграцияны кошууну' тандаңыз
  3. HTTP интеграциясын тандаңыз
  4. Сүрөттөн кийинки талааларды киргизиңиз жана EC2 ip же коомдук DNS менен алмаштырыңыз

13 -кадам: Маалыматты иштетүү

Сенсордон чогултулган T маалыматтарынын ар бир тобу үчүн сиз төмөнкү кадамдарды аткарышыңыз керек:

  1. Т -дын жергиликтүү аймагына GPS координаттары түшүрүлгөн топторду алыңыз. Жергиликтүү аймак - бул Т тегерегиндеги 100 метр аралыкта жайгашкан бардык тюплер.
  2. Ар бир жакын тупле N үчүн акселерометрдин Z огунун квадрат орточосун N эсептөө керек. Псевдокоддо: mean = sum ([x. Z_accel ** 2 for x in near]) / near.size
  3. Квадрат стандарттык четтөөнү эсептөө. Псевдокоддо: std = суммасы ([(x. Z_accel ** 2 - орточо) ** 2 x үчүн жакын)]
  4. Бул форматта чыгаруу: lat, long, Z_accel ** 2, mean, std

Жергиликтүү аймакты эсептөө үчүн GPS аралыкты метр менен колдонуңуз. C ++ тилинде:

#аныктоо D2R (M_PI / 180.0)

#define EARTH_RAY 6371 кош дистанция (кош лат1, кош узун1, кош лат2, кош узун2) {кош dlong = (узун2 - узун1) * D2R; кош длат = (лат2 - лат1) * 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.split (","))

v = сызык [2] орточо = сызык [3] std = сап [4] эгерде v (орточо + стд*3): эгерде v (орточо + стд*2): эгерде v (орточо + стд): o.append ([1, сап [0], сап [1]) башка: o.кошуу ([2, сап [0], сап [1]) башка: о.кошуу ([3, сап [0], сап [1])

Аномалиялар https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80… 68–95–99.7 эрежеси боюнча классификацияланган.

Эми сизде мындай форматтагы коллекция бар [type, lat, long].

Түрдүн мааниси төмөнкүчө:

  1. Кичине аномалия, балким тиешеси жок
  2. Орто аномалия
  3. Критикалык аномалия

14 -кадам: Визуалдаштыруу

Визуализация
Визуализация

Визуалдаштыруу бөлүгүн түшүнүү жана өзгөртүү үчүн, биз Google Карталар APIсинин өзгөчөлөштүрүлгөн маркерлерин колдонууну үйрөнүшүбүз керек

Биринчиден, карта кайра чалууда башталышы керек:

initMap () {функциясы

data = queryData (); map = new google.maps. Map (document.getElementById ('map'), {zoom: 15, center: {lat: data [0] [1], lng: data [0] [2]}}); эскертүү (); }

URL'ге бул кайра чалуунун атын көрсөтүңүз (биз бул жерге биздин API ачкычынын алдында киргизилген) HTML тегинде:

сценарий асинкти кийинкиге калтыруу src = "https://maps.googleapis.com/maps/api/js?key=[KEYissions&callback=initMap"

Объект жаратылганда картага маркерди киргизсе болот:

жаңы google.maps. Marker ({орду: {лат: LATITUDE, lng: LONGITUDE}, карта: карта, сөлөкөт: "/path/to/icon.png"})

Сиз коддон аномалиялардын маалымат базасындагы ар бир маалыматка маркер киргизилгенин көрө аласыз (remark () функциясын караңыз) жана сөлөкөт аномалиянын классына негизделген. Муну браузерге иштетип жатканда, сүрөттө көрүнүп тургандай, аномалияларды белгилөө кутучаларынын жардамы менен чыпкалана турган картаны изилдей алабыз.

15 -кадам: Кредиттер жана тышкы шилтемелер

Бул долбоор Джованни Де Лука, Андреа Фиоралди жана Пьетро Спадаччино тарабынан жасалган, Римдин Сапиенза университетинин Информатика боюнча инженерия боюнча биринчи курсунун студенттери.

  • Слайддар авторлор бул түшүнүктүн далили катары колдонулган:

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

  • GitHub бардык коддору менен репо:

    github.com/roadteam

Сунушталууда: