Arbeit an Ankerseite und NMEA0183
This commit is contained in:
@@ -9,10 +9,20 @@ Daten
|
||||
- aktuelle Position des Schiffs
|
||||
- aktuelle Wassertiefe an Schiffsposition
|
||||
- aktuelle Schiffsausrichtung bearing/heading
|
||||
- aktuelle Windrichtung
|
||||
- aktuelle Windstärke
|
||||
- aktuelle Windrichtung (wahr)
|
||||
- aktuelle Windstärke (wahr)
|
||||
- Alarm aktiv J/N
|
||||
- Alarmradius
|
||||
- GPS Abweichung/ Fehler in der Horizontalen
|
||||
|
||||
Darstellung:
|
||||
- Modi:
|
||||
- Anker oben / unten
|
||||
- Nord ist oben
|
||||
|
||||
Es gibt verschiedene Unterseiten
|
||||
- Normalansicht
|
||||
- Konfigurationsseite
|
||||
|
||||
"""
|
||||
|
||||
@@ -26,9 +36,13 @@ class Anchor(Page):
|
||||
def __init__(self, pageno, cfg, boatdata):
|
||||
super().__init__(pageno, cfg, boatdata)
|
||||
self.sym_anchor = cairo.ImageSurface.create_from_png(os.path.join(cfg['imgpath'], "anchor.png"))
|
||||
self.buttonlabel[1] = 'DEC'
|
||||
self.buttonlabel[2] = 'INC'
|
||||
self.buttonlabel[5] = 'SET'
|
||||
self.buttonlabel[1] = 'MODE'
|
||||
self.buttonlabel[2] = 'SET'
|
||||
self.buttonlabel[5] = 'ALARM'
|
||||
|
||||
self.mode = 'N' # (N)ormal, (C)onfiguration
|
||||
|
||||
self._bd = boatdata
|
||||
|
||||
# Der sinnvolle Abstand ist abhängig von der Länge der gesteckten Kette
|
||||
# Die initial eingegebene Position des Ankers sollte nactträglich justiert
|
||||
@@ -36,6 +50,7 @@ class Anchor(Page):
|
||||
|
||||
self.chain_length = 60 # maximale Länge die ausgesteckt werden kann
|
||||
self.chain = 35 # aktuell gesteckte Länge
|
||||
self.anchor_set = False
|
||||
self.anchor_lat = 0
|
||||
self.anchor_lon = 0
|
||||
self.anchor_depth = -1
|
||||
@@ -44,12 +59,50 @@ class Anchor(Page):
|
||||
self.heading = -1
|
||||
self.depth = -1
|
||||
self.alarm_range = 20
|
||||
self.alarm_armed = False
|
||||
self.alarm_enabled = False
|
||||
self.alarm = False # Alarm ist ausgelöst und aktiv
|
||||
self.wind_angle = -1
|
||||
|
||||
def handle_key(self, buttonid):
|
||||
if buttonid == 1:
|
||||
if self.mode == 'N':
|
||||
self.mode = 'C'
|
||||
else:
|
||||
self.mode = 'N'
|
||||
return True
|
||||
if buttonid == 2:
|
||||
if not self.anchor_set:
|
||||
self.anchor_lat = self._bd.lat
|
||||
self.anchor_lon = self._bd.lon
|
||||
self.anchor_set = True
|
||||
else:
|
||||
self.anchor_set = False
|
||||
if self.buttonid == 5:
|
||||
# Bei aktivem Alarm kann mit dieser Taste der Alarm zurückgesetzt
|
||||
# werden
|
||||
if self.alarm:
|
||||
self.alarm = False
|
||||
self.buttonlabel[5] = 'ALARM'
|
||||
if self.alarm_enabled:
|
||||
self.alarm_enabled = False
|
||||
self.buttonlabel[5] = 'ALARM'
|
||||
else:
|
||||
self.buttonlabel[5] = 'OFF'
|
||||
return False
|
||||
|
||||
def draw(self, ctx):
|
||||
|
||||
"""
|
||||
value1 = LAT
|
||||
value2 = LON
|
||||
value3 = HDOP
|
||||
value4 = DBS
|
||||
value5 = TWD
|
||||
value6 = TWS
|
||||
"""
|
||||
|
||||
# self.anchor_lat =
|
||||
|
||||
# Name
|
||||
ctx.select_font_face("Ubuntu", cairo.FontSlant.NORMAL, cairo.FontWeight.BOLD)
|
||||
ctx.set_font_size(20)
|
||||
@@ -63,10 +116,9 @@ class Anchor(Page):
|
||||
ctx.move_to(2, 70)
|
||||
ctx.show_text("Alarm: off")
|
||||
ctx.move_to(320, 70)
|
||||
ctx.show_text("45 m")
|
||||
ctx.show_text(f"{self.chain} m")
|
||||
ctx.stroke()
|
||||
|
||||
|
||||
# Spezialseite
|
||||
cx = 200
|
||||
cy = 150
|
||||
@@ -80,3 +132,17 @@ class Anchor(Page):
|
||||
ctx.set_source_surface(self.sym_anchor, cx-8, cy-8)
|
||||
ctx.paint()
|
||||
ctx.restore()
|
||||
|
||||
# Boot zeichnen
|
||||
# Heading beachten
|
||||
|
||||
|
||||
# Windpfeil zeichnen
|
||||
# TWD / TWS
|
||||
# boatdata.value(TWD)
|
||||
p = ((cx, cy - r + 25), (cx - 12, cy - r - 4), (cx, cy - r + 6), (cx + 12, cy - r - 4), (cx, cy - r + 25))
|
||||
wind = self.rotate((cx, cy), p, 62)
|
||||
ctx.move_to(*wind[0])
|
||||
for point in wind[1:]:
|
||||
ctx.line_to(*point)
|
||||
ctx.fill()
|
||||
|
||||
Reference in New Issue
Block a user