Git Product home page Git Product logo

n2k-signalk's Introduction

n2k-signalk

Build Status

NMEA 2000 to Signal K (signalk.github.io) converter. Converts Canboat analyzer JSON output to SignalK JSON.

For mapping NMEA 0183 data to SignalK see nmea0183-signalk.

USAGE

Usage from command line

$ actisense-serial /dev/actisense | analyzer -json 2>/dev/null | n2k-signalk | head -5
{"environment":{"windSpeedApparent":{"value":2.93,"source":{"pgn":"130306","timestamp":"2013-08-24-15:31:50.384","src":"105"}}}}
{"environment":{"windAngleApparent":{"value":341.4,"source":{"pgn":"130306","timestamp":"2013-08-24-15:31:50.384","src":"105"}}}}
{"environment":{"windSpeedApparent":{"value":2.93,"source":{"pgn":"130306","timestamp":"2013-08-24-15:31:50.385","src":"105"}}}}
{"environment":{"windAngleApparent":{"value":341.4,"source":{"pgn":"130306","timestamp":"2013-08-24-15:31:50.385","src":"105"}}}}
{"environment":{"windSpeedApparent":{"value":2.93,"source":{"pgn":"130306","timestamp":"2013-08-24-15:31:50.385","src":"105"}}}}
$ actisense-serial /dev/actisense | analyzer -json 2>/dev/null | n2k-signalk --flat | head -5
{"path":"environment.windSpeedApparent","value":2.93,"source":{"pgn":"130306","timestamp":"2013-08-24-15:31:50.384","src":"105"}}
{"path":"environment.windAngleApparent","value":341.4,"source":{"pgn":"130306","timestamp":"2013-08-24-15:31:50.384","src":"105"}}
{"path":"environment.windSpeedApparent","value":2.93,"source":{"pgn":"130306","timestamp":"2013-08-24-15:31:50.385","src":"105"}}
{"path":"environment.windAngleApparent","value":341.4,"source":{"pgn":"130306","timestamp":"2013-08-24-15:31:50.385","src":"105"}}
{"path":"environment.windSpeedApparent","value":2.93,"source":{"pgn":"130306","timestamp":"2013-08-24-15:31:50.385","src":"105"}}

Usage as stream transformer

See bin/n2k-signalk.

Usage for a single transformation

See bin/demo.js.

Custom Sentences

You can add custom n2k mappings via the Signal K Server plugin mechanism. A plugin can register custom mappings by emitting pgn-to-signalk PropertyValues with a value that is a map with the pgn number has the key and the n2k mappings as the value.

See signalk-over-n2k for an example.

n2k-signalk's People

Contributors

aplathan avatar damianham avatar dependabot[bot] avatar e-sailing avatar fencer avatar free-x avatar godind avatar greenkeeper[bot] avatar jncarter123 avatar lfrancois avatar patg avatar sarfata avatar sbender9 avatar stefanor avatar timmathews avatar tjkurki avatar tkurki avatar virtuvas avatar webmasterkai 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

Watchers

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

n2k-signalk's Issues

PGNs 130310,130311: Environmental parameters

130310: Environmental Parameters

{
  "timestamp": "2015-01-15-16:15:21.650",
  "prio": "5",
  "src": "36",
  "dst": "255",
  "pgn": "130310",
  "description": "Environmental Parameters",
  "fields": {
    "SID": "145"
  }
} 

{
  "timestamp": "2015-01-15-16:15:21.848",
  "prio": "5",
  "src": "17",
  "dst": "255",
  "pgn": "130310",
  "description": "Environmental Parameters"
} 

{
  "timestamp": "2015-01-15-16:15:21.862",
  "prio": "5",
  "src": "130",
  "dst": "255",
  "pgn": "130310",
  "description": "Environmental Parameters",
  "fields": {
    "SID": "154",
    "Outside Ambient Air Temperature": "7.76",
    "Atmospheric Pressure": "1018"
  }
}

130311: Environmental Parameters

{
  "timestamp": "2015-01-15-16:15:17.942",
  "prio": "5",
  "src": "130",
  "dst": "255",
  "pgn": "130311",
  "description": "Environmental Parameters",
  "fields": {
    "SID": "205",
    "Temperature Instance": "Outside",
    "Humidity Instance": "Outside",
    "Temperature": "7.85",
    "Humidity": "75.668",
    "Atmospheric Pressure": "1018"
  }
} 

{
  "timestamp": "2015-01-15-16:15:17.946",
  "prio": "5",
  "src": "41",
  "dst": "255",
  "pgn": "130311",
  "description": "Environmental Parameters",
  "fields": {
    "SID": "177",
    "Temperature Instance": "Inside",
    "Temperature": "13.18"
  }
} 

{
  "timestamp": "2015-01-15-16:15:17.946",
  "prio": "5",
  "src": "41",
  "dst": "255",
  "pgn": "130311",
  "description": "Environmental Parameters",
  "fields": {
    "SID": "177",
    "Temperature Instance": "Engine room",
    "Temperature": "7.76"
  }
} 

{
  "timestamp": "2015-01-15-16:15:17.946",
  "prio": "5",
  "src": "41",
  "dst": "255",
  "pgn": "130311",
  "description": "Environmental Parameters",
  "fields": {
    "SID": "177",
    "Temperature Instance": "Main Cabin",
    "Temperature": "16.93"
  }
}

Not allowed integer values for commonName

Working with the demo server, I found out that sometimes the value for navigation.destination.commonName is the integer value 0, violating the specification which states that only string values are allowed.
At the point of creation, this happens for vessel "urn:mrn:imo:mmsi:276398000" and "urn:mrn:imo:mmsi:276799000".
image

127506 defined as single packet, when it is actually a fast packet

The PGN127506 is defined as a single packet, when it is actually a fast packet of I believe 11 bytes.

can1 19F21229 [8] 60 0B F7 00 00 60 FF FF
can1 19F21229 [8] 61 FF FF FF 90 01 FF FF

can1 19F21229 [8] 80 0B 0D 00 00 60 FF FF
can1 19F21229 [8] 81 FF FF FF 90 01 FF FF

There is also an 8th field for Amp Hours consumed.

I believe the attached diff is what needs to be applied to address this.

