Tracker verbessert, lokales Tracking vorbereitet
This commit is contained in:
parent
e5646b6f27
commit
f0ebdd0201
|
@ -41,12 +41,13 @@ config = ~/.opencpn/opencpn.conf
|
||||||
type = NONE
|
type = NONE
|
||||||
host = 127.0.0.1
|
host = 127.0.0.1
|
||||||
port = 80
|
port = 80
|
||||||
|
path = /
|
||||||
ssl = false
|
ssl = false
|
||||||
username = demo
|
username = demo
|
||||||
password = secret
|
password = secret
|
||||||
mqtt_host = 127.0.0.1
|
mqtt_host = 127.0.0.1
|
||||||
mqtt_port = 1883
|
mqtt_port = 1883
|
||||||
mqtt_ssl = False
|
mqtt_ssl = false
|
||||||
mqtt_user = demo
|
mqtt_user = demo
|
||||||
mqtt_pass = 123456
|
mqtt_pass = 123456
|
||||||
trace = false
|
trace = false
|
||||||
|
@ -134,4 +135,3 @@ type = Rudder
|
||||||
|
|
||||||
[page10]
|
[page10]
|
||||||
type = SkyView
|
type = SkyView
|
||||||
|
|
||||||
|
|
|
@ -120,6 +120,7 @@ __email__ = "thomas@hoogi.de"
|
||||||
__status__ = "Development"
|
__status__ = "Development"
|
||||||
|
|
||||||
# Standardkonfiguration, kann durch Konfigdatei überschrieben werden
|
# Standardkonfiguration, kann durch Konfigdatei überschrieben werden
|
||||||
|
# TODO prüfen ob defaults ziehen wenn kein Eintrag in Konfigdatei
|
||||||
cfg = {
|
cfg = {
|
||||||
'cfgfile': 'obp60v.conf',
|
'cfgfile': 'obp60v.conf',
|
||||||
'logdir': '~/.local/share/obp60v',
|
'logdir': '~/.local/share/obp60v',
|
||||||
|
@ -127,6 +128,7 @@ cfg = {
|
||||||
'loglevel': 3,
|
'loglevel': 3,
|
||||||
'imgpath': os.path.join(sys.path[0], 'images'),
|
'imgpath': os.path.join(sys.path[0], 'images'),
|
||||||
'audiopath': os.path.join(sys.path[0], 'audio'),
|
'audiopath': os.path.join(sys.path[0], 'audio'),
|
||||||
|
'histpath' = '~/.local/lib/obp60v',
|
||||||
'deviceid': 100,
|
'deviceid': 100,
|
||||||
'manufcode': 2046, # Open Boat Projects (OBP)
|
'manufcode': 2046, # Open Boat Projects (OBP)
|
||||||
'devfunc': 120, # Display
|
'devfunc': 120, # Display
|
||||||
|
@ -804,10 +806,13 @@ if __name__ == "__main__":
|
||||||
log.info("Networking enabled")
|
log.info("Networking enabled")
|
||||||
t_rxd_net = threading.Thread(target=rxd_network, args=(cfg['net_port'],cfg['net_addr']))
|
t_rxd_net = threading.Thread(target=rxd_network, args=(cfg['net_port'],cfg['net_addr']))
|
||||||
t_rxd_net.start()
|
t_rxd_net.start()
|
||||||
if cfg['tracker']['type'] != 'NONE':
|
if cfg['tracker']['type'] == 'NONE':
|
||||||
log.info(f"Tracking enabled, mode {cfg['tracker']['type']}")
|
log.info(f"Tracking enabled, mode {cfg['tracker']['type']}")
|
||||||
#appdata.track.set_type( cfg['tracker']['type'])
|
#appdata.track.set_type( cfg['tracker']['type'])
|
||||||
|
if cfg['tracker']['type'] == 'HERO':
|
||||||
t_tracker = threading.Thread(target=appdata.track.mqtt_tracker, args=(cfg['tracker'],cfg['boat'],appdata,boatdata))
|
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()
|
t_tracker.start()
|
||||||
if not cfg['simulation']:
|
if not cfg['simulation']:
|
||||||
if cfg['bme280']:
|
if cfg['bme280']:
|
||||||
|
|
|
@ -11,7 +11,7 @@ Es gibt zwei Modi: Track und Race
|
||||||
Um versehentliches Umschalten zu vermeiden ist eine Nachfrage
|
Um versehentliches Umschalten zu vermeiden ist eine Nachfrage
|
||||||
integriert.
|
integriert.
|
||||||
|
|
||||||
- currentry only Ragatta hero supported
|
- Momentan wird nur Regatta Hero unterstützt
|
||||||
|
|
||||||
Behandlung von Verbindungsabbrüchen:
|
Behandlung von Verbindungsabbrüchen:
|
||||||
- on_disconnect
|
- on_disconnect
|
||||||
|
@ -196,6 +196,20 @@ class RaceTracker(Page):
|
||||||
ctx.move_to(x, y)
|
ctx.move_to(x, y)
|
||||||
ctx.show_text("race officer to get configuration data.")
|
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):
|
def draw_normal(self, ctx):
|
||||||
|
|
||||||
ctx.select_font_face("DSEG7 Classic")
|
ctx.select_font_face("DSEG7 Classic")
|
||||||
|
|
38
tracker.py
38
tracker.py
|
@ -3,9 +3,17 @@ Tracker-Daten
|
||||||
|
|
||||||
Mögliche Typen:
|
Mögliche Typen:
|
||||||
HERO - Regatta Hero
|
HERO - Regatta Hero
|
||||||
SDCARD
|
SDCARD - nur für ESP32 relevant
|
||||||
LOCAL - gpx Datei
|
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
|
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
|
NONE - kein Tracking
|
||||||
|
|
||||||
Wenn die Verbindung zum Server im Internet nicht funktioniert, werden
|
Wenn die Verbindung zum Server im Internet nicht funktioniert, werden
|
||||||
|
@ -119,6 +127,32 @@ class Tracker():
|
||||||
def set_active(self, newval):
|
def set_active(self, newval):
|
||||||
self.activated = 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):
|
def set_hero_raceid(self, newraceid):
|
||||||
self.hero_raceid = newraceid
|
self.hero_raceid = newraceid
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue