Съдържание:
- Стъпка 1: Изисквания
- Стъпка 2: Създаване и мигане на фърмуера на сензора
- Стъпка 3: Настройка на облака
- Стъпка 4: Настройте AWS Lambda
- Стъпка 5: Настройте AWS Kinesis Firehose поток от данни
- Стъпка 6: Настройте ролята на IAM за кинеза
- Стъпка 7: Настройте AWS EC2
- Стъпка 8: Настройте ролята на защита на IAM за EC2
- Стъпка 9: Достъп до вашия EC2 екземпляр
- Стъпка 10: Изтеглете API на Google Карти
- Стъпка 11: Стартирайте сървъра
- Стъпка 12: Извършете HTTP интеграция в мрежата Things
- Стъпка 13: Обработка на данни
- Стъпка 14: Визуализация
- Стъпка 15: Кредити и външни връзки
Видео: Пътно наблюдение: 15 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:52
Днес ще ви покажем как създадохме система за наблюдение на пътни аномалии въз основа на акселерометри, 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, за обработка на входящия поток от данни;
- Lambda, за филтриране и предварителна обработка на данните, преди да ги съхраните;
- S3, за съхраняване на всички данни;
- EC2, за да анализираме данни и да хостваме нашия интерфейс.
Стъпка 4: Настройте AWS Lambda
Ще илюстрираме стъпките, необходими за създаване на тази инфраструктура, започвайки от Lambda.
- Влезте с вашия AWS акаунт и от главната страница на конзолата и отидете на Lambda
- Щракнете върху Създаване на функция
- В горната част на страницата трябва да бъде избран автор от нулата. След това попълнете останалите полета, както е на снимката и след това щракнете върху Създаване на функция
- Сега, когато сте създали AWS Lambda функция, отидете на https://github.com/roadteam/data-server и копирайте съдържанието на файла aws_lambda.py в редактора, който намирате във втората половина на страницата. Вашата ламбда функция вече е готова:)
Стъпка 5: Настройте AWS Kinesis Firehose поток от данни
- Върнете се сега на главната страница на конзолата на AWS, а в Услуги отидете на Kinesis
- Сега сте на главната страница на Kinesis. Вдясно на страницата под „Потоци на доставка на Kinesis Firehose“изберете „Създаване на нов поток за доставка“
- В „Име на поток на доставка“напишете „път-мониторинг-поток“. Оставете другите полета по подразбиране и щракнете върху напред
- Сега под „Трансформиране на източникови записи с AWS Lambda“изберете Enabled и като функция Lambda щракнете върху новосъздадения „road-monitoring-lambda“. Не се притеснявайте, ако се появи предупреждение за изчакване на функцията, тъй като операцията, която извършваме, не е скъпо изчисление. Оставете другите полета по подразбиране и щракнете върху напред
- Като дестинация изберете Amazon S3 и като S3 дестинация изберете Create New. Като име на кофа въведете ‘road-monitoring-bucket’ и след това отидете. Сега оставете другите полета по подразбиране и щракнете върху Напред
- Може да искате да зададете размер на буфера на 1 MB и буферен интервал на 60 секунди. Буферът ще се промива до S3, когато едно от двете условия е изпълнено. Не напускайте страницата, вижте следващата стъпка
Стъпка 6: Настройте ролята на IAM за кинеза
Сега настройваме разрешенията за сигурност за Kinesis, тъй като тя трябва да извика функцията Lambda за предварителна обработка и след това ще пише на S3
- В долната част на страницата, в която сте в „роля на IAM“, изберете „Създаване на нов по избор“, създайте нова роля на IAM, както е на снимката, и щракнете върху Разрешаване
- Сега се връщате към предишната страница, щракнете върху следващата. Сега може да искате да проверите отново всички параметри. Когато приключите, кликнете върху „Създаване на поток за доставка“
Тръбопроводът Kinesis-Lambda-S3 работи и работи!
Стъпка 7: Настройте AWS EC2
Сега ще настроим екземпляр EC2 с някои API, които ще ни позволят да избутваме и изтегляме данни от облака AWS, а също и от сървъра, където да хостваме интерфейса на нашето приложение. В производствената среда може да искате да публикувате API, като използвате по -мащабируемия AWS API шлюз.
- От главната страница на конзолата AWS отидете на услугата EC2
- Кликнете върху Стартиране на екземпляр
- В горната лента за търсене поставете този код: „ami-08935252a36e25f85“, това е идентификационният код на предварително конфигурираната виртуална машина за използване. Щракнете върху Избор вдясно
- Изберете t2.micro от колоната „Тип“и кликнете върху „Преглед и стартиране“. Още не стартирайте екземпляра, преминете към следващата стъпка
Стъпка 8: Настройте ролята на защита на IAM за EC2
- Преди стартирането искаме да променим групата за защита на нашия екземпляр. За да направите това, в крайния десен ъгъл на раздел „Групи за защита“щракнете върху „Редактиране на групи за сигурност“Настройте нова група за защита, както следва. Това основно конфигурира защитната стена на вашия екземпляр, излагайки порт 22 за SSH връзка и порт 80 за http услуги
- Кликнете отново върху „Преглед и стартиране“. Сега проверете дали всички параметри са зададени. Когато приключите, щракнете върху Стартиране
- При щракване ще се появи нов прозорец, за да настроите двойка ключове за ssh връзка с екземпляра. Изберете „Създаване на нова двойка ключове“и като име въведете „ec2-road-monitoring“. Щракнете върху Изтегляне на двойка ключове. Изключително важно е този файл да се загуби или (по -лошо) да се съхранява несигурно: няма да можете да изтеглите ключа отново. След като изтеглите ключа.pem, инстанцията е готова за стартиране
Стъпка 9: Достъп до вашия 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 maps в нашата html страница, за да покажем картата с точките на потребителя:
- Влезте в профила си в Google и отидете на
- Кликнете върху „Започнете“вляво на страницата
- Изберете „Карти“в менюто и след това щракнете върху продължаване
- Като име на проект въведете „мониторинг на пътя“и щракнете върху Напред
- Въведете данните си за фактуриране и щракнете върху Продължи
- Сега вашият проект е готов и ще получим API ключа, като щракнете върху API и услуги -> Идентификационни данни
Стъпка 11: Стартирайте сървъра
И там е вашият API ключ. Последното нещо, което трябва да направите, е да отидете на data_visualization/anomalies_map.html и да копирате ключа си до края на файла по този начин, като замените „YOUR-KEY-HERE“
Сега всичко е готово и готово за работа! За да започне да се изпълнява в екземпляра EC2: „cd data-server“„python flask_app.py“
Въведете във вашия браузър ip или dns адреса на вашия EC2 екземпляр, трябва да видите картата на аномалиите с някои фиктивни данни
Стъпка 12: Извършете HTTP интеграция в мрежата Things
Сега, когато имаме цялата базирана инфраструктура и работи, можем да обработим, за да извършим HTTP интеграцията.
- Създайте ново приложение и регистрирайте устройството си. Ние приемаме основни познания за TTN, ако не се отнасяме към ръководството за бърз старт
- В менюто на приложението изберете „Интеграции“и след това „добавете интеграция“
- Изберете HTTP интеграция
- Въведете полетата след изображението и ги заменете с вашия EC2 ip или публичен DNS
Стъпка 13: Обработка на данни
За всеки набор от данни T, събрани от сензора, трябва да изпълните следните стъпки:
- Вземете набора от кортежи, които имат GPS координати, попадащи в локалната област на Т. Локалната област е всички кортежи, които са на 100 метра около T.
- За всеки най-близък кортеж N изчислете квадратната средна стойност на оста Z на акселерометъра в N. В псевдокод: средна стойност = сума ([x. Z_accel ** 2 за x в близост]) / near.size
- Изчислете квадратното стандартно отклонение. В псевдокод: std = сума ([(x. Z_accel ** 2 - средно) ** 2 за x в близост])
- Изход в този формат: lat, long, Z_accel ** 2, mean, std
За да изчислите местната област, използвайте GPS разстоянието в метри. В C ++:
#define D2R (M_PI / 180.0)
#дефинирайте EARTH_RAY 6371 двойно разстояние (двойно lat1, двойно long1, двойно lat2, двойно long2) {двойно 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
Сега имате колекция с този формат [type, lat, long].
Значението на типа е следното:
- Лека аномалия, вероятно без значение
- Средна аномалия
- Критична аномалия
Стъпка 14: Визуализация
За да разберем и може би да променим частта за визуализация, трябва да се научим как да използваме персонализирани маркери, функция на API на Google Карти
Първо, картата трябва да бъде инициализирана при обратно повикване:
функция initMap () {
данни = queryData (); map = new google.maps. Map (document.getElementById ('map'), {zoom: 15, center: {lat: data [0] [1], lng: data [0] [2]}}); Забележка(); }
Посочете името на това обратно извикване в URL адреса (вмъкнахме тук преди нашия API ключ) в HTML маркер:
скрипт 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 repos с целия код:
github.com/roadteam
Препоръчано:
Ubidots + ESP32- Прогнозно наблюдение на машината: 10 стъпки
Ubidots + ESP32- Предсказващ машинен мониторинг: Прогнозен анализ на вибрациите и температурата на машината чрез създаване на събития по пощата и запис на вибрации в google лист с помощта на Ubidots
Arduino, наблюдение на отварянето на врати чрез Gmail: 6 стъпки
Arduino, Мониторинг на отварянето на врати чрез Gmail: В този урок ще ви покажа как да откриете събитието при отваряне на вратата и да изпратите известие чрез Gmail с помощта на Arduino Uno. Ако сте начинаещ, можете да научите за wifi и сензор в Arduino - WiFi и Arduino - уроци за сензори за врати. Нека
Интелигентна разпределена IoT система за наблюдение на времето, използваща NodeMCU: 11 стъпки
Интелигентна разпределена IoT система за наблюдение на времето, използваща NodeMCU: Всички може да сте наясно с традиционната метеорологична станция; но чудили ли сте се как работи всъщност? Тъй като традиционната метеорологична станция е скъпа и обемна, плътността на тези станции на единица площ е много по -малка, което допринася за
Как да създадете система за наблюдение за неоторизирани точки за безжичен достъп: 34 стъпки
Как да създадете система за наблюдение на неоторизирани точки за безжичен достъп: Saludos lectores. El presente instructivo es una gu í a de como desarrollar un system de monitoreo de puntos de acceso inal á mbricos no autorizados utilizando una Raspberry PI.Este система fue desarrollado como parte de un trabajo de inv
Система за наблюдение на нивото на водата: 9 стъпки (със снимки)
Система за мониторинг на нивото на водата: Като създател „Направи си сам“винаги се опитвам да намеря начин да направя живота си и живота на другия по -лесен и по -безопасен. На 30 март 2013 г. най -малко 11 души са загинали след внезапен дъжд, причинил наводнение в столичното пристанище на Мавриций Луис. В същия ден няколко къщи ние