bt-sensors-plugin-sk 1.3.1 → 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.
- package/BTSensor.js +4 -0
- package/README.md +9 -0
- package/VictronSmartBatteryProtect.js +54 -0
- package/VictronSmartBatteryProtect.js.1 +54 -0
- package/index.js +1 -2
- package/package.json +1 -1
- package/sensor_classes/GobiusCTankMeter.js +1 -1
- package/sensor_classes/JBDBMS.js +14 -4
- package/sensor_classes/Renogy/RenogySensor.js +15 -6
- package/sensor_classes/RenogyBattery.js +28 -14
- package/sensor_classes/RenogyInverter.js +17 -3
- package/sensor_classes/RenogyRoverClient.js +9 -18
- package/sensor_classes/ShellySBHT003C.js +2 -2
- package/sensor_classes/ShellySBMO003Z.js +3 -17
- package/sensor_classes/ShenzhenLiOnBMS.js +26 -8
- package/sensor_classes/Victron/VictronConstants.js +699 -103
- package/sensor_classes/Victron/VictronSensor.js +27 -2
- package/sensor_classes/VictronBatteryMonitor.js +6 -8
- package/sensor_classes/VictronDCDCConverter.js +1 -1
- package/sensor_classes/VictronDCEnergyMeter.js +2 -3
- package/sensor_classes/VictronInverter.js +2 -3
- package/sensor_classes/VictronLynxSmartBMS.js +1 -1
- package/sensor_classes/VictronOrionXS.js +3 -1
- package/sensor_classes/VictronSmartBatteryProtect.js +9 -2
- package/testGATT.js +24 -0
|
@@ -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
|
|
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 (
|
|
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.
|
|
131
|
-
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
+
}
|