Innholdsfortegnelse:
- Trinn 1: Krav
- Trinn 2: Bygg og blink sensorens fastvare
- Trinn 3: Konfigurere nettskyen
- Trinn 4: Sett opp AWS Lambda
- Trinn 5: Sett opp AWS Kinesis Firehose -datastrøm
- Trinn 6: Konfigurer IAM -rolle for Kinesis
- Trinn 7: Konfigurer AWS EC2
- Trinn 8: Konfigurer IAM -sikkerhetsrolle for EC2
- Trinn 9: Få tilgang til EC2 -forekomsten
- Trinn 10: Hent Google Maps API
- Trinn 11: Start server
- Trinn 12: Utfør HTTP -integrering i Things -nettverket
- Trinn 13: Databehandling
- Trinn 14: Visualisering
- Trinn 15: Kreditter og eksterne lenker
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
I dag skal vi vise deg hvordan vi konfigurerte et overvåkingssystem for veianomalier basert på akselerometre, LoRaWAN, Amazon Web Services og Google Cloud API.
Trinn 1: Krav
- DISCO-L072CZ-LRWAN1-bord
- X-NUCLEO-IKS01A2 utvidelsesmodul (for aksellerometeret)
- X-NUCLEO-GNSS1A1 (for lokalisering)
- En AWS -konto
- En Google Cloud Platform -konto
Trinn 2: Bygg og blink sensorens fastvare
Koble IKS01A2 og GNSS1A1 på toppen av brettet gjennom GPIO -pinnene. Last ned firmwarekoden fra GitHub. Opprett (hvis du ikke allerede har en) en konto på ARM Mbed og importer koden i repoen på den elektroniske kompilatoren. Sett målplattformen til DISCO-L072CZ-LRWAN1 og lagre prosjektet. Gå nå til The Things Network og opprett en konto hvis du ikke allerede har den. Opprett et program, lag en ny enhet inne i programmet og sett tilkoblingsmodus til OTAA. Ta tak i de riktige parameterne for å fylle ut følgende felt i mbed_app.json-filen: "lora.appskey", "lora.nwkskey", "lora.device-address".
Sensoren vil periodisk registrere akselerometer og GNSS -data og sende dem gjennom LoRa -tilkoblingen til nærmeste gateway, som vil videresende dem til vår applikasjon på The Things Network. Det neste trinnet er å sette opp en skyserver og en HTTP -integrasjon på TTN.
Trinn 3: Konfigurere nettskyen
Nå er vi klare til å sette opp skyinfrastrukturen som skal samle inn og samle data fra alle de utplasserte kortene. Denne infrastrukturen er vist i figuren nedenfor, og den er sammensatt av:
- Kinesis, for å håndtere den innkommende datastrømmen;
- Lambda, for å filtrere og forbehandle dataene før de lagres;
- S3, for å lagre alle dataene;
- EC2, for å analysere data og være vert for front-endet vårt.
Trinn 4: Sett opp AWS Lambda
Vi vil illustrere trinnene som er nødvendige for å sette opp denne infrastrukturen, med Lambda.
- Logg på med AWS -kontoen din, og fra konsollens hovedside og gå til Lambda
- Klikk på Opprett funksjon
- I den øvre delen av siden bør den velges Forfatter fra Scratch. Fullfør deretter de andre feltene som på bildet, og klikk deretter på Opprett funksjon
- Nå som du har opprettet en AWS Lambda-funksjon, går du til https://github.com/roadteam/data-server og kopierer innholdet i aws_lambda.py-filen til redigeringsprogrammet som du finner andre halvdel av siden. Lambda -funksjonen din er nå klar:)
Trinn 5: Sett opp AWS Kinesis Firehose -datastrøm
- Gå tilbake til hovedsiden til AWS -konsollen, og gå til Tjenester til Kinesis
- Nå er du på hovedsiden til Kinesis. Til høyre på siden, under 'Kinesis Firehose -leveringsstrømmer', velger du 'Opprett ny leveringsstrøm'
- I "Navn på leveringsstrøm" skriver du "veiovervåkning-strøm". La de andre feltene stå som standard, og klikk på Neste
- Nå under 'Transform source records with AWS Lambda' velg Enabled, og som Lambda-funksjon klikker du på den nyopprettede 'road-monitoring-lambda'. Ikke bekymre deg hvis en advarsel om funksjonstidsavbrudd dukker opp, siden operasjonen vi gjør ikke er beregningsmessig dyr. La de andre feltene stå som standard, og klikk på Neste
- Velg Amazon S3 som destinasjon, og velg Opprett nytt som S3 -destinasjon. Skriv inn "veiovervåkning-bøtte" som bøttenavn, og gå deretter. La de andre feltene stå som standard, og klikk på Neste
- Det kan være lurt å angi bufferstørrelse til 1 MB og bufferintervallet til 60 sekunder. Bufferen skylles til S3 når en av de to betingelsene er oppfylt. Ikke forlat siden, se neste trinn
Trinn 6: Konfigurer IAM -rolle for Kinesis
Nå konfigurerer vi sikkerhetstillatelsene for Kinesis, siden den må kalle Lambda -funksjonen for forbehandling, og så vil den skrive på S3
- Nederst på siden du er i ‘IAM -rolle’ velger du ‘Opprett nytt valg’, oppretter en ny IAM -rolle som på bildet og klikker Tillat
- Nå er du tilbake til forrige side, klikk på neste. Nå kan det være lurt å dobbeltsjekke alle parameterne. Klikk på "Opprett leveringsstrøm" når du er ferdig
Kinesis-Lambda-S3-rørledningen er i gang!
Trinn 7: Konfigurer AWS EC2
Nå vil vi sette opp en EC2 -forekomst med noen APIer som lar oss skyve og hente data fra AWS -skyen og også serveren hvor vi skal være vert for applikasjonens frontend. I produksjonsmiljø kan det være lurt å publisere API ved hjelp av den mer skalerbare AWS API Gateway.
- Fra hovedsiden til AWS -konsollen, gå til EC2 -tjenesten
- Klikk på Launch Instance
- I den øvre søkefeltet limer du inn denne koden: ‘ami-08935252a36e25f85’, det er den identifikasjonskoden til den forhåndskonfigurerte virtuelle maskinen som skal brukes. Klikk på Velg til høyre
- Velg t2.micro fra "Type" -kolonnen og klikk "Review and launch". Ikke start forekomsten ennå, gå til neste trinn
Trinn 8: Konfigurer IAM -sikkerhetsrolle for EC2
- Før vi starter, ønsker vi å endre sikkerhetsgruppen til forekomsten vår. For å gjøre dette, helt til høyre i delen "Sikkerhetsgrupper" klikker du på "Rediger sikkerhetsgrupper" Sett opp en ny sikkerhetsgruppe som følger. Dette konfigurerer i utgangspunktet brannmuren til din forekomst som avslører port 22 for SSH -tilkobling og port 80 for http -tjenester
- Klikk igjen "Gjennomgå og start". Sjekk nå at alle parameterne er angitt. Klikk på Launch når du er ferdig
- Ved klikk vil et nytt vindu dukke opp for å sette opp et nøkkelpar for ssh -tilkobling til forekomsten. Velg "Opprett nytt nøkkelpar" og skriv inn "ec2-road-monitoring" som navn. Klikk på Last ned nøkkelpar. Det er ekstremt viktig at denne filen går seg vill eller (verre) blir usikkert lagret: du vil ikke kunne laste ned nøkkelen igjen. Når du har lastet ned.pem -nøkkelen, er forekomsten klar til å bli lansert
Trinn 9: Få tilgang til EC2 -forekomsten
Din ferske EC2 -forekomst er oppe i AWS -skyen. Du kan koble til den med nøkkelfilen som ble lastet ned før (for denne opplæringen antar vi at du kjenner det grunnleggende i ssh). Du kan hente forekomstens IP ved å velge den i dashbordet i "Beskrivelse" -delen som følger: Du kan bruke både din offentlige IP eller din offentlige DNS, den er den samme. Med en ssh -klient skriver du nå inn kommandoen:
ssh -i ec2-road-monitoring.pem ec2-user@DIN-IP-ADDR-ELLER-DNS
hvor ec2-road-monitoring.pem er nøkkelen din som ble generert før.
Fortsett nå med å trekke koden på serversiden
git-klon-rekursiv
Trinn 10: Hent Google Maps API
Vi er nesten ferdige. Nå må vi konfigurere Google maps API på vår html -side for å vise kartet med veipunktene til brukeren:
- Logg deg på Google-kontoen din og gå til
- Klikk for å komme i gang til venstre på siden
- Velg "Kart" i menyen, og klikk deretter på Fortsett
- Som prosjektnavn skriv inn 'veiovervåkning' og klikk på Neste
- Skriv inn faktureringsinformasjonen din, og klikk på Fortsett
- Nå er prosjektet ditt klart, og vi skal få API -nøkkelen ved å klikke på APIer og tjenester -> legitimasjon
Trinn 11: Start server
Og det er din API -nøkkel. Det siste du må gjøre er å gå til data_visualization/anomalies_map.html og kopiere nøkkelen din til slutten av filen på denne måten, og erstatte "DIN-KEY-HER"
Nå er alt klart og klart til å gå! For å få den til å begynne å kjøre i EC2-forekomsten: 'cd data-server' 'python flask_app.py'
Skriv inn i nettleseren din ip- eller dns -adressen til EC2 -forekomsten din, du bør se avvikskartet med noen dummy -data
Trinn 12: Utfør HTTP -integrering i Things -nettverket
Nå som vi har all backend -infrastruktur i gang, kan vi behandle for å utføre HTTP -integrasjonen.
- Lag et nytt program og registrer enheten. Vi forutsetter grunnleggende kunnskap om TTN, hvis ikke, se hurtigstartguiden
- Velg 'Integrasjoner' i applikasjonsmenyen og deretter 'legg til integrasjon'
- Velg HTTP -integrasjon
- Skriv inn feltene som følger bildet og erstatt med EC2 ip eller offentlig DNS
Trinn 13: Databehandling
For hver datamaskin T samlet fra sensoren må du utføre følgende trinn:
- Få settet med tupler som har GPS -koordinater som faller i lokalområdet til T. Lokalområdet er alle tuplene som er 100 meter rundt T.
- For hver nærmeste tupel N beregnes kvadratmiddelverdien av akselerometerets Z-akse i N. I pseudokode: gjennomsnitt = sum ([x. Z_accel ** 2 for x i nær]) / nær.størrelse
- Beregn den kvadrerte standardavviket. I pseudokode: std = sum ([(x. Z_accel ** 2 - gjennomsnitt) ** 2 for x i nær])
- Utgang i dette formatet: lat, long, Z_accel ** 2, mean, std
For å beregne lokalområdet, bruk GPS -avstanden i meter. I C ++:
#define D2R (M_PI / 180.0)
#define EARTH_RAY 6371 dobbel distanse (dobbel lat1, dobbel lang1, dobbel lat2, dobbel lang2) {dobbel dlong = (lang2 - lang1) * D2R; dobbel dlat = (lat2 - lat1) * D2R; dobbelt a = pow (sin (dlat/2.0), 2) + cos (lat1 * D2R) * cos (lat2 * D2R) * pow (sin (dlong/2.0), 2); dobbel c = 2 * atan2 (sqrt (a), sqrt (1-a));
Nå, ved å bruke mellomdataene som ble generert i forrige trinn, oppdager du avvikene og gjør en naiv klassifisering ved å bruke denne utklippet på hver linje:
line = map (float, line.split (","))
v = linje [2] gjennomsnitt = linje [3] std = linje [4] hvis v (gjennomsnitt + std*3): hvis v (gjennomsnitt + std*2): hvis v (gjennomsnitt + std): o.tillegg ([1, linje [0], linje [1]) else: o.append ([2, linje [0], linje [1]) else: o.append ([3, linje [0], linje [1])
Avvikene er klassifisert ved hjelp av 68–95–99.7 -regelen
Nå har du en samling med dette formatet [type, lat, long].
Typebetegnelsen er følgende:
- Lett anomali, sannsynligvis irrelevant
- Middels anomali
- Kritisk anomali
Trinn 14: Visualisering
For å forstå og kanskje endre visualiseringsdelen må vi lære å bruke tilpassede markører, en funksjon i Google Maps API
For det første må kartet initieres i et tilbakeringing:
function initMap () {
data = queryData (); map = new google.maps. Map (document.getElementById ('map'), {zoom: 15, center: {lat: data [0] [1], lng: data [0] [2]}}); bemerke(); }
Angi navnet på denne tilbakeringingen i nettadressen (vi satte inn her før API -nøkkelen vår) i en HTML -tag:
script async defer src = "https://maps.googleapis.com/maps/api/js?key=[KEYphia&callback=initMap"
En markør kan settes inn i kartet når objektet er opprettet:
nytt google.maps. Marker ({posisjon: {lat: LATITUDE, lng: LONGITUDE}, kart: kart, ikon: “/path/to/icon.png”})
Du kan se i koden at for hver data i datasettet til anomaliene er det satt inn en markør (se funksjonen for bemerkning ()) og ikonet er basert på anomaliens klasse. Når du kjører dette inn i nettleseren, kan vi utforske et kart der avvik kan filtreres ved hjelp av avmerkingsbokser, som vist på bildet.
Trinn 15: Kreditter og eksterne lenker
Dette prosjektet ble laget av Giovanni De Luca, Andrea Fioraldi og Pietro Spadaccino, første året MSc i ingeniørfag i informatikkstudenter ved Sapienza University of Rome.
-
Lysbilder forfatterne brukte for å presentere dette beviset på konseptet:
www.slideshare.net/PietroSpadaccino/road-m…
-
GitHub repos med hele koden:
github.com/roadteam