@signalk/n2k-signalk
Version:
NMEA 2000 to SignalK conversion library
241 lines • 7.67 kB
JavaScript
;
const util = require('util');
const { chooseField, skEngineId, skEngineTitle, timeToSeconds } = require('../utils.js');
module.exports = [
{
source: 'temperature',
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.temperature';
}
},
{
source: 'alternatorPotential',
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.alternatorVoltage';
}
},
{
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.fuel.rate';
},
value: function (n2k) {
var lph = Number(n2k.fields.fuelRate);
return isNaN(lph) ? null : lph / 3600000;
}
},
{
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.oilPressure';
},
value: function (n2k) {
var kpa = Number(n2k.fields.oilPressure);
return isNaN(kpa) ? null : kpa;
}
},
{
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.runTime';
},
value: function (n2k) {
return timeToSeconds(n2k.fields.totalEngineHours);
}
},
{
source: 'oilTemperature',
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.oilTemperature';
}
},
{
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.coolantPressure';
},
value: function (n2k) {
var kpa = Number(n2k.fields.coolantPressure);
return isNaN(kpa) ? null : kpa * 1000.0;
}
},
{
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.engineLoad';
},
value: function (n2k) {
var percent = Number(n2k.fields.engineLoad);
return isNaN(percent) ? null : percent / 100.0;
}
},
{
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.engineTorque';
},
value: function (n2k) {
var percent = Number(n2k.fields.engineTorque);
return isNaN(percent) ? null : percent / 100.0;
}
},
{
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.fuel.pressure';
},
value: function (n2k) {
var kpa = Number(n2k.fields.fuelPressure);
return isNaN(kpa) ? null : kpa * 1000.0;
}
}
];
var status1Notifications = [
{
node: 'notifications.propulsion.%s.checkEngine',
message: 'Check %s Engine',
analyzerText: 'Check Engine'
},
{
node: 'notifications.propulsion.%s.overTemperature',
message: '%s Engine Over Temperature',
analyzerText: 'Over Temperature'
},
{
node: 'notifications.propulsion.%s.lowOilPressure',
message: '%s Engine Low Oil Pressure',
analyzerText: 'Low Oil Pressure'
},
{
node: 'notifications.propulsion.%s.lowOilLevel',
message: '%s Engine Low Oil Level',
analyzerText: 'Low Oil Level'
},
{
node: 'notifications.propulsion.%s.lowFuelPressure',
message: '%s Engine Low Fuel Pressure',
analyzerText: 'Low Fuel Pressure'
},
{
node: 'notifications.propulsion.%s.lowSystemVoltage',
message: '%s Low System Voltage',
analyzerText: 'Low System Voltage'
},
{
node: 'notifications.propulsion.%s.lowCoolantLevel',
message: '%s Engine Low Coolant Level',
analyzerText: 'Low Coolant Level'
},
{
node: 'notifications.propulsion.%s.waterFlow',
message: '%s Engine Water Flow',
analyzerText: 'Water Flow'
},
{
node: 'notifications.propulsion.%s.waterInFuel',
message: '%s Water in Fuel',
analyzerText: 'Water In Fuel'
},
{
node: 'notifications.propulsion.%s.chargeIndicator',
message: '%s Engine Charge Indicator',
analyzerText: 'Charge Indicator'
},
{
node: 'notifications.propulsion.%s.preheatIndicator',
message: '%s Preheat Indicator',
analyzerText: 'Preheat Indicator'
},
{
node: 'notifications.propulsion.%s.highBoostPressure',
message: '%s Engine High Boost Pressure',
analyzerText: 'High Boost Pressure'
},
{
node: 'notifications.propulsion.%s.revLimitExceeded',
message: '%s Engine Rev Limit Exceeded',
analyzerText: 'Rev Limit Exceeded'
},
{
node: 'notifications.propulsion.%s.eGRSystem',
message: '%s Engine EGR System',
analyzerText: 'EGR System'
},
{
node: 'notifications.propulsion.%s.throttlePositionSensor',
message: '%s Engine Throttle Position Sensor',
analyzerText: 'Throttle Position Sensor'
},
{
node: 'notifications.propulsion.%s.emergencyStopMode',
message: '%s Engine Emergency Stop Mode',
analyzerText: 'Emergency Stop'
}
];
var status2Notifications = [
{
node: 'notifications.propulsion.%s.warningLevel1',
message: '%s Engine Warning Level 1',
analyzerText: 'Warning Level 1'
},
{
node: 'notifications.propulsion.%s.warningLevel2',
message: '%s Engine Warning Level 2',
analyzerText: 'Warning Level 2'
},
{
node: 'notifications.propulsion.%s.powerReduction',
message: '%s Engine Power Reduction',
analyzerText: 'Power Reduction'
},
{
node: 'notifications.propulsion.%s.maintenanceNeeded',
message: '%s Engine Maintenance Needed',
analyzerText: 'Maintenance Needed'
},
{
node: 'notifications.propulsion.%s.commError',
message: '%s Engine Comm Error',
analyzerText: 'Engine Comm Error'
},
{
node: 'notifications.propulsion.%s.subOrSecondaryThrottle',
message: '%s Engine Sub or Secondary Throttle',
analyzerText: 'Sub or Secondary Throttle'
},
{
node: 'notifications.propulsion.%s.neutralStartProtect',
message: '%s Neutral Start Protect',
analyzerText: 'Neutral Start Protect'
},
{
node: 'notifications.propulsion.%s.shuttingDown',
message: '%s Engine Shutting Down',
analyzerText: 'Engine Shutting Down'
}
];
function generateMappingsForStatus(field, notifications) {
notifications.forEach((notif, index) => {
var mapping = {
node: function (n2k) {
return util.format(notif.node, skEngineId(n2k));
},
filter: function (n2k) {
return typeof n2k.fields[field] !== 'undefined';
},
value: function (n2k, state) {
if (n2k.fields[field].indexOf(notif.analyzerText) != -1) {
return {
state: 'alarm',
method: ['visual', 'sound'],
message: util.format(notif.message, skEngineTitle(n2k))
};
}
else {
return {
state: 'normal',
method: [],
message: util.format(notif.message, skEngineTitle(n2k)) + ' is Normal'
};
}
}
};
module.exports.push(mapping);
});
}
generateMappingsForStatus('discreteStatus1', status1Notifications);
generateMappingsForStatus('discreteStatus2', status2Notifications);
//# sourceMappingURL=127489.js.map