I have posted an issue to the canboat repository as well, as that needs fixing as well.l

127506.js.diff.zip

image

PGN 65280 Manufacturer Proprietary single-frame non-addressed / Navico temperature sensor

1969-12-31-16:00:01,481 0   2 255  65280 Manufacturer Proprietary single-frame non-addressed:  Manufacturer Code = Navico; Industry Code = Marine; Data = 0x200000504
{"timestamp":"1969-12-31-16:00:01,485","prio":0,"src":2,"dst":255,"pgn":65280,"description":"Manufacturer Proprietary single-frame non-addressed","fields":{ "Manufacturer Code": "Navico","Industry Code":"Marine","Data":"8589935876"}}

Two decades error in environment.outside.pressure conversion

Signal k makes a two decade (i.e., 100x) error in pressure conversion.

Not sure if this is a bug in n2k-signalk or instrumentpanel, or some other module. It's visible in instrumentpanel, but I'm guessing unit conversions are originally made in the n2k-signalk module.

Original n2k message:

2017-05-06-15:00:26.000,5,130310,150,255,8,ff,ff,ff,ff,ff,f6,03,ff

Same message through analyzer:

2017-05-06-15:17:00.000 5 150 255 130310 Environmental Parameters:  SID = Unknown; Atmospheric Pressure = 1.014 bar (69.9 PSI)

Pressure shown in instrumentpanel

10140000 Pa
10140 kPa
104 bar

PGN127507 not available.

It would seem that PGN127507 is not yet understood by Signal, but is by canboatjs.

canboatjs view

candump can1 | /usr/local/lib/node_modules/signalk-server/node_modules/@canboat/canboatjs/bin/candumpanalyzerjs | grep :129 | grep 127507
{"canId":435295105,"prio":6,"src":129,"dst":255,"pgn":127507,"timestamp":"2021-07-13T12:34:26.019Z","fields":{"Instance":64,"Battery Instance":6,"Operating State":"Off","Charge Mode":"Echo mode","Equalization Pending":"Off","Reserved1":"0","Equalization Time Remaining":64520},"description":"Charger Status"}
{"canId":435295105,"prio":6,"src":129,"dst":255,"pgn":127507,"timestamp":"2021-07-13T12:34:26.022Z","fields":{"Instance":96,"Battery Instance":6,"Operating State":"Off","Charge Mode":7,"Equalization Pending":"Off","Reserved1":"0","Equalization Time Remaining":64520},"description":"Charger Status"}
{"canId":435295105,"prio":6,"src":129,"dst":255,"pgn":127507,"timestamp":"2021-07-13T12:34:26.023Z","fields":{"Instance":128,"Battery Instance":6,"Operating State":2,"Charge Mode":7,"Equalization Pending":"On","Reserved1":"0","Equalization Time Remaining":64520},"description":"Charger Status"}
{"canId":435295105,"prio":6,"src":129,"dst":255,"pgn":127507,"timestamp":"2021-07-13T12:34:26.083Z","fields":{"Instance":160,"Battery Instance":6,"Operating State":"Off","Charge Mode":"Echo mode","Equalization Pending":"Off","Reserved1":"0","Equalization Time Remaining":64520},"description":"Charger Status"}
{"canId":435295105,"prio":6,"src":129,"dst":255,"pgn":127507,"timestamp":"2021-07-13T12:34:26.086Z","fields":{"Instance":192,"Battery Instance":6,"Operating State":"Off","Charge Mode":7,"Equalization Pending":"Off","Reserved1":"0","Equalization Time Remaining":64520},"description":"Charger Status"}
{"canId":435295105,"prio":6,"src":129,"dst":255,"pgn":127507,"timestamp":"2021-07-13T12:34:26.086Z","fields":{"Instance":224,"Battery Instance":6,"Operating State":2,"Charge Mode":7,"Equalization Pending":"On","Reserved1":"0","Equalization Time Remaining":64775},"description":"Charger Status"}
{"canId":435295105,"prio":6,"src":129,"dst":255,"pgn":127507,"timestamp":"2021-07-13T12:34:26.787Z","fields":{"Instance":0,"Battery Instance":6,"Operating State":"Off","Charge Mode":"Echo mode","Equalization Pending":"Off","Reserved1":"0","Equalization Time Remaining":64520},"description":"Charger Status"}
{"canId":435295105,"prio":6,"src":129,"dst":255,"pgn":127507,"timestamp":"2021-07-13T12:34:26.797Z","fields":{"Instance":32,"Battery Instance":6,"Operating State":"Off","Charge Mode":7,"Equalization Pending":"Off","Reserved1":"0","Equalization Time Remaining":64520},"description":"Charger Status"}
{"canId":435295105,"prio":6,"src":129,"dst":255,"pgn":127507,"timestamp":"2021-07-13T12:34:26.797Z","fields":{"Instance":64,"Battery Instance":6,"Operating State":2,"Charge Mode":7,"Equalization Pending":"On","Reserved1":"0","Equalization Time Remaining":64520},"description":"Charger Status"}
{"canId":435295105,"prio":6,"src":129,"dst":255,"pgn":127507,"timestamp":"2021-07-13T12:34:28.287Z","fields":{"Instance":96,"Battery Instance":6,"Operating State":"Off","Charge Mode":"Echo mode","Equalization Pending":"Off","Reserved1":"0","Equalization Time Remaining":64520},"description":"Charger Status"}

If you need raw candump data, please let me know.

Engine/Genset Instance Handling

I recently added a Yacht Devices YDEG J1939 to N2K gateway for my generator. I configured it as instance 2 (instance 0 & 1 cover my mains) - that is confirmed by my Actisense NGT-1 reader (running on a Win PC) connected to the N2K network. The Actisense reader sees the instance (2), RPM, coolant temperature and runtime.

I have two issues:

  1. The genset appears in Signal K as an additional propulsion.starboard engine, only differentiated by the source field, Being another instance, I would expect something like propulsion.2.xxx
  2. Only coolant temp and runtime appear in Signal K (from PGN 127489). RPM (PGN 127488) do not appear unless I configure the genset gateway as another instance 0 (which greatly confuses the MFD displays). Attached is a NGT-1 log.
    skserver-raw_2019-02-27T22.log

