Tracker verbessert, lokales Tracking vorbereitet

This commit is contained in:
Thomas Hooge 2025-09-21 10:00:56 +02:00
parent e5646b6f27
commit f0ebdd0201
4 changed files with 60 additions and 7 deletions

View File

@ -41,12 +41,13 @@ config = ~/.opencpn/opencpn.conf
type = NONE
host = 127.0.0.1
port = 80
path = /
ssl = false
username = demo
password = secret
mqtt_host = 127.0.0.1
mqtt_port = 1883
mqtt_ssl = False
mqtt_ssl = false
mqtt_user = demo
mqtt_pass = 123456
trace = false
@ -134,4 +135,3 @@ type = Rudder
[page10]
type = SkyView

View File

@ -120,6 +120,7 @@ __email__ = "thomas@hoogi.de"
__status__ = "Development"
# Standardkonfiguration, kann durch Konfigdatei überschrieben werden
# TODO prüfen ob defaults ziehen wenn kein Eintrag in Konfigdatei
cfg = {
'cfgfile': 'obp60v.conf',
'logdir': '~/.local/share/obp60v',
@ -127,6 +128,7 @@ cfg = {
'loglevel': 3,
'imgpath': os.path.join(sys.path[0], 'images'),
'audiopath': os.path.join(sys.path[0], 'audio'),
'histpath' = '~/.local/lib/obp60v',
'deviceid': 100,
'manufcode': 2046, # Open Boat Projects (OBP)
'devfunc': 120, # Display
@ -804,10 +806,13 @@ if __name__ == "__main__":
log.info("Networking enabled")
t_rxd_net = threading.Thread(target=rxd_network, args=(cfg['net_port'],cfg['net_addr']))
t_rxd_net.start()
if cfg['tracker']['type'] != 'NONE':
if cfg['tracker']['type'] == 'NONE':
log.info(f"Tracking enabled, mode {cfg['tracker']['type']}")
#appdata.track.set_type( cfg['tracker']['type'])
t_tracker = threading.Thread(target=appdata.track.mqtt_tracker, args=(cfg['tracker'],cfg['boat'],appdata,boatdata))
if cfg['tracker']['type'] == 'HERO':
t_tracker = threading.Thread(target=appdata.track.mqtt_tracker, args=(cfg['tracker'],cfg['boat'],appdata,boatdata))
elif cfg['tracker']['type'] IN ['LOCAL', 'SDCARD']:
t_tracker = threading.Thread(target=appdata.track.local_tracker, args=(cfg['tracker'],cfg['boat'],appdata,boatdata))
t_tracker.start()
if not cfg['simulation']:
if cfg['bme280']:

View File

@ -11,7 +11,7 @@ Es gibt zwei Modi: Track und Race
Um versehentliches Umschalten zu vermeiden ist eine Nachfrage
integriert.
- currentry only Ragatta hero supported
- Momentan wird nur Regatta Hero unterstützt
Behandlung von Verbindungsabbrüchen:
- on_disconnect
@ -196,6 +196,20 @@ class RaceTracker(Page):
ctx.move_to(x, y)
ctx.show_text("race officer to get configuration data.")
def draw_local(self, ctx):
x = 8
y = 50
ctx.select_font_face("Ubuntu", cairo.FontSlant.NORMAL, cairo.FontWeight.BOLD)
ctx.set_font_size(24)
ctx.move_to(x, y)
ctx.show_text("Local Tracking")
# Anzeige
# - LAT, LON
# - bisher gespeicherte Anzahl Positionen
# - Zeitabstand zwischen den einzelnen Messungen
# - Hinweis wo gespeichert wird
def draw_normal(self, ctx):
ctx.select_font_face("DSEG7 Classic")

View File

@ -3,9 +3,17 @@ Tracker-Daten
Mögliche Typen:
HERO - Regatta Hero
SDCARD
LOCAL - gpx Datei
SDCARD - nur für ESP32 relevant
LOCAL - Logdatei. GPX ist ungeeignet, weil das Gerät zu jedem Zeitpunkt
ausgeschaltet werden kann und somit die Datei in einem
ungültigen Zustand sein kann.
Es wird eine Datei track.log.geschrieben.
Um fehlende Daten festzustellen wird ein fortlaufender Zähler
geschrieben.
SERVER - spezielle Software benötigt, kann auch ein Raspi an Bord sein
Der Tracker sendet einen HTTP-POST. Der Server speichert
die Daten für mehrere Geräte. Vorläufiger Servername:
trackserver
NONE - kein Tracking
Wenn die Verbindung zum Server im Internet nicht funktioniert, werden
@ -119,6 +127,32 @@ class Tracker():
def set_active(self, newval):
self.activated = newval
def local_tracker(self, cfg, boat, appdata, boatdata):
# TODO / WIP
self.log.info("Local tracker enabled")
# Zugriff auf Boatdata: Referenzen für leichten schnellen Zugriff
bv_lat = boatdata.getRef("LAT")
bv_lon = boatdata.getRef("LON")
bv_hdop = boatdata.getRef("HDOP")
bv_tspos = boatdata.getRef("TSPOS")
self.local_dt = 15
self.local_lfdno = 0
trackerfile = "/tmp/test.log" # TODO Konfiguration lesen
fh = open(trackerfile, 'a+')
while not appdata.shutdown:
time.sleep(self.local_dt)
self.local_lfdno += 1
data = f"{},{},{},{}\n".format(
self.local_lfdno,
bv_tspos.getValueRaw(),
bv_lat.getValueRaw(),
bv_lon.getValueRaw(),
bv_hdop.getValueRaw())
fh.write(data)
fh.close()
def set_hero_raceid(self, newraceid):
self.hero_raceid = newraceid