Git Product home page Git Product logo

signalk-server's Introduction

Signal K Server

Signal K logo

npm version npm license PRs Welcome

Open Collective backers and sponsors

Contents

Introduction

Signal K Server is a server application that runs on a central hub in a boat. If you use or develop marine electronics, Signal K Server has something to offer for you.

Boaters and Boat Owners

For boaters, Signal K Server runs in the background and makes functionality and data available to other apps and devices. One of its most used features is to be a wireless AIS and navigation server for popular apps like Navionics, iSailor, iNavX, Aqua Map and WilhelmSK on your phones and tablets.

Signal K Server can also take care of the anchor watch, be a weather station or an automatic logbook for you. A different example, it can turn your boat into a MarineTraffic station which may give free access to the MarineTraffic professional plans. These are all just examples: there is far more to Signal K Server.

If you are a boat owner, you can easily run Signal K Server on a Victron Cerbo GX, RaspberryPi or similar hardware. To take full advantage, you will probably want to connect it to your boat network via NMEA 0183 or NMEA 2000 but it is not a requirement.

Marine Vendors

For Marine vendors who build marine hardware and software, for example those developing navigation, monitoring and tracking systems, Signal K Server is an opportunity to accelerate development and decrease time to market, by taking advantage of a proven, modern and extensible software platform that is open source and available with a permissive Apache 2.0 license. Signal K Server is implemented in Node.js and is easy to integrate into modern systems that run Linux derivatives.

Signal K Server is already running inside products developed by Victron Energy, Airmar Technology and others.

Software Developers & Boat Electronics Hobbyists

There are many boaters who happen to be highly skilled software developers and engineers, who want to build software for themselves and share with others. If you are one of them, Signal K offers you a free, modern and open platform developed by boaters for other boaters like you. Signal K Server features an extensible plugin framework, web applications as well as a rich set of REST and Streaming APIs.

Signal K Server takes care of all the complicated parts of protocol decode, and conversions to and from NMEA2000, NMEA0183 and many more protocols. It can also act as data hub for additional sensors, see the Signal K SensESP project for ESP32.

Signal K Server makes the data available in JSON format according to the Signal K standard specification. This allows developers to bypass all the hurdles typically encountered when wanting to implement something for a boat. Getting started with a plugin is surprisingly easy.

Signal K Platform

Signal K is more than just the Signal K Server, it is a comprehensive platform that encompasses three major components:

  1. The Signal K Data Standard: an open marine data standard. It is a modern data format for marine use, suitable for WiFi, cellphones, tablets and the internet. It is built on standard web technologies including JSON, WebSockets and HTTP. More information on https://signalk.org.
  2. Signal K Server: Software in this GitHub repository and described in this document. Signal K server is a full stack application developed in Node.js. Its back-end multiplexes data from and to NMEA0183, NMEA 2000, Signal K and other marine protocols, as well as WiFi, LAN and Internet, and provides APIs and websockets for access and control. Its front-end provides an extensible web-based application allowing easy configuration and management of server functions and capabilities.
  3. Signal K Plugins and Webapps: Built using the extensibility of Signal K Server with a plugin framework, allows developers to develop applications that easily integrate with Signal K server, extend its capabilities and publish them through npm. All published plugins become available in all existing Signal K server installations, which provides an easy distribution mechanism.

Documentation, Community & Support

Documentation for Signal K Server.

See Github Discussions and Discord (chat).

There is a Signal K Server FAQ Frequently Asked Questions on the Wiki, including How do I integrate with NMEA2000 (CAN bus).

How to get Signal K Server?

For the typical boater, not being a software developer nor electrical engineer, the best option is to get a (commercially available) product that already has Signal K Server inside. These are the currently available devices:

For a more technical DIY oriented boater, a RaspberryPi based setup offers a very cost-attractive alternative. Read this FAQ entry to learn how to connect a RaspberryPi to an NMEA2000 network.

These prebuilt images for RaspberryPis take away most of the complexity involved from the software side:

You can run Signal K Server in Docker:

And an installer for Windows:

Another level up, this document explains how to install Signal K Server, as well as its dependencies, on a RaspberryPi that is already running Raspberry Pi OS:

