NMEA2000 remote keyboard support

This commit is contained in:
2026-01-04 19:15:13 +01:00
parent ba43c3147e
commit fa1ec509da
3 changed files with 23 additions and 2 deletions

View File

@@ -35,6 +35,8 @@ class MapService():
def get_px_meters(self, lat, zoom):
# Erdumfang am Äquator: 40075016 m
if not lat:
return 0
return 40075016 * math.cos(math.radians(lat)) / (2 ** (zoom + 8))
def web_get_tile(self, domain, path):

View File

@@ -118,7 +118,7 @@ import nmea0183
import pages
__author__ = "Thomas Hooge"
__copyright__ = "Copyleft 2024-2025, all rights reversed"
__copyright__ = "Copyleft 2024-2026, all rights reversed"
__version__ = "0.3"
__email__ = "thomas@hoogi.de"
__status__ = "Development"
@@ -166,6 +166,10 @@ def rxd_n2k(device):
#boatdata.setValue("LAT", lat)
#boatdata.setValue("LON", lon)
parser.parse_129025(msg.data, boatdata)
case 127502:
# Switch bank control
# Remote keys received via callback function
parser.parse_127502(msg.data, boatdata)
case 127505:
# Fluid level
#fluidtype = msg.data[0] >> 4
@@ -398,6 +402,11 @@ class Frontend(Gtk.Window):
# Flash LED
self.flashled = LED(self.fixed, self._fullscreen) # Soft Flash-LED
# Callback für Remote-Tasten einbauen
for button in range(1, 7):
boatdata.switchbank[0].setCallback(button, self.on_remote_key)
print(f"Added remote key {button}")
self.button_clicked = 0 # Geklickter Button vor Loslassen
self.keylock = False
self.pages = profile
@@ -540,6 +549,10 @@ class Frontend(Gtk.Window):
if selected == 6 and self.button_clicked == 1:
self.keylock = False
return True
return self.handle_button(selected)
def handle_button(self, selected):
# Alarm! Only botton "1" so dismiss
if self.boatdata.alarm:
if selected == 1:
@@ -589,6 +602,10 @@ class Frontend(Gtk.Window):
self.curpage.backlight = not self.curpage.backlight
return True
def on_remote_key(self, index, action):
print(f"Remote key {index}: {action}")
return self.handle_button(index)
def on_delete(self, widget, event):
# Einhängepunkt für zukünftige Erweiterungen
# Hier kann der Vorgang noch durch z.B. Benutzerinteraktion
@@ -687,6 +704,7 @@ def init_logging(logdir, logfile='obp60v.log', loglevel=logging.INFO):
console.setLevel(loglevel)
log.addHandler(console)
if __name__ == "__main__":
setproctitle("obp60v")
@@ -701,6 +719,7 @@ if __name__ == "__main__":
boatdata = BoatData()
boatdata.addTank(0)
boatdata.addEngine(0)
boatdata.addSwitchBank(0)
# Basiskonfiguration aus Datei lesen
config = configparser.ConfigParser()

View File

@@ -50,7 +50,7 @@ class Anchor(Page):
self._bd = boatdata
self.zoom = 15
self.app.mapsrv.set_output_size(260, 260)
self.app.mapsrv.get_px_meters(self._bd.lat.getRawValue(), self.zoom)
self.app.mapsrv.get_px_meters(self._bd.lat.getValueRaw(), self.zoom)
self.bgimage = None
self._map_tick = 10
# Vor Hafeneinfahrt Wedel