@signalk/n2k-signalk
Version:
NMEA 2000 to SignalK conversion library
92 lines • 3.08 kB
JavaScript
;
const util = require('util');
const { chooseField, skEngineId, skEngineTitle } = require('../utils.js');
module.exports = [
{
source: 'oilTemperature',
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.transmission.oilTemperature';
}
},
{
source: 'transmissionGear',
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.transmission.gear';
}
},
{
node: function (n2k) {
return 'propulsion.' + skEngineId(n2k) + '.transmission.oilPressure';
},
value: function (n2k) {
var kpa = Number(n2k.fields.oilPressure);
return isNaN(kpa) ? null : kpa;
}
}
];
var status1Notifications = [
{
node: 'notifications.propulsion.%s.transmission.checkTransmission',
message: 'Check %s Engine',
analyzerText: 'Check Transmission'
},
{
node: 'notifications.propulsion.%s.transmission.overTemperature',
message: '%s Transmission Over Temperature',
analyzerText: 'Over Temperature'
},
{
node: 'notifications.propulsion.%s.transmission.lowOilPressure',
message: '%s Transmission Low Oil Pressure',
analyzerText: 'Low Oil Pressure'
},
{
node: 'notifications.propulsion.%s.transmission.lowOilLevel',
message: '%s Transmission Low Oil Level',
analyzerText: 'Low Oil Level'
},
{
node: 'notifications.propulsion.%s.transmission.sailDrive',
message: '%s Transmission Sail Drive',
analyzerText: 'Sail Drive'
}
];
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) {
const val = n2k.fields[field];
let on = false;
if (typeof val === 'number') {
on = val & (1 << index);
}
else {
on = n2k.fields[field].indexOf(notif.analyzerText) != -1;
}
if (on) {
return {
state: 'alarm',
method: ['visual', 'sound'],
message: util.format(notif.message, skEngineTitle(n2k))
};
}
else {
return {
state: 'normal',
method: ['visual'],
message: util.format(notif.message, skEngineTitle(n2k)) + ' is Normal'
};
}
}
};
module.exports.push(mapping);
});
}
generateMappingsForStatus('discreteStatus1', status1Notifications);
//# sourceMappingURL=127493.js.map