Last, here is how to install the Signal K Server application from NPM:

Prerequisites:

  • Node.js version 18 with latest npm installed (the server works for the time being on Node version >=16)

    $ sudo npm install -g signalk-server

Now you can start the server with sample data:

  • NMEA0183 sample data: signalk-server --sample-nmea0183-data
  • NMEA2000 sample data: signalk-server --sample-n2k-data

To generate your own vessel settings file and configure the server to start automatically, run:

$ sudo signalk-server-setup

Configuration and use

Opening the Signal K Server Admin UI

For all described options of running Signal K Server, ie. on an Airmar Smartboat, a Victron Cerbo GX or a RaspberryPi, the way to configure it is via the Admin UI. Open the Admin UI by navigating to http://[ipaddress]:3000/. Here is what it will look like when opened up on a Victron Cerbo GX:

image

The top of the screen shows some actual stats. Below that is a pane showing all configured Connections & Plugins. These are the plugins shown in above screenshot:

  • sk-to-nmea0183 is the plugin that makes navigation data available on WiFi and/or LAN (TCP); typically used by apps on phones and tablets.
  • signalk-n2kais-nmea0183 is another plugin, does the same, but then for AIS data
  • venus is a plugin that connects to the data bus inside the Victron GX device
  • n2k-on-ve.can-socket is not a plugin but a data connection. This one defines the Signal K Server connection to the NMEA2000 CAN-bus port.

Creating an admin account

The first thing to do is create an admin account. This is done in the Settings -> Users page:

image

Besides recommended from a security point of view, setting an admin account also enables the Restart button.

After creating the account, the server needs to be restarted. How to do that depends on how you are using Signal K Server: self installed from NPM, embedded on a commercial device or otherwise. Power cycling the device that Signal K Server is running on will always work.

Setting up data connections

This screenshot shows how to setup an NMEA0183 connection:

image

Installing Plugins and Webapps

The Appstore menu is where to add, update and remove Plugins and Webapps:

image

The entries with the blue icons are Webapps. The entries with the green icons are Plugins. An internet connection is required for Signal K Server to fetch information about availble Plugins and webapps.

Typically, plugins make for functionality such as protocol conversion. And Webapps provide a user interface, up to a fully featured Chartplotter that runs in a web browser:

image

To install Plugins and Webapps, click the "Available" menu on the left. It will show a categorised list of all available Plugins:

image

It is also possible to search for and browse Plugins and Webapps in the NPM registry:

Restart after Configuration Changes and Plugin/Webapp Installation

Most configuration changes and installing add-ons from the App store require a server restart to take effect. See Restart button at the top right or restart the server manually (details depend on your setup). If the restart button is not showing, that is usually because security is not activate and there is no Admin user.

Configuring Plugins

After the restart, the new Plugin needs to be enabled and configured. See the Server -> Plugin Config menu:

image

Vessel Base Data and Server Settings

image

image

You can change the admin application's top left logo by placing a SVG file named logo.svg in the settings directory (default: $HOME/.signalk/).

Server Log

If the Admin UI is available, go to Server -> Server Log to see the server's log. Different errors are logged there, so in case of trouble make sure to check not only the Admin UI but also the server log.

To activate more details debug logging enter the the names of the components you want to debug. Some of the debug keys are listed with toggles to activate them.

With the Remember debug setting enabled, the configured debug keys parameter is stored in a settings file, ie. survives a server restart.

image

To enable debugging without going through the Admin UI, see the file ~/.signalk/debug and add the required debug keys there. For example: @signalk/aisreporter,signalk-server:udp-provider.

Supported PGNs, sentences and more

Development

Further reading

The documents provide more details about developing Webapps or Plugings for Signal K Server, as well as working on the server itself:

Install from git

git clone https://github.com/SignalK/signalk-server.git
cd signalk-server
npm install
npm run build:all

Start the server with sample data:

  • NMEA0183 sample data: bin/nmea-from-file
  • NMEA2000 sample data: bin/n2k-from-file

This will start the server with a sample configuration file and the server will start playing back data from a sample file under samples/. The data is available immediately via the REST interface at https://localhost:3000/signalk/v1/api/.

This small demo shows how to connect the Signal K Server WebSocket interface from the command line:

