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
69 lines (63 loc) • 2.65 kB
JavaScript
const BTSensor = require("../BTSensor");
class ATC extends BTSensor{
constructor(device, config={}){
super(device,config)
if (config.parser){
this.parser=config.parser
}
}
static async identify(device){
const regex = /^ATC_[A-Fa-f0-9]{6}$/
const name = await this.getDeviceProp(device,"Name")
if (name && name.match(regex))
return this
else
return null
}
async init() {
await super.init()
const md=this.addMetadatum('parser','','data parsing strategy')
md.isParam=true
md.enum=["ATC-LE","ATC-BE"]
if (!this.parser){
this.parser="ATC-LE"
}
this.initMetadata()
}
initMetadata(){
if (this.parser=="ATC-LE"){
this.addMetadatum('voltage', 'V', 'sensor battery voltage',
(buff)=>{return ((buff.readUInt16LE(10))/1000)})
this.addMetadatum('batteryStrength', 'ratio', 'sensor battery strength',
(buff)=>{return ((buff.readUInt8(12))/100)})
this.addMetadatum('temp','K', 'temperature',
(buff)=>{return parseFloat((273.15+(buff.readInt16LE(6))/100).toFixed(2))})
this.addMetadatum('humidity','ratio', 'humidity',
(buff)=>{return ((buff.readUInt16LE(8))/10000)})
} else{
this.addMetadatum('voltage', 'V', 'sensor battery voltage',
(buff)=>{return ((buff.readUInt16BE(10))/1000)})
this.addMetadatum('batteryStrength', 'ratio', 'sensor battery strength',
(buff)=>{return ((buff.readUInt8(9))/100)})
this.addMetadatum('temp','K', 'temperature',
(buff)=>{return parseFloat((273.15+(buff.readInt16BE(6))/10).toFixed(2))})
this.addMetadatum('humidity','ratio', 'humidity',
(buff)=>{return ((buff.readUInt8(8))/100)})
}
}
propertiesChanged(props){
super.propertiesChanged(props)
if (!props.hasOwnProperty("ServiceData")) return
const buff = this.getServiceData("0000181a-0000-1000-8000-00805f9b34fb")
if (!buff)
throw new Error("Unable to get service data for "+this.getDisplayName())
this.emitData("temp", buff)
this.emitData("humidity", buff)
this.emitData("voltage", buff)
this.emitData("batteryStrength", buff)
}
getManufacturer(){
return "ATC1441 (custom firmware see: https://github.com/atc1441)"
}
}
module.exports=ATC