Multifunktionsdisplay (MFD) virtuell: OBP60v

Hinweis: Dieses Programm dient in erster Linie dazu die GUI der "echten"
OBP60-Hardware zu designen. Eine eigenständige Nutzung ist selbstverständlich
"auf eigene Gefahr" hin möglich.

Für Informationen zum OBP60 in Hardware siehe:
  - https://open-boat-projects.org/de/diy-multifunktionsdisplay-obp-60/
  - https://obp60-v2-docu.readthedocs.io/de/latest/

Fehlermeldungen und Patches gerne an thomas@hoogi.de senden.

Basishardware
- Raspberry Pi 4 / 4GB

Zusatzhardware:
- NMEA2000 Interface
  - PiCAN-M (hiermit wird entwickelt)
  oder
  - Waveshare RS485 CAN HAT (getestet)
- BME280-Sensor über I2C
- RTC mit DS3231 über I2C
- GPS über USB/seriell angeschlossen

Zusatzsoftware:
- OpenCPN

Abhängigkeiten
- python3-can für das N2K-Interface
- python3-astral für Sonnenauf- und -untergang
- python3-heapdict
- python3-setproctitle

Für GPS und/oder NMEA0183
- python3-serial
- python3-nmea2
  Achtung: in Debian ist Version 1.15, die aktuelle Version 1.19 hat
  weitere Satzarten implementiert. Allerdings ist dort auch kein AIS
  vorhanden.

Für BME280
- python3-smbus2
- python3-bme280

Für den Tracker
- python3-paho-mqtt

Die Konfiguration des virtuellen Geräts erfolgt über die Datei "obp60.conf".
Die Einstellungen sollten vor dem ersten Start überprüft und ggf. angepaßt
werden.

Es gibt zwei Darstellungsmodi: Standard und Vollbild
Der Standardmodus sollte im Design möglichst nahme am Original OBP60 liegen.
Es ist ein Fenster was immer im Vordergrund liegt, sich jedoch auf dem
Bildschirm positionieren läßt.
Der Vollbildmodus ist für das Display des OBP60P gedacht und setzt eine
physische Bildschirmauflösung von 800x480 Pixeln voraus.
Der Modus kann vor dem Programmstart in der Konfigurationsdatei obp60.conf
eingestellt werden:
  [system]
  guistyle = default | fullscreen

Zur Steuerung des Geräts sind 6 Tasten vorhanden. Numeriert von 1 bis 6 von
links nach rechts bzw. von oben nach unten im Vollbildmodus.
Die Tasten können angeklickt werden und führen dann direkt
eine von der jeweiligen Seite abhängige Funktion aus.
Die jeweilige Funktion wird durch ein Symbol oberhalb der Taste dargestellt.
Die Tasten 3 und 4 sind für die Seitennavigation vorgesehen: zurück und vor.
Sie können jedoch von einer Seite bei Bedarf übersteuert werden.

Wischgesten werden simuliert, indem die Maustaste auf einer Tastenfläche
gedrückt und auf einer anderen Taste losgelassen wird.

Folgende Wischfunktionen sind implementiert:
  1. Programmende durch die Wischfunktion "2" -> "1"
  2. Tastensperre an: "6" -> "1"
  3. Tastensperre aus: "1" -> "6"
  4. Systemseite: "4" -> "5"

Routen und Wegepunkte können von OpenCPN empfangen werden. Dazu muß eine
passende serielle Schnittstelle für den NMEA0183-Ausgang definiert werden.
Im System kann diese in der Datei z.B. rc.local aktiviert werden:
  # Create virtual serial connection
  socat pty,rawer,echo=0,group-late=dialout,mode=0660,link=/dev/ttyV0 \
        pty,rawer,echo=0,group-late=dialout,mode=0660,link=/dev/ttyV1 &
OpenCPN sendet dann Datensätze über ttyV0 und dieses Programm
empfängt sie über ttyV1.
