Skip to content

OpenFairWind/FairWindSK

Repository files navigation

FairWindSK

A QT-based browser designed to be a companion of the Signal K server

Introduction

FairWindSK is part of DYNAMO research projects (now supported by the DataX4Sea project, a research grant from NEC Laboratory of America to test its DataX framework in data crowdsourcing for coastal environmental protection).

The final goal of all the DYNAMO projects is data crowdsourcing for coastal environmental protection and weather/ocean forecasting (numerical) and prediction (AI) models. All results of projects funded by public institutions are open-source and open-data.

FairWindSK is a browser with steroids designed to host SK applications. It is written in C++ 17 and QT6. It now has a single CMake-based cross-platform build path: desktop targets keep the existing Qt WebEngine Widgets implementation, while Android and iOS use a mobile-safe Qt WebView based alternative behind the same source interfaces. The runtime now supervises Signal K restarts as well: if the server drops and comes back, FairWindSK re-discovers the server, reconnects the websocket stream, restores subscriptions, and refreshes server-backed resources so the UI stays consistent with the restarted backend.

Documentation

The FairWindSK desktop

Stable components

  • The desktop Qt/CMake build path for macOS, Linux, Raspberry Pi OS, and Windows, with a shared source structure that also keeps Android and iOS targets in the tree
  • The main FairWindSK shell: Top Bar, Application Area, Bottom Bar, Bottom Bar horizontal drawer, and Application Area vertical drawer
  • Signal K discovery, authentication, REST/websocket connectivity, web-app discovery, and hosted application lifecycle management
  • Automatic Signal K restart recovery, including rediscovery, reconnect, subscription restore, health reporting, and refresh of server-backed UI state
  • The desktop launcher with application tiles, OpenBridge-style page/application management actions, and local desktop app support on desktop targets
  • Core settings flows for main preferences, comfort presets, connection parameters, Signal K path mapping, units, applications, and system/configuration management
  • Comfort preset management for Default, Dawn, Day, Sunset, Dusk, and Night, including QSS editing, configurable palette items, and theme image support
  • Shared touch-first UI building blocks and drawer-hosted dialogs, including touch combo boxes, check boxes, spin boxes, file browsers, icon browsers, color pickers, and scroll surfaces
  • Qt virtual keyboard integration for touch-oriented deployments
  • Touch-oriented diagnostics with per-run logs, crash-report bundle handling, lightweight interaction history, and in-app diagnostics exploration through the shared Bottom Bar drawer
  • Native vessel-operation surfaces for POB (Person Over Board), autopilot, anchor, alarms, and Signal K server status
  • Mature MyData workflows for waypoints, historical track samples, local/remote file browsing and search, and file viewing for images, PDF, and text content
  • The shared MyData resource infrastructure used to list, import, export, edit, and refresh Signal K resources through common models and dialogs
  • Embedded geographic preview support for waypoints and GeoJSON-shaped resources, including Freeboard-assisted focusing when the supporting app is available

Those bars relay on SK web apps invoking their APIs or access the Signal K APIs directly.

Applications are SK Web Apps hosted by the SK server, but they can also be other web applications manually configured by providing the URL.

Applications can also be local desktop applications (as OpenCPN) characterized by a local path URL with the schema file://.

A mechanism to be back on the FairWindSK desktop after being launched is implemented as a SHIFT+TAB hot key on desktop builds.

Components under active development

  • Final Android and iOS validation of the alternate Qt WebView runtime path, including real-device parity checks against the more established desktop WebEngine behavior
  • Deeper MyData authoring and UX polish for routes, regions, notes, and charts, especially for geometry-heavy editing, preview depth, and bulk-management workflows
  • Continued hardening of the newer shared MyData resource editors and collection pages as they expand beyond the long-standing waypoint and file-centric flows
  • Residual Comfort-system cleanup in older designer-driven or custom-painted surfaces so every shell region follows the same preset and contrast rules
  • Continued marine-MFD tuning of touch targets, spacing, and readability across desktop, embedded, and mobile deployments as platform-specific ergonomics are validated in use

Building

The full platform guide now lives in docs/building.md.

Quick summary:

  • macOS, Linux, Raspberry Pi OS, and Windows keep the desktop Qt WebEngine Widgets implementation.
  • Android and iOS now build through an alternate mobile web layer based on Qt WebView and QQuickWidget hosts.
  • Desktop targets download nlohmann/json, QtZeroConf, and QHotkey during the first clean build.
  • On Linux desktop installs, cmake --install build now also installs the FairWindSK desktop launcher. On Raspberry Pi OS installs it additionally enables the system autostart entry, and when OpenPlotter is detected it performs a best-effort copy into the OpenPlotter menu directories.

Generic workflow:

git clone https://github.com/OpenFairWind/FairWindSK.git
cd FairWindSK
cmake -S . -B build
cmake --build build --parallel
cmake --install build

For platform-specific package lists, Qt kit selection, Windows deployment, Raspberry Pi notes, and the current desktop/mobile feature notes, see docs/building.md.

Signal K server on Docker

Release process first publishes the server's modules to npm. Docker images are then built using the just published npm packages. Images (including older versions) are available at Docker Hub and starting from v2 at GitHub Container registry. Going forward use the full image name, including the registry cr.signalk.io. That address will be updated to redirect to the recommended registry where the latest released version can be found.