PGN 129285: Route/WP Information

The current implementation of 129285 provides the following mapping:

  • 8, Route Name: ~/navigation/currentRoute/Name
  • 11, WP Name: ~/navigation/currentRoute/waypoints/[n]/name
  • 12, WP Latitude: ~/navigation/currentRoute/waypoints/[n]/position/latitude
  • 13, WP Latitude: ~/navigation/currentRoute/waypoints/[n]/position/longitude

where [n] specifies a position in an array of waypoints. These paths don't exist in the schema. Maybe this is a schema issue as well, but even if it is, route and waypoint definitions belong in /resources, not ~/navigation. There should however be a pointer from ~/navigation/activeRoute to the route definition in /resources.

The current design of /resources/routes specifies start and end waypoints, but AFAICT intermediate waypoints are to be specified with a GeoJSON line object.

A more compliant mapping would probably look something like this:

  • 8, Route Name: /resources/routes/«uuid»/name
  • 10, WP ID: /resources/waypoints/«uuid»/id
  • 11, WP Name: /resources/waypoints/«uuid»/name # This doesn't exist yet
  • 12, WP Latitude: /resources/waypoints/«uuid»/position/latitude
  • 13, WP Longitude: /resources/waypoints/«uuid»/position/longitude

Fields 10 - 13 repeat for each waypoint in the PGN. Fields 12 and 13 may also get mapped to /resources/waypoints/«uuid»/feature/geometry/coordinates which is an array: [longitude, latitude].

refresh the lockfile to automatically remove the vulnerability introduced in @signalk/n2k-signalk

Hi, @sbender9, I have reported a vulnerability issue in package mqtt.

As far as I am aware, vulnerability CVE-2021-32640 detected in package ws(<5.2.3,>=6.0.0 <6.2.2,>=7.0.0 <7.4.6) is directly referenced by  [email protected], on which your package @signalk/[email protected] transitively depends. As such, this vulnerability can also affect @signalk/[email protected] via the following path:
@signalk/[email protected] ➔ @canboat/[email protected][email protected][email protected][email protected](vulnerable version)

Since mqtt has released a new patched version [email protected] to resolve this issue ([email protected][email protected][email protected](fix version)), then this vulnerability patch can be automatically propagated into your project only if you update your lockfile. The following is your new dependency path :
@signalk/[email protected] ➔ @canboat/[email protected][email protected][email protected][email protected](vulnerability fix version).

A warm tip.
Best regards,
^_^

An in-range update of mocha is breaking the build 🚨

The devDependency mocha was updated from 6.2.0 to 6.2.1.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

mocha is a devDependency of this project. It might not break your production code or affect downstream projects, but probably breaks your build or test tools, which may prevent deploying or publishing.

Status Details
  • continuous-integration/travis-ci/push: The Travis CI build could not complete due to an error (Details).

Commits

