From f04a6655a4f0570cbebfd5ff48c61f5cc8de3cbc Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sun, 15 Mar 2026 21:08:19 +0100 Subject: [PATCH] - fixed parsing - added RMC --- network_backend.py | 6 ++++-- nmea/GLL.py | 4 +++- nmea/GSA.py | 4 +++- nmea/GSV.py | 4 +++- nmea/RMC.py | 37 +++++++++++++++++++++++++++++++++++++ 5 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 nmea/RMC.py diff --git a/network_backend.py b/network_backend.py index 129c754..3509a23 100644 --- a/network_backend.py +++ b/network_backend.py @@ -10,6 +10,7 @@ from nmea.GLL import Gll from nmea.GSA import Gsa from nmea.GSV import Gsv from nmea.GGA import Gga +from nmea.RMC import Rmc class NetworkBackend(ABackend): def __init__(self, servers: list[dict]): @@ -92,10 +93,11 @@ if __name__ == "__main__": mc = NetworkBackend(server_list) for grm in [" neo-f9p", "zed-x20p"]: rx_list = [ - Gll(grm, 'GP'), - Gsa(grm, 'GP'), + Gll(grm, 'GN'), + Gsa(grm, 'GN'), Gsv(grm, 'GP'), Gga(grm, 'GP'), + Rmc(grm, 'GN'), Gga(grm, 'GN') ] # Topology diff --git a/nmea/GLL.py b/nmea/GLL.py index 7ae617b..85973da 100644 --- a/nmea/GLL.py +++ b/nmea/GLL.py @@ -11,6 +11,7 @@ class Gll(Nmea): self.ew_indicator = None self.utc_time = None self.status = None + self.mode = None self.checksum = None def __repr__(self): @@ -31,6 +32,7 @@ class Gll(Nmea): self.data.ew_indicator = data_list[4] self.data.utc_time = data_list[5] 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}") diff --git a/nmea/GSA.py b/nmea/GSA.py index 0f9a0b8..f977866 100644 --- a/nmea/GSA.py +++ b/nmea/GSA.py @@ -11,6 +11,7 @@ class Gsa(Nmea): self.p_dop = None self.h_dop = None self.v_dop = None + self.signal_id = None self.checksum = None def __repr__(self): @@ -31,6 +32,7 @@ class Gsa(Nmea): self.data.p_dop = float(data_list[15]) self.data.h_dop = float(data_list[16]) 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}") diff --git a/nmea/GSV.py b/nmea/GSV.py index bb811d1..25a7fa0 100644 --- a/nmea/GSV.py +++ b/nmea/GSV.py @@ -12,6 +12,7 @@ class Gsv(Nmea): self.elevation = [] self.azimuth = [] self.snr = [] + self.signal_id = None self.checksum = None def __repr__(self): @@ -40,7 +41,8 @@ class Gsv(Nmea): data.azimuth.append(data_list[data_set_size*n+6]) 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: self.data = Gsv.Msg() diff --git a/nmea/RMC.py b/nmea/RMC.py new file mode 100644 index 0000000..7083c69 --- /dev/null +++ b/nmea/RMC.py @@ -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}")