Release images:

  • cr.signalk.io/signalk/signalk-server:latest
  • cr.signalk.io/signalk/signalk-server:<release tag>, e.g. v1.40.0

Supported os/architectures:

  • linux/amd64
  • linux/arm/v7
  • linux/arm64

Quickstart

Create a directory for persistent configuration

mkdir $HOME/.signalk

You can start a local server on port 3000 with demo data with

docker run --init -it --rm --name signalk-server --publish 3000:3000 --entrypoint /home/node/signalk/bin/signalk-server -v $HOME/.signalk:/home/node/.signalk cr.signalk.io/signalk/signalk-server --sample-nmea0183-data

For real use you need to persist /home/node/.signalk where the server's configuration is stored, with for example

docker run -d --init  --name signalk-server -p 3000:3000 -v $HOME/.signalk:/home/node/.signalk cr.signalk.io/signalk/signalk-server

This will run the server as background process and current directory as the settings directory. You will be prompted to create admin credentials the first time you you access the configuration admin web UI.

Image details and used tags

Signal K Server docker images are based on Ubuntu 20.04 LTS. During build process, Node 16.x is installed including tools required to install or compile plugins. Signalk support mDNS from docker, uses avahi for e.g. mDNS discovery. All required avahi tools and settings are available for user node, also from command line.

Release images

Release images docker/Dockerfile_rel are size optimized and there are only mandatory files in the images. During the release process updated npm packages in the server repo are built and published to npmjs. Release docker image is then built from the published npm packages like Signal K server is installed normally from npmjs.

Development images

Development images docker/Dockerfileinclude all files from the Signal K server repository's master branch and these images are targeted mainly for development and testing. Development images are built off the files in the repo, including the submodules from packages directory.

Development images are tagged <branch> (mainly master) and sha:

docker run --init --name signalk-server -p 3000:3000 -v $HOME/.signalk:/home/node/.signalk cr.signalk.io/signalk/signalk-server:master

Directory structure

  • server files: /home/node/signalk
  • settings files and plugins: /home/node/.signalk

You most probably want to mount /home/node/.signalk from the host or as a volume to persist your settings.

Citing DYNAMO/FairWind in scientific papers

  • Montella, Raffaele, Diana Di Luccio, Livia Marcellino, Ardelio Galletti, Sokol Kosta, Giulio Giunta, and Ian Foster. "Workflow-based automatic processing for internet of floating things crowdsourced data." Future generation computer systems 94 (2019): 103-119. link

  • Di Luccio, Diana, Sokol Kosta, Aniello Castiglione, Antonio Maratea, and Raffaele Montella. "Vessel to shore data movement through the internet of floating things: A microservice platform at the edge." Concurrency and Computation: Practice and Experience 33, no. 4 (2021): e5988. link

  • Montella, Raffaele, Sokol Kosta, and Ian Foster. "DYNAMO: Distributed leisure yacht-carried sensor-network for atmosphere and marine data crowdsourcing applications." In 2018 IEEE International Conference on Cloud Engineering (IC2E), pp. 333-339. IEEE, 2018. link

  • Montella, Raffaele, Diana Di Luccio, Sokol Kosta, Giulio Giunta, and Ian Foster. "Performance, resilience, and security in moving data from the fog to the cloud: the DYNAMO transfer framework approach." In International Conference on Internet and Distributed Computing Systems, pp. 197-208. Cham: Springer International Publishing, 2018. link

  • Di Luccio, Diana, Angelo Riccio, Ardelio Galletti, Giuliano Laccetti, Marco Lapegna, Livia Marcellino, Sokol Kosta, and Raffaele Montella. "Coastal marine data crowdsourcing using the Internet of Floating Things: Improving the results of a water quality model." IEEE Access 8 (2020): 101209-101223. link

  • Montella, Raffaele, Mario Ruggieri, and Sokol Kosta. "A fast, secure, reliable, and resilient data transfer framework for pervasive IoT applications." In IEEE INFOCOM 2018-IEEE conference on computer communications workshops (INFOCOM WKSHPS), pp. 710-715. IEEE, 2018. link

Gallery

The developer team is lead by Prof. Raffaele Montella. Developers

An example of a Signal K web application running wrapped by FairWindSK: The Freeboard-SK chart-plotter application. The Signal K Freeboard-SK application

An example of a Signal K web application running wrapped by FairWindSK: The KIP instrument package application. The Signal K KIP application

The Person over Board bar. If the POB button is pressed, the POB bar popup. FairWindSK raises the standard notifications.mob alarm on the connected Signal K server, creates a regular waypoint resource for the incident, and sets that waypoint as destination. The bar shows the last known position, the bearing to and the distance from the last known position, and the elapsed time. The Person Over Board (POB) Bar

The application settings: here it is possible to manage the applications shown on the desktop. The application settings

My Data: the waypoint management graphical user interface (via Signal K resources) Waypoints

My Data: the file browser Files

My Data: the file searcher File Searcher

My Data: the image viewer Image Viewer

Open-Source external projects

  • OpenBridge a collection of tools and approaches to improve implementation, design and approval of maritime workplaces and equipment
  • QZeroConf a Qt wrapper class for ZeroConf libraries across various platforms.
  • QHotKey a global shortcut/hotkey for Desktop Qt-Applications.

About

A QT based browser designed to be a companion of the Signal K server

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages