GPS-Code von NMEA0183 getrennt, NMEA0183 weiterprogrammiert
This commit is contained in:
parent
aefd01e0f9
commit
6214d08174
68
obp60v.py
68
obp60v.py
|
@ -77,7 +77,7 @@ Version Datum Änderung(en) von
|
|||
-------- ----------- ------------------------------------------------------ ----
|
||||
0.1 2024-10-31 Entwicklung begonnen tho
|
||||
0.2 2024-12-24 Veröffentlichung als Git-Repository tho
|
||||
|
||||
0.3 2025 WIP tho
|
||||
|
||||
"""
|
||||
|
||||
|
@ -195,13 +195,56 @@ def rxd_n2k(device):
|
|||
bus.shutdown()
|
||||
|
||||
def rxd_0183(devname):
|
||||
# Prüfe ob Port vorhanden ist und sich öffnen läßt
|
||||
# Prüfe ob NMEA0183-Port vorhanden ist und sich öffnen läßt
|
||||
try:
|
||||
ser = serial.Serial(devname, 115200, timeout=3)
|
||||
except serial.SerialException as e:
|
||||
print("NMEA0183 serial port not available")
|
||||
return
|
||||
setthreadtitle("0183listener")
|
||||
while not shutdown:
|
||||
try:
|
||||
raw = ser.readline().decode('ascii')
|
||||
msg = pynmea2.parse(raw)
|
||||
except pynmea2.nmea.ParseError:
|
||||
print(f"NMEA0183: Parse-Error: {raw}")
|
||||
continue
|
||||
# sentence_type kann fehlen
|
||||
try:
|
||||
stype = msg.sentence_type
|
||||
except:
|
||||
print(f"NMEA0183: Sentence type missing: {raw}")
|
||||
continue
|
||||
if stype == 'GLL':
|
||||
boatdata.setValue("LAT", msg.latitude)
|
||||
boatdata.setValue("LON", msg.longitude)
|
||||
elif stype == '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)
|
||||
elif stype == 'VHW':
|
||||
boatdata.setValue("STW", float(msg.water_speed_knots))
|
||||
elif stype == 'WPL':
|
||||
# Wegepunkt
|
||||
print(msg.fields)
|
||||
elif stype == 'RTE':
|
||||
# Route
|
||||
print(msg.fields)
|
||||
else:
|
||||
print(msg)
|
||||
ser.close()
|
||||
|
||||
def rxd_gps(devname, devspeed):
|
||||
# Prüfe ob GPS-Port vorhanden ist und sich öffnen läßt
|
||||
try:
|
||||
ser = serial.Serial(devname, devspeed, timeout=3)
|
||||
except serial.SerialException as e:
|
||||
print("GPS serial port not available")
|
||||
return
|
||||
setthreadtitle("GPSlistener")
|
||||
while not shutdown:
|
||||
try:
|
||||
msg = pynmea2.parse(ser.readline().decode('ascii'))
|
||||
|
@ -210,19 +253,9 @@ def rxd_0183(devname):
|
|||
if msg.sentence_type == 'GLL':
|
||||
boatdata.setValue("LAT", msg.latitude)
|
||||
boatdata.setValue("LON", msg.longitude)
|
||||
elif msg.sentence_type == 'VTG':
|
||||
boatdata.setValue("COG", int(msg.true_track))
|
||||
boatdata.setValue("SOG", float(msg.spd_over_grnd_kts[:-1]))
|
||||
elif msg.sentence_type == 'VHW':
|
||||
boatdata.setValue("STW", float(msg.water_speed_knots))
|
||||
elif msg.sentence_type == 'WPL':
|
||||
# Wegepunkt
|
||||
print(msg.fields)
|
||||
elif msg.sentence_type == 'RTE':
|
||||
# Route
|
||||
print(msg.fields)
|
||||
else:
|
||||
print(msg)
|
||||
print(msg.fields)
|
||||
ser.close()
|
||||
|
||||
def datareader(histpath, history):
|
||||
|
@ -274,10 +307,6 @@ def datareader(histpath, history):
|
|||
for k, v in history.series.items():
|
||||
if n % k == 0:
|
||||
v.add(pval)
|
||||
# Lokales GPS abfragen
|
||||
# TODO
|
||||
if cfg['gps']:
|
||||
pass
|
||||
n += 1
|
||||
|
||||
for s in history.series.values():
|
||||
|
@ -663,6 +692,9 @@ if __name__ == "__main__":
|
|||
if cfg['nmea0183']:
|
||||
t_rxd_0183 = threading.Thread(target=rxd_0183, args=(cfg['0183_port'],))
|
||||
t_rxd_0183.start()
|
||||
if cfg['gps']:
|
||||
t_rxd_gps = threading.Thread(target=rxd_gps, args=(cfg['gps_port'],))
|
||||
t_rxd_gps.start()
|
||||
if not cfg['simulation']:
|
||||
t_data = threading.Thread(target=datareader, args=(cfg['histpath'], history))
|
||||
t_data.start()
|
||||
|
@ -674,6 +706,8 @@ if __name__ == "__main__":
|
|||
t_rxd_n2k.join()
|
||||
if cfg['nmea0183']:
|
||||
t_rxd_0183.join()
|
||||
if cfg['gps']:
|
||||
t_rxd_gps.join()
|
||||
if not cfg['simulation']:
|
||||
t_data.join()
|
||||
print("Another fine product of the Sirius Cybernetics Corporation.")
|
||||
|
|
Loading…
Reference in New Issue