bt-sensors-plugin-sk 1.3.0 → 1.3.2-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,7 +11,7 @@ const VictronIdentifier = require('./VictronIdentifier.js');
11
11
  constructor(device,config,gattConfig){
12
12
  super(device,config,gattConfig)
13
13
 
14
- if (device.modelID)
14
+ if (device&&device.modelID)
15
15
  this.modelID=device.modelID
16
16
  }
17
17
 
@@ -52,6 +52,31 @@ const VictronIdentifier = require('./VictronIdentifier.js');
52
52
  }
53
53
  return null
54
54
  }
55
+
56
+ offReasonText(value){
57
+ let reasons=[];
58
+ VC.OffReasons.forEach((v,k)=>{
59
+ if (k&value)
60
+ reasons.push(v);
61
+ })
62
+ return reasons.join("|");
63
+ }
64
+
65
+ alarmReasonText(value){
66
+ let reasons=[];
67
+ VC.AlarmReason.forEach((v,k)=>{
68
+ if (k&value)
69
+ reasons.push(v);
70
+ })
71
+ return reasons.join("|");
72
+ }
73
+ emitAlarm(tag="alarm", alarm){
74
+ this.emit(
75
+ tag,
76
+ { message:this.alarmReasonText(alarm),
77
+ alarm: `0x${alarm.toString(16).padStart(8,"0")}`,
78
+ alarmstate: 'alert'})
79
+ }
55
80
  async init(){
56
81
  await super.init()
57
82
  this.addParameter(
@@ -63,7 +88,7 @@ const VictronIdentifier = require('./VictronIdentifier.js');
63
88
  )
64
89
  }
65
90
  alarmReason(alarmValue){
66
- return this.constructor.AlarmReason[alarmValue]
91
+ return VC.AlarmReason.get(alarmValue)
67
92
  }
