Noch mehr NMEA0183 code
This commit is contained in:
parent
ae38d2b681
commit
5d8b33b086
3
TODO
3
TODO
|
@ -1,5 +1,8 @@
|
|||
Aufgaben- und Planungs- und Ideenliste
|
||||
|
||||
- Satelliten: SatelliteList verwenden und dieses auch in
|
||||
nmea2000 implementieren
|
||||
|
||||
- datareader für mehrere I²C-Sensoren. History muß entsprechend
|
||||
eine Liste sein.
|
||||
|
||||
|
|
72
nmea0183.py
72
nmea0183.py
|
@ -13,6 +13,17 @@ def DBT(boatdata, msg):
|
|||
pass
|
||||
#boatdata.setValue("DBT", msg.depth)
|
||||
|
||||
def GBS(boatdata, msg):
|
||||
# GNSS satellite fault detection
|
||||
"""
|
||||
(('Timestamp', 'timestamp', <function timestamp at 0x7f59cb0b65c0>), ('Expected error in latitude', 'lat_err'), ('Expected error in longitude', 'lon_err'), ('Expected error in altitude', 'alt_err'), ('PRN of most likely failed satellite', 'sat_prn_num_f'), ('Probability of missed detection for most likely failed satellite', 'pro_miss', <class 'decimal.Decimal'>), ('Estimate of bias in meters on most likely failed satellite', 'est_bias'), ('Standard deviation of bias estimate', 'est_bias_dev'))
|
||||
['213024.00', '0.9', '0.6', '2.5', '', '', '', '']
|
||||
NMEA0183: Parse-Error: !AIVDM,1,1,,A,H3ti3hPpDhiT0 """
|
||||
print("-> GBS")
|
||||
print(msg.fields)
|
||||
print(msg.data)
|
||||
#boatdata.setValue("LAT", msg.latitude)
|
||||
|
||||
def GGA(boatdata, msg):
|
||||
# Time, position, and fix related data
|
||||
# msg.num_sats
|
||||
|
@ -36,30 +47,44 @@ def GLL(boatdata, msg):
|
|||
boatdata.setValue("LON", msg.longitude)
|
||||
|
||||
def GSA(boatdata, msg):
|
||||
print("-> GSA")
|
||||
print(msg.fields)
|
||||
print(msg.data)
|
||||
# Satellites
|
||||
for i in range(1, 13):
|
||||
satno = getattr(msg, f"sv_id{i:02}")
|
||||
if (len(satno) > 0) and not satno in boatdata.sat:
|
||||
boatdata.addSatellite(int(satno))
|
||||
boatdata.setValue("PDOP", float(msg.pdop))
|
||||
boatdata.setValue("PDOP", float(msg.hdop))
|
||||
boatdata.setValue("PDOP", float(msg.vdop))
|
||||
|
||||
def GSV(boatdata, msg):
|
||||
# Satellites in view
|
||||
# mgs_num msg.num_messages # Nachricht n von m
|
||||
# msg.num_sv_in_view # Anzahl sichtbarer Satelliten
|
||||
rres = None # range residuals
|
||||
status = 2 # lookup -> prnusage; 1=tracked 2=used
|
||||
for i in range(1, 5):
|
||||
prn_num = getattr(msg, f"sv_prn_num_{i}")
|
||||
if len(prn_num) > 0:
|
||||
elevation = float(getattr(msg, f"elevation_deg_{i}"))
|
||||
azimuth = float(getattr(msg, f"azimuth_{i}"))
|
||||
snr = getattr(msg, f"snr_{i}")
|
||||
if len(snr) == 0:
|
||||
snr = 0
|
||||
status = 1 # prnusage tracked
|
||||
else:
|
||||
status = 2 # prnusage used
|
||||
boatdata.updateSatellite(int(prn_num), elevation, azimuth, int(snr), rres, status)
|
||||
"""
|
||||
if msg.sv_prn_num_1:
|
||||
print(msg.sv_prn_num_1, msg.elevation_deg_1, msg.azimuth_1, msg.snr_1)
|
||||
if msg.snr_1 == '':
|
||||
status = 1
|
||||
msg.snr_1 = 0
|
||||
boatdata.updateSatellite(int(msg.sv_prn_num_1), float(msg.elevation_deg_1), float(msg.azimuth_1), int(msg.snr_1), rres, status)
|
||||
if msg.sv_prn_num_2:
|
||||
print(msg.sv_prn_num_2, msg.elevation_deg_2, msg.azimuth_2, msg.snr_2)
|
||||
if msg.snr_2 == '':
|
||||
status = 1
|
||||
msg.snr_2 = 0
|
||||
boatdata.updateSatellite(int(msg.sv_prn_num_2), float(msg.elevation_deg_2), float(msg.azimuth_2), int(msg.snr_2), rres, status)
|
||||
if msg.sv_prn_num_3:
|
||||
print(msg.sv_prn_num_3, msg.elevation_deg_3, msg.azimuth_3, msg.snr_3)
|
||||
if msg.snr_3 == '':
|
||||
status = 1
|
||||
msg.snr_3 = 0
|
||||
|
@ -68,8 +93,8 @@ def GSV(boatdata, msg):
|
|||
if msg.snr_4 == '':
|
||||
status = 1
|
||||
msg.snr_4 = 0
|
||||
print(msg.sv_prn_num_4, msg.elevation_deg_4, msg.azimuth_4, msg.snr_4)
|
||||
boatdata.updateSatellite(int(msg.sv_prn_num_4), float(msg.elevation_deg_4), float(msg.azimuth_4), int(msg.snr_4), rres, status)
|
||||
"""
|
||||
|
||||
def HDG(boatdata, msg):
|
||||
# UNUSED: Heading - Deviation & Variation
|
||||
|
@ -166,9 +191,21 @@ def VPW(boatdata, msg):
|
|||
|
||||
def VTG(boatdata, msg):
|
||||
# Track made good and speed over ground
|
||||
"""
|
||||
(('True Track made good', 'true_track', <class 'float'>),
|
||||
('True Track made good symbol', 'true_track_sym'),
|
||||
('Magnetic Track made good', 'mag_track', <class 'decimal.Decimal'>),
|
||||
('Magnetic Track symbol', 'mag_track_sym'),
|
||||
('Speed over ground knots', 'spd_over_grnd_kts', <class 'decimal.Decimal'>),
|
||||
('Speed over ground symbol', 'spd_over_grnd_kts_sym'),
|
||||
('Speed over ground kmph', 'spd_over_grnd_kmph', <class 'float'>),
|
||||
('Speed over ground kmph symbol', 'spd_over_grnd_kmph_sym'),
|
||||
('FAA mode indicator', 'faa_mode'))
|
||||
['', 'T', '', 'M', '0.117', 'N', '0.216', 'K', 'A'] """
|
||||
print("-> VTG")
|
||||
print(msg.fields)
|
||||
boatdata.setValue("COG", int(msg.true_track))
|
||||
# msg.true_track true_track_sym
|
||||
# msg.mag_track mag_track_sym
|
||||
# msg.faa_mode
|
||||
#TODO klären was für Typen hier ankommen können
|
||||
# bytearray, str, decimal.Decimal?
|
||||
sog = float(msg.spd_over_grnd_kts)
|
||||
|
@ -223,11 +260,22 @@ def ZDA(boatdata, msg):
|
|||
#boatdata.gpsd
|
||||
#boatdata.gpst
|
||||
|
||||
# AIS
|
||||
def VDM(boatdata, msg):
|
||||
print("-> VDM")
|
||||
print(msg.fields)
|
||||
print(msg.data)
|
||||
|
||||
def VDO(boatdata, msg):
|
||||
print("-> VDO")
|
||||
|
||||
|
||||
# Aus Performancegründen eine direkte Sprungtabelle, ggf. können
|
||||
# zukünftig außer der Funktion noch weitere Daten gespeichert werdeb
|
||||
decoder = {
|
||||
"DBS": DBS,
|
||||
"DBT": DBT,
|
||||
"GBS": GBS,
|
||||
"GGA": GGA,
|
||||
"GLL": GLL,
|
||||
"GSA": GSA,
|
||||
|
@ -252,5 +300,7 @@ decoder = {
|
|||
"XDR": XDR,
|
||||
"XTE": XTE,
|
||||
"XTR": XTR,
|
||||
"ZDA": ZDA
|
||||
"ZDA": ZDA,
|
||||
|
||||
"VDM": VDM
|
||||
}
|
||||
|
|
|
@ -708,7 +708,7 @@ if __name__ == "__main__":
|
|||
t_rxd_n2k = threading.Thread(target=rxd_n2k, args=(cfg['can_intf'],))
|
||||
t_rxd_n2k.start()
|
||||
if cfg['nmea0183']:
|
||||
print("NMEA0183 enabled")
|
||||
print("NMEA0183 enabled, library version {}".format(pynmea2.version))
|
||||
t_rxd_0183 = threading.Thread(target=rxd_0183, args=(cfg['0183_port'],))
|
||||
t_rxd_0183.start()
|
||||
if cfg['gps']:
|
||||
|
|
Loading…
Reference in New Issue