""" NMEA0183 verarbeiten """ def DBS(boatdata, msg): # Wassertiefe unter der Oberfläche pass #boatdata.setValue("DBS", msg.depth) def DBT(boatdata, msg): # Wassertiefe unter Geber pass #boatdata.setValue("DBT", msg.depth) def GGA(boatdata, msg): # Time, position, and fix related data # msg.num_sats # msg.timestamp if msg.gps_qual == 0: # No fix return if msg.lat_dir == 'N': boatdata.setValue("LAT", msg.latitude) else: boatdata.setValue("LAT", msg.latitude * -1) if msg.lon_dir == 'E': boatdata.setValue("LON", msg.longitude) else: boatdata.setValue("LON", msg.longitude * -1) boatdata.setValue("HDOP", msg.horizontal_dil) def GLL(boatdata, msg): print("-> GLL") boatdata.setValue("LAT", msg.latitude) boatdata.setValue("LON", msg.longitude) def GSV(boatdata, msg): # Satellites in view print("-> GSV") def HDG(boatdata, msg): # UNUSED: Heading - Deviation & Variation # Magnetic Sensor heading in degrees # msg.heading # .deviation, dev_dir E/W # .variation, var_dir E/W pass def HDM(boatdata, msg): # Heading magnetic if msg.magnetic == 'M': boatdata.setValue("HDM", msg.heading) else: print("HDM: M not set!") def HDT(boatdata, msg): # Heading True print("-> HDT") print(msg.fields) def HTD(boatdata, msg): # Heading/Track control data # e.g. $YDHTD,V,1.5,,R,N,,,,,,,,,A,,,*48 print("-> HTD") print(msg.fields) def MWV(boatdata, msg): # Windgeschwindigkeit und -winkel print(f"Wind: {msg.wind_angle}° {msg.wind_speed}kt") boatdata.setValue("AWA", msg.wind_angle) boatdata.setValue("AWS", msg.wind_speed) def MTW(boatdata, msg): # Wassertemperatur # boatdata.setValue("WTemp", msg.xxx) print("-> MTW Wassertemperatur") def RMB(boatdata, msg): # Recommended Minimum Navigation Information # Informationen bzgl. Erreichen des nächsten Wegepunkts # print("-> RMB") def RMC(boatdata, msg): # Recommended Minimum Navigation Information # print("-> RMC") # print(msg.timestamp, msg.datestamp) # print(msg.status) # V=Warning, P=Precise, A=? # mag_variation, mag_var_dir E/W # true_course if msg.lat_dir == 'N': boatdata.setValue("LAT", msg.lat) else: boatdata.setValue("LAT", msg.lat) * -1 if msg.lon_dir == 'E': boatdata.setValue("LON", msg.lon) else: boatdata.setValue("LON", msg.lon) * -1 boatdata.setValue("SOG", msg.spd_over_grnd) def ROT(boatdata, msg): # Rate Of Turn # print("-> ROT") if msg.status == 'A': boatdata.setValue("ROT", msg.rate_of_turn) def RSA(boatdata, msg): # Rudder Sensor Angle # negative Werte bedeuten Backbord #print("-> RSA") # Boatdata: RPOS primär, PRPOS sekundär if msg.rsa_starboard_status== 'A': boatdata.setValue("RPOS", msg.rsa_starboard) if msg.rsa_port_status == 'A': boatdata.setValue("PRPOS", msg.rsa_port) def RTE(boatdata, msg): # Route print("-> RTE") print(msg.fields) def VBW(boatdata, msg): print("-> VBW") def VHW(boatdata, msg): print("-> VHW") boatdata.setValue("STW", float(msg.water_speed_knots)) def VPW(boatdata, msg): # UNUSED: Speed - Measured Parallel to Wind # print(f"-> VPW: {msg.speed_kn} kn") pass def VTG(boatdata, msg): print("-> VTG") boatdata.setValue("COG", int(msg.true_track)) #TODO klären was für Typen hier ankommen können # bytearray, str, decimal.Decimal? sog = float(msg.spd_over_grnd_kts) #str von OpenCPN: sog = float(msg.spd_over_grnd_kts[:-1]) boatdata.setValue("SOG", sog) def VWR(boatdata, msg): # Relative Wind Speed and Angle #print("-> VWR") if msg.l_r == "R": angle = msg.deg_r else: angle = 360 - msg.deg_r boatdata.setValue("AWA", angle) boatdata.setValue("AWS", msg.wind_speed_ms) def WPL(boatdata, msg): print("-> WPL") print(msg.fields) def VWT(boatdata, msg): # True Wind Speed and Angle if msg.direction == "R": angle = msg.wind_angle_vessel else: angle = 360 - msg.wind_angle_vessel boatdata.setValue("TWA", angle) boatdata.setValue("TWS", msg.wind_speed_meters) def XDR(boatdata, msg): # Extra sensor data / Transducer Measurement # type, value, units, id # type: A # units: D # id: Yaw if msg.id.lower() == 'yaw': boatdata.setValue("YAW", msg.value) else: print(f"-> XDR: {msg.type}, {msg.value}, {msg.units}, {msg.id}") def XTE(boatdata, msg): # Cross Track error measured print("-> XTE") def XTR(boatdata, msg): # Cross Track error gekoppelt print("-> XTR") def ZDA(boatdata, msg): # Time and date print("-> XTE") #boatdata.gpsd #boatdata.gpst # 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, "GGA": GGA, "GLL": GLL, "GSV": GSV, "HDG": HDG, "HDM": HDM, "HTD": HTD, "MWV": MWV, "MTW": MTW, "RMB": RMB, "ROT": ROT, "RMC": RMC, "RSA": RSA, "RTE": RTE, "VBW": VBW, "VHW": VHW, "VPW": VPW, "VTG": VTG, "VWR": VWR, "VWT": VWT, "WPL": WPL, "XDR": XDR, "XTE": XTE, "XTR": XTR, "ZDA": ZDA }