Weitere NMEA0183 Daten verarbeiten
This commit is contained in:
115
nmea0183.py
115
nmea0183.py
@@ -13,6 +13,23 @@ def DBT(boatdata, msg):
|
||||
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)
|
||||
@@ -22,11 +39,32 @@ 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")
|
||||
@@ -45,16 +83,37 @@ def RMB(boatdata, msg):
|
||||
print("-> RMB")
|
||||
|
||||
def RMC(boatdata, msg):
|
||||
print("-> RMC")
|
||||
#boatdata.setValue("LAT", msg.lat)
|
||||
#boatdata.setValue("LON", msg.lon)
|
||||
# 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
|
||||
print("-> RSA")
|
||||
print(msg.fields)
|
||||
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
|
||||
@@ -65,9 +124,16 @@ 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?
|
||||
@@ -75,10 +141,40 @@ def VTG(boatdata, msg):
|
||||
#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")
|
||||
@@ -98,18 +194,27 @@ def ZDA(boatdata, msg):
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user