使用发送到URL / IP的NMEA数据

时间:2015-01-26 22:35:42

标签: python django nmea

我有一堆将NMEA句子发送到URL / ip的设备。 看起来像这样

“$ GPGGA,200130.0,3447.854659,N,11014.636735,W,1,11,0.8,41.4,男,-24.0,M,* 53”

我想读取这些数据,解析它并将关键部分上传到数据库。我知道如何解析它并将其上传到数据库,但我完全失去了如何“读取”/接受/获取数据到python程序,以便我可以解析和上传。

我的第一个想法是将它指向Django页面然后让Djanog解析它并上传到数据库(数据将从Django站点访问)但它的NMEA句子不是HTTP请求所以Django拒绝它作为“消息请求语法错误“

读取发送到网址/ IP的NMEA句子的最佳(python)方式是什么?

感谢

1 个答案:

答案 0 :(得分:1)

我假设你有一些具有以太网连接的硬件,它通过以太网连接输出NMEA字符串。这可能默认有一些随机的192.168.0.x ip地址并通过端口12002吐出数据

你通常会创建一个套接字来监听这个崩溃的数据

<强> server.py

import socket
host = "" #Localhost
port = 12002 
PACKET_SIZE=1024 # how many characters to read at a time
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.bind((host,port))
sock.listen(5) # we should never have more than one client
def work_thread(client):
    while True: #continuously read and handle data
      data = client.recv(PACKET_SIZE)
      if not data:
          break # done with this client
      processData(data)

while True:
     client,addr = sock.accept() # your script will block here waiting for a connection
     t = threading.Thread(target=work_thread,args=(client,))
     t.start()

但有时您需要ping设备才能获取数据

<强> client.py

import socket
host = "192.168.0.204" #Device IP
port = 12002 
PACKET_SIZE=1024 # how many characters to read at a time
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect((host,port)) #connect to the device
while True: #continuously read and handle data
    data = sock.recv(PACKET_SIZE)
    processData(data)