NMEA0183 Empfangscode in entsprechendes Modul verlagert

This commit is contained in:
2025-09-13 07:55:56 +02:00
parent 612783454e
commit 5b000f4f1f
5 changed files with 106 additions and 53 deletions

View File

@@ -108,8 +108,8 @@ import struct
import uuid
import json
import nmea0183
from appdata import AppData
import nmea0183
import pages
__author__ = "Thomas Hooge"
@@ -118,6 +118,7 @@ __version__ = "0.2"
__email__ = "thomas@hoogi.de"
__status__ = "Development"
# Standardkonfiguration, kann durch Konfigdatei überschrieben werden
cfg = {
'cfgfile': 'obp60v.conf',
'logdir': '~/.local/share/obp60v',
@@ -205,46 +206,6 @@ def rxd_n2k(device):
pass
bus.shutdown()
def rxd_0183(devname):
# 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 appdata.shutdown:
raw = ser.readline().decode('ascii')
if len(raw.strip()) == 0:
continue
try:
msg = pynmea2.parse(raw)
except pynmea2.nmea.ParseError:
print(f"NMEA0183: Parse-Error: {raw}", end='')
continue
# sentence_type kann fehlen
try:
stype = msg.sentence_type
except:
print(f"NMEA0183: Sentence type missing: {raw}")
continue
# WIP Neuer Code aus Modul
# TODO Filter mit gewünschen Satztypen
# if stype in stypefilter:
# continue
if stype in nmea0183.decoder:
nmea0183.decoder[stype](boatdata, msg)
else:
# Hier unbekannter Satztyp: protokollieren und ignorieren
"""
['checksum', 'data', 'fields', 'identifier', 'name_to_idx', 'parse',
'proprietary_re', 'query_re', 'render', 'sentence_re',
'sentence_type', 'sentence_types', 'talker', 'talker_re']
"""
print(f"Nicht implementiert: '{stype}' from {msg.talker}")
ser.close()
def rxd_gps(devname, devspeed):
# Prüfe ob GPS-Port vorhanden ist und sich öffnen läßt
try:
@@ -789,7 +750,7 @@ if __name__ == "__main__":
t_rxd_n2k.start()
if cfg['nmea0183']:
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=nmea0183.rxd_0183, args=(appdata,cfg['0183_port'],))
t_rxd_0183.start()
if cfg['gps']:
print("GPS enabled (local)")