OBP60v/nmea0183.py

70 lines
1.6 KiB
Python

"""
NMEA0183 verarbeiten
"""
def DBS(boatdata, msg):
# Wassertiefe unter der Oberfläche
pass
def DBT(boatdata, msg):
# Wassertiefe unter Geber
pass
def GLL(boatdata, msg):
print("-> GLL")
boatdata.setValue("LAT", msg.latitude)
boatdata.setValue("LON", msg.longitude)
def HDT(boatdata, msg):
# Heading True
print("-> HDT")
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 RSA(boatdata, msg):
# Rudder Sensor Angle
# negative Werte bedeuten Backbord
# Boatdata: RPOS primär, PRPOS sekundär
print("-> RSA")
print(msg.fields)
def RTE(boatdata, msg):
# Route
print("-> RTE")
print(msg.fields)
def VHW(boatdata, msg):
boatdata.setValue("STW", float(msg.water_speed_knots))
def VTG(boatdata, msg):
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 WPL(boatdata, msg):
print("-> WPL")
print(msg.fields)
# 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,
"GLL": GLL,
"MWV": MWV,
"RSA": RSA,
"RTE": RTE,
"VHW": VHW,
"VTG": VTG,
"WPL": WPL
}