Skip to content

canbus-canboatjs provider doesn't expose device identification parameters for ISO Address Claim (PGN 60928) #389

@ferrail1

Description

@ferrail1

Description
The canbus-canboatjs provider in Signal K sends an ISO Address Claim (PGN 60928) to the NMEA 2000 bus, but doesn’t allow configuration of critical device identification parameters like deviceFunction and deviceClass. This causes the device to appear as “Unknown” on display systems like Raymarine Axiom, even though data transmission works correctly.
Current Behavior
When configuring a CAN connection in settings.json:
"subOptions": {
"type": "canbus-canboatjs",
"interface": "can1",
"mfgCode": 2046,
"uniqueNumber": 475657,
"deviceFunction": 130,
"deviceClass": 25,
"deviceInstance": 0,
"manufacturerInformation": "Signal K",
"installationDescription1": "OpenPlotter"
}
The parameters deviceFunction, deviceClass, deviceInstance, manufacturerInformation, and installationDescription1 are ignored. The provider uses hardcoded values instead.
Observing the CAN bus with candump, the ISO Address Claim message shows:
can1 18EEFF64 [8] 09 42 E7 7C 00 82 33 C0
The byte at position 6 is 33 (decimal 51) instead of the configured 82 (decimal 130 for PC Gateway), indicating hardcoded values are being used.
Expected Behavior
The canbus-canboatjs provider should use the configured values for all device identification parameters, similar to how the SimpleCan class in canboatjs supports full addressClaim configuration:
const can = new SimpleCan({
canDevice: 'can1',
addressClaim: {
"Unique Number": 475657,
"Manufacturer Code": 2046,
"Device Function": 130,
"Device Class": 25,
"Device Instance": 0,
"System Instance": 0
}
});
Impact
∙ NMEA 2000 displays (Raymarine, Garmin, etc.) show the device as “Unknown” instead of a meaningful name
∙ Integration issues with some MFDs that filter or ignore data from unidentified devices
∙ User experience is degraded as users cannot properly identify the Signal K device on their network
Environment
∙ Signal K Server version: 2.19.1
∙ @canboat/canboatjs version: 3.13.0
∙ OpenPlotter on Raspberry Pi
∙ Connected to Raymarine Axiom MFD via NMEA 2000
Proposed Solution
Expose the full ISO Address Claim configuration options in the canbus-canboatjs provider, allowing users to configure:
∙ deviceFunction
∙ deviceClass
∙ deviceInstance
∙ systemInstance
∙ manufacturerInformation
∙ installationDescription1
∙ installationDescription2
These parameters should be passed through to the underlying canboatjs SimpleCan instance.
Workaround
Currently using an external systemd service that periodically sends the correct ISO Address Claim message with cansend, but this is not a clean solution.
References
∙ canboatjs SimpleCan documentation
∙ Similar issue reported by users with Garmin displays

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions