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