diff --git a/obp60v.conf-sample b/obp60v.conf-sample index 62f9426..081ae90 100644 --- a/obp60v.conf-sample +++ b/obp60v.conf-sample @@ -11,6 +11,14 @@ mouseptr = on win_x = -1 win_y = -1 +[can] +enabled = false +interface = can0 + +[nmea0183] +enabled = false +port = /dev/ttyV1 + [bme280] enabled = false port = 1 @@ -21,7 +29,6 @@ enabled = false port = /dev/ttyACM0 [opencpn] -port = /dev/ttyV1 navobj = ~/.opencpn/navobj.xml config = ~/.opencpn/opencpn.conf diff --git a/obp60v.py b/obp60v.py index 3f4d205..65dceb9 100755 --- a/obp60v.py +++ b/obp60v.py @@ -8,6 +8,9 @@ Zwei Displayvarianten 2. Fullscreen Display skaliert mit 1,6 ergibt 640x480 mit Platz für große Touch-Flächen am rechten Rand +Das Gerät kann Daten von NMEA2000 und NMEA0183 empfangen, sowie von +einem lokal angeschlossenen GPS-Empfänger. + NMEA2000 deviceclass: 120 - Display devicefunction: 130 - Display @@ -120,9 +123,9 @@ cfg = { 'bme280': False } -def rxd_n2k(): +def rxd_n2k(device): setthreadtitle("N2Klistener") - bus = can.Bus(interface='socketcan', channel='can0', bitrate=250000); + bus = can.Bus(interface='socketcan', channel=device, bitrate=250000); wip = False sc = 0 nf = 0 @@ -196,7 +199,7 @@ def rxd_0183(devname): try: ser = serial.Serial(devname, 115200, timeout=3) except serial.SerialException as e: - print("OpenCPN serial port not available") + print("NMEA0183 serial port not available") return setthreadtitle("0183listener") while not shutdown: @@ -218,6 +221,8 @@ def rxd_0183(devname): elif msg.sentence_type == 'RTE': # Route print(msg.fields) + else: + print(msg) ser.close() def datareader(histpath, history): @@ -625,6 +630,14 @@ if __name__ == "__main__": cfg['win_x'] = -1 cfg['win_y'] = -1 + cfg['can'] = config.getboolean('can', 'enabled') + if cfg['can']: + cfg['can_intf'] = config.get('can', 'interface') + + cfg['nmea0183'] = config.getboolean('nmea0183', 'enabled') + if cfg['nmea0183']: + cfg['0183_port'] = config.get('nmea0183', 'port') + cfg['gps'] = config.getboolean('gps', 'enabled') if cfg['gps']: cfg['gps_port'] = config.get('gps', 'port') @@ -638,27 +651,29 @@ if __name__ == "__main__": history = History("press", 75) boatdata.addHistory(history, "press") - cfg['ocpn_port'] = config.get('opencpn', 'port') - if cfg['simulation']: boatdata.enableSimulation() profile = init_profile(config, cfg, boatdata) - if not cfg['simulation']: - t_rxd_n2k = threading.Thread(target=rxd_n2k) + # Schnittstellen aktivieren + if cfg['can']: + t_rxd_n2k = threading.Thread(target=rxd_n2k, args=(cfg['can_intf'],)) t_rxd_n2k.start() - t_rxd_0183 = threading.Thread(target=rxd_0183, args=(cfg['ocpn_port'],)) + if cfg['nmea0183']: + t_rxd_0183 = threading.Thread(target=rxd_0183, args=(cfg['0183_port'],)) t_rxd_0183.start() - + if not cfg['simulation']: t_data = threading.Thread(target=datareader, args=(cfg['histpath'], history)) t_data.start() app = Frontend(cfg, owndevice, boatdata, profile) app.run() shutdown = True - if not cfg['simulation']: + if cfg['can']: t_rxd_n2k.join() + if cfg['nmea0183']: t_rxd_0183.join() + if not cfg['simulation']: t_data.join() print("Another fine product of the Sirius Cybernetics Corporation.")