@signalk/n2k-signalk
Version:
NMEA 2000 to SignalK conversion library
96 lines (89 loc) • 2.57 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)