npm install -g wscat2
wscat 'ws://localhost:3000/signalk/v1/stream?subscribe=all'

Sponsoring Signal K

See Signal K on Open Collective.

License

Copyright [2015] [Fabian Tollenaar, Teppo Kurki and Signal K committers]

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

signalk-server's People

Contributors

chacal avatar cmotelet avatar codefoster avatar davidsanner avatar e-sailing avatar emilecantin avatar fabdrol avatar greenkeeper[bot] avatar jacokoster avatar jaittola avatar joabakk avatar kegustafsson avatar leonardgable avatar marcelrv avatar matsa avatar mpvader avatar mshulman avatar nohal avatar panaaj avatar ph1l avatar sailoog avatar sbender9 avatar sergei avatar sumps avatar timmathews avatar tjkurki avatar tkurki avatar vokkim avatar webmasterkai avatar wouterdebie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

signalk-server's Issues

subscriptions not working

I can only subscribe to the entire data model but not to parts of it. Is this feature implemented?

Serialport provider error handling broken?

Following log excerpt illustrates the problem:

Jun 11 19:20:32 sophia signalk-server[7438]: signalk-server running at 0.0.0.0:3000
Jun 11 19:20:32 sophia signalk-server[7438]: /opt/signalk-server/providers/serialport.js:38
Jun 11 19:20:32 sophia signalk-server[7438]: this.serial.unpipe(this);
Jun 11 19:20:32 sophia signalk-server[7438]: ^
Jun 11 19:20:32 sophia signalk-server[7438]: TypeError: this.serial.unpipe is not a function
Jun 11 19:20:32 sophia signalk-server[7438]: at SerialStream.start (/opt/signalk-server/providers/serialport.js:38:17)
Jun 11 19:20:32 sophia signalk-server[7438]: at emitOne (events.js:77:13)
Jun 11 19:20:32 sophia signalk-server[7438]: at SerialPort.emit (events.js:169:7)
Jun 11 19:20:32 sophia signalk-server[7438]: at SerialPort.<anonymous> (/opt/signalk-server/node_modules/serialport/lib/serialport.js:103:14)
Jun 11 19:20:32 sophia signalk-server[7438]: at SerialPort._error (/opt/signalk-server/node_modules/serialport/lib/serialport.js:186:5)
Jun 11 19:20:32 sophia signalk-server[7438]: at /opt/signalk-server/node_modules/serialport/lib/serialport.js:210:19
Jun 11 19:20:32 sophia systemd[1]: signalk-server.service: main process exited, code=exited, status=1/FAILURE

Help for adding self made data

Hi,

I want to aggregate nmea0183 and possibly n2k data, but also some of my own data. It's all well and good to expand 0183 sentences and n2k sentences, but at some stage people will want to add custom data to the stream. I am looking for a simple way of adding data, type "select category, name the variable, update the data" in order to add the data into the right format and into the server stream. Am I on the right track?

Add Bonjour Service

A client should be able to connect with less or zero configuration.

Therefore a Bonjour service should be offered.

The service names could be:
"signalk-tcp" for the tcp service,
"signalk-ws" for the WebSocket.

Subscription by path transmits deltas with extra values

If you subscribe to a single path like navigation.speedOverGround you will get all the deltas that have that path as a whole, so for example you will get deltas from NMEA0183 VTG containing not just navigation.speedOverGround but also navigation.courseOverGround*.

Use ws:// endpoint

/signalk should return ws:// urls instead of http:// for ws endpoint. Add the extra s in case we have ssl.

Value paths under 'self'

Currently self is not really an alias for "this boat", because you can only retrieve it as a whole, not any paths under it.

mdns interface selection

I have a RPI with AP on eth0:0 (openplotter). When enabling mdns, the server advertises the ip address of the AP (192.168.7.7) as well as the LAN IP. All good when I am connected to this AP, but when on LAN, clients (nmearemote) will select this IP address instead of the LAN address (192.168.0.18). This may be a user fault, but if there was some sort of configuration element for mdns where I could tell the server not to advertise on this interface (eth0:0), it would solve my issue.