68
93
  getModelName(){
69
94
  const mID = this.getModelID()
@@ -26,7 +26,7 @@ class VictronBatteryMonitor extends VictronSensor{
26
26
  d.debug.bind(d)
27
27
  d.initSchema()
28
28
  Object.keys(d.getPaths()).forEach((tag)=>{
29
- d.on(tag,(v)=>console.log(`${tag}=${v}`))
29
+ d.on(tag,(v)=>console.log(`${tag}=${JSON.stringify(v)}`))
30
30
  })
31
31
  if (key)
32
32
  b = d.decrypt(b)
@@ -80,7 +80,7 @@ class VictronBatteryMonitor extends VictronSensor{
80
80
 
81
81
  this.auxMode=VC.AuxMode.STARTER_VOLTAGE
82
82
 
83
- if (!this.auxMode){
83
+ if (this.auxMode==undefined){
84
84
  const md=await this.constructor.getDataPacket(this.device, this.getManufacturerData(this.constructor.ManufacturerID))
85
85
  try {
86
86
  if (this.encryptionKey){
@@ -120,17 +120,15 @@ class VictronBatteryMonitor extends VictronSensor{
120
120
  }
121
121
 
122
122
  }
123
-
123
+
124
124
  emitValuesFrom(decData){
125
125
 
126
126
  this.emitData("ttg",decData,0)
127
127
  this.emitData("voltage",decData,2);
128
128
  const alarm = this.getPath("alarm").read(decData,4)
129
- if (alarm>0){
130
- this.emit(
131
- `ALARM #${alarm} from ${this.getDisplayName()})`,
132
- { message: VC.AlarmReason.get(alarm), state: 'alert'})
133
- }
129
+ if (alarm>0)
130
+ this.emitAlarm("alarm",alarm)
131
+
134
132
  switch(this.auxMode){
135
133
  case VC.AuxMode.STARTER_VOLTAGE:
136
134
  this.emitData("starterVoltage",decData,6);
@@ -25,7 +25,7 @@ class VictronDCDCConverter extends VictronSensor{
25
25
  .default="electrical.chargers.{id}.output.voltage"
26
26
 
27
27
  this.addMetadatum('offReason','', 'reason unit is off',
28
- (buff)=>{return VC.OffReasons.get(buff.readUInt32LE(6))})
28
+ (buff)=>{return this.offReasonText(buff.readUInt32LE(6))})
29
29
  .default="electrical.chargers.{id}.offReason"
30
30
 
31
31
 
@@ -55,6 +55,7 @@ class VictronDCEnergyMeter extends VictronSensor{
55
55
  this.addMetadatum('alarm','', 'alarm',
56
56
  (buff)=>{return buff.readUInt16LE(4)})
57
57
  .default="electrical.meters.{id}.alarm"
58
+ this.getPath("alarm").notify=true
58
59
  this.addMetadatum('current','A', 'current')
59
60
  .default="electrical.meters.{id}.current"
60
61
 
@@ -65,9 +66,7 @@ class VictronDCEnergyMeter extends VictronSensor{
65
66
  this.emitData("voltage",decData,2);
66
67
  const alarm = this.getPath("alarm").read(decData,4)
67
68
  if (alarm>0){
68
- this.emit(
69
- `ALARM #${alarm} from ${this.getDisplayName()})`,
70
- { message: AlarmReason(alarm), state: 'alert'})
69
+ this.emitAlarm("alarm",alarm)
71
70
  }
72
71
  switch(this.auxMode){
73
72
  case VC.AuxMode.STARTER_VOLTAGE:
@@ -17,6 +17,7 @@ class VictronInverter extends VictronSensor{
17
17
  const md = this.addMetadatum('alarmReason','', 'reason for alarm',
18
18
  (buff)=>{return buff.readIntU16LE(1)})
19
19
  .default="electrical.inverters.{id}.alarm"
20
+ md.notify=true
20
21
 
21
22
  this.addDefaultPath('dcVoltage','electrical.inverters.dc.voltage')
22
23
  .read=(buff)=>{return this.NaNif(buff.readInt16LE(3),0x7FFF)/100}
@@ -40,9 +41,7 @@ class VictronInverter extends VictronSensor{
40
41
  this.NaNif(br.read_unsigned_int(11),0x7FF)/10)
41
42
  const alarm = this.getPath("alarmReason").read(decData)
42
43
  if (alarm>0){
43
- this.emit(
44
- `ALARM #${alarm} from ${this.getDisplayName()})`,
45
- { message: VC.AlarmReason.get(alarm), state: 'alert'})
44
+ this.emitAlarm("alarmReason",alarm)
46
45
  }
47
46
  }
48
47
 
@@ -37,7 +37,7 @@ class VictronLynxSmartBMS extends VictronSensor{
37
37
  (buff)=>{return buff.readUInt16LE(7)})
38
38
  .default="electrical.batteries.{batteryID}.IOStatus"
39
39
 
40
- this.addMetadatum('warningsAndAlarms','','warnings and alarms')
40
+ this.addMetadatum('warningsAndAlarms','','warnings and alarms (undocumented)')
41
41
 
42
42
  this.addDefaultPath('soc','electrical.batteries.capacity.stateOfCharge')
43
43
 
@@ -32,9 +32,11 @@ class VictronOrionXS extends VictronSensor{
32
32
  (buff)=>{return this.NaNif(buff.readUInt16LE(8),0xFFFF)/10})
33
33
  .default="electrical.chargers.{id}.input.current"
34
34
  this.addMetadatum('deviceOffReason','', 'device off reason',
35
- (buff)=>{return VC.OffReasons.get(buff.readUInt32BE(10))})
35
+ (buff)=>{return this.offReasonText(buff.readUInt32LE(10))})
36
36
  .default="electrical.chargers.{id}.offReason"
37
37
  }
38
38
 
39
+
40
+
39
41
  }
40
42
  module.exports=VictronOrionXS
@@ -32,7 +32,8 @@ class VictronSmartBatteryProtect extends VictronSensor{
32
32
  this.addMetadatum('chargerError','', 'charger error',
33
33
  (buff)=>{return VC.ChargerError.get(buff.readUInt8(3))})
34
34
  this.addMetadatum('alarmReason','', 'alarm reason',
35
- (buff)=>{return VC.AlarmReason.get(buff.readUInt16LE(4))})
35
+ (buff)=>{return buff.readUInt16LE(4)})
36
+ this.getPath("alarmReason").notify=true
36
37
  this.addMetadatum('warningReason','', 'warning reason', //TODO
37
38
  (buff)=>{return (buff.readUInt16LE(5))})
38
39
  this.addMetadatum('channel1Voltage','V', 'channel one voltage',
@@ -40,8 +41,14 @@ class VictronSmartBatteryProtect extends VictronSensor{
40
41
  this.addMetadatum('outputVoltage','V', 'output voltage',
41
42
  (buff)=>{return this.NaNif(buff.readUInt16LE(9),0xFFFF)/100})
42
43
  this.addMetadatum('offReason','', 'off reason',
43
- (buff)=>{return VC.OffReasons.get(buff.readUInt16LE(11))}) //TODO
44
+ (buff)=>{return this.offReasonText(buff.readUInt32LE(11))})
44
45
  }
46
+ emitValuesFrom(decData){
47
+ super.emitValuesFrom(decData)
48
+ const alarm = this.getPath("alarmReason").read(decData)
49
+ if (alarm>0)
50
+ this.emitAlarm("alarmReason",alarm)
51
+ }
45
52
 
46
53
  }
47
54
  module.exports=VictronSmartBatteryProtect
package/testGATT.js ADDED
@@ -0,0 +1,24 @@
1
+ const {createBluetooth} = require('@naugehyde/node-ble');
2
+
3
+ const {bluetooth, destroy} = createBluetooth();
4
+ var cls=require("./sensor_classes/XiaomiMiBeacon.js");
5
+
6
+ const adapter = await bluetooth.getAdapter("hci0");
7
+ await adapter.startDiscovery();
8
+ var device = await adapter.waitDevice("A4:C1:38:3E:7E:94",60000);
9
+
10
+ var continueTesting=true;
11
+ var trial=1
12
+ function sleep(ms) {
13
+ return new Promise(resolve => setTimeout(resolve, ms));
14
+ }
15
+ while(continueTesting) {
16
+ console.log("trial: "+trial++);
17
+ await device.connect();
18
+ console.log("\tconnected");
19
+
20
+ await device.disconnect();
21
+ console.log("\tdisconnected");
22
+ await sleep(2000)
23
+
24
+ }