The new version differs by 11 commits.

  • ef6c820 Release v6.2.1
  • 9524978 updated CHANGELOG for v6.2.1 [ci skip]
  • dfdb8b3 Update yargs to v13.3.0 (#3986)
  • 18ad1c1 treat '--require esm' as Node option (#3983)
  • fcffd5a Update yargs-unparser to v1.6.0 (#3984)
  • ad4860e Remove extraGlobals() (#3970)
  • b269ad0 Clarify effect of .skip() (#3947)
  • 1e6cf3b Add Matomo to website (#3765)
  • 91b3a54 fix style on mochajs.org (#3886)
  • 0e9d8ad tty.getWindowSize is not a function inside a "worker_threads" worker (#3955)
  • 48da42e Remove jsdoc index.html placeholder from eleventy file structure and fix broken link in jsdoc tutorial (#3966)

See the full diff

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

PGNs 130312,130313,130314: Temp, humidy, pressure

130312: Temperature

{
  "timestamp": "2015-01-15-16:15:18.124",
  "prio": "5",
  "src": "41",
  "dst": "255",
  "pgn": "130312",
  "description": "Temperature",
  "fields": {
    "SID": "179",
    "Temperature Instance": "0",
    "Temperature Source": "Heating System Temperature"
  }
} {
  "timestamp": "2015-01-15-16:15:18.127",
  "prio": "5",
  "src": "41",
  "dst": "255",
  "pgn": "130312",
  "description": "Temperature",
  "fields": {
    "SID": "179",
    "Temperature Instance": "2",
    "Temperature Source": "Engine Room Temperature",
    "Actual Temperature": "7.76"
  }
} {
  "timestamp": "2015-01-15-16:15:18.129",
  "prio": "5",
  "src": "41",
  "dst": "255",
  "pgn": "130312",
  "description": "Temperature",
  "fields": {
    "SID": "179",
    "Temperature Instance": "3",
    "Temperature Source": "Inside Temperature",
    "Actual Temperature": "13.18"
  }
} {
  "timestamp": "2015-01-15-16:15:18.131",
  "prio": "5",
  "src": "41",
  "dst": "255",
  "pgn": "130312",
  "description": "Temperature",
  "fields": {
    "SID": "179",
    "Temperature Instance": "4",
    "Temperature Source": "Main Cabin Temperature",
    "Actual Temperature": "16.93"
  }
} {
  "timestamp": "2015-01-15-16:15:18.136",
  "prio": "5",
  "src": "41",
  "dst": "255",
  "pgn": "130312",
  "description": "Temperature",
  "fields": {
    "SID": "179",
    "Temperature Instance": "5",
    "Temperature Source": "Engine Room Temperature"
  }
} {
  "timestamp": "2015-01-15-16:15:18.371",
  "prio": "5",
  "src": "130",
  "dst": "255",
  "pgn": "130312",
  "description": "Temperature",
  "fields": {
    "SID": "14",
    "Temperature Instance": "0",
    "Temperature Source": "Outside Temperature",
    "Actual Temperature": "7.84"
  }
} {
  "timestamp": "2015-01-15-16:15:19.628",
  "prio": "5",
  "src": "36",
  "dst": "255",
  "pgn": "130312",
  "description": "Temperature",
  "fields": {
    "Temperature Instance": "0",
    "Temperature Source": "Sea Temperature"
  }
}

130313: Humidity

{
  "timestamp": "2015-01-15-16:15:46.366",
  "prio": "5",
  "src": "130",
  "dst": "255",
  "pgn": "130313",
  "description": "Humidity",
  "fields": {
    "SID": "130",
    "Humidity Instance": "0",
    "Humidity Source": "1",
    "Actual Humidity": "75.592"
  }
}

130314: Actual Pressure

{
  "timestamp": "2015-01-15-16:15:36.372",
  "prio": "5",
  "src": "130",
  "dst": "255",
  "pgn": "130314",
  "description": "Actual Pressure",
  "fields": {
    "SID": "232",
    "Pressure Instance": "0",
    "Pressure Source": "0",
    "Pressure": "36864"
  }
}

PGNs 129539,129540: GNSS

129539: GNSS DOP

{
  "timestamp": "2015-01-15-16:17:30.684",
  "prio": "6",
  "src": "2",
  "dst": "255",
  "pgn": "129539",
  "description": "GNSS DOPs",
  "fields": {
    "SID": "38",
    "Actual Mode": "3D",
    "HDOP": "0.80",
    "VDOP": "1.30",
    "TDOP": "327.67"
  }
} {
  "timestamp": "2015-01-15-16:17:31.421",
  "prio": "6",
  "src": "245",
  "dst": "255",
  "pgn": "129539",
  "description": "GNSS DOPs",
  "fields": {
    "SID": "151",
    "Desired Mode": "Auto",
    "Actual Mode": "3D",
    "HDOP": "0.79",
    "VDOP": "1.59",
    "TDOP": "1.00"
  }
}

129540: GNSS Sats in View

{
  "timestamp": "2014-08-15T19:00:00.878",
  "prio": 6,
  "src": 160,
  "dst": 255,
  "pgn": 129540,
  "description": "GNSS Sats in View",
  "fields": {
    "SID": 207,
    "Sats in View": 11,
    "list": [
      {
        "PRN": 32,
        "Elevation": 69,
        "Azimuth": 223,
        "SNR": 32,
        "Range residuals": 0,
        "Status": "Used"
      },
      {
        "PRN": 1,
        "Elevation": 66,
        "Azimuth": 268,
        "SNR": 29,
        "Range residuals": 0,
        "Status": "Used"
      },
      {
        "PRN": 11,
        "Elevation": 61,
        "Azimuth": 207,
        "SNR": 36,
        "Range residuals": 0,
        "Status": "Used"
      },
      {
        "PRN": 14,
        "Elevation": 46,
        "Azimuth": 70,
        "SNR": 32,
        "Range residuals": 0,
        "Status": "Used"
      },
      {
        "PRN": 20,
        "Elevation": 27,
        "Azimuth": 252,
        "SNR": 28,
        "Range residuals": 0,
        "Status": "Used"
      },
      {
        "PRN": 17,
        "Elevation": 21,
        "Azimuth": 319,
        "SNR": 17,
        "Range residuals": 0,
        "Status": "Used"
      },
      {
        "PRN": 22,
        "Elevation": 19,
        "Azimuth": 81,
        "SNR": 32,
        "Range residuals": 0,
        "Status": "Used"
      },
      {
        "PRN": 4,
        "Elevation": 18,
        "Azimuth": 295,
        "SNR": 32,
        "Range residuals": 0,
        "Status": "Used"
      },
      {
        "PRN": 19,
        "Elevation": 16,
        "Azimuth": 186,
        "SNR": 32,
        "Range residuals": 0,
        "Status": "Used"
      },
      {
        "PRN": 28,
        "Elevation": 10,
        "Azimuth": 283,
        "SNR": 32,
        "Range residuals": 0,
        "Status": "Used"
      },
      {
        "PRN": 24,
        "Elevation": 8,
        "Azimuth": 10,
        "SNR": 22,
        "Range residuals": 0,
        "Status": "Used"
      }
    ]
  }
}

PGN 127489 parser doesn't parse various fields in the PGN

The current parser for PGN 127489 (Engine Parameters, Dynamic) supports the following fields:

  1. Temperature
  2. Alternator potential
  3. Fuel rate
  4. Oil pressure
  5. Percent engine load
  6. Percent engine torque
  7. Discrete status 1
  8. Discrete status 2

The following fields are missing and should be present. See http://www.nmea.org/Assets/july%202010%20nmea2000_v1-301_app_b_pgn_field_list.pdf

  • Fuel Pressure
  • Engine coolant pressure
  • Total engine hours
  • Engine oil temperature

PGNs 127501,127606,127508: Battery Power

Add support for

127501: Binary Switch Bank Status"
{"timestamp":"2015-01-15-16:25:06.017","prio":"3","src":"209","dst":"255","pgn":"127501","description":"Binary Switch Bank Status","fields":{"Indicator Bank Instance":"0","Indicator":"Off","Indicator 2":"Off","Indicator 3":"Off","Indicator 4":"Off","Indicator 5":"Off","Indicator 6":"Off"}}

127506: DC Detailed Status
{"timestamp":"2015-01-15-16:25:15.899","prio":"6","src":"177","dst":"255","pgn":"127506","description":"DC Detailed Status","fields":{"SID":"89","DC Instance":"1","DC Type":"0","State of Charge":"72","Time Remaining":"40350","Ripple Voltage":"0.10"}}

127508: Battery Status
{"timestamp":"2015-01-15-16:25:15.901","prio":"6","src":"177","dst":"255","pgn":"127508","description":"Battery Status","fields":{"Battery Instance":"1","Voltage":"12.83","Current":"-0.8","Temperature":"8.65","SID":"89"}}

Number of satellites (navigation.gnss.satellites) is shown with decimals

SK should use integers when reporting the number of satellites in view.

Analyzer outputs this correctly:

{"timestamp":"2017-05-06-15:25:50.000","prio":6,"src":1,"dst":255,"pgn":129540,"description":"GNSS Sats in View","fields":{"SID":149,"Mode":"2","Sats in View":12,"list":[{}]}}

but SK adds decimal, and shows this as 12.0 (at least in instrumentpanel and WilhelmSK): https://www.dropbox.com/s/lhh0a9mlhsj3f2u/Screenshot%202017-05-07%2020.10.17.png?dl=0

Interestingly rest api (http://localhost:3000/signalk/v1/api/) uses an integer:

{
satellites: {
value: 12,
$source: "n2kFromFile.1",
timestamp: "2017-05-06T15:13:17.000",
pgn: 129029
},

Note: My plotter sends this information in PGN 129540, but SK logs show PGN 129029.

NMEA 2k error at start or when satellites lost

There is something odd going on when Signal K is reading NMEA 2000 before hooking up to any satellites, see also the attached picture. SK is sending a speed although no satellites are detected. The GPS unnit is a Garmin GPS24xd NMEA 2000 (probably the best they have). I've also tested with another GPS giving the same result.

HorizontalDilution equals '-0.01' (perhaps correct but should IMHO here be a high popsitive number)
MethodQuality equals 'no GPS' (no satellites in view so this is correct)
satellites equals '0' (also correct)
speedOverGround equals 655.34 m/s (this is definitely wrong and always the same value)

SK displays a speed of 1273.89 knots in NNE direction (direction varies slightly). This should be taken care of somehow.

This is also fully repeatable, I've used a tin can covering the GPS to force a test case ;-)
Skärmbild_2021-10-07_15-53-25
)

PGN 127505: Fluid Level

Add support for 127505: Fluid Level

{"timestamp":"2015-01-15-16:15:30.984","prio":"6","src":"17","dst":"255","pgn":"127505","description":"Fluid Level","fields":{"Instance":"0","Type":"Fuel","Level":"131.068"}}
{"timestamp":"2015-01-15-16:15:33.341","prio":"6","src":"112","dst":"255","pgn":"127505","description":"Fluid Level","fields":{"Instance":"0","Type":"Fuel","Level":"64.284","Capacity":"41.6"}}
{"timestamp":"2015-01-15-16:15:33.366","prio":"6","src":"114","dst":"255","pgn":"127505","description":"Fluid Level","fields":{"Instance":"0","Type":"Water","Level":"88.596","Capacity":"71.9"}}
{"timestamp":"2015-01-15-16:15:33.369","prio":"6","src":"113","dst":"255","pgn":"127505","description":"Fluid Level","fields":{"Instance":"0","Type":"Gray water","Level":"90.240","Capacity":"37.9"}}

fix: pgn 130312 baitWell

The baitWell temp shows up as tanks.baitWell.undefined.temperature. Currently we are looking for Temperature Instance but in pgns.h it is just Instance.

Mastervolt PGNs not available

The following PGNs used by Mastervolt inverters and chargers are missing from n2k.signalk/pgns:

PGN # 127507
-PGN Name
--Charger Status

  • Applicable Instances:
    --Charger instance
    --Battery instance
    -Fields:
    --Operating state
    --Charge Mode
    --Charger En/Dis
    --Eq pending
    --Eq time remaining

PGN # 127509

  • PGN Name
    -- Inverter Status
  • Applicable Instances:
    -- Inverter instance
    -- AC Instance
    -- DC Instance
  • Fields:
    -- Operating state
    -- Inverter En/Dis

PGN # 127510

  • PGN Name
    -- Charger configuration status
  • Applicable Instances
    -- Charger instance
    -- Battery instance
  • Fields:
    -- Charger En/Dis
    -- Chrg curr limit
    -- Chrg algorithm
    -- Chrg Mode
    -- Est. batt temp
    -- Equalize En/Dis
    -- Over chrg En/Dis
    -- Equalize time

PGN # 127511

  • PGN Name
    -- Inverter configuration status
  • Applicable Instances
    -- Inverter instance
    -- AC Instance
    -- DC Instance
  • Fields:
    -- Inverter En/Dis
    -- Inverter Mode
    -- Ld Sense En/Dis
    -- Ld Sense Pwr Thr
    -- Ld Sense Int.

PGN # 127513

  • PGN Name
    -- Battery configuration status
  • Applicable Instances
    -- Battery instance
  • Fields:
    -- Battery type
    -- Supp Equalize
    -- Nominal volt
    -- Batt Chem.
    -- Batt Cap.
    -- Batt Temp Coeff
    -- Peukert Exp.
    -- CEF

Error in ais.js

Cannot read property 'length' of undefined at hasAnyKeys (/home/pi/.signalk/node_modules/signalk-to-nmea2000/conversions/ais.js:379:52) at Object.callback (/home/pi/.signalk/node_modules/signalk-to-nmea2000/conversions/ais.js:61:25) at FullSignalK.app.signalk.on (/home/pi/.signalk/node_modules/signalk-to-nmea2000/index.js:238:55)

Improve error handling

Dec  8 11:11:17 Signal_K sea_vu_play[352]: Unable to convert:Cannot read property 'Temperature Instance' of undefined:{"timestamp":"2017-12-08T17:11:14.824Z","prio":5,"src":114,"dst":255,"pgn":130312,"description":"Temperature"}
Dec  8 11:11:17 Signal_K sea_vu_play[352]: TypeError: Cannot read property 'values' of undefined
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at ToSignalK._transform (/home/pi/signalk-server-node/providers/n2k-signalk.js:33:34)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at ToSignalK.Transform._read (_stream_transform.js:167:10)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at ToSignalK.Transform._write (_stream_transform.js:155:12)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at doWrite (_stream_writable.js:333:12)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at writeOrBuffer (_stream_writable.js:319:5)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at ToSignalK.Writable.write (_stream_writable.js:245:11)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at N2KAnalyzer.ondata (_stream_readable.js:555:20)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at emitOne (events.js:96:13)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at N2KAnalyzer.emit (events.js:188:7)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at readableAddChunk (_stream_readable.js:176:18)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at N2KAnalyzer.Readable.push (_stream_readable.js:134:10)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at N2KAnalyzer.Transform.push (_stream_transform.js:128:32)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at Interface.<anonymous> (/home/pi/signalk-server-node/providers/n2kAnalyzer.js:50:12)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at emitOne (events.js:96:13)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at Interface.emit (events.js:188:7)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at Interface._onLine (readline.js:232:10)
Dec  8 11:11:17 Signal_K sea_vu_play[352]:     at Interface.<anonymous> (readline.js:375:12)

A better error message, without the stack trace, is in order.

PGN 128275

shouldn't this be node: 'navigation.logTrip' ?

PGNs 65001...65030: AC Power

65005: Utility Total AC Energy
{"timestamp":"2015-01-15-16:25:15.858","prio":"3","src":"192","dst":"255","pgn":"65005","description":"Utility Total AC Energy","fields":{"Total Energy Export":"5425","Total Energy Import":"0"}}

65012: Utility Phase A AC Reactive Power
{"timestamp":"2015-01-15-16:25:15.852","prio":"3","src":"192","dst":"255","pgn":"65012","description":"Utility Phase A AC Reactive Power","fields":{"Reactive Power":"191","Power Factor Lagging":"Lagging"}}

65013: Utility Phase A AC Power
{"timestamp":"2015-01-15-16:25:12.753","prio":"3","src":"192","dst":"255","pgn":"65013","description":"Utility Phase A AC Power","fields":{"Real Power":"1433","Apparent Power":"1439"}}

65014: Utility Phase A Basic AC Quantities
{"timestamp":"2015-01-15-16:25:15.870","prio":"3","src":"192","dst":"255","pgn":"65014","description":"Utility Phase A Basic AC Quantities","fields":{"Line-Line AC RMS Voltage":"117","Line-Neutral AC RMS Voltage":"117","AC RMS Current":"12"}}

65015: Utility Total AC Reactive Power
{"timestamp":"2015-01-15-16:25:15.892","prio":"3","src":"192","dst":"255","pgn":"65015","description":"Utility Total AC Reactive Power","fields":{"Reactive Power":"191","Power Factor Lagging":"Lagging"}}

65016: Utility Total AC Power
{"timestamp":"2015-01-15-16:15:20.210","prio":"3","src":"192","dst":"255","pgn":"65016","description":"Utility Total AC Power","fields":{"Real Power":"1239","Apparent Power":"1239"}}

65017: Utility Average Basic AC Quantities
{"timestamp":"2015-01-15-16:25:15.657","prio":"3","src":"192","dst":"255","pgn":"65017","description":"Utility Average Basic AC Quantities","fields":{"Line-Line AC RMS Voltage":"117","Line-Neutral AC RMS Voltage":"117","AC RMS Current":"12"}}

Support for canboat's '-nv' option

For some use cases (e.g. signalk-socketcan-device) it is useful to run canboat's analyzer with its -nv option that adds 'raw' values for various look-up style fields in PGNs in addition to normal human readable ones. Eg. field "COG Reference":"True" becomes "COG Reference":{"value":0,"name":"True"}.

This change in input naturally breaks n2k-signalk as it expects its input in the former form.

I'm planning on adding transparent support for the latter input format for n2k-signalk, but wanted to create this issue first to discuss the matter and gather ideas on implementation. The idea at the moment is to change the implementation for all PGNs that use these 'lookup' style fields in a way that the input format is detected automatically by first checking if the value is Object and if it is, using .name instead of the field itself.

The following PGNs use 'lookup' style fields and would thus need to be changed:

127488
127489
127505
129026
129029
129038
129040
129041
129283
129284
129291
129794
129810
130306
130311
130312
130577
130842

PGN 130822

Related to this issue: canboat/canboat#10

Should signalk continue to pass it through up the chain? Or since we don't know what it is, just forget about it?

1969-12-31-16:00:01,485 0   2 255 130822 Manufacturer Proprietary fast-packet non-addressed:  Manufacturer Code = Unknown Manufacturer 1888; Industry Code = Global; Data = 0x100a0001ff9913
{"timestamp":"1969-12-31-16:00:01,485","prio":0,"src":2,"dst":255,"pgn":130822,"description":"Manufacturer Proprietary fast-packet non-addressed","fields":{ "Manufacturer Code":129,"Industry Code":"Global","Data":"4503602732465152"}}```

Problem converting MMSI with leading zero?

% grep 129038  ../server/samples/aava-n2k.data | ../canboatjs/bin/analyzerjs | grep 27653800 | head -1 | json
{
  "prio": 4,
  "pgn": 129038,
  "dst": 255,
  "src": 43,
  "timestamp": "2014-08-15T19:01:57.883Z",
  "input": [
    "2014-08-15T19:01:57.883Z,4,129038,43,255,27,03,a8,f6,a5,01,3e,9f,b9,0e,40,b9,70,23,e0,00,00,00,00,00,00,00,ff,ff,ff,7f,05,fe"
  ],
  "fields": {
    "Message ID": 3,
    "Repeat Indicator": "Initial",
    "User ID": 27653800,
    "Longitude": 24.704595,
    "Latitude": 59.4590016,
    "Position Accuracy": "Low",
    "RAIM": "not in use",
    "Time Stamp": "56",
    "COG": 0,
    "SOG": 0,
    "Communication State": "0",
    "AIS Transceiver information": "Channel A VDL reception",
    "Nav Status": "Moored",
    "Special Maneuver Indicator": "Not available",
    "Reserved1": "0",
    "AIS Spare": "6"
  },
  "description": "AIS Class A Position Report"
}

canboatjs is version 1.22.2

27653800 is 8 characters, which probably means it is missing a leading zero. 276 MID is Estonia, so it makes sense this appears in the log file that is from Gulf of Finland. 0MIDXXXXX are group call identities, which makes little sense in class A position report (?).

130606 decodes to wind.directionGround - not in the spec

N2K pgn 130606 with reference 'True (ground referenced to North)' is decoded to environment/wind/directionGround.
But this is not according to the signalK spec (easily can be seen as there is no unit meta data available in the data browser).
Shouldn't it decode to environment/wind/directionTrue?

Extend support for other PGN 130314 pressure sources

Currently PGN 130314 is supported for atmospheric pressure. The PGN also supports the following pressure sources: 1=Water, 2=Steam, 3=Compressed Air, 4=Hydraulic. There are many uses for these like steering, bow thrusters, etc. As another example I'm using a couple of water pressure sensors for my watermaker boost and main pressures. I'm not certain where this would fit in the existing schema? Perhaps something generic and then people could use pathmapper plugin to customize for their use case?

PGN 130842: Simnet AIS Class B static data

See http://yachtelectronics.blogspot.fi/2012_11_01_archive.html

130842: Simnet: AIS Class B static data (msg 24 Part A)
130842: Simnet: AIS Class B static data (msg 24 Part B)
{"timestamp":"2015-01-15-16:17:15.843","prio":"6","src":"43","dst":"255","pgn":"130842","description":"Simnet: AIS Class B static data (msg 24 Part A)","fields":{"Manufacturer Code":"Simrad","Industry Code":"Marine","Message ID":"Msg 24 Part A","Repeat indicator":"Second retransmission","E":"24","User ID":"367479480","Name":"SUMMER WIND"}}
{"timestamp":"2015-01-15-16:17:17.962","prio":"6","src":"43","dst":"255","pgn":"130842","description":"Simnet: AIS Class B static data (msg 24 Part B)","fields":{"Manufacturer Code":"Simrad","Industry Code":"Marine","Message ID":"Msg 24 Part B","Repeat indicator":"Second retransmission","E":"24","User ID":"367479480","Type of ship":"Sailing","Vendor ID":"COMNAV","Callsign":"WDF6945","Length":"13.0","Beam":"4.0","Position reference from Starboard":"2.0","Position reference from Bow":"6.0","Mothership User ID":"0","":"0","Spare":"48"}}
{"timestamp":"2015-01-15-16:17:16.283","prio":"6","src":"3","dst":"255","pgn":"130842","description":"Unknown PGN","fields":{ "Manufacturer Code": "Simrad","Industry Code":"Marine"}}

PGNs 127488/9: Engine Parameters

Add support for

127488: Engine Parameters
{"timestamp":"2015-01-15-16:16:56.749","prio":"2","src":"17","dst":"255","pgn":"127488","description":"Engine Parameters, Rapid Update","fields":{"Engine Instance":"Single Engine or Dual Engine Port","Engine Speed":"3190"}}

127489: Engine Parameters
{"timestamp":"2015-01-15-16:25:14.952","prio":"2","src":"17","dst":"255","pgn":"127489","description":"Engine Parameters, Dynamic","fields":{"Engine Instance":"Single Engine or Dual Engine Port","Temperature":"29.85","Alternator Potential":"12.60","Fuel Rate":"-0.1","Total Engine hours":"309960","Discrete Status 1":"0","Discrete Status 2":"0","Percent Engine Load":"-1","Percent Engine Torque":"-1"}}

PGN 65285 Lowrance: Temperature

1969-12-31-16:00:01,481 0   5 255  65285 Lowrance: Temperature:  Manufacturer Code = Lowrance; Industry Code = Marine Industry; Temperature Instance = 3; Temperature Source = 0; Actual Temperature = 25.60 C (78.1 F)
{"timestamp":"1969-12-31-16:00:01,486","prio":0,"src":5,"dst":255,"pgn":65285,"description":"Lowrance: Temperature","fields":{"Manufacturer Code":"Lowrance","Industry Code":"Marine Industry","Temperature Instance":3,"Temperature Source":0,"Actual Temperature":25.60}}

Missing "ais.sensors.class" values for AIS related PGN's

Missing "ais.sensor.class" values for the following NMEA 2000 PGN's:

129038 Class A Position Report - 'A'
129039 Class B Position Report - 'B'
129040 Extended Class B Position Report - 'B'
129041 Aid To Navigation (AToN) Report - 'ATON'
129793 Base Station Report - 'BASE'
129798 SAR Position Report - 'SAR'

The values appear to be correctly generated for the following NMEA 2000 PGN's
129794 Class A Static and Voyage Related Data
129809 Class B Static Data Report Part A
129810 Class B Static Data Report Part B

They are also correctly generated from NMEA 0183 derived AIS data.

Impact: OpenCPN incorrectly displays AIS targets when using SignalK and the AIS data is received from a NMEA 2000 connected transponder as the 'ais.sensors.class' values are missing.

Eg. AToN report derived from NMEA 0183:
{
"context" : "atons.urn:mrn:imo:mmsi:995036044",
"updates" : [
{
"source" : {
"talker" : "AI",
"label" : "183TCP",
"sentence" : "VDM",
"type" : "NMEA0183"
},
"$source" : "183TCP.AI",
"timestamp" : "2021-12-26T16:29:32.511Z",
"values" : [
{
"path" : "",
"value" : {
"mmsi" : "995036044"
}
},
{
"path" : "",
"value" : {
"name" : "TB2"
}
},
{
"path" : "navigation.position",
"value" : {
"latitude" : -38.10014167,
"longitude" : 144.3819833
}
},
{
"path" : "sensors.ais.class",
"value" : "ATON"
},
{
"path" : "atonType",
"value" : {
"name" : "Beacon, Starboard Hand",
"id" : 14
}
},
{
"path" : "offPosition",
"value" : false
},
{
"path" : "virtual",
"value" : true
}
]
}
]
}

compare with AToN report derived from NMEA2000.
{
"context" : "atons.urn:mrn:imo:mmsi:995036044",
"updates" : [
{
"source" : {
"src" : "43",
"label" : "N2K",
"pgn" : 129041,
"type" : "NMEA2000"
},
"$source" : "N2K.43",
"timestamp" : "2021-12-26T15:38:19.794Z",
"values" : [
{
"path" : "",
"value" : {
"name" : "TB2@@@@@@@@@@@@@@@@@"
}
},
{
"path" : "navigation.position",
"value" : {
"latitude" : -38.1001416,
"longitude" : 144.3819833
}
},
{
"path" : "atonType",
"value" : {
"name" : "Beacon, Starboard Hand",
"id" : 14
}
},
{
"path" : "virtual",
"value" : true
},
{
"path" : "offPosition",
"value" : false
},
{
"path" : "",
"value" : {
"mmsi" : "995036044"
}
}
]
}
]
}

PGN 130824 Maretron: Annunciator

1969-12-31-16:00:01,481 0   4 255 130824 Maretron: Annunciator:  Field 4 = 125; Field 5 = 153; Field 6 = Unknown; Field 7 = Unknown; Field 8 = 44287
{"timestamp":"1969-12-31-16:00:01,485","prio":0,"src":4,"dst":255,"pgn":130824,"description":"Maretron: Annunciator","fields":{"Field 4":125,"Field 5":153,"Field 8":4351}}

Support for PGN 127497

Signal K does not currently support PGN 127497 - engine trip parameters. Can this be added?

Coolant Pressure has incorrect value.

Pulling engine data from an MAN engine, runs through a maretron J1939-N2K converter, out puts N2K pgn 127489.
My signalK data sources is showing coolant pressure to be 120000000, which I believe is wrong by a factor of 1000.

Looking at canboat/analyzer/pgn.h:

  • 'Oil Pressure' and 'Coolant Pressure' both have units of hPA

Looking at n2k-signalk/pgns/127489.js

  • Oil Pressure has just 'kPa'
  • Coolant Pressure has 'kPa * 1000'

removing the conversion factor of 1000 in coolant pressure should fix the issue. What I am missing is where in the process between canboat and signalk does the unit change from hPa to kPa?

I can create a pull request for the coolant pressure conversion factor to be removed in n2k-signalk/pgns/127489.js if this is the correct fix?

Question regarding AC power PGNs

@sbender9

A while back you implemented (maretron specific?) AC power PGNs. I was using a fork with a slightly different implementation. I recently tried to rebase to master, which broke a bunch of things for me.

In your implementation, you actually retrieve a device ID (as specified by Signal K) for AC devices. In the tests, there is an ID that is used in the path, i.e: electrical.ac.24.total.energyExport.value

(see: https://github.com/SignalK/n2k-signalk/blob/master/test/maretron.js#L27)

However, looking at the data, it's unclear to me how that ID is constructed:

{
   "canId":217968066,
   "prio":3,
   "src":194,
   "dst":255,
   "pgn":65005,
   "direction":"R",
   "time":"18:58:12.730",
   "fields":{
      "Total Energy Export":0,
      "Total Energy Import":0
   },
   "description":"Utility Total AC Energy",
   "timestamp":"2020-03-28T18:58:13.092Z"
}

Is that 24 the assigned ISO address? If so, how does that account for that address changing?

callsignVhf missing for 129794 and 129810

The decoder should set communication/callsignVhf from the mentioned PGNs. Otherwise AIS data from N2K will miss this information (although available in the bus data).

Rename to signalk-parser-nmea2000

Should we rename this to signalk-parser-nmea2000 to match the signalk-* naming convention and be more consistent with signalk-parser-nmea0183?

PGNs 129283, 129284, 129285: Navigation stuff

Add support for

129283: Cross Track Error
{"timestamp":"2015-01-15-16:25:14.978","prio":"3","src":"4","dst":"255","pgn":"129283","description":"Cross Track Error","fields":{"SID":"250","Navigation Terminated":"No"}}

129284: Navigation Data
{"timestamp":"2015-01-15-16:25:15.186","prio":"3","src":"4","dst":"255","pgn":"129284","description":"Navigation Data","fields":{"SID":"250"}}

129285: Navigation - Route/WP Information
{"timestamp":"2015-01-15-16:25:12.644","prio":"7","src":"4","dst":"255","pgn":"129285","description":"Navigation - Route/WP Information","fields":{"nItems":"2","Navigation direction in route":"1","Supplementary Route/WP data available":"0","Reserved":"0","Reserved":"0","WP ID":"0","WP ID 2":"1"}}

Is it possible to add custom meta in a mapper?

E.g.

{
  node: (n2k) => `electrical.battery.${instance(n2k)}.someValue`,
  value: (n2k) => n2k.fields['Some Value'],
  meta: (n2k) => {
    return { someMetaProp: "value" }
  }
}

The return value from meta() will be added to the meta long the way.

An in-range update of mocha is breaking the build 🚨

Version 3.4.0 of mocha just got published.

Branch Build failing 🚨
Dependency mocha
Current Version 3.3.0
Type devDependency

This version is covered by your current version range and after updating it in your project the build failed.

As mocha is “only” a devDependency of this project it might not break production or downstream projects, but “only” your build or test tools – preventing new deploys or publishes.

I recommend you give this issue a high priority. I’m sure you can resolve this 💪

Status Details
  • continuous-integration/travis-ci/push The Travis CI build failed Details

Release Notes v3.4.0

Mocha is now moving to a quicker release schedule: when non-breaking changes are merged, a release should happen that week.

This week's highlights:

  • allowUncaught added to commandline as --allow-uncaught (and bugfixed)
  • warning-related Node flags

🎉 Enhancements

🐛 Fixes

🔩 Other

Commits

The new version differs by 9 commits0.

  • 7554b31 Add Changelog for v3.4.0
  • 9f7f7ed Add --trace-warnings flag
  • 92561c8 Add --no-warnings flag
  • ceee976 lint test/integration/fixtures/simple-reporter.js
  • dcfc094 Revert "use semistandard directly"
  • 93392dd no special case for macOS running Karma locally
  • 4d1d91d --allow-uncaught cli option
  • fb1e083 fix allowUncaught in browser
  • 4ed3fc5 Add license report and scan status

false

See the full diff

Not sure how things should work exactly?

There is a collection of frequently asked questions and of course you may always ask my humans.


Your Greenkeeper Bot 🌴

PGN 130312 baitWell

The baitWell temp shows up as tanks.baitWell.undefined.temperature. Currently we are looking for Temperature Instance but in pgns.h it is just Instance.

Invalid data

There are several explicit cases where a sensor can indicate that it is otherwise operational but can not produce vali ddata. Example cases are a depth sounder that can not discern bottom from the echo data and a GNSS that has no satellite fix.

In these cases a gateway/server will typically receive a message indicating invalid data. It must send out a delta message where the value of the data item is null and serve the value as null in the REST api.

An in-range update of @signalk/github-create-release is breaking the build 🚨

The devDependency @signalk/github-create-release was updated from 1.0.2 to 1.1.0.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

@signalk/github-create-release is a devDependency of this project. It might not break your production code or affect downstream projects, but probably breaks your build or test tools, which may prevent deploying or publishing.

Status Details
  • continuous-integration/travis-ci/push: The Travis CI build could not complete due to an error (Details).

Commits

The new version differs by 2 commits.

See the full diff

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

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.