I found a link that explains some of this, but I don´t understand how to implement it:
http://agnat.github.io/node_mdns/user_guide.html#network_interfaces

bin scripts require bash

not all embedded systems can run bash. the shell scripts including in the distribution directory should be re-written to use sh syntax.

Todo: improve configuration handling

Configuration is quite important, but right now it's not standardised and definitely not easy to use. Not a problem a.t.m., but if there would be a multitude of providers to choose from this would become an issue.

Todo:

  • Create a way for Provider authors to register custom CLI flags
  • Namespacing of config keys, to prevent collisions between Providers
  • Implement a GUI to edit the server config at runtime
  • Spin config off into a separate NPM module

Update the whole Signal K Node to latest (stable) Node

All Signal K node code specifies pretty old Node versions. We should upgrade to stable, which at the moment is 5.7.1.

  • package.jsons
  • installation instructions & other documentation
  • travis configs

I don't think there are any code level changes needed. We could also leverage new apis like network stuff to figure out broadcast address for local network.

Installation failure with no dns_sd.h present

Raspberry pi 2
Debian mini with lxde, kernel 3.18.8-v7+
node v 0.12.0
bower v1.4.1

3280 error Linux 3.18.8-v7+
3281 error argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
3282 error node v0.12.0
3283 error npm v2.5.1
3284 error code ELIFECYCLE
3285 error [email protected] install: node-gyp rebuild
3285 error Exit status 1
3286 error Failed at the [email protected] install script 'node-gyp rebuild'.

Constructor function

  • Move server initialisation into a constructor function
  • Attach all moving parts via require('part')(app), to detach server from global scope

More robust server

A single misbehaving producer can stop the whole server. The error reported in SignalK/nmea0183-signalk#22 stops the server.

TypeError: Cannot call method 'toUpperCase' of undefined
    at NMEA0183.magneticVariaton (/Users/tkurki/git-workspace/signalk/server-node/node_modules/nmea0183-signalk/lib/NMEA0183.js:116:15)
    at null._decoder (/Users/tkurki/git-workspace/signalk/server-node/node_modules/nmea0183-signalk/codecs/RMC.js:86:48)
    at NMEA0183.decode (/Users/tkurki/git-workspace/signalk/server-node/node_modules/nmea0183-signalk/lib/NMEA0183.js:220:24)
    at Parser._decode (/Users/tkurki/git-workspace/signalk/server-node/node_modules/nmea0183-signalk/lib/index.js:91:44)
    at /Users/tkurki/git-workspace/signalk/server-node/node_modules/nmea0183-signalk/lib/index.js:134:22
    at Function.forEach (/Users/tkurki/git-workspace/signalk/server-node/node_modules/lodash/dist/lodash.js:3297:15)
    at Parser._transform (/Users/tkurki/git-workspace/signalk/server-node/node_modules/nmea0183-signalk/lib/index.js:131:5)
    at Parser.Transform._read (_stream_transform.js:179:10)
    at Parser.Transform._write (_stream_transform.js:167:12)
    at doWrite (_stream_writable.js:226:10)

execute piped provider no longer working?

looks like the "provider/execute" pipedProvider may have picked up a problem in one of the latest commits.

For instance, the command

bin/signalk-server -s settings/commandline-provider-settings.json

causes the server to crash after a few seconds with an out of memory error

==== JS stack trace =========================================

