Some work on boatdata: waypoints
This commit is contained in:
parent
cbb5462865
commit
dab2d20006
69
boatdata.py
69
boatdata.py
|
@ -80,8 +80,19 @@ import datetime
|
|||
import time
|
||||
import math
|
||||
import random
|
||||
from enum import Enum
|
||||
from io import StringIO
|
||||
|
||||
#from .lookup import fluidtype
|
||||
from . import lookup
|
||||
from . import routing
|
||||
|
||||
class CardinalDirection(Enum):
|
||||
NORTH = 'N'
|
||||
SOUTH = 'S'
|
||||
EAST = 'E'
|
||||
WEST = 'W'
|
||||
|
||||
|
||||
class BoatValue():
|
||||
"""
|
||||
|
@ -121,7 +132,10 @@ class BoatValue():
|
|||
self.valid = True
|
||||
# if self.history:
|
||||
# TODO es kann mehrere verschiedene Zeitreihen geben!
|
||||
# Implementierung nich unklar.
|
||||
# Implementierung noch unklar.
|
||||
|
||||
def getPlaceholder(self):
|
||||
return self.placeholder
|
||||
|
||||
def enableHistory(self, size, delta_t):
|
||||
if self.history:
|
||||
|
@ -132,6 +146,9 @@ class BoatValue():
|
|||
self.hbuf = HistoryBuffer(size, delta_t)
|
||||
|
||||
def format(self):
|
||||
# TODO kein schöner Code hier!
|
||||
if not type(self.value) in (int, float):
|
||||
return self.value
|
||||
if self.simulated:
|
||||
if self.valname == "xdrVBat":
|
||||
return "{:.1f}".format(random.uniform(11.8, 14.2))
|
||||
|
@ -194,6 +211,7 @@ class BoatValueDate(BoatValue):
|
|||
return formatted
|
||||
|
||||
class BoatValueTime(BoatValue):
|
||||
# timefmt = hh:mm | hh:mm:ss
|
||||
def __init__(self, shortname, timezone='UTC'):
|
||||
super().__init__(shortname)
|
||||
self.tz = timezone
|
||||
|
@ -203,6 +221,7 @@ class BoatValueTime(BoatValue):
|
|||
return formatted
|
||||
|
||||
class BoatValueSpeed(BoatValue):
|
||||
# unit = m/s | kt | km/h
|
||||
# unsigned? Was ist mit Rückwärts?
|
||||
def format(self):
|
||||
if self.simulated:
|
||||
|
@ -216,6 +235,7 @@ class BoatValueSpeed(BoatValue):
|
|||
return formatted
|
||||
|
||||
class BoatValueAngle(BoatValue):
|
||||
# unit = rad | deg
|
||||
# course, wind, heading, bearing
|
||||
# roll, pitch, yaw, rudder, keel
|
||||
def format(self):
|
||||
|
@ -232,6 +252,7 @@ class BoatValueAngle(BoatValue):
|
|||
return self.placeholder
|
||||
|
||||
class BoatValueRotation(BoatValue):
|
||||
# unit = rad | deg
|
||||
# signed
|
||||
def format(self):
|
||||
if self.value < 10 and self.value > -10:
|
||||
|
@ -241,6 +262,7 @@ class BoatValueRotation(BoatValue):
|
|||
return formatted
|
||||
|
||||
class BoatValueDepth(BoatValue):
|
||||
# unit = m | ft
|
||||
# unsigned
|
||||
def format(self):
|
||||
if self.simulated:
|
||||
|
@ -460,6 +482,12 @@ class BoatData():
|
|||
# Sonderdaten
|
||||
self.rotk = BoatValueAngle("xdrRotK", "deg") # Kielrotation
|
||||
|
||||
# Routen
|
||||
self.routes = {}
|
||||
|
||||
# Wegepunkte ohne Routenzuordnung
|
||||
self.wps = {}
|
||||
|
||||
# Maschinen
|
||||
self.engine = {}
|
||||
|
||||
|
@ -512,6 +540,7 @@ class BoatData():
|
|||
'WTemp': self.temp_water,
|
||||
'WPLat': self.wplat,
|
||||
'WPLon': self.wplon,
|
||||
'WPname': self.wpname,
|
||||
'XTE': self.xte,
|
||||
'xdrRotK': self.rotk,
|
||||
'xdrVBat': self.voltage,
|
||||
|
@ -555,19 +584,29 @@ class BoatData():
|
|||
self.sat[prn_num].lastseen = time.time()
|
||||
|
||||
def __str__(self):
|
||||
out = "Boat Data\n"
|
||||
out += f" Voltage: {self.voltage}\n"
|
||||
out += f" Latitude: {self.lat.value}\n"
|
||||
out += f" Longitude: {self.lon.value}\n"
|
||||
out += f" SOG: {self.sog}\n"
|
||||
out = StringIO()
|
||||
out.write("Boat Data\n")
|
||||
out.write(" Voltage: {}\n".format(self.voltage))
|
||||
out.write(" Latitude: {}\n".format(self.lat.format()))
|
||||
out.write(" Longitude: {}\n".format(self.lon.format()))
|
||||
out.write(" SOG: {}\n".format(self.sog.format()))
|
||||
out.write(" Waypoint: {}\n".format(self.wpname.format()))
|
||||
out.write(" Distance: {}\n".format(self.wpdist.format()))
|
||||
out.write(" Bearing: {}\n".format(self.bearing.format()))
|
||||
for e in self.engine.values():
|
||||
out += str(e)
|
||||
out.write(str(e))
|
||||
for t in self.tank.values():
|
||||
out += str(t)
|
||||
out += " Satellite info\n"
|
||||
out.write(str(t))
|
||||
out.write(" Routes\n")
|
||||
for r in self.routes:
|
||||
out.write(" {}".format(r))
|
||||
out.write(" Waypoints\n")
|
||||
for w in self.wps:
|
||||
out.write(" {}".format(w))
|
||||
out.write(" Satellite info\n")
|
||||
for s in self.sat.values():
|
||||
out += " {}".format(str(s))
|
||||
return out
|
||||
out.write(" {}".format(str(s)))
|
||||
return out.getvalue()
|
||||
|
||||
def updateValid(self, age=None):
|
||||
# age: Alter eines Meßwerts in Sekunden
|
||||
|
@ -621,3 +660,11 @@ class BoatData():
|
|||
htype: press, temp, hum
|
||||
"""
|
||||
self.history[htype] = history
|
||||
|
||||
def addRoute(self, route_id):
|
||||
if not route_id in self.routes:
|
||||
self.routes[route_id] = routing.Route()
|
||||
|
||||
def addWaypoint(self, waypoint_id):
|
||||
if not waypoint_id in self.wps:
|
||||
self.wps[waypoint_id] = routing.Waypoint()
|
||||
|
|
11
routing.py
11
routing.py
|
@ -1,15 +1,20 @@
|
|||
'''
|
||||
"""
|
||||
Routes and waypoints
|
||||
'''
|
||||
|
||||
Some sources have number and name, some only something like id
|
||||
|
||||
"""
|
||||
|
||||
class Waypoint():
|
||||
def __init__(self, number, name):
|
||||
self.number = number
|
||||
self.name = name
|
||||
self.lat = None
|
||||
self.lon = None
|
||||
self.lastusage = None # last usage timestamp for housekeeping
|
||||
|
||||
class Route():
|
||||
def __init__(self, number, name)
|
||||
def __init__(self, number, name):
|
||||
self.number = number
|
||||
self.name = name
|
||||
self.wps = dict()
|
||||
|
|
Loading…
Reference in New Issue