Innholdsfortegnelse:

Veiovervåkning: 15 trinn
Veiovervåkning: 15 trinn

Video: Veiovervåkning: 15 trinn

Video: Veiovervåkning: 15 trinn
Video: Голубая стрела (1958) фильм 2024, Juli
Anonim
Veiovervåkning
Veiovervåkning

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

Sette opp skyen
Sette opp skyen

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

Sett opp AWS Lambda
Sett opp AWS Lambda

Vi vil illustrere trinnene som er nødvendige for å sette opp denne infrastrukturen, med Lambda.

  1. Logg på med AWS -kontoen din, og fra konsollens hovedside og gå til Lambda
  2. Klikk på Opprett funksjon
  3. 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
  4. 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

Sett opp AWS Kinesis Firehose -datastrøm
Sett opp AWS Kinesis Firehose -datastrøm
  1. Gå tilbake til hovedsiden til AWS -konsollen, og gå til Tjenester til Kinesis
  2. Nå er du på hovedsiden til Kinesis. Til høyre på siden, under 'Kinesis Firehose -leveringsstrømmer', velger du 'Opprett ny leveringsstrøm'
  3. I "Navn på leveringsstrøm" skriver du "veiovervåkning-strøm". La de andre feltene stå som standard, og klikk på Neste
  4. 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
  5. 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
  6. 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

Sett opp IAM -rolle for Kinesis
Sett opp 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

  1. Nederst på siden du er i ‘IAM -rolle’ velger du ‘Opprett nytt valg’, oppretter en ny IAM -rolle som på bildet og klikker Tillat
  2. 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

Sett opp AWS EC2
Sett opp 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.

  1. Fra hovedsiden til AWS -konsollen, gå til EC2 -tjenesten
  2. Klikk på Launch Instance
  3. 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
  4. 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

Sett opp IAM -sikkerhetsrolle for EC2
Sett opp IAM -sikkerhetsrolle for EC2
  1. 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
  2. Klikk igjen "Gjennomgå og start". Sjekk nå at alle parameterne er angitt. Klikk på Launch når du er ferdig
  3. 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

Få tilgang til EC2 -forekomsten din
Få tilgang til EC2 -forekomsten din

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

Hent Google Maps API
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:

  1. Logg deg på Google-kontoen din og gå til
  2. Klikk for å komme i gang til venstre på siden
  3. Velg "Kart" i menyen, og klikk deretter på Fortsett
  4. Som prosjektnavn skriv inn 'veiovervåkning' og klikk på Neste
  5. Skriv inn faktureringsinformasjonen din, og klikk på Fortsett
  6. Nå er prosjektet ditt klart, og vi skal få API -nøkkelen ved å klikke på APIer og tjenester -> legitimasjon

Trinn 11: Start server

Start Server
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

Utfør HTTP -integrasjon på Things Network
Utfør HTTP -integrasjon på Things Network

Nå som vi har all backend -infrastruktur i gang, kan vi behandle for å utføre HTTP -integrasjonen.

  1. Lag et nytt program og registrer enheten. Vi forutsetter grunnleggende kunnskap om TTN, hvis ikke, se hurtigstartguiden
  2. Velg 'Integrasjoner' i applikasjonsmenyen og deretter 'legg til integrasjon'
  3. Velg HTTP -integrasjon
  4. 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:

  1. 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.
  2. 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
  3. Beregn den kvadrerte standardavviket. I pseudokode: std = sum ([(x. Z_accel ** 2 - gjennomsnitt) ** 2 for x i nær])
  4. 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:

  1. Lett anomali, sannsynligvis irrelevant
  2. Middels anomali
  3. Kritisk anomali

Trinn 14: Visualisering

Visualisering
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

Anbefalt: