21. april, 2017. Omer Ramić Alati & projekti

UVOD
Pošto sam uvijek u potrazi za novim izazovom i dobrim projektom, ovaj put sam došao na ideju da napravim u programsko jeziku python vlastiti server za primanje, obradu i prikazivanje "real time" podataka sa GPS uređaja. GPS uređaj može da koristi i TCP i UDP protokol, što u prijevodu znači da bi server trebao da bude u stanju da primi podatke putem TCP konekcije ili putem UDP konekcije. Sve zavisi od preferiranja korisnika.

Potrebno! Prilikom rada na projektu korišteno:

  • GPS tracker TK103B
  • SIM kartica (GPRS)
  • Ruter (port forwarding)
  • Apache2 server/MySQL baza
  • TCP server (python)
  • Django aplikacija

Dijagram rada praćenja GPS uređaja
Slika: Dijagram toka: dobivanje, analiza i unos podataka u bazu podataka.

Korak 1
Kako bi podesili i aktivirali GPS uređaj, potrebno je ubaciti SIM karticu u GPS uređaj (na kartici bi trebao da bude aktiviran GPRS). Morao sam napraviti svoj adapter i priključiti GPS uređaj na napajanje jer ne znam koliko dugo baterija GPS uređaja može izdržati. Zatim se vrši i podešavanje GPS uređaja (password, IP, PORT, APN, TCP ili UDP) slanjem SMS poruka i aktivacija GPRS-a na GPS uređaju koji će nesmetano slati podatke koristeći internet (GPRS). Nakon podešavanja i aktivacije uređaja mogao sam nesmetano da šaljem podatke prema svom testnom serveru putem GPRS-a.

NAPOMENA: Podaci sa gotovo svih GPS uređaja mogu se slati preko TCP protokola ili preko UDP protokola. TCP protokol zahtjeva nešto malo više prometa zbog uspostave konekcije što ovoj konekciji daje veliku pouzdanost kada se radi o prijenosu podataka. Podaci se mogu slati i preko UDP protokola koji ne zahtjeva uspostavljanje konekcije, ali zbog toga može biti ugrožena pouzdanost ukoliko dođe do zagušenja u prijenosu podataka.

Korak 2
Kodiranje, podešavanje i pokretanje TCP servera koji će raditi i osluškivati za nadolazeće konekcije na određenoj kombinaciji IP:PORT. Nakon što TCP server dobije zahtjev za uspostavu konekcije, vrši se uspostavljanje konekcije sa GPS uređajem. I GPS uređaj može slobodno da šalje podatke, TCP server ih prima, zatim ih dekodira, a onda dekodirane podatke razvrstava i provjerava da li je ID uređaja (IMEI) dobar, odnosno da li je taj uređaj onaj kojem je dozvoljeno da uspostavi konekciju. Ukoliko su sve provjere validne, podaci se prihvataju i snimaju u bazu podataka, datoteku ili direktno se učitavaju na mapu. Ti podaci su: IMEI uređaja, datum i vrijeme, lokacija (geografska širina i dužina), brzina kretanja auta, nadmorska visina, stanja (upaljen auto i sl.).

Python regex in TCP server

SLIKA: Uzorak koda iz TCP servera, regex i čitanje podataka

Asyncio i uvloop TCP server

TCP server verzije 2 koristi asyncio i uvloop (ultra brza implementacija asyncio koja obrađuje preko 100 000 zahtjeva po 1 sekundi). Što mi ujedno omogućava paralelno kreiranje novih TCP procesa (ili TCP servera) sa različitim portom. Na slici ispod se vidi starija verzija TCP servera koja je očekivala konekciju na portu 8000 za razliku od novije verzije koja to radi sa čitavim nizom portova od kojih svaki PORT služi za konekciju uređaja određenog vendora radi lakšeg dekodiranja poruke i čitanja podataka. Jednostavnije rečeno, verzija 2 omogućuje konekciju ogromnog broja različitih GPS uređaja da komuniciraju i šalju podatke.

TCP server preko GPRS konekcije na ubuntu mašini
Slika: TCP server koji očekuje konekciju i prihvata je. Ukoliko je ispravan ID uređaja podaci se prosljeđuju

Korak 3
Dekodirani i validni podaci se prihvataju i snimaju u bazu podataka ili datoteku, a onda se ti podaci mogu nesmetano koristiti preko Django aplikacije koju sam kreirao isključivo za ovu namjenu. Kako izgleda mapa nakon učitavanja dobivenih podataka, možete pogledati na slici ispod. Ovo je maša (prva verzija) koju sam iskoristio za testiranje svog servera.

GPS praćenje na mapi putem aplikacije
Slika: Django/python aplikacija, na mapi su prikazani podaci koje je poslao GPS uređaj.

Korak 4
Sada je moguće nesmetano korištenje aplikacije i praćenje GPS uređaja po želji bez ikakvih ograničenja i dodatnih troškova kao što su mjesečne naknade za korištenje servera koju zahtijevaju od vas firme koje vam omogućavaju da pratite svoje ljubimce putem interneta.

IZMJENA:
Nakon nekog vremena iskoristio sam OpenStreetMap (OSM) i MapBox layers za izradu svoje GPS platforme, a za prikaz mape Leaflet library.

GPS vektor praćenje aplikacija
Slika: Korisnički panel moje Django/Python vektor praćenje aplikacije

Hvala.