UNPKG

bt-sensors-plugin-sk

Version:

Bluetooth Sensors for Signalk - see https://www.npmjs.com/package/bt-sensors-plugin-sk for a list of supported classes

380 lines (365 loc) 15 kB
/* [GOBIUS C]# list-attributes Primary Service (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0055 f000ffc0-0451-4000-b000-000000000000 Vendor specific Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0055/char005e f000ffc5-0451-4000-b000-000000000000 Vendor specific Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0055/char005e/desc0061 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0055/char005e/desc0060 00002902-0000-1000-8000-00805f9b34fb Client Characteristic Configuration Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0055/char005a f000ffc2-0451-4000-b000-000000000000 Vendor specific Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0055/char005a/desc005d 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0055/char005a/desc005c 00002902-0000-1000-8000-00805f9b34fb Client Characteristic Configuration Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0055/char0056 f000ffc1-0451-4000-b000-000000000000 Vendor specific Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0055/char0056/desc0059 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0055/char0056/desc0058 00002902-0000-1000-8000-00805f9b34fb Client Characteristic Configuration Primary Service (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018 0000ffe0-0000-1000-8000-00805f9b34fb Unknown Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0052 0000fff3-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0052/desc0054 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char004f 0000fff2-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char004f/desc0051 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char004b 0000fff1-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char004b/desc004e 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char004b/desc004d 00002902-0000-1000-8000-00805f9b34fb Client Characteristic Configuration Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0048 0000fff0-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0048/desc004a 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0044 0000ffef-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0044/desc0047 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0044/desc0046 00002902-0000-1000-8000-00805f9b34fb Client Characteristic Configuration Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0041 0000ffee-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0041/desc0043 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char003e 0000ffed-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char003e/desc0040 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char003b 0000ffec-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char003b/desc003d 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0038 0000ffeb-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0038/desc003a 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0035 0000ffea-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0035/desc0037 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0031 0000ffe9-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0031/desc0034 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0031/desc0033 00002902-0000-1000-8000-00805f9b34fb Client Characteristic Configuration Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char002e 0000ffe8-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char002e/desc0030 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char002b 0000ffe7-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char002b/desc002d 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0028 0000ffe6-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0028/desc002a 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0025 0000ffe5-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0025/desc0027 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0022 0000ffe4-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0022/desc0024 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char001f 0000ffe3-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char001f/desc0021 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char001c 0000ffe2-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char001c/desc001e 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0019 0000ffe1-0000-1000-8000-00805f9b34fb Unknown Descriptor (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service0018/char0019/desc001b 00002901-0000-1000-8000-00805f9b34fb Characteristic User Description Primary Service (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service000d 0000180a-0000-1000-8000-00805f9b34fb Device Information Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service000d/char0016 00002a29-0000-1000-8000-00805f9b34fb Manufacturer Name String Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service000d/char0014 00002a28-0000-1000-8000-00805f9b34fb Software Revision String Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service000d/char0012 00002a27-0000-1000-8000-00805f9b34fb Hardware Revision String Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service000d/char0010 00002a25-0000-1000-8000-00805f9b34fb Serial Number String Characteristic (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service000d/char000e 00002a24-0000-1000-8000-00805f9b34fb Model Number String Primary Service (Handle 0x0000) /org/bluez/hci0/dev_34_68_B5_87_2E_04/service000c 00001801-0000-1000-8000-00805f9b34fb Generic Attribute Profile */ const BTSensor = require("../BTSensor"); const GobiusState=new Map( [[0x0, "Start-Up"], [0x1, "Self-Test"], [0x02, "Uninit"], [0x03, "Uncalibrated"], [0x04, "Calibration"], [0x05, "Active"], [0x06, "Error"], [0x07,"Production-Test"], [0x08, "HW-Test"]] ) class GobiusCTankMeter extends BTSensor{ static Domain = BTSensor.SensorDomains.tanks static async identify(device){ const name = await this.getDeviceProp(device,"Name") if (name && name.toLowerCase().startsWith('gobius c')) return this else return null } hasGATT(){ return true } usingGATT(){ return true } emitGATT(){ this.characteristic.readValue() .then((buffer)=> this.emitValuesFrom( buffer) ) } initSchema(){ super.initSchema() this.getGATTParams()["useGATT"].default=true this.addParameter("type",{ tag: "type", description:"Type of tank", enum: [ "petrol", "freshWater", "greyWater", "blackWater", "holding", "lpg", "diesel", "liveWell", "baitWell", "ballast", "rum" ] }) this.addDefaultParam("id") .default="1" this.addMetadatum("mst","","Device state", (buffer)=>{return GobiusState.get(buffer.readInt8(0))} ) .default='tanks.{type}.{id}.deviceState' this.addMetadatum("msb","","Device status", (buffer)=>{return buffer.readInt8(1)} ) .default='tanks.{type}.{id}.deviceStatus' this.addMetadatum("mvd","","Measurement validity 0=invalid 1=valid", (buffer)=>{return buffer.readInt8(2)} ) .default='tanks.{type}.{id}.measurementValidity' this.addMetadatum("mfl","ratio","Current level", (buffer)=>{return buffer.readInt16BE(3)/1000} ) .default='tanks.{type}.{id}.currentLevel' this.addMetadatum("minc","rad","Sensor inclination", (buffer)=>{return buffer.readInt8(5) * Math.PI/180} ) .default='tanks.{type}.{id}.inclination' this.addMetadatum("mdist","mm","Distance from sensor enclosure interface [mm]", (buffer)=>{return buffer.readInt16BE(6) } ) .default='tanks.{type}.{id}.distanceFromEnclosure' this.getJSONSchema().properties.params.required=["type" ] } initGATTConnection(){ return new Promise((resolve,reject )=>{ this.deviceConnect().then(async ()=>{ if (!this.gattServer) { this.gattServer = await this.device.gatt() this.service = await this.gattServer.getPrimaryService("0000ffe0-0000-1000-8000-00805f9b34fb") this.characteristic = await this.service.getCharacteristic("0000ffe9-0000-1000-8000-00805f9b34fb") } this.device.on("disconnect", ()=>{ if (this.isActive()) { this.debug(`Device disconnected. Attempting to reconnect to ${this.getName()}`) try { this.deviceConnect().then(()=>{ this.debug(`Device reconnected -- ${this.getName()}`) }) } catch (e) { this.debug(`Error while reconnecting to ${this.getName()}`) } } }) resolve(this) }).catch((e)=>{ reject(e.message) }) }) } initGATTNotifications() { Promise.resolve(this.characteristic.startNotifications().then(()=>{ this.characteristic.on('valuechanged', buffer => { this.emitValuesFrom(buffer) }) })) } getDescription(){ return '<a href="https://gobiusc.com/"><img src="../bt-sensors-plugin-sk/images/Gobius_C.png" alt="Gobius C Tank Measure" "></a>' } async stopListening(){ super.stopListening() if (this.characteristic && await this.characteristic.isNotifying()) { await this.characteristic.stopNotifications() this.characteristic=null } if (await this.device.isConnected()){ await this.device.disconnect() } } } module.exports=GobiusCTankMeter