Security context: 0x39185c51 <JS Object>
    2: /* anonymous */(aka /* anonymous */) [/home/mauro/signalk-server-node/node_modules/signalk-multiplexer/node_modules/lodash/index.js:~2359] [pc=0x47a1e268] (this=0x391080c9 <undefined>,srcValue=0x391080c9 <undefined>,key=105138106)
    3: arguments adaptor frame: 3->2
    4: arrayEach(aka arrayEach) [/home/mauro/signalk-server-node/node_modules/signalk-multiplexer/node_modules/lodash/index.js...

FATAL ERROR: invalid array length Allocation failed - process out of memory

I also tried with simple Unix commands such as tail -f, which used to work correctly in previous commits.

Update installation instructions

"As mentioned yesterday, I did a re-install from scratch. It is hard to say where the problems started, but my assumption is, that the issues where cause by strictly following the installation procedure from the signal K website.

$ sudo apt-get update
$ sudo apt-get install curl git build-essential
$ curl -sL https://deb.nodesource.com/setup | sudo bash -
$ sudo apt-get install nodejs

In the first trial, I ran apt-get install nodejs. This time, I stopped after installing the build-essentials and followed the installation procedure for nodejs for RASPI at
https://learn.adafruit.com/node-embedded-development/installing-node-dot-js
Interesting enough, it run through this time. So obviously, the sudo apt-get install nodejs left something irreversible in the system.
I think it would be helpful for other users of RASPI to make a clear comment in the installation description to follow the alternative path."

Apple Push Notification Support

By supporting Apple Push Notifications an Internet-connected server could send notifications to Apple devices, including iPhones and Apple Watches.

Conversion to NMEA0183

The current NMEA0183 over tcp support in the Signal K Node Server is on by default and available on port 10110 (the port registered for NMEA0183 over tcp).

The implementation is currently really naive and doesn't convert anything yet, it just makes any NMEA0183 input processed with providers/nmea0183-signalk available over tcp in addition to converting it to SK.

However the ability to convert other inputs to NMEA0183 would be useful. In my own case I have most instruments on N2K but my Simrad TP32 only accepts NMEA0183.

Todo: isolate providers from server "app" object

Providers should only have access to their config namespace and any methods required to register custom functionality (namespaced) - e.g. registering REST routes if that functionality is added.

Todo:

  • Clean up Provider.js
  • Set up a "redacted" app object which the provider can use to interface with the app without affecting core app functionality or other providers.

Add TLS Value to mDNS TXT Record

The mDNS responses should include a TLS key/value pair if the connection supports it. This is less necessary for HTTP/WS service records as the server should perform a 301 redirect if TLS is configured. However, for future lower-level transports (e.g. directly over UDP/TCP or a PUB/SUB protocol like NATS or MQTT), it will be useful for the client to know that it should initiate the connection with TLS (or upgrade via a mechanism like STARTLS).

tcp support

Add possibility to get Signalk stream over tcp.

Update consumers.md

  • refers to socket.io
  • imho the code should be replaced with a simple html5 consumer (the code on the page being out of date is a good reason why something runnable is better than doc)

Tree Model for Updated Data

To make parsing of updated data easier and to have only model to parse, it would be nice to get the updated data also in the tree model.

Further a nice to have feature would be to receive the whole tree on connection.
This solves the problem to open a connection to the "full tree URL", disconnecting after receiving a full tree and opening a connection to the "update tree URL" to receive only the updates.

Use timestamp in GPS for server

It would be nice if there would be a setting (similar to the config.server.clock.source in the java server) so that the server uses the timestamps from the GPS (if available) rather than the server's own clock.

If one uses a Rapsberry Pi as a platform, it does not have an internal battery to keep the clock updated.

(Possible) memory leak in the N2K provider

@tkurki: when running the n2k config for a while, I get a memory leak. Have you experienced this as well?

(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
    at EndIgnoringPassThrough.addListener (events.js:160:15)
    at EndIgnoringPassThrough.Readable.on (_stream_readable.js:707:33)
    at EndIgnoringPassThrough.once (events.js:185:8)
    at ReadStream.Readable.pipe (_stream_readable.js:559:8)
    at FileStream.startStream (/Users/Fabian/Dropbox/Sites/SignalK/signalk-server-node/providers/filestream.js:46:21)
    at ReadStream.emit (events.js:117:20)
    at _stream_readable.js:943:16
    at process._tickCallback (node.js:419:13)

Use dynamic uuid

Current example settings files use a hard coded identity (uuid). This will probably lead to cases where people just use the examples and never change the uuid and once they share their data the whole idea of using practically unique uuid's will be wasted.

The server should create a persistent uuid upon first startup. The uuid should be placed someplace where it is available over reinstalls or several different installations on the same computer.

Are sources working right?

Maybe I'm misunderstanding how sources work but I'm getting strange behaviours...
First of all this is my settings file:

{
    "vessel" : {
        "mmsi" : "000000000",
        "uuid" : "urn:mrn:imo:mmsi:000000000"
    },
    "pipedProviders" : [{
            "pipeElements" : [{
                    "type" : "providers/udp",
                    "options" : {
                        "port" : "55556"
                    }
                }, {
                    "type" : "providers/liner"
                }, {
                    "type" : "providers/from_json"
                }
            ],
            "id" : "I2Csensors"
        }, {
            "pipeElements" : [{
                    "type" : "providers/udp",
                    "options" : {
                        "port" : "55557"
                    }
                }, {
                    "type" : "providers/liner"
                }, {
                    "type" : "providers/from_json"
                }
            ],
            "id" : "1Wsensors"
        }
    ],
    "interfaces" : {}
}

I have connected I2C sensors and 1W sensors to the GPIO of a raspberry 3 and all is working right. I send delta format to the providers with this format:

{
  "context": "vessels.urn:mrn:imo:mmsi:000000000",
  "updates": [
    {
      "source": {
        "type": "1W",
        "src": "0316013faeff"
      },
      "timestamp": "2016-07-28T18:18:46.074Z",
      "values": [
        {
          "path": "propulsion.engine1.temperature",
          "value": 301.837
        }
      ]
    }
  ]
}

This is what I'm getting in full format:

...
{"propulsion": {
  "engine1": {
    "temperature": {
      "value": 301.837,
      "$source": "1Wsensors.0316013faeff",
      "timestamp": "2016-07-28T18:18:46.074Z"
    }
  }
}
}
...
{"environment": {
  "outside": {
    "pressure": {
      "value": 101365.997314,
      "$source": "I2Csensors.BMP180",
      "timestamp": "2016-07-28T18:18:46.297Z"
    },
    "temperature": {
      "value": 302.25,
      "$source": "I2Csensors.BMP180",
      "timestamp": "2016-07-28T18:18:46.297Z"
    }
  },
  "inside": {
    "humidity": {
      "value": 58.1872024536,
      "$source": "I2Csensors.HTU21D",
      "timestamp": "2016-07-28T18:18:46.297Z"
    },
    "temperature": {
      "value": 302.68,
      "$source": "I2Csensors.HTU21D",
      "timestamp": "2016-07-28T18:18:46.297Z"
    }
  }
}
}
...

As you can see, sources have this format:

$source:"<provider id>.<sensor id>"
$source":"1Wsensors.0316013faeff"
$source":"I2Csensors.BMP180"
$source":"I2Csensors.HTU21D"

But I would like to have only one provider in my settings file with "id" : "sensors" and to have this format in all sources:

$source:"<provider id>.<type>.<sensor id>"
$source":"sensors.1W.0316013faeff"
$source":"sensors.I2C.BMP180"
$source":"sensors.I2C.HTU21D"

According to Signal K definition, sources can contain this properties: label, type, src, pgn, sentence, talker, +any string. Being required label and type. And this is my problem, whatever I put in the delta message when I send to signal k server, only the src property affects the $source path. With the rest of properties I only get:

$source:"<provider id>.XX"
$source":"sensors.XX"

Is it possible that signalk-server-node is only working for NMEA 0183/2000 data and not for custom data?

Mapping/enrichment layer

One should be able to add mapping/enrichment/correction layer to the server.

It should be easy to add logic such as sample averaging (to reduce noise), device calibration, or analysis (computing TWS/TWA gives AWS/AWA/Speed/Heading).

Most implementations do all of these calculations per display. The problem with that is that you can have different configurations per display, so one display might show depth from waterline while another shows depth from maximum draft. Averaging and calculations are also done per display. Higher end systems (aimed primarily at race sailboats) often do have an aggregator for this reason.

MQTT, STOMP

Am I right in assuming that there is no provision for MQTT or STOMP in the current version?
I find them in the java server, but nothing in the node server.

TCP provider doesn't always reconnect

(1) The TCP provider doesn't reconnect unless reconnect is explicitly set to true in config, due to a OR issue.

(2) If the TCP server disconnects, stream.prototype.end is called on TCP provider. This sets reconnect to false, causing the provider to never reconnect with the TCP server.

Conversion to N2K

For example a configuration with an NMEA0183 AIS and N2K MFD it would be useful to be able to convert input data (NMEA0183 or generic SK) to N2K and output it via NGT-1.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.