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
66 lines (47 loc) • 2.27 kB
JavaScript
const VictronSensor = require ("./Victron/VictronSensor.js")
const VC = require("./Victron/VictronConstants.js")
const BitReader = require("./_BitReader")
AC_IN_STATE=["AC in 1","AC in 2","NOT CONNECTED", "NA"]
ALARM_STATE=["None","warning", "alarm","NA"]
class VictronVEBus extends VictronSensor{
static async identify(device){
return await this.identifyMode(device, 0x0C)
}
async init() {
await super.init()
this.initMetadata()
}
initMetadata(){
this.addMetadatum('chargeState','', 'charge state',
(buff)=>{return VC.OperationMode.get(buff.readUInt8(0))})
this.addMetadatum('veBusError','', 'VE bus error',
(buff)=>{return buff.readUInt8(1)}) //TODO
this.addMetadatum('current','A','charger battery current',
(buff)=>{return this.NaNif(buff.readInt16LE(2),0x7FFF)/10})
this.addMetadatum('voltage','V', 'charger battery voltage')
this.addMetadatum('acInState','', 'AC in state')
this.addMetadatum('acInPower','W','AC power IN in watts')
this.addMetadatum('acOutPower','W','AC power OUT in watts')
this.addMetadatum('alarm','','alarm state 0=no alarm, 1=warning, 2=alarm')
this.addMetadatum('batteryTemperature','K', 'battery temperature')
this.addMetadatum('soc', 'ratio', 'state of charge')
}
emitValuesFrom(buffer){
super.emitValuesFrom(buffer)
const br = new BitReader(buffer.subarray(4))
this.emit('voltage',
this.NaNif(br.read_unsigned_int(14),0x3FFF)/100)
this.emit('acInState',
AC_IN_STATE[br.read_unsigned_int(2)])
this.emit('acInPower',
this.NaNif(br.read_signed_int(19),0x3FFFF))
this.emit('acOutPower',
this.NaNif(br.read_signed_int(19),0x3FFFF))
this.emit('alarm', ALARM_STATE[br.read_unsigned_int(2)])
this.emit('batteryTemperature',
this.NaNif((br.read_unsigned_int(7),0x7F))+233.15)
this.emit('soc',
this.NaNif((br.read_unsigned_int(7),0x7F))/100)
}
}
module.exports=VictronVEBus