Files
NmeaClient/nmea/GSV.py
T
jens f04a6655a4 - fixed parsing
- added RMC
2026-03-15 21:08:19 +01:00

51 lines
1.4 KiB
Python

from msg_container import MsgContainer
from nmea.receiver import Nmea
class Gsv(Nmea):
class Msg:
def __init__(self):
self.number_of_msg = None
self.seq_number = None
self.sat_vis = None
self.sat_id = []
self.elevation = []
self.azimuth = []
self.snr = []
self.signal_id = None
self.checksum = None
def __repr__(self):
return f"{self.__dict__}"
def __init__(self, name: str, tid: str):
Nmea.__init__(self, name, tid=tid, msg_type="GSV")
self.msg = None
self.data = Gsv.Msg()
def on_recv(self, msg: MsgContainer):
msg_data = msg.data.decode(encoding="utf-8")
data_list = msg_data.split(',')
self.msg = data_list[0]
data = self.data
data.number_of_msg = data_list[1]
data.seq_number = data_list[2]
data.sat_vis = data_list[3]
data_set_size = 4
num_sats_in_msg = int(len(data_list[3:-2])/4)
for n in range(num_sats_in_msg):
data.sat_id.append(data_list[data_set_size*n+4])
data.elevation.append(data_list[data_set_size*n+5])
data.azimuth.append(data_list[data_set_size*n+6])
data.snr.append(data_list[data_set_size*n+7])
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()
print(f"{self.name}:{self.msg} {data}")