Browse Source

Переписан decoder

david.berlinskiy 1 year ago
parent
commit
e6d9ee80b6
5 changed files with 106 additions and 24 deletions
  1. BIN
      __pycache__/decoder.cpython-39.pyc
  2. 18 7
      catcher.py
  3. 23 17
      decoder.py
  4. 65 0
      gps_data.txt
  5. 0 0
      text.txt

BIN
__pycache__/decoder.cpython-39.pyc


+ 18 - 7
catcher.py

@@ -4,7 +4,7 @@ import time
 from decoder import GPS
 import ast
 
-imei = '35209308062032'
+imei = 35209308062032
 def start_server():
     try:
         hostname, port = '', 350
@@ -42,13 +42,24 @@ def start_server_UDP():
     hostname, port = '', 350
     sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
     sock.bind((hostname, port))
-    
+    numb_data = 0
     while True:
-       data = sock.recvfrom(8192) 
-       gps_decoder = GPS(data)
-       print(gps_decoder.codec_id)
-       print(gps_decoder.number_of_data)
-       gps_decoder.print_gps_data()
+        data = sock.recvfrom(1024) 
+        if data[0][2:4] != numb_data:
+            gps_decoder = GPS(data)
+            numb_data=gps_decoder.packet_id
+            gps_to_txt(gps_decoder)
+            send_answer(gps_decoder)
+            
+def gps_to_txt(gps_decoder):
+    gps_decoder.print_gps_data()
+
+def send_answer(gps_decoder):
+    hostname, port = '', 350
+    data = b"\x00\x05"+gps_decoder.packet_id+b"\x01"+gps_decoder.avl_packet_id+gps_decoder.number_of_data
+    udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
+    udp_socket.sendto((data), (hostname, port))
+    udp_socket.close()
 
 if __name__ == "__main__":  
     start_server_UDP()

+ 23 - 17
decoder.py

@@ -1,33 +1,39 @@
-import binascii
-
 class GPS:
     def __init__(self, data):
         data = data[0]
-        self.data = bytes(data[0])
-        self.codec_id = data[23]
-        self.number_of_data = data[24]
-        self.gps_data = data[27:42]
+        self.data = data
+        self.packet_id = data[2:4]
+        self.avl_packet_id = data[5:6]
+        self.codec_id = data[23:24]
+        self.number_of_data = data[24:25]
+        self.gps_data = data[33:200]
 
     def decode_gps_data(self):
-        longitude = self.gps_data[0:4]
-        latitude = self.gps_data[4:9]
-        altitude = self.gps_data[9:11]
+        longitude = self.gps_data[1:5]
+        latitude = self.gps_data[5:9]
+        altitude = self.gps_data[9:13]
         angle = self.gps_data[11:13]
-        speed = self.gps_data[13:15]
-
+        speed = self.gps_data[14:16]
         decoded_data = {
-            "Longitude": longitude,
-            "Latitude": latitude,
-            "Altitude": altitude,
-            "Angle": angle,
-            "Speed": speed
+            "Longitude": int(longitude.hex(),16),
+            "Latitude": int(latitude.hex(),16),
+            "Altitude": int(altitude.hex(),16),
+            "Angle": int(angle.hex(),16),
+            "Speed": int(speed.hex(),16)
         }
         
         return decoded_data
     
     def print_gps_data(self):
+        gps_file = open("gps_data.txt","a")
         decoded_data = self.decode_gps_data()
         for key, value in decoded_data.items():
+            if str(key) == "Latitude" or str(key) == "Longitude":
+                key,value = str(key),str(value)
+                value = value[0:2]+"."+value[2:len(value)]
+            else:
+                key,value = str(key),str(value)
+            gps_file.write((key+" "+value+"\n"))
             print(key, value)
-            
+        gps_file.close()
         

+ 65 - 0
gps_data.txt

@@ -0,0 +1,65 @@
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0
+Longitude 37.4112000
+Latitude 55.8898166
+Altitude 0
+Angle 0
+Speed 0

+ 0 - 0
text.txt