INHOUDSOPGAWE:
- Stap 1: Vereistes
- Stap 2: Bou en flits die sensor se firmware
- Stap 3: Die opstel van die wolk
- Stap 4: Stel AWS Lambda op
- Stap 5: Stel AWS Kinesis Firehose -datastroom op
- Stap 6: Stel IAM -rol op vir Kinesis
- Stap 7: Stel AWS EC2 op
- Stap 8: Stel IAM -sekuriteitsrol op vir EC2
- Stap 9: Kry toegang tot u EC2 -instansie
- Stap 10: Haal Google Maps API op
- Stap 11: Begin bediener
- Stap 12: Voer HTTP -integrasie uit op die Things Network
- Stap 13: Verwerking van data
- Stap 14: Visualisering
- Stap 15: Krediete en eksterne skakels
Video: Padmonitering: 15 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
Vandag gaan ons u wys hoe ons 'n moniteringstelsel vir padafwykings opgestel het op grond van versnellingsmeters, LoRaWAN, Amazon Web Services en Google Cloud API.
Stap 1: Vereistes
- DISCO-L072CZ-LRWAN1 bord
- X-NUCLEO-IKS01A2 uitbreidingsmodule (vir die versnellingsmeter)
- X-NUCLEO-GNSS1A1 (vir lokalisering)
- 'N AWS -rekening
- 'N Google Cloud Platform -rekening
Stap 2: Bou en flits die sensor se firmware
Verbind die IKS01A2 en GNSS1A1 bo -op die bord deur die GPIO -penne. Laai die firmware -kode van GitHub af. Skep (as u nog nie een het nie) 'n rekening op ARM Mbed en voer die kode in die repo op die aanlyn -samesteller in. Stel die teikenplatform op DISCO-L072CZ-LRWAN1 en stoor die projek. Gaan nou na The Things Network en skep 'n rekening as u dit nog nie het nie. Skep 'n toepassing, skep 'n nuwe toestel in die toepassing en stel die verbindingsmodus in op OTAA. Gryp die toepaslike parameters om die volgende velde in die mbed_app.json-lêer te vul: "lora.appskey", "lora.nwkskey", "lora.device-address".
Die sensor sal periodiek versnellingsmeter en GNSS -data opneem en dit via die LoRa -verbinding na die naaste poort stuur, wat dit na ons toepassing op The Things Network sal stuur. Die volgende stap is om 'n wolkbediener op te stel en 'n HTTP -integrasie op TTN.
Stap 3: Die opstel van die wolk
Nou is ons gereed om die wolkinfrastruktuur op te stel wat die data van al die ontplooide borde sal versamel en saamvoeg. Hierdie infrastruktuur word in die onderstaande figuur getoon en bestaan uit:
- Kinesis, om die inkomende datastroom te hanteer;
- Lambda, om die data te filtreer en vooraf te verwerk voordat dit gestoor word;
- S3, om al die data te stoor;
- EC2, om data te ontleed en ons front-end aan te bied.
Stap 4: Stel AWS Lambda op
Ons sal die stappe wat nodig is om hierdie infrastruktuur op te rig, illustreer, begin met Lambda.
- Teken in met u AWS -rekening en vanaf die konsole se hoofblad en gaan na Lambda
- Klik op Skep funksie
- In die boonste gedeelte van die bladsy moet dit gekies word as outeur uit Scratch. Voltooi dan die ander velde soos in die prentjie en klik dan op Maak funksie
- Noudat u 'n AWS Lambda-funksie geskep het, gaan na https://github.com/roadteam/data-server en kopieer die inhoud van die aws_lambda.py-lêer na die redakteur wat u in die tweede helfte van die bladsy vind. U Lambda -funksie is nou gereed:)
Stap 5: Stel AWS Kinesis Firehose -datastroom op
- Keer nou terug na die hoofblad van die AWS -konsole, en gaan na Kinesis na Services
- U is nou op die hoofblad van Kinesis. Regs op die bladsy, onder 'Kinesis Firehose afleweringsstrome', kies 'Skep nuwe afleweringsstroom'
- Skryf 'Road-monitoring-stream' in 'Naam van afleweringsstroom'. Laat die ander velde standaard toe en klik op volgende
- Kies nou onder 'Transformeer bronrekords met AWS Lambda' Ingeskakel, en klik as Lambda-funksie op die nuutgemaakte 'padmonitering-lambda'. Moenie bekommerd wees as 'n waarskuwing oor die tydsverloop van die funksie verskyn nie, aangesien die operasie wat ons doen nie berekeningsgewys duur is nie. Laat die ander velde standaard toe en klik op volgende
- Kies Amazon S3 as bestemming, en as S3 -bestemming, kies Create New. As die emmernaam, voer 'padmonitering-emmer' in en gaan dan. Laat die ander velde standaard toe en klik op Volgende
- U kan die grootte van die buffer op 1 MB en die bufferinterval op 60 sekondes stel. Die buffer word na S3 gespoel wanneer een van die twee voorwaardes voldoen. Moenie die bladsy verlaat nie, sien die volgende stap
Stap 6: Stel IAM -rol op vir Kinesis
Nou stel ons die beveiligingstoestemmings vir Kinesis op, aangesien dit die Lambda -funksie moet bel vir voorafverwerking, en dan sal dit op S3 skryf
- Onderaan die bladsy waarin u 'IAM -rol' het, kies 'Skep nuwe kies', skep 'n nuwe IAM -rol soos in die prentjie en klik op Laat toe
- Nou is u terug na die vorige bladsy, klik op volgende. Nou wil u moontlik al die parameters nagaan. As u klaar is, klik op 'Skep afleweringsstroom'
Die Kinesis-Lambda-S3 pyplyn is aan die gang!
Stap 7: Stel AWS EC2 op
Nou sal ons 'n EC2 -instansie opstel met 'n paar API's wat ons toelaat om data uit die AWS -wolk te stoot en te trek, en ook van die bediener waar ons ons programkant kan host. In die produksie -omgewing wil u dalk die API publiseer met behulp van die meer skaalbare AWS API Gateway.
- Gaan na die hoofblad van die AWS -konsole na EC2 -diens
- Klik op Launch Instance
- Plak hierdie kode in die boonste soekbalk: 'ami-08935252a36e25f85', dit is die identifiserende kode van die vooraf gekonfigureerde virtuele masjien om te gebruik. Klik Kies aan die regterkant
- Kies t2.micro in die kolom 'Type' en klik op 'Review and launch'. Begin nog nie die instansie nie, gaan na die volgende stap
Stap 8: Stel IAM -sekuriteitsrol op vir EC2
- Voordat ons begin, wil ons die veiligheidsgroep van ons instansie verander. Om dit te doen, klik heel regs in die afdeling 'Veiligheidsgroepe' op 'Wysig beveiligingsgroepe' Stel 'n nuwe veiligheidsgroep soos volg op. Dit stel basies die firewall van u instansie op wat poort 22 vir SSH -verbinding en poort 80 vir http -dienste blootstel
- Klik weer 'Review and Launch'. Kontroleer nou of al die parameters ingestel is. As u klaar is, klik op Begin
- As u klik, verskyn 'n nuwe venster om 'n sleutelpaar op te stel vir ssh -verbinding met die instansie. Kies 'Skep nuwe sleutelpaar' en voer as naam 'ec2-padmonitering' in. Klik op Laai sleutelpaar af. Dit is uiters belangrik dat hierdie lêer verdwaal of (erger) onveilig gestoor word: u kan die sleutel nie weer aflaai nie. Nadat die.pem -sleutel afgelaai is, is die instansie gereed om te begin
Stap 9: Kry toegang tot u EC2 -instansie
U vars EC2 -instansie is in die AWS -wolk. U kan daarby koppel met die sleutellêer wat voorheen afgelaai is (vir hierdie tutoriaal neem ons aan dat u die basiese beginsels van ssh ken). U kan die IP van die instansie ophaal deur dit in die paneelbord in die afdeling 'Beskrywing' soos volg te kies: U kan beide u openbare IP of u openbare DNS gebruik. Voer die opdrag nou in met 'n ssh -kliënt:
ssh -i ec2-road-monitoring.pem ec2-gebruiker@U-IP-ADDR-OF-DNS
waar ec2-road-monitoring.pem u sleutel was wat voorheen gegenereer is.
Gaan nou voort met die kode aan die bediener
git-kloon-rekursiewe
Stap 10: Haal Google Maps API op
Ons is amper klaar. Nou moet ons die Google maps API op ons html -bladsy instel om die kaart met die waypoints aan die gebruiker te vertoon:
- Meld aan by u Google-rekening en gaan na
- Klik op 'Aan die gang' aan die linkerkant van die bladsy
- Kies 'Kaarte' in die spyskaart en klik dan op voortgaan
- As projeknaam, voer 'padmonitering' in en klik op Volgende
- Voer u faktuurbesonderhede in en klik op Gaan voort
- Nou is u projek gereed, en ons kry die API -sleutel deur na API's en dienste te klik -> geloofsbriewe
Stap 11: Begin bediener
En daar is dit u API -sleutel. Die laaste ding wat u moet doen, is om na data_visualization/anomalies_map.html te gaan en u sleutel so aan die einde van die lêer te kopieer, deur 'U-SLEUTEL-HIER' te vervang
Nou is alles reg en gereed om te gaan! Om dit te begin uitvoer in die EC2-instansie: 'cd data-server' 'python flask_app.py'
Voer die ip- of dns -adres van u EC2 -instansie in u blaaier in; u moet die afwykingskaart met 'n paar data sien
Stap 12: Voer HTTP -integrasie uit op die Things Network
Noudat ons al die backend -infrastruktuur aan die gang het, kan ons verwerk om die HTTP -integrasie uit te voer.
- Skep 'n nuwe toepassing en registreer u toestel. Ons veronderstel basiese kennis van TTN, indien nie, verwys na die vinnige aanvangsgids
- Kies 'Integrasies' in u toepassingsmenu en dan 'voeg integrasie by'
- Kies HTTP -integrasie
- Voer die velde in wat die prentjie volg en vervang dit met u EC2 ip of openbare DNS
Stap 13: Verwerking van data
Vir elke groot hoeveelheid data T wat van die sensor ingesamel word, moet u die volgende stappe uitvoer:
- Kry die stel tipes met GPS -koördinate wat in die plaaslike omgewing van T. val. Die plaaslike gebied is al die tipes wat 100 meter rondom T.
- Bereken vir elke naaste tupel N die vierkantige gemiddelde van die versnellingsmeter Z-as in N. In pseudokode: gemiddelde = som ([x. Z_accel ** 2 vir x in naby]) / naby.grootte
- Bereken die kwadraat standaardafwyking. In pseudokode: std = som ([(x. Z_accel ** 2 - gemiddelde) ** 2 vir x in naby])
- Uitset in hierdie formaat: lat, lank, Z_accel ** 2, gemiddelde, std
Gebruik die GPS -afstand in meter om die plaaslike gebied te bereken. In C ++:
#definieer D2R (M_PI / 180.0)
#define EARTH_RAY 6371 double distance (double lat1, double long1, double lat2, double long2) {double dlong = (long2 - long1) * D2R; dubbel dlat = (lat2 - lat1) * D2R; dubbel a = pow (sin (dlat/2.0), 2) + cos (lat1 * D2R) * cos (lat2 * D2R) * pow (sin (dlong/2.0), 2); dubbel c = 2 * atan2 (sqrt (a), sqrt (1-a));
Met behulp van die intermediêre data wat in die vorige stap gegenereer is, kan u die afwykings opspoor en 'n naïewe indeling doen deur hierdie snitte op elke reël toe te pas:
line = map (float, line.split (","))
v = reël [2] gemiddelde = reël [3] std = reël [4] as v (gemiddelde + std*3): as v (gemiddelde + std*2): as v (gemiddelde + std): o.toegevoeg ([1, reël [0], reël [1]) anders: o.append ([2, reël [0], reël [1]) anders: o.toegevoeging
Die afwykings word geklassifiseer volgens die 68–95–99.7 -reël
Nou het u 'n versameling met hierdie formaat [tipe, lat, lank].
Die tipe betekenis is die volgende:
- Effense afwyking, waarskynlik irrelevant
- Medium afwyking
- Kritiese anomalie
Stap 14: Visualisering
Om die visualiseringsdeel te verstaan en miskien te verander, moet ons leer hoe om pasgemaakte merkers te gebruik, 'n kenmerk van Google Maps API
Eerstens moet die kaart geïnitialiseer word in 'n terugbel:
funksie initMap () {
data = queryData (); map = nuwe google.maps. Map (document.getElementById ('kaart'), {zoom: 15, middel: {lat: data [0] [1], lng: data [0] [2]}}); opmerking (); }
Spesifiseer die naam van hierdie terugbel in die url (ons het hier voor ons API -sleutel ingevoeg) in 'n HTML -tag:
script async defer src = "https://maps.googleapis.com/maps/api/js?key=•KEY]&callback=initMap"
'N Merker kan op die kaart ingevoeg word wanneer die voorwerp geskep word:
nuwe google.maps. Marker ({posisie: {lat: LATITUDE, lng: LONGITUDE}, kaart: kaart, ikoon: “/pad/to/icon.png”})
U kan in die kode sien dat vir elke data in die datastel van die afwykings 'n merker ingevoeg is (sien die opmerking () funksie) en die ikoon is gebaseer op die klas van die anomalie. As u dit in die blaaier instuur, kan ons 'n kaart ondersoek waarin afwykings gefiltreer kan word met behulp van blokkies, soos in die prentjie gesien.
Stap 15: Krediete en eksterne skakels
Hierdie projek is gemaak deur Giovanni De Luca, Andrea Fioraldi en Pietro Spadaccino, eerstejaar MSc in ingenieurswese in rekenaarwetenskapstudente aan die Sapienza Universiteit van Rome.
-
Skyfies wat die skrywers gebruik het om hierdie konsepbewys aan te bied:
www.slideshare.net/PietroSpadaccino/road-m…
-
GitHub bevat alle kode:
github.com/roadteam
Aanbeveel:
Spelontwerp in vyf stappe: 5 stappe
Spelontwerp in fliek in 5 stappe: Flick is 'n baie eenvoudige manier om 'n speletjie te maak, veral iets soos 'n legkaart, visuele roman of avontuurlike spel
Gesigsopsporing op Raspberry Pi 4B in 3 stappe: 3 stappe
Gesigsopsporing op Raspberry Pi 4B in 3 stappe: in hierdie instruksies gaan ons gesigsopsporing uitvoer op Raspberry Pi 4 met Shunya O/S met behulp van die Shunyaface-biblioteek. Shunyaface is 'n biblioteek vir gesigherkenning/opsporing. Die projek het ten doel om die vinnigste opsporing en herkenningssnelheid te bereik met
DIY Vanity Mirror in eenvoudige stappe (met LED -strookligte): 4 stappe
DIY Vanity Mirror in eenvoudige stappe (met behulp van LED Strip Lights): In hierdie pos het ek 'n DIY Vanity Mirror gemaak met behulp van die LED strips. Dit is regtig cool, en u moet dit ook probeer
Arduino Halloween Edition - Zombies pop -out skerm (stappe met foto's): 6 stappe
Arduino Halloween Edition - Zombies pop -out skerm (stappe met foto's): wil u u vriende skrik en 'n skreeu geraas maak tydens Halloween? Of wil u net 'n goeie grap maak? Hierdie pop-up skerm van Zombies kan dit doen! In hierdie instruksies sal ek u leer hoe u maklik Zombies kan spring deur Arduino te gebruik. Die HC-SR0
Speel Doom op u iPod in 5 maklike stappe !: 5 stappe
Speel Doom op u iPod in 5 maklike stappe !: 'n Stap-vir-stap gids oor hoe u Rockbox op u iPod kan dubbellaai om Doom en tientalle ander speletjies te speel. Dit is iets baie maklik om te doen, maar baie mense staan nog steeds verbaas as hulle sien hoe ek op my iPod doom speel en deurmekaar raak met die instruksies