UNPKG

@signalk/n2k-signalk

Version:

NMEA 2000 to SignalK conversion library

141 lines 4.41 kB
"use strict"; const getMmsiContext = require('../mmsi-context').getMmsiContext; const getFromStarboard = require('../aisFromStarboard'); const getShipType = require('../aisShipTypeMapping'); module.exports = [ { node: 'sensors.ais.class', value: function (n2k) { return 'A'; } }, { node: '', filter: n2k => n2k.fields.name, value: function (n2k) { return { name: n2k.fields.name }; } }, { node: 'navigation.destination.commonName', value: n2k => n2k.fields.destination }, { node: 'navigation.destination.eta', value: function (n2k) { if (typeof n2k.fields.etaDate === 'string') { const datePart = n2k.fields.etaDate.replace(/\./g, '-'); const timePart = String(n2k.fields.etaTime); const timeMatch = timePart.match(/^(\d+):(\d{2}):(\d{2})(\.\d+)?$/); if (!timeMatch) { const parsedDate = new Date(datePart + 'T00:00:00Z'); if (!Number.isFinite(parsedDate.getTime())) { return undefined; } return parsedDate.toISOString(); } const rawHours = Number(timeMatch[1]); const rawMinutes = Number(timeMatch[2]); const rawSeconds = Number(timeMatch[3]); const fractional = timeMatch[4] ? Number(timeMatch[4]) : 0; const hours = rawHours > 23 ? 0 : rawHours; const minutes = rawMinutes > 59 ? 0 : rawMinutes; const seconds = rawSeconds > 59 ? 0 : rawSeconds; const totalSeconds = hours * 3600 + minutes * 60 + seconds + fractional; const parsedDate = new Date(datePart + 'T00:00:00Z'); if (!Number.isFinite(parsedDate.getTime())) { return undefined; } return new Date(parsedDate.getTime() + Math.round(totalSeconds * 1000)).toISOString(); } const etaDate = Number(n2k.fields.etaDate); const etaTime = Number(n2k.fields.etaTime); if (!Number.isFinite(etaDate) || !Number.isFinite(etaTime) || etaDate <= 0) { return undefined; } const etaMs = Date.UTC(1970, 0, 1) + etaDate * 86400000 + etaTime * 1000; return new Date(etaMs).toISOString(); } }, { node: 'design.draft', filter: function (n2k) { return n2k.fields.draft; }, value: function (n2k) { return { maximum: n2k.fields.draft }; } }, { node: 'design.length', value: function (n2k) { return { overall: Number(n2k.fields.length) }; }, filter: function (n2k) { return n2k.fields.length; } }, { node: 'design.aisShipType', value: function (n2k) { return getShipType(n2k.fields.typeOfShip); }, filter: function (n2k) { return n2k.fields.typeOfShip; } }, { node: '', filter: n2k => n2k.fields.callsign, value: n2k => ({ communication: { callsignVhf: n2k.fields.callsign } }) }, { node: 'design.beam', source: 'beam' }, { node: 'sensors.ais.fromBow', source: 'positionReferenceFromBow' }, { node: 'sensors.ais.fromCenter', value: getFromStarboard, filter: function (n2k) { return n2k.fields.positionReferenceFromStarboard && n2k.fields.beam; } }, { node: '', filter: n2k => n2k.fields.userId, value: function (n2k) { return { mmsi: n2k.fields.userId.toString() }; } }, { node: '', value: function (n2k) { return { registrations: { imo: `IMO ${n2k.fields.imoNumber}` } }; }, filter: function (n2k) { return n2k.fields.imoNumber && n2k.fields.imoNumber != 0; } }, { context: getMmsiContext } ]; //# sourceMappingURL=129794.js.map