bt-sensors-plugin-sk
Version:
Bluetooth Sensors for Signalk -- support for Victron devices, RuuviTag, Xiaomi, ATC and Inkbird, Ultrasonic wind meters, Mopeka tank readers, Renogy Battery and Solar Controllers, Aranet4 environment sensors, SwitchBot temp and humidity sensors, Kilovault
60 lines (52 loc) • 2.44 kB
JavaScript
/*(Lynx Smart) BMS (0x0A)
Start Bit Nr of Bits Meaning Units Range NA Value Remark
32 8 Error 0x0 VE_REG_BMS_ERROR
40 16 TTG 1min 0..45.5 days 0xFFFF VE_REG_TTG
56 16 Battery voltage 0.01V -327.68..327.66 V 0x7FFF VE_REG_DC_CHANNEL1_VOLTAGE
72 16 Battery current 0.1A -3276.8..3276.6 0x7FFF VE_REG_DC_CHANNEL1_CURRENT
88 16 IO status 0x0 VE_REG_BMS_IO
104 18 Warnings/Alarms 0x0 VE_REG_BMS_WARNINGS_ALARMS
122 10 SOC 0.1% 0..100.0% 0x3FF VE_REG_SOC
132 20 Consumed Ah 0.1Ah -104,857..0 Ah 0xFFFFF VE_REG_CAH Consumed Ah = -Record value
152 7 Temperature °C -40..86 °C 0x7F VE_REG_BAT_TEMPERATURE Temperature = Record value - 40
159 1 Unused*/
const VictronSensor = require ("./Victron/VictronSensor.js")
const VC = require("./Victron/VictronConstants.js")
const BitReader = require("./_BitReader")
class VictronLynxSmartBMS extends VictronSensor{
static async identify(device){
return await this.identifyMode(device, 0x0A)
}
async init() {
await super.init()
this.initMetadata()
}
initMetadata(){
this.addMetadatum('error','', 'error code',
(buff)=>{return buff.readUInt8(0)})
this.addMetadatum('ttg','s', 'time to go (in seconds)',
(buff)=>{return this.NaNif(buff.readUInt16LE(1),0xFFFF)*60})
this.addMetadatum('voltage','V', 'channel 1 voltage',
(buff)=>{return this.NaNif(buff.readInt16LE(3),0x7FFF)/100})
this.addMetadatum('current','A','channel 1 current',
(buff)=>{return this.NaNif(buff.readInt16LE(5),0x7FFF)/10})
this.addMetadatum('ioStatus','','IO Status', //TODO
(buff)=>{return buff.readUInt16LE(7)})
this.addMetadatum('warningsAndAlarms','','warnings and alarms')
this.addMetadatum('soc','','state of charge')
this.addMetadatum('consumedAh','Ah','amp-hours consumed')
this.addMetadatum('temp', 'K', 'battery temperature')
}
emitValuesFrom(buffer){
super.emitValuesFrom(buffer)
const br = new BitReader(buffer.subarray(9))
this.emit('warningsAndAlarms',br.read_unsigned_int(18))
this.emit('soc',
this.NaNif((br.read_unsigned_int(10),0x3FF)/1000))
this.emit('consumedAh',
this.NaNif(br.read_unsigned_int(20),0xFFFFF)/10 )
this.emit('temp',
this.NaNif( br.read_unsigned_int(7),0x7f) +233.15)
}
}
module.exports=VictronLynxSmartBMS