bt-sensors-plugin-sk
Version:
Bluetooth Sensors for Signalk - see https://www.npmjs.com/package/bt-sensors-plugin-sk#supported-sensors for a list of supported sensors
88 lines (76 loc) • 3.06 kB
JavaScript
const VictronSensor = require("./Victron/VictronSensor");
const VC=require("./Victron/VictronConstants.js")
const int24 = require("int24");
const _BitReader = require("./_BitReader.js");
class VictronDCEnergyMeter extends VictronSensor{
async init(){
await super.init()
try {
if (this.encryptionKey){
const decData = this.decrypt(this.getManufacturerData(0x02e1))
if (decData)
this.auxMode=decData.readInt8(8)&0x3
}
} catch(e){
this.debug(`Unable to determine device AuxMode. ${e.message}`)
this.debug(e)
this.auxMode=VC.AuxMode.DISABLED
}
switch(this.auxMode){
case VC.AuxMode.STARTER_VOLTAGE:
this.addMetadatum('starterVoltage','V', 'starter battery voltage',
(buff,offset=0)=>{return buff.readInt16LE(offset)/100})
.default="electrical.batteries.starter.voltage"
break;
case VC.AuxMode.TEMPERATURE:
this.addMetadatum('temperature','K','House battery temperature',
(buff,offset=0)=>{
const temp = buff.readUInt16LE(offset)
if (temp==0xffff)
return null
else
return temp / 100
})
.default="electrical.batteries.house.temperature"
break;
default:
break
}
}
initSchema(){
super.initSchema()
this.addDefaultParam("id")
this.addMetadatum('meterType','', 'meter type',
(buff)=>{return VC.MeterType.get( buff.readInt16LE(0))})
.default="electrical.meters.{id}.type"
this.addMetadatum('voltage','V','voltage',
(buff)=>{return buff.readInt16LE(2)/100})
.default="electrical.meters.{id}.voltage"
this.addMetadatum('alarm','', 'alarm',
(buff)=>{return buff.readUInt16LE(4)})
.default="electrical.meters.{id}.alarm"
this.addMetadatum('current','A', 'current')
.default="electrical.meters.{id}.current"
}
emitValuesFrom(decData){
this.emitData("meterType",decData,0)
this.emitData("voltage",decData,2);
const alarm = this.getPath("alarm").read(decData,4)
if (alarm>0){
this.emitAlarm("alarm",alarm)
}
switch(this.auxMode){
case VC.AuxMode.STARTER_VOLTAGE:
this.emitData("starterVoltage",decData,6);
break;
case VC.AuxMode.TEMPERATURE:
this.emitData("temperature",decData,6);
break;
default:
break
}
this.emit("current",
this.NaNif( new _BitReader(decData.subarray(8,11)).read_signed_int(22),0x3FFFFF)/1000)
}
}
module.exports=VictronDCEnergyMeter