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