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
|
Aufgaben- und Planungs- und Ideenliste
|
||||||
|
|
||||||
|
- Satelliten: SatelliteList verwenden und dieses auch in
|
||||||
|
nmea2000 implementieren
|
||||||
|
|
||||||
- datareader für mehrere I²C-Sensoren. History muß entsprechend
|
- datareader für mehrere I²C-Sensoren. History muß entsprechend
|
||||||
eine Liste sein.
|
eine Liste sein.
|
||||||
|
|
||||||
|
|
72
nmea0183.py
72
nmea0183.py
|
@ -13,6 +13,17 @@ def DBT(boatdata, msg):
|
||||||
pass
|
pass
|
||||||
#boatdata.setValue("DBT", msg.depth)
|
#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):
|
def GGA(boatdata, msg):
|
||||||
# Time, position, and fix related data
|
# Time, position, and fix related data
|
||||||
# msg.num_sats
|
# msg.num_sats
|
||||||
|
@ -36,30 +47,44 @@ def GLL(boatdata, msg):
|
||||||
boatdata.setValue("LON", msg.longitude)
|
boatdata.setValue("LON", msg.longitude)
|
||||||
|
|
||||||
def GSA(boatdata, msg):
|
def GSA(boatdata, msg):
|
||||||
print("-> GSA")
|
# Satellites
|
||||||
print(msg.fields)
|
for i in range(1, 13):
|
||||||
print(msg.data)
|
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):
|
def GSV(boatdata, msg):
|
||||||
# Satellites in view
|
# Satellites in view
|
||||||
# mgs_num msg.num_messages # Nachricht n von m
|
# mgs_num msg.num_messages # Nachricht n von m
|
||||||
# msg.num_sv_in_view # Anzahl sichtbarer Satelliten
|
# msg.num_sv_in_view # Anzahl sichtbarer Satelliten
|
||||||
rres = None # range residuals
|
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:
|
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 == '':
|
if msg.snr_1 == '':
|
||||||
status = 1
|
status = 1
|
||||||
msg.snr_1 = 0
|
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)
|
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:
|
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 == '':
|
if msg.snr_2 == '':
|
||||||
status = 1
|
status = 1
|
||||||
msg.snr_2 = 0
|
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)
|
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:
|
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 == '':
|
if msg.snr_3 == '':
|
||||||
status = 1
|
status = 1
|
||||||
msg.snr_3 = 0
|
msg.snr_3 = 0
|
||||||
|
@ -68,8 +93,8 @@ def GSV(boatdata, msg):
|
||||||
if msg.snr_4 == '':
|
if msg.snr_4 == '':
|
||||||
status = 1
|
status = 1
|
||||||
msg.snr_4 = 0
|
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)
|
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):
|
def HDG(boatdata, msg):
|
||||||
# UNUSED: Heading - Deviation & Variation
|
# UNUSED: Heading - Deviation & Variation
|
||||||
|
@ -166,9 +191,21 @@ def VPW(boatdata, msg):
|
||||||
|
|
||||||
def VTG(boatdata, msg):
|
def VTG(boatdata, msg):
|
||||||
# Track made good and speed over ground
|
# 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("-> VTG")
|
||||||
print(msg.fields)
|
# msg.true_track true_track_sym
|
||||||
boatdata.setValue("COG", int(msg.true_track))
|
# msg.mag_track mag_track_sym
|
||||||
|
# msg.faa_mode
|
||||||
#TODO klären was für Typen hier ankommen können
|
#TODO klären was für Typen hier ankommen können
|
||||||
# bytearray, str, decimal.Decimal?
|
# bytearray, str, decimal.Decimal?
|
||||||
sog = float(msg.spd_over_grnd_kts)
|
sog = float(msg.spd_over_grnd_kts)
|
||||||
|
@ -223,11 +260,22 @@ def ZDA(boatdata, msg):
|
||||||
#boatdata.gpsd
|
#boatdata.gpsd
|
||||||
#boatdata.gpst
|
#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
|
# Aus Performancegründen eine direkte Sprungtabelle, ggf. können
|
||||||
# zukünftig außer der Funktion noch weitere Daten gespeichert werdeb
|
# zukünftig außer der Funktion noch weitere Daten gespeichert werdeb
|
||||||
decoder = {
|
decoder = {
|
||||||
"DBS": DBS,
|
"DBS": DBS,
|
||||||
"DBT": DBT,
|
"DBT": DBT,
|
||||||
|
"GBS": GBS,
|
||||||
"GGA": GGA,
|
"GGA": GGA,
|
||||||
"GLL": GLL,
|
"GLL": GLL,
|
||||||
"GSA": GSA,
|
"GSA": GSA,
|
||||||
|
@ -252,5 +300,7 @@ decoder = {
|
||||||
"XDR": XDR,
|
"XDR": XDR,
|
||||||
"XTE": XTE,
|
"XTE": XTE,
|
||||||
"XTR": XTR,
|
"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 = threading.Thread(target=rxd_n2k, args=(cfg['can_intf'],))
|
||||||
t_rxd_n2k.start()
|
t_rxd_n2k.start()
|
||||||
if cfg['nmea0183']:
|
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 = threading.Thread(target=rxd_0183, args=(cfg['0183_port'],))
|
||||||
t_rxd_0183.start()
|
t_rxd_0183.start()
|
||||||
if cfg['gps']:
|
if cfg['gps']:
|
||||||
|
|
Loading…
Reference in New Issue