- fixed parsing

- added RMC
This commit is contained in:
2026-03-15 21:08:19 +01:00
parent d4fa77aaa0
commit f04a6655a4
5 changed files with 50 additions and 5 deletions
+4 -2
View File
@@ -10,6 +10,7 @@ from nmea.GLL import Gll
from nmea.GSA import Gsa from nmea.GSA import Gsa
from nmea.GSV import Gsv from nmea.GSV import Gsv
from nmea.GGA import Gga from nmea.GGA import Gga
from nmea.RMC import Rmc
class NetworkBackend(ABackend): class NetworkBackend(ABackend):
def __init__(self, servers: list[dict]): def __init__(self, servers: list[dict]):
@@ -92,10 +93,11 @@ if __name__ == "__main__":
mc = NetworkBackend(server_list) mc = NetworkBackend(server_list)
for grm in [" neo-f9p", "zed-x20p"]: for grm in [" neo-f9p", "zed-x20p"]:
rx_list = [ rx_list = [
Gll(grm, 'GP'), Gll(grm, 'GN'),
Gsa(grm, 'GP'), Gsa(grm, 'GN'),
Gsv(grm, 'GP'), Gsv(grm, 'GP'),
Gga(grm, 'GP'), Gga(grm, 'GP'),
Rmc(grm, 'GN'),
Gga(grm, 'GN') Gga(grm, 'GN')
] ]
# Topology # Topology
+3 -1
View File
@@ -11,6 +11,7 @@ class Gll(Nmea):
self.ew_indicator = None self.ew_indicator = None
self.utc_time = None self.utc_time = None
self.status = None self.status = None
self.mode = None
self.checksum = None self.checksum = None
def __repr__(self): def __repr__(self):
@@ -31,6 +32,7 @@ class Gll(Nmea):
self.data.ew_indicator = data_list[4] self.data.ew_indicator = data_list[4]
self.data.utc_time = data_list[5] self.data.utc_time = data_list[5]
self.data.status = data_list[6] self.data.status = data_list[6]
self.data.checksum = data_list[7] self.data.mode = data_list[7].split('*')[0]
self.data.checksum = data_list[7].split('*')[1]
print(f"{self.name}:{self.msg} {self.data}") print(f"{self.name}:{self.msg} {self.data}")
+3 -1
View File
@@ -11,6 +11,7 @@ class Gsa(Nmea):
self.p_dop = None self.p_dop = None
self.h_dop = None self.h_dop = None
self.v_dop = None self.v_dop = None
self.signal_id = None
self.checksum = None self.checksum = None
def __repr__(self): def __repr__(self):
@@ -31,6 +32,7 @@ class Gsa(Nmea):
self.data.p_dop = float(data_list[15]) self.data.p_dop = float(data_list[15])
self.data.h_dop = float(data_list[16]) self.data.h_dop = float(data_list[16])
self.data.v_dop = float(data_list[17]) self.data.v_dop = float(data_list[17])
self.data.checksum = data_list[18] self.data.signal_id = data_list[18].split('*')[0]
self.data.checksum = data_list[18].split('*')[1]
print(f"{self.name}:{self.msg} {self.data}") print(f"{self.name}:{self.msg} {self.data}")
+3 -1
View File
@@ -12,6 +12,7 @@ class Gsv(Nmea):
self.elevation = [] self.elevation = []
self.azimuth = [] self.azimuth = []
self.snr = [] self.snr = []
self.signal_id = None
self.checksum = None self.checksum = None
def __repr__(self): def __repr__(self):
@@ -40,7 +41,8 @@ class Gsv(Nmea):
data.azimuth.append(data_list[data_set_size*n+6]) data.azimuth.append(data_list[data_set_size*n+6])
data.snr.append(data_list[data_set_size*n+7]) data.snr.append(data_list[data_set_size*n+7])
data.checksum = data_list[data_set_size*(num_sats_in_msg-1)+8] data.signal_id = data_list[data_set_size*(num_sats_in_msg-1)+8].split('*')[0]
data.checksum = data_list[data_set_size*(num_sats_in_msg-1)+8].split('*')[1]
if self.data.number_of_msg == self.data.seq_number: if self.data.number_of_msg == self.data.seq_number:
self.data = Gsv.Msg() self.data = Gsv.Msg()
+37
View File
@@ -0,0 +1,37 @@
from msg_container import MsgContainer
from nmea.receiver import Nmea
class Rmc(Nmea):
class Msg:
def __init__(self):
pass
def __repr__(self):
return f"{self.__dict__}"
def __init__(self, name: str, tid: str):
Nmea.__init__(self, name, tid=tid, msg_type="RMC")
self.msg = None
self.data = Rmc.Msg()
def on_recv(self, msg: MsgContainer):
data = msg.data.decode(encoding="utf-8")
data_list = data.split(',')
self.msg = data_list[0]
self.data.utc_time = data_list[1]
self.data.status = data_list[2]
self.data.latitude = float(data_list[3])/100
self.data.ns_indicator = data_list[4]
self.data.longitude = float(data_list[5])/100
self.data.ew_indicator = data_list[6]
self.data.speed = data_list[7]
self.data.course = data_list[8]
self.data.date = data_list[9]
self.data.mag_var = data_list[10]
self.data.mag_var_ew = data_list[11]
self.data.mode = data_list[12]
self.data.nav_status = data_list[13].split("*")[0]
self.data.checksum = data_list[13].split("*")[1]
print(f"{self.name}:{self.msg} {self.data}")