bt-sensors-plugin-sk 1.0.3 → 1.1.0-beta.2
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 +334 -39
- package/bt_co.json +14520 -0
- package/index.js +385 -177
- package/package.json +4 -3
- package/sensor_classes/ATC.js +31 -22
- package/sensor_classes/BlackListedDevice.js +20 -0
- package/sensor_classes/Inkbird.js +47 -0
- package/sensor_classes/RuuviTag.js +117 -0
- package/sensor_classes/UNKNOWN.js +12 -0
- package/sensor_classes/Victron/VictronConstants.js +328 -0
- package/sensor_classes/Victron/VictronSensor.js +105 -0
- package/sensor_classes/VictronACCharger.js +63 -0
- package/sensor_classes/VictronBatteryMonitor.js +158 -0
- package/sensor_classes/VictronDCDCConverter.js +26 -0
- package/sensor_classes/VictronDCEnergyMeter.js +66 -0
- package/sensor_classes/VictronGXDevice.js +43 -0
- package/sensor_classes/VictronInverter.js +43 -0
- package/sensor_classes/VictronInverterRS.js +44 -0
- package/sensor_classes/VictronLynxSmartBMS.js +49 -0
- package/sensor_classes/VictronOrionXS.js +30 -0
- package/sensor_classes/VictronSmartBatteryProtect.js +48 -0
- package/sensor_classes/VictronSmartLithium.js +62 -0
- package/sensor_classes/VictronSolarCharger.js +29 -0
- package/sensor_classes/VictronVEBus.js +47 -0
- package/sensor_classes/XiaomiMiBeacon.js +227 -0
- package/test.js +32 -0
- package/sensor_classes/LYWSD03MMC.js +0 -39
- package/sensor_classes/SmartShunt.js +0 -300
- package/sensor_classes/SmartShunt_GATT.js +0 -64
- package/sensor_classes/TPS.js +0 -49
package/sensor_classes/ATC.js
CHANGED
|
@@ -1,30 +1,39 @@
|
|
|
1
1
|
const BTSensor = require("../BTSensor");
|
|
2
|
-
const LYWSD03MMC = require('./LYWSD03MMC.js')
|
|
3
2
|
class ATC extends BTSensor{
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
connect() {
|
|
12
|
-
const cb = async (propertiesChanged) => {
|
|
13
|
-
try{
|
|
14
|
-
this.device.getServiceData().then((data)=>{
|
|
15
|
-
//TBD Check if the service ID is universal across ATC variants
|
|
16
|
-
const buff=data['0000181a-0000-1000-8000-00805f9b34fb'];
|
|
17
|
-
this.emit("temp",((buff.readInt16LE(6))/100) + 273.1);
|
|
18
|
-
this.emit("humidity",buff.readUInt16LE(8)/10000);
|
|
19
|
-
this.emit("voltage",buff.readUInt16LE(10)/1000);
|
|
20
|
-
})
|
|
21
|
-
}
|
|
22
|
-
catch (error) {
|
|
23
|
-
throw new Error(`Unable to read data from ${util.inspect(device)}: ${error}` )
|
|
4
|
+
static async identify(device){
|
|
5
|
+
try{
|
|
6
|
+
const regex = /^ATC_[A-Fa-f0-9]{6}$/
|
|
7
|
+
const name = await this.getDeviceProp(device,"Name")
|
|
8
|
+
if (name && name.match(regex)){
|
|
9
|
+
return this
|
|
24
10
|
}
|
|
11
|
+
} catch (e){
|
|
12
|
+
return null
|
|
25
13
|
}
|
|
26
|
-
|
|
27
|
-
|
|
14
|
+
return null
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
async init() {
|
|
18
|
+
await super.init()
|
|
19
|
+
this.addMetadatum('temp','K', 'temperature',
|
|
20
|
+
(buff,offset)=>{return ((buff.readInt16LE(offset))/100) + 273.1})
|
|
21
|
+
this.addMetadatum('humidity','ratio', 'humidity',
|
|
22
|
+
(buff,offset)=>{return ((buff.readUInt16LE(offset))/10000)})
|
|
23
|
+
this.addMetadatum('voltage', 'V', 'sensor battery voltage',
|
|
24
|
+
(buff,offset)=>{return ((buff.readUInt16LE(offset))/1000)})
|
|
25
|
+
}
|
|
26
|
+
propertiesChanged(props){
|
|
27
|
+
super.propertiesChanged(props)
|
|
28
|
+
const buff = this.getServiceData("0000181a-0000-1000-8000-00805f9b34fb")
|
|
29
|
+
if (!buff)
|
|
30
|
+
throw new Error("Unable to get service data for "+this.getDisplayName())
|
|
31
|
+
this.emitData("temp", buff, 6)
|
|
32
|
+
this.emitData("humidity", buff, 8)
|
|
33
|
+
this.emitData("voltage", buff, 10)
|
|
34
|
+
}
|
|
35
|
+
getManufacturer(){
|
|
36
|
+
return "ATC1441 (custom firmware see: https://github.com/atc1441)"
|
|
28
37
|
}
|
|
29
38
|
}
|
|
30
39
|
module.exports=ATC
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const BTSensor = require("../BTSensor");
|
|
2
|
+
class BLACKLISTED extends BTSensor{
|
|
3
|
+
static async identify(device){
|
|
4
|
+
if (await this.getManufacturerID(device)===0x004C) //apple devices use
|
|
5
|
+
return this //randomised macs and clog up our list
|
|
6
|
+
return null
|
|
7
|
+
}
|
|
8
|
+
async init(){
|
|
9
|
+
await super.init()
|
|
10
|
+
this.currentProperties.Name= `Unsupported device from ${this.getManufacturer()}`
|
|
11
|
+
}
|
|
12
|
+
reasonForBlacklisting() {
|
|
13
|
+
switch ( this.getManufacturerID()){
|
|
14
|
+
case (0x004C): return "Randomized MAC address"
|
|
15
|
+
default: return ""
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
module.exports=BLACKLISTED
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const BTSensor = require("../BTSensor");
|
|
2
|
+
|
|
3
|
+
class Inkbird extends BTSensor{
|
|
4
|
+
|
|
5
|
+
static async identify(device){
|
|
6
|
+
try{
|
|
7
|
+
const uuids = await this.getDeviceProp(device,'UUIDs')
|
|
8
|
+
const name = await this.getDeviceProp(device,"Name")
|
|
9
|
+
if ((name == 'tps' || name=='sps') && (uuids.length > 0 && uuids[0] == '0000fff0-0000-1000-8000-00805f9b34fb')){
|
|
10
|
+
return this
|
|
11
|
+
}
|
|
12
|
+
} catch (e){
|
|
13
|
+
this.debug(e)
|
|
14
|
+
return null
|
|
15
|
+
}
|
|
16
|
+
return null
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async init(){
|
|
20
|
+
await super.init()
|
|
21
|
+
this.addMetadatum('temp','K', 'temperature')
|
|
22
|
+
this.addMetadatum('battery','ratio', 'battery strength')
|
|
23
|
+
if (this.getName() == 'sps'){
|
|
24
|
+
this.addMetadatum('humidity','ratio', 'humidity')
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getManufacturer(){
|
|
29
|
+
return "Shenzhen Inkbird Technology Co."
|
|
30
|
+
}
|
|
31
|
+
async propertiesChanged(props){
|
|
32
|
+
super.propertiesChanged(props)
|
|
33
|
+
if (props.ManufacturerData) {
|
|
34
|
+
const keys = Object.keys(this.currentProperties.ManufacturerData)
|
|
35
|
+
const key = keys[keys.length-1]
|
|
36
|
+
const data = this.getManufacturerData(key)
|
|
37
|
+
if (!data)
|
|
38
|
+
throw new Error("Unable to get manufacturer data for "+this.getDisplayName())
|
|
39
|
+
this.emit("temp", (parseInt(key)/100) + 273.1);
|
|
40
|
+
this.emit('battery', data[5]/100)
|
|
41
|
+
if (this.getMetadata().has('humidity')){
|
|
42
|
+
this.emit("temp", data.readUInt16LE(0)/100);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
module.exports=Inkbird
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
const BTSensor = require("../BTSensor");
|
|
2
|
+
class RuuviTag extends BTSensor{
|
|
3
|
+
static manufacturerID = 0x0499
|
|
4
|
+
static async identify(device){
|
|
5
|
+
try{
|
|
6
|
+
if (await this.getManufacturerID(device)==this.manufacturerID)
|
|
7
|
+
return this
|
|
8
|
+
} catch (e){
|
|
9
|
+
console.log(e)
|
|
10
|
+
return null
|
|
11
|
+
}
|
|
12
|
+
return null
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async init(){
|
|
16
|
+
await super.init()
|
|
17
|
+
const md = this.valueIfVariant(this.getManufacturerData(this.constructor.manufacturerID))
|
|
18
|
+
this.mode = md[0]
|
|
19
|
+
if (this['_initModeV'+this.mode])
|
|
20
|
+
this['_initModeV'+this.mode]()
|
|
21
|
+
else
|
|
22
|
+
throw new Error("Unrecognized Ruuvitag data mode "+md[0])
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* https://github.com/ruuvi/ruuvi-sensor-protocols/blob/master/dataformat_05.md
|
|
27
|
+
*
|
|
28
|
+
* Offset Allowed values Description
|
|
29
|
+
0 5 Data format (8bit)
|
|
30
|
+
1-2 -32767 ... 32767 Temperature in 0.005 degrees
|
|
31
|
+
3-4 0 ... 40 000 Humidity (16bit unsigned) in 0.0025% (0-163.83% range, though realistically 0-100%)
|
|
32
|
+
5-6 0 ... 65534 Pressure (16bit unsigned) in 1 Pa units, with offset of -50 000 Pa
|
|
33
|
+
7-8 -32767 ... 32767 Acceleration-X (Most Significant Byte first)
|
|
34
|
+
9-10 -32767 ... 32767 Acceleration-Y (Most Significant Byte first)
|
|
35
|
+
11-12 -32767 ... 32767 Acceleration-Z (Most Significant Byte first)
|
|
36
|
+
13-14 0 ... 2046, 0 ... 30 Power info (11+5bit unsigned), first 11 bits is the battery voltage above 1.6V, in millivolts (1.6V to 3.646V range). Last 5 bits unsigned are the TX power above -40dBm, in 2dBm steps. (-40dBm to +20dBm range)
|
|
37
|
+
15 0 ... 254 Movement counter (8 bit unsigned), incremented by motion detection interrupts from accelerometer
|
|
38
|
+
16-17 0 ... 65534 Measurement sequence number (16 bit unsigned), each time a measurement is taken, this is incremented by one, used for measurement de-duplication. Depending on the transmit interval, multiple packets with the same measurements can be sent, and there may be measurements that never were sent.
|
|
39
|
+
18-23 Any valid mac 48bit MAC address.
|
|
40
|
+
**/
|
|
41
|
+
_initModeV5(){
|
|
42
|
+
this.addMetadatum("temp","K","temperature in Kelvin",
|
|
43
|
+
(buffer)=>{ return (buffer.readInt16BE(1)*.005)+273.15}
|
|
44
|
+
)
|
|
45
|
+
this.addMetadatum("humidity","ratio","humidity",
|
|
46
|
+
(buffer)=>{ return (buffer.readUInt16BE(3)*.0025)/100}
|
|
47
|
+
)
|
|
48
|
+
this.addMetadatum("pressure","Pa","atmospheric pressure",
|
|
49
|
+
(buffer)=>{ return buffer.readUInt16BE(5)+50000}
|
|
50
|
+
)
|
|
51
|
+
this.addMetadatum("accX","Mg","acceleration on X-axis",
|
|
52
|
+
(buffer)=>{ return buffer.readInt16BE(7)}
|
|
53
|
+
)
|
|
54
|
+
this.addMetadatum("accY","Mg","acceleration on Y-axis",
|
|
55
|
+
(buffer)=>{ return buffer.readInt16BE(9)}
|
|
56
|
+
)
|
|
57
|
+
this.addMetadatum("accZ","Mg","acceleration on Z-axis",
|
|
58
|
+
(buffer)=>{ return buffer.readInt16BE(11)}
|
|
59
|
+
)
|
|
60
|
+
this.addMetadatum("battV","V","battery voltage",
|
|
61
|
+
(buffer)=>{ return 1.6+(buffer.readUInt16BE(13)>>5)/1000}
|
|
62
|
+
)
|
|
63
|
+
this.addMetadatum("mc","","movement counter",
|
|
64
|
+
(buffer)=>{ return buffer.readUInt16BE(13) && 0x1F}
|
|
65
|
+
)
|
|
66
|
+
this.addMetadatum("msc","","measurement sequence counter",
|
|
67
|
+
(buffer)=>{ return buffer.readUInt16BE(15)}
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* https://github.com/ruuvi/ruuvi-sensor-protocols/blob/master/dataformat_03.md
|
|
74
|
+
*
|
|
75
|
+
|
|
76
|
+
Offset Allowed values Description
|
|
77
|
+
0 3 Data format definition (3 = current sensor readings)
|
|
78
|
+
1 0 ... 200 Humidity (one lsb is 0.5%, e.g. 128 is 64%) Values above 100% indicate a fault in sensor.
|
|
79
|
+
2 -127 ... 127, signed Temperature (MSB is sign, next 7 bits are decimal value)
|
|
80
|
+
3 0 ... 99 Temperature (fraction, 1/100.)
|
|
81
|
+
4 - 5 0 ... 65535 Pressure (Most Significant Byte first, value - 50kPa)
|
|
82
|
+
6-7 -32767 ... 32767, signed Acceleration-X (Most Significant Byte first)
|
|
83
|
+
8 - 9 -32767 ... 32767, signed Acceleration-Y (Most Significant Byte first)
|
|
84
|
+
10 - 11 -32767 ... 32767, signed Acceleration-Z (Most Significant Byte first)
|
|
85
|
+
12 - 13 0 ... 65535 Battery voltage (millivolts). MSB First
|
|
86
|
+
**/
|
|
87
|
+
|
|
88
|
+
_initModeV3(){
|
|
89
|
+
this.addMetadatum("humidity","ratio","humidity",
|
|
90
|
+
(buffer)=>{ return (buffer.readUInt(1)*.5)/100}
|
|
91
|
+
)
|
|
92
|
+
this.addMetadatum("temp","K","temperature in Kelvin",
|
|
93
|
+
(buffer)=>{ return (buffer.readInt(2)+(buffer.readInt(3)/100))+273.15}
|
|
94
|
+
)
|
|
95
|
+
this.addMetadatum("pressure","Pa","atmospheric pressure",
|
|
96
|
+
(buffer)=>{ return buffer.readUInt16BE(4)+50000}
|
|
97
|
+
)
|
|
98
|
+
this.addMetadatum("accX","Mg","acceleration on X-axis",
|
|
99
|
+
(buffer)=>{ return buffer.readInt16BE(6)}
|
|
100
|
+
)
|
|
101
|
+
this.addMetadatum("accY","Mg","acceleration on Y-axis",
|
|
102
|
+
(buffer)=>{ return buffer.readInt16BE(8)}
|
|
103
|
+
)
|
|
104
|
+
this.addMetadatum("accZ","Mg","acceleration on Z-axis",
|
|
105
|
+
(buffer)=>{ return buffer.readInt16BE(10)}
|
|
106
|
+
)
|
|
107
|
+
this.addMetadatum("battV","V","battery voltage",
|
|
108
|
+
(buffer)=>{ return buffer.readUInt16BE(12)/1000}
|
|
109
|
+
)
|
|
110
|
+
}
|
|
111
|
+
propertiesChanged(props){
|
|
112
|
+
super.propertiesChanged(props)
|
|
113
|
+
if (props.ManufacturerData)
|
|
114
|
+
this.emitValuesFrom( this.getManufacturerData(this.constructor.manufacturerID) )
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
module.exports=RuuviTag
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const BTSensor = require("../BTSensor");
|
|
2
|
+
class UNKNOWN extends BTSensor{
|
|
3
|
+
static identify(device){
|
|
4
|
+
return null
|
|
5
|
+
}
|
|
6
|
+
async init(){
|
|
7
|
+
await super.init()
|
|
8
|
+
if (!this.currentProperties.Name)
|
|
9
|
+
this.currentProperties.Name= `Unknown device from ${this.getManufacturer()}`
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
module.exports=UNKNOWN
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
|
|
3
|
+
/*Device State?
|
|
4
|
+
0x00: Off
|
|
5
|
+
0x01: Low Power Mode,
|
|
6
|
+
0x02: Fault,
|
|
7
|
+
0x03: Bulk,
|
|
8
|
+
0x04: Absorption,
|
|
9
|
+
0x05: Float,
|
|
10
|
+
0x06: Storage,
|
|
11
|
+
0x07: Equalize,
|
|
12
|
+
0x08: Passthru,
|
|
13
|
+
0x09: Inverting,
|
|
14
|
+
0x0A: Assisting,
|
|
15
|
+
0x0B: Power Supply Mode,
|
|
16
|
+
0x0C-0xFA: Reserved,
|
|
17
|
+
0xFB: Test,
|
|
18
|
+
0xFC: Hub-1,
|
|
19
|
+
0xFD-0xFE: Reserved,
|
|
20
|
+
0xFF: Not Available
|
|
21
|
+
*/
|
|
22
|
+
OperationMode: new Map([
|
|
23
|
+
[0, 'OFF'],
|
|
24
|
+
[1, 'LOW_POWER'],
|
|
25
|
+
[2, 'FAULT'],
|
|
26
|
+
[3, 'BULK'],
|
|
27
|
+
[4, 'ABSORPTION'],
|
|
28
|
+
[5, 'FLOAT'],
|
|
29
|
+
[6, 'STORAGE'],
|
|
30
|
+
[7, 'EQUALIZE_MANUAL'],
|
|
31
|
+
[9, 'INVERTING'],
|
|
32
|
+
[11, 'POWER_SUPPLY'],
|
|
33
|
+
[245, 'STARTING_UP'],
|
|
34
|
+
[246, 'REPEATED_ABSORPTION'],
|
|
35
|
+
[247, 'RECONDITION'],
|
|
36
|
+
[248, 'BATTERY_SAFE'],
|
|
37
|
+
[252, 'EXTERNAL_CONTROL']
|
|
38
|
+
]),
|
|
39
|
+
AlarmReason : new Map([
|
|
40
|
+
[0, "NO ALARM"],
|
|
41
|
+
[1, "LOW_VOLTAGE"],
|
|
42
|
+
[2, "HIGH_VOLTAGE"],
|
|
43
|
+
[4, "LOW_SOC"],
|
|
44
|
+
[8, "LOW_STARTER_VOLTAGE"],
|
|
45
|
+
[16, "HIGH_STARTER_VOLTAGE"],
|
|
46
|
+
[32, "LOW_TEMPERATURE"],
|
|
47
|
+
[64, "HIGH_TEMPERATURE"],
|
|
48
|
+
[128, "MID_VOLTAGE"],
|
|
49
|
+
[256, "OVERLOAD"],
|
|
50
|
+
[512, "DC_RIPPLE"],
|
|
51
|
+
[1024, "LOW_V_AC_OUT"],
|
|
52
|
+
[2048, "HIGH_V_AC_OUT"],
|
|
53
|
+
[4096, "SHORT_CIRCUIT"],
|
|
54
|
+
[8192, "BMS_LOCKOUT"]
|
|
55
|
+
]),
|
|
56
|
+
MeterType : new Map([
|
|
57
|
+
[-9, 'SOLAR_CHARGER'],
|
|
58
|
+
[-8, 'WIND_CHARGER'],
|
|
59
|
+
[-7, 'SHAFT_GENERATOR'],
|
|
60
|
+
[-6, 'ALTERNATOR'],
|
|
61
|
+
[-5, 'FUEL_CELL'],
|
|
62
|
+
[-4, 'WATER_GENERATOR'],
|
|
63
|
+
[-3, 'DC_DC_CHARGER'],
|
|
64
|
+
[-2, 'AC_CHARGER'],
|
|
65
|
+
[-1, 'GENERIC_SOURCE'],
|
|
66
|
+
[1, 'GENERIC_LOAD'],
|
|
67
|
+
[2, 'ELECTRIC_DRIVE'],
|
|
68
|
+
[3, 'FRIDGE'],
|
|
69
|
+
[4, 'WATER_PUMP'],
|
|
70
|
+
[5, 'BILGE_PUMP'],
|
|
71
|
+
[6, 'DC_SYSTEM'],
|
|
72
|
+
[7, 'INVERTER'],
|
|
73
|
+
[8, 'WATER_HEATER']
|
|
74
|
+
]),
|
|
75
|
+
MODEL_ID_MAP :{
|
|
76
|
+
0x203: "BMV-700",
|
|
77
|
+
0x204: "BMV-702",
|
|
78
|
+
0x205: "BMV-700H",
|
|
79
|
+
0x0300: "BlueSolar MPPT 70|15",
|
|
80
|
+
0xA040: "BlueSolar MPPT 75|50",
|
|
81
|
+
0xA041: "BlueSolar MPPT 150|35",
|
|
82
|
+
0xA042: "BlueSolar MPPT 75|15",
|
|
83
|
+
0xA043: "BlueSolar MPPT 100|15",
|
|
84
|
+
0xA044: "BlueSolar MPPT 100|30",
|
|
85
|
+
0xA045: "BlueSolar MPPT 100|50",
|
|
86
|
+
0xA046: "BlueSolar MPPT 150|70",
|
|
87
|
+
0xA047: "BlueSolar MPPT 150|100",
|
|
88
|
+
0xA049: "BlueSolar MPPT 100|50 rev2",
|
|
89
|
+
0xA04A: "BlueSolar MPPT 100|30 rev2",
|
|
90
|
+
0xA04B: "BlueSolar MPPT 150|35 rev2",
|
|
91
|
+
0xA04C: "BlueSolar MPPT 75|10",
|
|
92
|
+
0xA04D: "BlueSolar MPPT 150|45",
|
|
93
|
+
0xA04E: "BlueSolar MPPT 150|60",
|
|
94
|
+
0xA04F: "BlueSolar MPPT 150|85",
|
|
95
|
+
0xA050: "SmartSolar MPPT 250|100",
|
|
96
|
+
0xA051: "SmartSolar MPPT 150|100",
|
|
97
|
+
0xA052: "SmartSolar MPPT 150|85",
|
|
98
|
+
0xA053: "SmartSolar MPPT 75|15",
|
|
99
|
+
0xA054: "SmartSolar MPPT 75|10",
|
|
100
|
+
0xA055: "SmartSolar MPPT 100|15",
|
|
101
|
+
0xA056: "SmartSolar MPPT 100|30",
|
|
102
|
+
0xA057: "SmartSolar MPPT 100|50",
|
|
103
|
+
0xA058: "SmartSolar MPPT 150|35",
|
|
104
|
+
0xA059: "SmartSolar MPPT 150|100 rev2",
|
|
105
|
+
0xA05A: "SmartSolar MPPT 150|85 rev2",
|
|
106
|
+
0xA05B: "SmartSolar MPPT 250|70",
|
|
107
|
+
0xA05C: "SmartSolar MPPT 250|85",
|
|
108
|
+
0xA05D: "SmartSolar MPPT 250|60",
|
|
109
|
+
0xA05E: "SmartSolar MPPT 250|45",
|
|
110
|
+
0xA05F: "SmartSolar MPPT 100|20",
|
|
111
|
+
0xA060: "SmartSolar MPPT 100|20 48V",
|
|
112
|
+
0xA061: "SmartSolar MPPT 150|45",
|
|
113
|
+
0xA062: "SmartSolar MPPT 150|60",
|
|
114
|
+
0xA063: "SmartSolar MPPT 150|70",
|
|
115
|
+
0xA064: "SmartSolar MPPT 250|85 rev2",
|
|
116
|
+
0xA065: "SmartSolar MPPT 250|100 rev2",
|
|
117
|
+
0xA066: "BlueSolar MPPT 100|20",
|
|
118
|
+
0xA067: "BlueSolar MPPT 100|20 48V",
|
|
119
|
+
0xA068: "SmartSolar MPPT 250|60 rev2",
|
|
120
|
+
0xA069: "SmartSolar MPPT 250|70 rev2",
|
|
121
|
+
0xA06A: "SmartSolar MPPT 150|45 rev2",
|
|
122
|
+
0xA06B: "SmartSolar MPPT 150|60 rev2",
|
|
123
|
+
0xA06C: "SmartSolar MPPT 150|70 rev2",
|
|
124
|
+
0xA06D: "SmartSolar MPPT 150|85 rev3",
|
|
125
|
+
0xA06E: "SmartSolar MPPT 150|100 rev3",
|
|
126
|
+
0xA06F: "BlueSolar MPPT 150|45 rev2",
|
|
127
|
+
0xA070: "BlueSolar MPPT 150|60 rev2",
|
|
128
|
+
0xA071: "BlueSolar MPPT 150|70 rev2",
|
|
129
|
+
0xA102: "SmartSolar MPPT VE.Can 150/70",
|
|
130
|
+
0xA103: "SmartSolar MPPT VE.Can 150/45",
|
|
131
|
+
0xA104: "SmartSolar MPPT VE.Can 150/60",
|
|
132
|
+
0xA105: "SmartSolar MPPT VE.Can 150/85",
|
|
133
|
+
0xA106: "SmartSolar MPPT VE.Can 150/100",
|
|
134
|
+
0xA107: "SmartSolar MPPT VE.Can 250/45",
|
|
135
|
+
0xA108: "SmartSolar MPPT VE.Can 250/60",
|
|
136
|
+
0xA109: "SmartSolar MPPT VE.Can 250/70",
|
|
137
|
+
0xA10A: "SmartSolar MPPT VE.Can 250/85",
|
|
138
|
+
0xA10B: "SmartSolar MPPT VE.Can 250/100",
|
|
139
|
+
0xA10C: "SmartSolar MPPT VE.Can 150/70 rev2",
|
|
140
|
+
0xA10D: "SmartSolar MPPT VE.Can 150/85 rev2",
|
|
141
|
+
0xA10E: "SmartSolar MPPT VE.Can 150/100 rev2",
|
|
142
|
+
0xA10F: "BlueSolar MPPT VE.Can 150/100",
|
|
143
|
+
0xA112: "BlueSolar MPPT VE.Can 250/70",
|
|
144
|
+
0xA113: "BlueSolar MPPT VE.Can 250/100",
|
|
145
|
+
0xA114: "SmartSolar MPPT VE.Can 250/70 rev2",
|
|
146
|
+
0xA115: "SmartSolar MPPT VE.Can 250/100 rev2",
|
|
147
|
+
0xA116: "SmartSolar MPPT VE.Can 250/85 rev2",
|
|
148
|
+
0xA201: "Phoenix Inverter 12V 250VA 230V",
|
|
149
|
+
0xA202: "Phoenix Inverter 24V 250VA 230V",
|
|
150
|
+
0xA204: "Phoenix Inverter 48V 250VA 230V",
|
|
151
|
+
0xA211: "Phoenix Inverter 12V 375VA 230V",
|
|
152
|
+
0xA212: "Phoenix Inverter 24V 375VA 230V",
|
|
153
|
+
0xA214: "Phoenix Inverter 48V 375VA 230V",
|
|
154
|
+
0xA221: "Phoenix Inverter 12V 500VA 230V",
|
|
155
|
+
0xA222: "Phoenix Inverter 24V 500VA 230V",
|
|
156
|
+
0xA224: "Phoenix Inverter 48V 500VA 230V",
|
|
157
|
+
0xA231: "Phoenix Inverter 12V 250VA 230V",
|
|
158
|
+
0xA232: "Phoenix Inverter 24V 250VA 230V",
|
|
159
|
+
0xA234: "Phoenix Inverter 48V 250VA 230V",
|
|
160
|
+
0xA239: "Phoenix Inverter 12V 250VA 120V",
|
|
161
|
+
0xA23A: "Phoenix Inverter 24V 250VA 120V",
|
|
162
|
+
0xA23C: "Phoenix Inverter 48V 250VA 120V",
|
|
163
|
+
0xA241: "Phoenix Inverter 12V 375VA 230V",
|
|
164
|
+
0xA242: "Phoenix Inverter 24V 375VA 230V",
|
|
165
|
+
0xA244: "Phoenix Inverter 48V 375VA 230V",
|
|
166
|
+
0xA249: "Phoenix Inverter 12V 375VA 120V",
|
|
167
|
+
0xA24A: "Phoenix Inverter 24V 375VA 120V",
|
|
168
|
+
0xA24C: "Phoenix Inverter 48V 375VA 120V",
|
|
169
|
+
0xA251: "Phoenix Inverter 12V 500VA 230V",
|
|
170
|
+
0xA252: "Phoenix Inverter 24V 500VA 230V",
|
|
171
|
+
0xA254: "Phoenix Inverter 48V 500VA 230V",
|
|
172
|
+
0xA259: "Phoenix Inverter 12V 500VA 120V",
|
|
173
|
+
0xA25A: "Phoenix Inverter 24V 500VA 120V",
|
|
174
|
+
0xA25C: "Phoenix Inverter 48V 500VA 120V",
|
|
175
|
+
0xA261: "Phoenix Inverter 12V 800VA 230V",
|
|
176
|
+
0xA262: "Phoenix Inverter 24V 800VA 230V",
|
|
177
|
+
0xA264: "Phoenix Inverter 48V 800VA 230V",
|
|
178
|
+
0xA269: "Phoenix Inverter 12V 800VA 120V",
|
|
179
|
+
0xA26A: "Phoenix Inverter 24V 800VA 120V",
|
|
180
|
+
0xA26C: "Phoenix Inverter 48V 800VA 120V",
|
|
181
|
+
0xA271: "Phoenix Inverter 12V 1200VA 230V",
|
|
182
|
+
0xA272: "Phoenix Inverter 24V 1200VA 230V",
|
|
183
|
+
0xA274: "Phoenix Inverter 48V 1200VA 230V",
|
|
184
|
+
0xA279: "Phoenix Inverter 12V 1200VA 120V",
|
|
185
|
+
0xA27A: "Phoenix Inverter 24V 1200VA 120V",
|
|
186
|
+
0xA27C: "Phoenix Inverter 48V 1200VA 120V",
|
|
187
|
+
0xA281: "Phoenix Inverter 12V 1600VA 230V",
|
|
188
|
+
0xA282: "Phoenix Inverter 24V 1600VA 230V",
|
|
189
|
+
0xA284: "Phoenix Inverter 48V 1600VA 230V",
|
|
190
|
+
0xA291: "Phoenix Inverter 12V 2000VA 230V",
|
|
191
|
+
0xA292: "Phoenix Inverter 24V 2000VA 230V",
|
|
192
|
+
0xA294: "Phoenix Inverter 48V 2000VA 230V",
|
|
193
|
+
0xA2A1: "Phoenix Inverter 12V 3000VA 230V",
|
|
194
|
+
0xA2A2: "Phoenix Inverter 24V 3000VA 230V",
|
|
195
|
+
0xA2A4: "Phoenix Inverter 48V 3000VA 230V",
|
|
196
|
+
0xA340: "Phoenix Smart IP43 Charger 12|50 (1+1)",
|
|
197
|
+
0xA341: "Phoenix Smart IP43 Charger 12|50 (3)",
|
|
198
|
+
0xA342: "Phoenix Smart IP43 Charger 24|25 (1+1)",
|
|
199
|
+
0xA343: "Phoenix Smart IP43 Charger 24|25 (3)",
|
|
200
|
+
0xA344: "Phoenix Smart IP43 Charger 12|30 (1+1)",
|
|
201
|
+
0xA345: "Phoenix Smart IP43 Charger 12|30 (3)",
|
|
202
|
+
0xA346: "Phoenix Smart IP43 Charger 24|16 (1+1)",
|
|
203
|
+
0xA347: "Phoenix Smart IP43 Charger 24|16 (3)",
|
|
204
|
+
0xA381: "BMV-712 Smart",
|
|
205
|
+
0xA382: "BMV-710H Smart",
|
|
206
|
+
0xA383: "BMV-712 Smart Rev2",
|
|
207
|
+
0xA389: "SmartShunt 500A/50mV",
|
|
208
|
+
0xA38A: "SmartShunt 1000A/50mV",
|
|
209
|
+
0xA38B: "SmartShunt 2000A/50mV",
|
|
210
|
+
0xA3A4: "Smart Battery Sense",
|
|
211
|
+
0xA3A5: "Smart Battery Sense",
|
|
212
|
+
0xA3C0: "Orion Smart 12V|12V-18A Isolated DC-DC Charger",
|
|
213
|
+
0xA3C8: "Orion Smart 12V|12V-30A Isolated DC-DC Charger",
|
|
214
|
+
0xA3D0: "Orion Smart 12V|12V-30A Non-isolated DC-DC Charger",
|
|
215
|
+
0xA3C1: "Orion Smart 12V|24V-10A Isolated DC-DC Charger",
|
|
216
|
+
0xA3C9: "Orion Smart 12V|24V-15A Isolated DC-DC Charger",
|
|
217
|
+
0xA3D1: "Orion Smart 12V|24V-15A Non-isolated DC-DC Charger",
|
|
218
|
+
0xA3C2: "Orion Smart 24V|12V-20A Isolated DC-DC Charger",
|
|
219
|
+
0xA3CA: "Orion Smart 24V|12V-30A Isolated DC-DC Charger",
|
|
220
|
+
0xA3D2: "Orion Smart 24V|12V-30A Non-isolated DC-DC Charger",
|
|
221
|
+
0xA3C3: "Orion Smart 24V|24V-12A Isolated DC-DC Charger",
|
|
222
|
+
0xA3CB: "Orion Smart 24V|24V-17A Isolated DC-DC Charger",
|
|
223
|
+
0xA3D3: "Orion Smart 24V|24V-17A Non-isolated DC-DC Charger",
|
|
224
|
+
0xA3C4: "Orion Smart 24V|48V-6A Isolated DC-DC Charger",
|
|
225
|
+
0xA3CC: "Orion Smart 24V|48V-8.5A Isolated DC-DC Charger",
|
|
226
|
+
0xA3C5: "Orion Smart 48V|12V-20A Isolated DC-DC Charger",
|
|
227
|
+
0xA3CD: "Orion Smart 48V|12V-30A Isolated DC-DC Charger",
|
|
228
|
+
0xA3C6: "Orion Smart 48V|24V-12A Isolated DC-DC Charger",
|
|
229
|
+
0xA3CE: "Orion Smart 48V|24V-16A Isolated DC-DC Charger",
|
|
230
|
+
0xA3C7: "Orion Smart 48V|48V-6A Isolated DC-DC Charger",
|
|
231
|
+
0xA3CF: "Orion Smart 48V|48V-8.5A Isolated DC-DC Charger",
|
|
232
|
+
0xA3E6: "Lynx Smart BMS 1000",
|
|
233
|
+
0x2780: "Victron Multiplus II 12/3000/120-50 2x120V",
|
|
234
|
+
0xC00A: "Cerbo GX",
|
|
235
|
+
0xC030: "SmartShunt IP65 500A/50mV",
|
|
236
|
+
0xeba0: "Smart Lithium Battery",
|
|
237
|
+
|
|
238
|
+
},
|
|
239
|
+
AuxMode:{
|
|
240
|
+
STARTER_VOLTAGE: 0,
|
|
241
|
+
MIDPOINT_VOLTAGE: 1,
|
|
242
|
+
TEMPERATURE: 2,
|
|
243
|
+
DISABLED: 3
|
|
244
|
+
},
|
|
245
|
+
ChargerError:new Map()
|
|
246
|
+
.set(0,"NO_ERROR")
|
|
247
|
+
.set(1,"TEMPERATURE_BATTERY_HIGH")
|
|
248
|
+
.set(2,"VOLTAGE_HIGH")
|
|
249
|
+
.set(3,"REMOTE_TEMPERATURE_SENSOR_FAILURE_A")
|
|
250
|
+
.set(4, "REMOTE_TEMPERATURE_SENSOR_FAILURE_B")
|
|
251
|
+
.set(5, "REMOTE_TEMPERATURE_SENSOR_FAILURE_C_NO_RESET")
|
|
252
|
+
.set(6, "REMOTE_BATTERY_VOLTAGE_SENSOR_A_FAILURE")
|
|
253
|
+
.set(7,"REMOTE_BATTERY_VOLTAGE_SENSOR_B_FAILURE")
|
|
254
|
+
.set(8,"REMOTE_BATTERY_VOLTAGE_SENSOR_C_FAILURE")
|
|
255
|
+
.set(11, "HIGH_RIPPLE_VOLTAGE")
|
|
256
|
+
.set(14, "TEMPERATURE_BATTERY_LOW")
|
|
257
|
+
.set(17, "TEMPERATURE_CHARGER_HIGH")
|
|
258
|
+
.set(18, "OVER_CURRENT")
|
|
259
|
+
.set(20, "BULK_TIME_LIMIT_EXCEEDED")
|
|
260
|
+
.set(21, "CURRENT_SENSOR_BROKEN")
|
|
261
|
+
.set(22, "INTERNAL_TEMPERATURE_SENSOR_A_FAILURE")
|
|
262
|
+
.set(23, "INTERNAL_TEMPERATURE_SENSOR_B_FAILURE")
|
|
263
|
+
.set(24, "FAN_FAILURE")
|
|
264
|
+
.set(26, "OVERHEATED_TERMINALS")
|
|
265
|
+
.set(27, "SHORT_CIRCUIT")
|
|
266
|
+
.set(28, "CONVERTER_ISSUE")
|
|
267
|
+
.set(29, "OVER_CHARGE_PROTECTION")
|
|
268
|
+
.set(33, "SOLAR_INPUT_VOLTAGE_TOO_HIGH")
|
|
269
|
+
.set(34, "SOLAR_INPUT_CURRENT_TOO_HIGH")
|
|
270
|
+
.set(35, "INPUT_POWER")
|
|
271
|
+
.set(38, "INPUT_SHUTDOWN_OVER_VOLTAGE")
|
|
272
|
+
.set(39, "INPUT_SHUTDOWN_CURRENT")
|
|
273
|
+
.set(40, "INPUT_SHUTDOWN_FAILURE")
|
|
274
|
+
.set(41, "INVERTER_SHUTDOWN_ISOLATION_41")
|
|
275
|
+
.set(42, "INVERTER_SHUTDOWN_ISOLATION_42")
|
|
276
|
+
.set(43, "INVERTER_SHUTDOWN_GROUND_FAULT")
|
|
277
|
+
.set(50, "INVERTER_OVERLOAD")
|
|
278
|
+
.set(51, "INVERTER_TEMPERATURE_TOO_HIGH")
|
|
279
|
+
.set(52, "INVERTER_PEAK_CURRENT")
|
|
280
|
+
.set(53, "INVERTER_OUPUT_VOLTAGE_A")
|
|
281
|
+
.set(54, "INVERTER_OUPUT_VOLTAGE_B")
|
|
282
|
+
.set(55, "INVERTER_SELF_TEST_A")
|
|
283
|
+
.set(56, "INVERTER_SELF_TEST_B")
|
|
284
|
+
.set(57, "INVERTER_AC_VOLTAGE_ON_OUTPUT")
|
|
285
|
+
.set(58, "INVERTER_SELF_TEST_C")
|
|
286
|
+
.set(65, "LOST_COMMUNICATION")
|
|
287
|
+
.set(66, "INCOMPATIBLE_SYNCHRONISATION")
|
|
288
|
+
.set(67, "BMS_CONNECTION_LOST")
|
|
289
|
+
.set(68, "MISCONFIGURED_NETWORK_A")
|
|
290
|
+
.set(69, "MISCONFIGURED_NETWORK_B")
|
|
291
|
+
.set(70, "MISCONFIGURED_NETWORK_C")
|
|
292
|
+
.set(71, "MISCONFIGURED_NETWORK_D")
|
|
293
|
+
.set(80, "PV_INPUT_SHUTDOWN_80")
|
|
294
|
+
.set(81, "PV_INPUT_SHUTDOWN_81")
|
|
295
|
+
.set(82, "PV_INPUT_SHUTDOWN_82")
|
|
296
|
+
.set(83, "PV_INPUT_SHUTDOWN_83")
|
|
297
|
+
.set(84, "PV_INPUT_SHUTDOWN_84")
|
|
298
|
+
.set(85, "PV_INPUT_SHUTDOWN_85")
|
|
299
|
+
.set(86, "PV_INPUT_SHUTDOWN_86")
|
|
300
|
+
.set(87, "PV_INPUT_SHUTDOWN_87")
|
|
301
|
+
.set(114, "CPU_TEMPERATURE_TOO_HIGH")
|
|
302
|
+
.set(116, "CALIBRATION_LOST")
|
|
303
|
+
.set(117, "INVALID_FIRMWARE")
|
|
304
|
+
.set(119, "SETINGS_LOST")
|
|
305
|
+
.set(121, "TESTER_FAIL")
|
|
306
|
+
.set(200, "INTERNAL_DC_VOLTAGE_A")
|
|
307
|
+
.set(201, "INTERNAL_DC_VOLTAGE_B")
|
|
308
|
+
.set(202, "PV_RESIDUAL_CURRENT_SENSOR SELF_TEST")
|
|
309
|
+
.set(203, "INTERNAL_SUPPLY_VOLTAGE_A")
|
|
310
|
+
.set(205, "INTERNAL_SUPPLY_VOLTAGE_B")
|
|
311
|
+
.set(212, "INTERNAL_SUPPLY_VOLTAGE_C")
|
|
312
|
+
.set(215, "INTERNAL_SUPPLY_VOLTAGE_D")
|
|
313
|
+
,
|
|
314
|
+
OffReasons : new Map([
|
|
315
|
+
[0x00000000, 'NONE'],
|
|
316
|
+
[0x00000001, 'NO_INPUT_POWER'],
|
|
317
|
+
[0x00000002, 'SWITCHED_OFF_SWITCH'],
|
|
318
|
+
[0x00000004, 'SWITCHED_OFF_REGISTER'],
|
|
319
|
+
[0x00000008, 'REMOTE_INPUT'],
|
|
320
|
+
[0x00000010, 'PROTECTION_ACTIVE'],
|
|
321
|
+
[0x00000020, 'PAY_AS_YOU_GO_OUT_OF_CREDIT'],
|
|
322
|
+
[0x00000040, 'BMS'],
|
|
323
|
+
[0x00000080, 'ENGINE_SHUTDOWN'],
|
|
324
|
+
[0x00000081, 'ENGINE_SHUTDOWN_AND_INPUT_VOLTAGE_LOCKOUT'],
|
|
325
|
+
[0x00000100, 'ANALYSING_INPUT_VOLTAGE']
|
|
326
|
+
]),
|
|
327
|
+
|
|
328
|
+
}
|