iobroker.zendure-solarflow 3.0.4 → 3.0.5
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/README.md +4 -0
- package/build/helpers/helpers.js +33 -0
- package/build/helpers/helpers.js.map +2 -2
- package/build/main.js +4 -0
- package/build/main.js.map +2 -2
- package/io-package.json +14 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -59,6 +59,10 @@ On a HUB 1200 / HUB 2000 / ACE 1500 combination you have to use '**setDeviceAuto
|
|
|
59
59
|
This adapter will now use the Cloud Authorization Code for authentication on the official mqtt servers, which you can generate in the Zendure app!
|
|
60
60
|
|
|
61
61
|
## Changelog
|
|
62
|
+
### 3.0.5 (2025-10-20)
|
|
63
|
+
|
|
64
|
+
- Add some more log information on device creation
|
|
65
|
+
|
|
62
66
|
### 3.0.4 (2025-10-09)
|
|
63
67
|
|
|
64
68
|
- Fix inputLimit issue
|
package/build/helpers/helpers.js
CHANGED
|
@@ -31,6 +31,9 @@ var import_SfHub2000 = require("../models/deviceModels/SfHub2000");
|
|
|
31
31
|
const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetails) => {
|
|
32
32
|
switch (_productKey.toLowerCase()) {
|
|
33
33
|
case "73bktv":
|
|
34
|
+
_adapter.log.debug(
|
|
35
|
+
`[onReady] Creating deviceModel HUB 1200 ${_productKey}`
|
|
36
|
+
);
|
|
34
37
|
return new import_SfHub1200.SfHub1200(
|
|
35
38
|
_adapter,
|
|
36
39
|
_productKey,
|
|
@@ -40,6 +43,9 @@ const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetail
|
|
|
40
43
|
_zenHaDeviceDetails
|
|
41
44
|
);
|
|
42
45
|
case "a8yh63":
|
|
46
|
+
_adapter.log.debug(
|
|
47
|
+
`[onReady] Creating deviceModel HUB 2000 ${_productKey}`
|
|
48
|
+
);
|
|
43
49
|
return new import_SfHub2000.SfHub2000(
|
|
44
50
|
_adapter,
|
|
45
51
|
_productKey,
|
|
@@ -49,6 +55,9 @@ const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetail
|
|
|
49
55
|
_zenHaDeviceDetails
|
|
50
56
|
);
|
|
51
57
|
case "ywf7hv":
|
|
58
|
+
_adapter.log.debug(
|
|
59
|
+
`[onReady] Creating deviceModel AIO 2400 ${_productKey}`
|
|
60
|
+
);
|
|
52
61
|
return new import_Aio2400.Aio2400(
|
|
53
62
|
_adapter,
|
|
54
63
|
_productKey,
|
|
@@ -58,6 +67,9 @@ const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetail
|
|
|
58
67
|
_zenHaDeviceDetails
|
|
59
68
|
);
|
|
60
69
|
case "ja72u0ha":
|
|
70
|
+
_adapter.log.debug(
|
|
71
|
+
`[onReady] Creating deviceModel Hyper 2000 ${_productKey}`
|
|
72
|
+
);
|
|
61
73
|
return new import_Hyper2000.Hyper2000(
|
|
62
74
|
_adapter,
|
|
63
75
|
_productKey,
|
|
@@ -67,6 +79,9 @@ const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetail
|
|
|
67
79
|
_zenHaDeviceDetails
|
|
68
80
|
);
|
|
69
81
|
case "gda3tb":
|
|
82
|
+
_adapter.log.debug(
|
|
83
|
+
`[onReady] Creating deviceModel Hyper 2000 ${_productKey}`
|
|
84
|
+
);
|
|
70
85
|
return new import_Hyper2000.Hyper2000(
|
|
71
86
|
_adapter,
|
|
72
87
|
_productKey,
|
|
@@ -76,6 +91,9 @@ const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetail
|
|
|
76
91
|
_zenHaDeviceDetails
|
|
77
92
|
);
|
|
78
93
|
case "b3dxda":
|
|
94
|
+
_adapter.log.debug(
|
|
95
|
+
`[onReady] Creating deviceModel Hyper 2000 ${_productKey}`
|
|
96
|
+
);
|
|
79
97
|
return new import_Hyper2000.Hyper2000(
|
|
80
98
|
_adapter,
|
|
81
99
|
_productKey,
|
|
@@ -85,6 +103,9 @@ const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetail
|
|
|
85
103
|
_zenHaDeviceDetails
|
|
86
104
|
);
|
|
87
105
|
case "8bm93h":
|
|
106
|
+
_adapter.log.debug(
|
|
107
|
+
`[onReady] Creating deviceModel ACE 1500 ${_productKey}`
|
|
108
|
+
);
|
|
88
109
|
return new import_Ace1500.Ace1500(
|
|
89
110
|
_adapter,
|
|
90
111
|
_productKey,
|
|
@@ -94,6 +115,9 @@ const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetail
|
|
|
94
115
|
_zenHaDeviceDetails
|
|
95
116
|
);
|
|
96
117
|
case "bc8b7f":
|
|
118
|
+
_adapter.log.debug(
|
|
119
|
+
`[onReady] Creating deviceModel SF 2400 AC ${_productKey}`
|
|
120
|
+
);
|
|
97
121
|
return new import_Sf2400Ac.Sf2400Ac(
|
|
98
122
|
_adapter,
|
|
99
123
|
_productKey,
|
|
@@ -103,6 +127,9 @@ const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetail
|
|
|
103
127
|
_zenHaDeviceDetails
|
|
104
128
|
);
|
|
105
129
|
case "a4ss5P":
|
|
130
|
+
_adapter.log.debug(
|
|
131
|
+
`[onReady] Creating deviceModel SF 800 ${_productKey}`
|
|
132
|
+
);
|
|
106
133
|
return new import_Sf800.Sf800(
|
|
107
134
|
_adapter,
|
|
108
135
|
_productKey,
|
|
@@ -112,6 +139,9 @@ const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetail
|
|
|
112
139
|
_zenHaDeviceDetails
|
|
113
140
|
);
|
|
114
141
|
case "b1nhmc":
|
|
142
|
+
_adapter.log.debug(
|
|
143
|
+
`[onReady] Creating deviceModel SF 800 ${_productKey}`
|
|
144
|
+
);
|
|
115
145
|
return new import_Sf800.Sf800(
|
|
116
146
|
_adapter,
|
|
117
147
|
_productKey,
|
|
@@ -121,6 +151,9 @@ const createDeviceModel = (_adapter, _productKey, _deviceKey, _zenHaDeviceDetail
|
|
|
121
151
|
_zenHaDeviceDetails
|
|
122
152
|
);
|
|
123
153
|
case "R3mn8U":
|
|
154
|
+
_adapter.log.debug(
|
|
155
|
+
`[onReady] Creating deviceModel SF 800 ${_productKey}`
|
|
156
|
+
);
|
|
124
157
|
return new import_Sf800.Sf800(
|
|
125
158
|
_adapter,
|
|
126
159
|
_productKey,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/helpers/helpers.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\n\nimport { ZendureSolarflow } from \"../main\";\nimport { Ace1500 } from \"../models/deviceModels/Ace1500\";\nimport { Aio2400 } from \"../models/deviceModels/Aio2400\";\nimport { Hyper2000 } from \"../models/deviceModels/Hyper2000\";\nimport { Sf2400Ac } from \"../models/deviceModels/Sf2400Ac\";\nimport { Sf800 } from \"../models/deviceModels/Sf800\";\nimport { SfHub1200 } from \"../models/deviceModels/SfHub1200\";\nimport { SfHub2000 } from \"../models/deviceModels/SfHub2000\";\n\nimport { IZenHaDeviceDetails } from \"../models/IZenHaDeviceDetails\";\n\nexport const createDeviceModel = (\n _adapter: ZendureSolarflow,\n _productKey: string,\n _deviceKey: string,\n _zenHaDeviceDetails?: IZenHaDeviceDetails\n):\n | SfHub1200\n | SfHub2000\n | Ace1500\n | Hyper2000\n | Sf2400Ac\n | Sf800\n | undefined => {\n switch (_productKey.toLowerCase()) {\n case \"73bktv\":\n return new SfHub1200(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"HUB 1200\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"HUB 1200\",\n _zenHaDeviceDetails\n );\n case \"a8yh63\":\n return new SfHub2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"HUB 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"HUB 2000\",\n _zenHaDeviceDetails\n );\n case \"ywf7hv\":\n return new Aio2400(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"AIO 2400\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"AIO 2400\",\n _zenHaDeviceDetails\n );\n case \"ja72u0ha\":\n return new Hyper2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Hyper 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Hyper 2000\",\n _zenHaDeviceDetails\n );\n case \"gda3tb\":\n return new Hyper2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Hyper 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Hyper 2000\",\n _zenHaDeviceDetails\n );\n case \"b3dxda\":\n return new Hyper2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Hyper 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Hyper 2000\",\n _zenHaDeviceDetails\n );\n case \"8bm93h\":\n return new Ace1500(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Ace 1500\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Ace 1500\",\n _zenHaDeviceDetails\n );\n case \"bc8b7f\":\n return new Sf2400Ac(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 2400 AC\",\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.deviceName\n : \"Solarflow 2400 AC\",\n _zenHaDeviceDetails\n );\n case \"a4ss5P\":\n return new Sf800(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 800\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Solarflow 800\",\n _zenHaDeviceDetails\n );\n case \"b1nhmc\":\n return new Sf800(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 800\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Solarflow 800\",\n _zenHaDeviceDetails\n );\n case \"R3mn8U\":\n return new Sf800(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 800\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Solarflow 800\",\n _zenHaDeviceDetails\n );\n default:\n return undefined;\n }\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,qBAAwB;AACxB,qBAAwB;AACxB,uBAA0B;AAC1B,sBAAyB;AACzB,mBAAsB;AACtB,uBAA0B;AAC1B,uBAA0B;AAInB,MAAM,oBAAoB,CAC/B,UACA,aACA,YACA,wBAQe;AACf,UAAQ,YAAY,YAAY,GAAG;AAAA,IACjC,KAAK;AACH,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAsB,oBAAoB,eAAe;AAAA,QACzD,sBAAsB,oBAAoB,aAAa;AAAA,QACvD;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAsB,oBAAoB,eAAe;AAAA,QACzD,sBAAsB,oBAAoB,aAAa;AAAA,QACvD;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAsB,oBAAoB,eAAe;AAAA,QACzD,sBAAsB,oBAAoB,aAAa;AAAA,QACvD;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAsB,oBAAoB,eAAe;AAAA,QACzD,sBAAsB,oBAAoB,aAAa;AAAA,QACvD;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAsB,oBAAoB,eAAe;AAAA,QACzD,sBAAsB,oBAAoB,aAAa;AAAA,QACvD;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAsB,oBAAoB,eAAe;AAAA,QACzD,sBAAsB,oBAAoB,aAAa;AAAA,QACvD;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAsB,oBAAoB,eAAe;AAAA,QACzD,sBAAsB,oBAAoB,aAAa;AAAA,QACvD;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBACI,oBAAoB,eACpB;AAAA,QACJ,sBACI,oBAAoB,aACpB;AAAA,QACJ;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBACI,oBAAoB,eACpB;AAAA,QACJ,sBAAsB,oBAAoB,aAAa;AAAA,QACvD;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBACI,oBAAoB,eACpB;AAAA,QACJ,sBAAsB,oBAAoB,aAAa;AAAA,QACvD;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO,IAAI;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBACI,oBAAoB,eACpB;AAAA,QACJ,sBAAsB,oBAAoB,aAAa;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AACE,aAAO;AAAA,EACX;AACF;",
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\n\nimport { ZendureSolarflow } from \"../main\";\nimport { Ace1500 } from \"../models/deviceModels/Ace1500\";\nimport { Aio2400 } from \"../models/deviceModels/Aio2400\";\nimport { Hyper2000 } from \"../models/deviceModels/Hyper2000\";\nimport { Sf2400Ac } from \"../models/deviceModels/Sf2400Ac\";\nimport { Sf800 } from \"../models/deviceModels/Sf800\";\nimport { SfHub1200 } from \"../models/deviceModels/SfHub1200\";\nimport { SfHub2000 } from \"../models/deviceModels/SfHub2000\";\n\nimport { IZenHaDeviceDetails } from \"../models/IZenHaDeviceDetails\";\n\nexport const createDeviceModel = (\n _adapter: ZendureSolarflow,\n _productKey: string,\n _deviceKey: string,\n _zenHaDeviceDetails?: IZenHaDeviceDetails\n):\n | SfHub1200\n | SfHub2000\n | Ace1500\n | Hyper2000\n | Sf2400Ac\n | Sf800\n | undefined => {\n switch (_productKey.toLowerCase()) {\n case \"73bktv\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel HUB 1200 ${_productKey}`\n );\n return new SfHub1200(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"HUB 1200\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"HUB 1200\",\n _zenHaDeviceDetails\n );\n case \"a8yh63\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel HUB 2000 ${_productKey}`\n );\n return new SfHub2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"HUB 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"HUB 2000\",\n _zenHaDeviceDetails\n );\n case \"ywf7hv\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel AIO 2400 ${_productKey}`\n );\n return new Aio2400(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"AIO 2400\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"AIO 2400\",\n _zenHaDeviceDetails\n );\n case \"ja72u0ha\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel Hyper 2000 ${_productKey}`\n );\n return new Hyper2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Hyper 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Hyper 2000\",\n _zenHaDeviceDetails\n );\n case \"gda3tb\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel Hyper 2000 ${_productKey}`\n );\n return new Hyper2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Hyper 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Hyper 2000\",\n _zenHaDeviceDetails\n );\n case \"b3dxda\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel Hyper 2000 ${_productKey}`\n );\n return new Hyper2000(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Hyper 2000\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Hyper 2000\",\n _zenHaDeviceDetails\n );\n case \"8bm93h\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel ACE 1500 ${_productKey}`\n );\n return new Ace1500(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails ? _zenHaDeviceDetails.productModel : \"Ace 1500\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Ace 1500\",\n _zenHaDeviceDetails\n );\n case \"bc8b7f\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel SF 2400 AC ${_productKey}`\n );\n return new Sf2400Ac(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 2400 AC\",\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.deviceName\n : \"Solarflow 2400 AC\",\n _zenHaDeviceDetails\n );\n case \"a4ss5P\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel SF 800 ${_productKey}`\n );\n return new Sf800(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 800\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Solarflow 800\",\n _zenHaDeviceDetails\n );\n case \"b1nhmc\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel SF 800 ${_productKey}`\n );\n return new Sf800(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 800\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Solarflow 800\",\n _zenHaDeviceDetails\n );\n case \"R3mn8U\":\n _adapter.log.debug(\n `[onReady] Creating deviceModel SF 800 ${_productKey}`\n );\n return new Sf800(\n _adapter,\n _productKey,\n _deviceKey,\n _zenHaDeviceDetails\n ? _zenHaDeviceDetails.productModel\n : \"Solarflow 800\",\n _zenHaDeviceDetails ? _zenHaDeviceDetails.deviceName : \"Solarflow 800\",\n _zenHaDeviceDetails\n );\n default:\n return undefined;\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/main.js
CHANGED
|
@@ -130,6 +130,10 @@ class ZendureSolarflow extends utils.Adapter {
|
|
|
130
130
|
);
|
|
131
131
|
if (deviceModel) {
|
|
132
132
|
this.zenHaDeviceList.push(deviceModel);
|
|
133
|
+
} else {
|
|
134
|
+
this.log.error(
|
|
135
|
+
`[onReady] Error creating device with productKey '${device.productKey}' / deviceKey '${device.deviceKey} / productModel ${device.productModel}'`
|
|
136
|
+
);
|
|
133
137
|
}
|
|
134
138
|
});
|
|
135
139
|
}
|
package/build/main.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/main.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\n/*\r\n * Created with @iobroker/create-adapter v2.5.0\r\n */\r\n\r\n// The adapter-core module gives you access to the core ioBroker functions\r\n// you need to create an adapter\r\nimport * as utils from \"@iobroker/adapter-core\";\r\n\r\nimport { zenLogin } from \"./services/zenWebService\";\r\nimport { Job } from \"node-schedule\";\r\nimport { MqttClient } from \"mqtt\";\r\nimport { startRefreshAccessTokenTimerJob } from \"./services/jobSchedule\";\r\nimport { connectLocalMqttClient } from \"./services/mqttLocalService\";\r\nimport { IZenHaDeviceDetails } from \"./models/IZenHaDeviceDetails\";\r\nimport { connectCloudZenMqttClient } from \"./services/mqttCloudZenService\";\r\nimport { IZenHaMqttData } from \"./models/IZenHaMqttData\";\r\nimport { ZenHaDevice } from \"./models/deviceModels/ZenHaDevice\";\r\nimport { createDeviceModel } from \"./helpers/helpers\";\r\n\r\nexport class ZendureSolarflow extends utils.Adapter {\r\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\r\n super({\r\n ...options,\r\n name: \"zendure-solarflow\",\r\n });\r\n this.on(\"ready\", this.onReady.bind(this));\r\n this.on(\"stateChange\", this.onStateChange.bind(this));\r\n this.on(\"unload\", this.onUnload.bind(this));\r\n }\r\n\r\n public zenHaDeviceList: ZenHaDevice[] = []; // All found devices for this instance will be in this array\r\n public mqttSettings: IZenHaMqttData | undefined = undefined;\r\n\r\n public msgCounter: number = 700000;\r\n public lastLogin: Date | undefined = undefined;\r\n\r\n public mqttClient: MqttClient | undefined = undefined;\r\n\r\n public resetValuesJob: Job | undefined = undefined;\r\n public checkStatesJob: Job | undefined = undefined;\r\n public calculationJob: Job | undefined = undefined;\r\n public refreshAccessTokenInterval: ioBroker.Interval | undefined = undefined;\r\n public retryTimeout: ioBroker.Timeout | undefined = undefined;\r\n\r\n /**\r\n * Is called when databases are connected and adapter received configuration.\r\n */\r\n private async onReady(): Promise<void> {\r\n await this.extendObject(\"info\", {\r\n type: \"channel\",\r\n common: {\r\n name: \"Information\",\r\n },\r\n native: {},\r\n });\r\n\r\n await this.extendObject(`info.connection`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Mit Zendure Cloud verbunden\",\r\n en: \"Connected to Zendure cloud\",\r\n },\r\n type: \"boolean\",\r\n desc: \"connection\",\r\n role: \"indicator.connected\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n await this.extendObject(`info.errorMessage`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Fehlermeldung der Verbindung zur Zendure Cloud\",\r\n en: \"Error message from Zendure Cloud\",\r\n },\r\n type: \"string\",\r\n desc: \"errorMessage\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n this.setState(\"info.errorMessage\", \"\", true);\r\n this.setState(\"info.connection\", false, true);\r\n\r\n switch (this.config.connectionMode) {\r\n case \"authKey\":\r\n this.log.debug(\"[onReady] Using Authorization Cloud Key\");\r\n\r\n if (!this.config.authorizationCloudKey) {\r\n this.log.error(\r\n \"[zenWebService.login] authorization cloud key is missing!\"\r\n );\r\n break;\r\n }\r\n\r\n const data = await zenLogin(this);\r\n\r\n if (typeof data === \"string\" || data == undefined) {\r\n // Fehler\r\n this.setState(\"info.connection\", false, true);\r\n } else {\r\n this.mqttSettings = data.mqtt;\r\n\r\n if (!connectCloudZenMqttClient(this)) {\r\n return;\r\n }\r\n\r\n this.log.debug(\r\n `[onReady] Creating ${data.deviceList.length} devices...`\r\n );\r\n\r\n await data.deviceList.forEach(async (device: IZenHaDeviceDetails) => {\r\n // States erstellen\r\n const deviceModel = createDeviceModel(\r\n this,\r\n device.productKey,\r\n device.deviceKey,\r\n device\r\n );\r\n\r\n if (deviceModel) {\r\n this.zenHaDeviceList.push(deviceModel);\r\n }\r\n });\r\n }\r\n break;\r\n case \"local\": {\r\n this.log.debug(\"[onReady] Using local MQTT server\");\r\n\r\n connectLocalMqttClient(this);\r\n\r\n // Subscribe to 1. device from local settings\r\n if (\r\n this.config.localDevice1ProductKey &&\r\n this.config.localDevice1DeviceKey\r\n ) {\r\n // States erstellen\r\n const deviceModel = createDeviceModel(\r\n this,\r\n this.config.localDevice1ProductKey,\r\n this.config.localDevice1DeviceKey\r\n );\r\n\r\n if (deviceModel) {\r\n this.zenHaDeviceList.push(deviceModel);\r\n }\r\n }\r\n\r\n // Subscribe to 2. device from local settings\r\n if (\r\n this.config.localDevice2ProductKey &&\r\n this.config.localDevice2DeviceKey\r\n ) {\r\n // States erstellen\r\n const deviceModel = createDeviceModel(\r\n this,\r\n this.config.localDevice2ProductKey,\r\n this.config.localDevice2DeviceKey\r\n );\r\n\r\n if (deviceModel) {\r\n this.zenHaDeviceList.push(deviceModel);\r\n }\r\n }\r\n\r\n // Subscribe to 3. device from local settings\r\n if (\r\n this.config.localDevice3ProductKey &&\r\n this.config.localDevice3DeviceKey\r\n ) {\r\n // States erstellen\r\n const deviceModel = createDeviceModel(\r\n this,\r\n this.config.localDevice3ProductKey,\r\n this.config.localDevice3DeviceKey\r\n );\r\n\r\n if (deviceModel) {\r\n this.zenHaDeviceList.push(deviceModel);\r\n }\r\n }\r\n\r\n // Subscribe to 4. device from local settings\r\n if (\r\n this.config.localDevice4ProductKey &&\r\n this.config.localDevice4DeviceKey\r\n ) {\r\n // States erstellen\r\n const deviceModel = createDeviceModel(\r\n this,\r\n this.config.localDevice4ProductKey,\r\n this.config.localDevice4DeviceKey\r\n );\r\n\r\n if (deviceModel) {\r\n this.zenHaDeviceList.push(deviceModel);\r\n }\r\n }\r\n\r\n if (this.config.useRestart) {\r\n // Add interval to restart adapter every 3 hours\r\n startRefreshAccessTokenTimerJob(this);\r\n }\r\n break;\r\n }\r\n default:\r\n this.setState(\"info.connection\", false, true);\r\n this.log.error(\"[onReady] No connection mode found or mode invalid!\");\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Is called when adapter shuts down - callback has to be called under any circumstances!\r\n */\r\n private async onUnload(callback: () => void): Promise<void> {\r\n try {\r\n if (this.refreshAccessTokenInterval) {\r\n this.clearInterval(this.refreshAccessTokenInterval);\r\n }\r\n\r\n try {\r\n await this.mqttClient?.endAsync();\r\n this.log.info(\"[onUnload] MQTT client stopped!\");\r\n this.mqttClient = undefined;\r\n } catch (ex: any) {\r\n this.log.error(\"[onUnload] Error stopping MQTT client: !\" + ex.message);\r\n }\r\n\r\n this.setState(\"info.connection\", false, true);\r\n\r\n // Scheduler beenden\r\n if (this.resetValuesJob) {\r\n this.resetValuesJob.cancel();\r\n this.resetValuesJob = undefined;\r\n }\r\n\r\n if (this.checkStatesJob) {\r\n this.checkStatesJob?.cancel();\r\n this.checkStatesJob = undefined;\r\n }\r\n\r\n if (this.calculationJob) {\r\n this.calculationJob.cancel();\r\n this.calculationJob = undefined;\r\n }\r\n\r\n if (this.retryTimeout) {\r\n this.clearTimeout(this.retryTimeout);\r\n }\r\n\r\n callback();\r\n } catch (e) {\r\n callback();\r\n }\r\n }\r\n\r\n /**\r\n * Is called if a subscribed state changes\r\n */\r\n private onStateChange(\r\n id: string,\r\n state: ioBroker.State | null | undefined\r\n ): void {\r\n if (state) {\r\n // The state was changed\r\n\r\n // Read product and device key from string\r\n const splitted = id.split(\".\");\r\n const productKey = splitted[2]; // Product Key\r\n const deviceKey = splitted[3]; // Device Key\r\n const stateName1 = splitted[4]; // Folder/State Name 1 (e.g. 'control')\r\n const stateName2 = splitted[5]; // State Name, like 'setOutputLimit'\r\n\r\n const _device = this.zenHaDeviceList.find(\r\n (x) => x.productKey == productKey && x.deviceKey == deviceKey\r\n );\r\n\r\n if (!_device) {\r\n this.log.error(\r\n `[onStateChange] Device '${deviceKey}' not found in zenHaDeviceList!`\r\n );\r\n return;\r\n }\r\n\r\n // !!! Only stateChanges with ack==false are allowed to be processed.\r\n if (state.val != undefined && state.val != null && !state.ack) {\r\n switch (stateName1) {\r\n case \"control\":\r\n this.log.debug(\r\n `[onStateChange] Control state '${stateName2}' changed, new value is ${state.val}, ack = ${state.ack}!`\r\n );\r\n switch (stateName2) {\r\n case \"setOutputLimit\":\r\n _device.setOutputLimit(Number(state.val));\r\n break;\r\n case \"setInputLimit\":\r\n _device.setInputLimit(Number(state.val));\r\n break;\r\n case \"chargeLimit\":\r\n _device.setChargeLimit(Number(state.val));\r\n break;\r\n case \"dischargeLimit\":\r\n _device.setDischargeLimit(Number(state.val));\r\n break;\r\n case \"passMode\":\r\n _device.setPassMode(Number(state.val));\r\n break;\r\n case \"dcSwitch\":\r\n _device.setDcSwitch(state.val ? true : false);\r\n break;\r\n case \"acSwitch\":\r\n _device.setAcSwitch(state.val ? true : false);\r\n break;\r\n case \"acMode\":\r\n _device.setAcMode(Number(state.val));\r\n break;\r\n case \"hubState\":\r\n _device.setHubState(Number(state.val));\r\n break;\r\n case \"autoModel\":\r\n _device.setAutoModel(Number(state.val));\r\n break;\r\n case \"autoRecover\":\r\n _device.setAutoRecover(state.val ? true : false);\r\n break;\r\n case \"buzzerSwitch\":\r\n _device.setBuzzerSwitch(state.val ? true : false);\r\n break;\r\n case \"smartMode\":\r\n _device.setSmartMode(state.val ? true : false);\r\n break;\r\n case \"setDeviceAutomationInOutLimit\":\r\n _device.setDeviceAutomationInOutLimit(Number(state.val));\r\n break;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n // The state was deleted\r\n //this.log.debug(`state ${id} deleted`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nif (require.main !== module) {\r\n // Export the constructor in compact mode\r\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) =>\r\n new ZendureSolarflow(options);\r\n} else {\r\n // otherwise start the instance directly\r\n (() => new ZendureSolarflow())();\r\n}\r\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,YAAuB;AAEvB,2BAAyB;AAGzB,yBAAgD;AAChD,8BAAuC;AAEvC,iCAA0C;AAG1C,qBAAkC;AAE3B,MAAM,yBAAyB,MAAM,QAAQ;AAAA,EAC3C,YAAY,UAAyC,CAAC,GAAG;AAC9D,UAAM;AAAA,MACJ,GAAG;AAAA,MACH,MAAM;AAAA,IACR,CAAC;AAMH,SAAO,kBAAiC,CAAC;AACzC;AAAA,SAAO,eAA2C;AAElD,SAAO,aAAqB;AAC5B,SAAO,YAA8B;AAErC,SAAO,aAAqC;AAE5C,SAAO,iBAAkC;AACzC,SAAO,iBAAkC;AACzC,SAAO,iBAAkC;AACzC,SAAO,6BAA4D;AACnE,SAAO,eAA6C;AAjBlD,SAAK,GAAG,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC;AACxC,SAAK,GAAG,eAAe,KAAK,cAAc,KAAK,IAAI,CAAC;AACpD,SAAK,GAAG,UAAU,KAAK,SAAS,KAAK,IAAI,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAmBA,MAAc,UAAyB;AACrC,UAAM,KAAK,aAAa,QAAQ;AAAA,MAC9B,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,CAAC;AAAA,IACX,CAAC;AAED,UAAM,KAAK,aAAa,mBAAmB;AAAA,MACzC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,QACN;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA,QAAQ,CAAC;AAAA,IACX,CAAC;AAED,UAAM,KAAK,aAAa,qBAAqB;AAAA,MAC3C,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,QACN;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA,QAAQ,CAAC;AAAA,IACX,CAAC;AAED,SAAK,SAAS,qBAAqB,IAAI,IAAI;AAC3C,SAAK,SAAS,mBAAmB,OAAO,IAAI;AAE5C,YAAQ,KAAK,OAAO,gBAAgB;AAAA,MAClC,KAAK;AACH,aAAK,IAAI,MAAM,yCAAyC;AAExD,YAAI,CAAC,KAAK,OAAO,uBAAuB;AACtC,eAAK,IAAI;AAAA,YACP;AAAA,UACF;AACA;AAAA,QACF;AAEA,cAAM,OAAO,UAAM,+BAAS,IAAI;AAEhC,YAAI,OAAO,SAAS,YAAY,QAAQ,QAAW;AAEjD,eAAK,SAAS,mBAAmB,OAAO,IAAI;AAAA,QAC9C,OAAO;AACL,eAAK,eAAe,KAAK;AAEzB,cAAI,KAAC,sDAA0B,IAAI,GAAG;AACpC;AAAA,UACF;AAEA,eAAK,IAAI;AAAA,YACP,sBAAsB,KAAK,WAAW,MAAM;AAAA,UAC9C;AAEA,gBAAM,KAAK,WAAW,QAAQ,OAAO,WAAgC;AAEnE,kBAAM,kBAAc;AAAA,cAClB;AAAA,cACA,OAAO;AAAA,cACP,OAAO;AAAA,cACP;AAAA,YACF;AAEA,gBAAI,aAAa;AACf,mBAAK,gBAAgB,KAAK,WAAW;AAAA,YACvC;AAAA,UACF,CAAC;AAAA,QACH;AACA;AAAA,MACF,KAAK,SAAS;AACZ,aAAK,IAAI,MAAM,mCAAmC;AAElD,4DAAuB,IAAI;AAG3B,YACE,KAAK,OAAO,0BACZ,KAAK,OAAO,uBACZ;AAEA,gBAAM,kBAAc;AAAA,YAClB;AAAA,YACA,KAAK,OAAO;AAAA,YACZ,KAAK,OAAO;AAAA,UACd;AAEA,cAAI,aAAa;AACf,iBAAK,gBAAgB,KAAK,WAAW;AAAA,UACvC;AAAA,QACF;AAGA,YACE,KAAK,OAAO,0BACZ,KAAK,OAAO,uBACZ;AAEA,gBAAM,kBAAc;AAAA,YAClB;AAAA,YACA,KAAK,OAAO;AAAA,YACZ,KAAK,OAAO;AAAA,UACd;AAEA,cAAI,aAAa;AACf,iBAAK,gBAAgB,KAAK,WAAW;AAAA,UACvC;AAAA,QACF;AAGA,YACE,KAAK,OAAO,0BACZ,KAAK,OAAO,uBACZ;AAEA,gBAAM,kBAAc;AAAA,YAClB;AAAA,YACA,KAAK,OAAO;AAAA,YACZ,KAAK,OAAO;AAAA,UACd;AAEA,cAAI,aAAa;AACf,iBAAK,gBAAgB,KAAK,WAAW;AAAA,UACvC;AAAA,QACF;AAGA,YACE,KAAK,OAAO,0BACZ,KAAK,OAAO,uBACZ;AAEA,gBAAM,kBAAc;AAAA,YAClB;AAAA,YACA,KAAK,OAAO;AAAA,YACZ,KAAK,OAAO;AAAA,UACd;AAEA,cAAI,aAAa;AACf,iBAAK,gBAAgB,KAAK,WAAW;AAAA,UACvC;AAAA,QACF;AAEA,YAAI,KAAK,OAAO,YAAY;AAE1B,kEAAgC,IAAI;AAAA,QACtC;AACA;AAAA,MACF;AAAA,MACA;AACE,aAAK,SAAS,mBAAmB,OAAO,IAAI;AAC5C,aAAK,IAAI,MAAM,qDAAqD;AACpE;AAAA,IACJ;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,SAAS,UAAqC;
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\n/*\r\n * Created with @iobroker/create-adapter v2.5.0\r\n */\r\n\r\n// The adapter-core module gives you access to the core ioBroker functions\r\n// you need to create an adapter\r\nimport * as utils from \"@iobroker/adapter-core\";\r\n\r\nimport { zenLogin } from \"./services/zenWebService\";\r\nimport { Job } from \"node-schedule\";\r\nimport { MqttClient } from \"mqtt\";\r\nimport { startRefreshAccessTokenTimerJob } from \"./services/jobSchedule\";\r\nimport { connectLocalMqttClient } from \"./services/mqttLocalService\";\r\nimport { IZenHaDeviceDetails } from \"./models/IZenHaDeviceDetails\";\r\nimport { connectCloudZenMqttClient } from \"./services/mqttCloudZenService\";\r\nimport { IZenHaMqttData } from \"./models/IZenHaMqttData\";\r\nimport { ZenHaDevice } from \"./models/deviceModels/ZenHaDevice\";\r\nimport { createDeviceModel } from \"./helpers/helpers\";\r\n\r\nexport class ZendureSolarflow extends utils.Adapter {\r\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\r\n super({\r\n ...options,\r\n name: \"zendure-solarflow\",\r\n });\r\n this.on(\"ready\", this.onReady.bind(this));\r\n this.on(\"stateChange\", this.onStateChange.bind(this));\r\n this.on(\"unload\", this.onUnload.bind(this));\r\n }\r\n\r\n public zenHaDeviceList: ZenHaDevice[] = []; // All found devices for this instance will be in this array\r\n public mqttSettings: IZenHaMqttData | undefined = undefined;\r\n\r\n public msgCounter: number = 700000;\r\n public lastLogin: Date | undefined = undefined;\r\n\r\n public mqttClient: MqttClient | undefined = undefined;\r\n\r\n public resetValuesJob: Job | undefined = undefined;\r\n public checkStatesJob: Job | undefined = undefined;\r\n public calculationJob: Job | undefined = undefined;\r\n public refreshAccessTokenInterval: ioBroker.Interval | undefined = undefined;\r\n public retryTimeout: ioBroker.Timeout | undefined = undefined;\r\n\r\n /**\r\n * Is called when databases are connected and adapter received configuration.\r\n */\r\n private async onReady(): Promise<void> {\r\n await this.extendObject(\"info\", {\r\n type: \"channel\",\r\n common: {\r\n name: \"Information\",\r\n },\r\n native: {},\r\n });\r\n\r\n await this.extendObject(`info.connection`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Mit Zendure Cloud verbunden\",\r\n en: \"Connected to Zendure cloud\",\r\n },\r\n type: \"boolean\",\r\n desc: \"connection\",\r\n role: \"indicator.connected\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n await this.extendObject(`info.errorMessage`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Fehlermeldung der Verbindung zur Zendure Cloud\",\r\n en: \"Error message from Zendure Cloud\",\r\n },\r\n type: \"string\",\r\n desc: \"errorMessage\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n this.setState(\"info.errorMessage\", \"\", true);\r\n this.setState(\"info.connection\", false, true);\r\n\r\n switch (this.config.connectionMode) {\r\n case \"authKey\":\r\n this.log.debug(\"[onReady] Using Authorization Cloud Key\");\r\n\r\n if (!this.config.authorizationCloudKey) {\r\n this.log.error(\r\n \"[zenWebService.login] authorization cloud key is missing!\"\r\n );\r\n break;\r\n }\r\n\r\n const data = await zenLogin(this);\r\n\r\n if (typeof data === \"string\" || data == undefined) {\r\n // Fehler\r\n this.setState(\"info.connection\", false, true);\r\n } else {\r\n this.mqttSettings = data.mqtt;\r\n\r\n if (!connectCloudZenMqttClient(this)) {\r\n return;\r\n }\r\n\r\n this.log.debug(\r\n `[onReady] Creating ${data.deviceList.length} devices...`\r\n );\r\n\r\n await data.deviceList.forEach(async (device: IZenHaDeviceDetails) => {\r\n // States erstellen\r\n const deviceModel = createDeviceModel(\r\n this,\r\n device.productKey,\r\n device.deviceKey,\r\n device\r\n );\r\n\r\n if (deviceModel) {\r\n this.zenHaDeviceList.push(deviceModel);\r\n } else {\r\n this.log.error(\r\n `[onReady] Error creating device with productKey '${device.productKey}' / deviceKey '${device.deviceKey} / productModel ${device.productModel}'`\r\n );\r\n }\r\n });\r\n }\r\n break;\r\n case \"local\": {\r\n this.log.debug(\"[onReady] Using local MQTT server\");\r\n\r\n connectLocalMqttClient(this);\r\n\r\n // Subscribe to 1. device from local settings\r\n if (\r\n this.config.localDevice1ProductKey &&\r\n this.config.localDevice1DeviceKey\r\n ) {\r\n // States erstellen\r\n const deviceModel = createDeviceModel(\r\n this,\r\n this.config.localDevice1ProductKey,\r\n this.config.localDevice1DeviceKey\r\n );\r\n\r\n if (deviceModel) {\r\n this.zenHaDeviceList.push(deviceModel);\r\n }\r\n }\r\n\r\n // Subscribe to 2. device from local settings\r\n if (\r\n this.config.localDevice2ProductKey &&\r\n this.config.localDevice2DeviceKey\r\n ) {\r\n // States erstellen\r\n const deviceModel = createDeviceModel(\r\n this,\r\n this.config.localDevice2ProductKey,\r\n this.config.localDevice2DeviceKey\r\n );\r\n\r\n if (deviceModel) {\r\n this.zenHaDeviceList.push(deviceModel);\r\n }\r\n }\r\n\r\n // Subscribe to 3. device from local settings\r\n if (\r\n this.config.localDevice3ProductKey &&\r\n this.config.localDevice3DeviceKey\r\n ) {\r\n // States erstellen\r\n const deviceModel = createDeviceModel(\r\n this,\r\n this.config.localDevice3ProductKey,\r\n this.config.localDevice3DeviceKey\r\n );\r\n\r\n if (deviceModel) {\r\n this.zenHaDeviceList.push(deviceModel);\r\n }\r\n }\r\n\r\n // Subscribe to 4. device from local settings\r\n if (\r\n this.config.localDevice4ProductKey &&\r\n this.config.localDevice4DeviceKey\r\n ) {\r\n // States erstellen\r\n const deviceModel = createDeviceModel(\r\n this,\r\n this.config.localDevice4ProductKey,\r\n this.config.localDevice4DeviceKey\r\n );\r\n\r\n if (deviceModel) {\r\n this.zenHaDeviceList.push(deviceModel);\r\n }\r\n }\r\n\r\n if (this.config.useRestart) {\r\n // Add interval to restart adapter every 3 hours\r\n startRefreshAccessTokenTimerJob(this);\r\n }\r\n break;\r\n }\r\n default:\r\n this.setState(\"info.connection\", false, true);\r\n this.log.error(\"[onReady] No connection mode found or mode invalid!\");\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Is called when adapter shuts down - callback has to be called under any circumstances!\r\n */\r\n private async onUnload(callback: () => void): Promise<void> {\r\n try {\r\n if (this.refreshAccessTokenInterval) {\r\n this.clearInterval(this.refreshAccessTokenInterval);\r\n }\r\n\r\n try {\r\n await this.mqttClient?.endAsync();\r\n this.log.info(\"[onUnload] MQTT client stopped!\");\r\n this.mqttClient = undefined;\r\n } catch (ex: any) {\r\n this.log.error(\"[onUnload] Error stopping MQTT client: !\" + ex.message);\r\n }\r\n\r\n this.setState(\"info.connection\", false, true);\r\n\r\n // Scheduler beenden\r\n if (this.resetValuesJob) {\r\n this.resetValuesJob.cancel();\r\n this.resetValuesJob = undefined;\r\n }\r\n\r\n if (this.checkStatesJob) {\r\n this.checkStatesJob?.cancel();\r\n this.checkStatesJob = undefined;\r\n }\r\n\r\n if (this.calculationJob) {\r\n this.calculationJob.cancel();\r\n this.calculationJob = undefined;\r\n }\r\n\r\n if (this.retryTimeout) {\r\n this.clearTimeout(this.retryTimeout);\r\n }\r\n\r\n callback();\r\n } catch (e) {\r\n callback();\r\n }\r\n }\r\n\r\n /**\r\n * Is called if a subscribed state changes\r\n */\r\n private onStateChange(\r\n id: string,\r\n state: ioBroker.State | null | undefined\r\n ): void {\r\n if (state) {\r\n // The state was changed\r\n\r\n // Read product and device key from string\r\n const splitted = id.split(\".\");\r\n const productKey = splitted[2]; // Product Key\r\n const deviceKey = splitted[3]; // Device Key\r\n const stateName1 = splitted[4]; // Folder/State Name 1 (e.g. 'control')\r\n const stateName2 = splitted[5]; // State Name, like 'setOutputLimit'\r\n\r\n const _device = this.zenHaDeviceList.find(\r\n (x) => x.productKey == productKey && x.deviceKey == deviceKey\r\n );\r\n\r\n if (!_device) {\r\n this.log.error(\r\n `[onStateChange] Device '${deviceKey}' not found in zenHaDeviceList!`\r\n );\r\n return;\r\n }\r\n\r\n // !!! Only stateChanges with ack==false are allowed to be processed.\r\n if (state.val != undefined && state.val != null && !state.ack) {\r\n switch (stateName1) {\r\n case \"control\":\r\n this.log.debug(\r\n `[onStateChange] Control state '${stateName2}' changed, new value is ${state.val}, ack = ${state.ack}!`\r\n );\r\n switch (stateName2) {\r\n case \"setOutputLimit\":\r\n _device.setOutputLimit(Number(state.val));\r\n break;\r\n case \"setInputLimit\":\r\n _device.setInputLimit(Number(state.val));\r\n break;\r\n case \"chargeLimit\":\r\n _device.setChargeLimit(Number(state.val));\r\n break;\r\n case \"dischargeLimit\":\r\n _device.setDischargeLimit(Number(state.val));\r\n break;\r\n case \"passMode\":\r\n _device.setPassMode(Number(state.val));\r\n break;\r\n case \"dcSwitch\":\r\n _device.setDcSwitch(state.val ? true : false);\r\n break;\r\n case \"acSwitch\":\r\n _device.setAcSwitch(state.val ? true : false);\r\n break;\r\n case \"acMode\":\r\n _device.setAcMode(Number(state.val));\r\n break;\r\n case \"hubState\":\r\n _device.setHubState(Number(state.val));\r\n break;\r\n case \"autoModel\":\r\n _device.setAutoModel(Number(state.val));\r\n break;\r\n case \"autoRecover\":\r\n _device.setAutoRecover(state.val ? true : false);\r\n break;\r\n case \"buzzerSwitch\":\r\n _device.setBuzzerSwitch(state.val ? true : false);\r\n break;\r\n case \"smartMode\":\r\n _device.setSmartMode(state.val ? true : false);\r\n break;\r\n case \"setDeviceAutomationInOutLimit\":\r\n _device.setDeviceAutomationInOutLimit(Number(state.val));\r\n break;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n // The state was deleted\r\n //this.log.debug(`state ${id} deleted`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nif (require.main !== module) {\r\n // Export the constructor in compact mode\r\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) =>\r\n new ZendureSolarflow(options);\r\n} else {\r\n // otherwise start the instance directly\r\n (() => new ZendureSolarflow())();\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "zendure-solarflow",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.5",
|
|
5
5
|
"news": {
|
|
6
|
+
"3.0.5": {
|
|
7
|
+
"en": "Add some more log information on device creation",
|
|
8
|
+
"de": "Fügen Sie weitere Log-Informationen zur Geräteerstellung hinzu",
|
|
9
|
+
"ru": "Добавьте больше информации о журналах для создания устройств",
|
|
10
|
+
"pt": "Adicionar mais informações de log na criação do dispositivo",
|
|
11
|
+
"nl": "Voeg wat meer loginformatie toe over het aanmaken van een apparaat",
|
|
12
|
+
"fr": "Ajoutez d'autres informations de journal sur la création de l'appareil",
|
|
13
|
+
"it": "Aggiungi altre informazioni di log sulla creazione del dispositivo",
|
|
14
|
+
"es": "Añadir más información de registro en la creación del dispositivo",
|
|
15
|
+
"pl": "Dodaj więcej informacji o tworzeniu urządzenia",
|
|
16
|
+
"uk": "Додайте ще інформацію про пристрій",
|
|
17
|
+
"zh-cn": "添加更多关于设备创建的日志信息"
|
|
18
|
+
},
|
|
6
19
|
"3.0.4": {
|
|
7
20
|
"en": "Fix inputLimit issue\nFix Wifi status not updating when packData changes",
|
|
8
21
|
"de": "InputLimit Problem beheben\nWifi-Status nicht aktualisieren, wenn packData Änderungen",
|
|
@@ -80,19 +93,6 @@
|
|
|
80
93
|
"pl": "Napraw utworzenie stanów kontrolnych w nowym Hyper 2000 v3\nAktualizacja zależności",
|
|
81
94
|
"uk": "Виправлення створення станів управління на новому Hyper 2000 v3.\nОновлення залежностей",
|
|
82
95
|
"zh-cn": "修复在新的Hyper 2000 v3上创建控制状态\n更新依赖项"
|
|
83
|
-
},
|
|
84
|
-
"2.0.3": {
|
|
85
|
-
"en": "Added 'B3Dxda' as new Hyper 2000 productKey. Removed parameter 'upTime' and 'pullTime' from 'setDeviceAutomationInOutLimit'. TEST: Use 'setDeviceAutomationInOutLimit' to let HUB1200/HUB2000 charge with connected ACE 1500",
|
|
86
|
-
"de": "B3Dxda' als neuer Hyper 2000 productKey hinzugefügt. Parameter 'upTime' und 'pullTime' aus 'setDeviceAutomationInOutLimit' entfernt. TEST: Verwenden Sie 'setDeviceAutomationInOutLimit', um HUB1200/HUB2000 mit angeschlossenem ACE 1500 laden zu lassen.",
|
|
87
|
-
"ru": "Добавлен 'B3Dxda' в качестве нового ключа устройства Hyper 2000. Удалены параметры 'upTime' и 'pullTime' из 'setDeviceAutomationInOutLimit'. ТЕСТ: Используйте 'setDeviceAutomationInOutLimit', чтобы позволить HUB1200/HUB2000 заряжаться с подключенным ACE 1500.",
|
|
88
|
-
"pt": "Adicionado 'B3Dxda' como nova productKey Hyper 2000. Removido o parâmetro 'upTime' e 'pullTime' de 'setDeviceAutomationInOutLimit'. TESTE: Utilizar 'setDeviceAutomationInOutLimit' para permitir que o HUB1200/HUB2000 carregue com o ACE 1500 ligado",
|
|
89
|
-
"nl": "B3Dxda' toegevoegd als nieuwe Hyper 2000 productKey. Parameter 'upTime' en 'pullTime' verwijderd uit 'setDeviceAutomationInOutLimit'. TEST: Gebruik 'setDeviceAutomationInOutLimit' om HUB1200/HUB2000 te laten laden met aangesloten ACE 1500.",
|
|
90
|
-
"fr": "Ajout de 'B3Dxda' comme nouvelle clé de périphérique Hyper 2000. Suppression des paramètres 'upTime' et 'pullTime' de 'setDeviceAutomationInOutLimit'. TEST : Utilisez 'setDeviceAutomationInOutLimit' pour permettre au HUB1200/HUB2000 de se recharger avec un ACE 1500 connecté.",
|
|
91
|
-
"it": "Aggiunto 'B3Dxda' come nuovo productKey Hyper 2000. Rimosso il parametro 'upTime' e 'pullTime' da 'setDeviceAutomationInOutLimit'. TEST: utilizzare 'setDeviceAutomationInOutLimit' per consentire a HUB1200/HUB2000 di caricarsi con l'ACE 1500 collegato.",
|
|
92
|
-
"es": "Añadido 'B3Dxda' como nuevo productKey de Hyper 2000. Eliminados los parámetros 'upTime' y 'pullTime' de 'setDeviceAutomationInOutLimit'. PRUEBA: Utiliza 'setDeviceAutomationInOutLimit' para que HUB1200/HUB2000 se cargue con ACE 1500 conectado.",
|
|
93
|
-
"pl": "Dodano \"B3Dxda\" jako nowy klucz urządzenia Hyper 2000. Usunięto parametr 'upTime' i 'pullTime' z 'setDeviceAutomationInOutLimit'. TEST: Użyj 'setDeviceAutomationInOutLimit', aby umożliwić ładowanie HUB1200/HUB2000 z podłączonym ACE 1500.",
|
|
94
|
-
"uk": "Додано 'B3Dxda' як новий Hyper 2000 productKey. Видалено параметри 'upTime' та 'pullTime' з 'setDeviceAutomationInOutLimit'. ТЕСТ: Використовуйте 'setDeviceAutomationInOutLimit', щоб дозволити HUB1200/HUB2000 заряджатися з підключеним ACE 1500",
|
|
95
|
-
"zh-cn": "Added 'B3Dxda' as new Hyper 2000 productKey. Removed parameter 'upTime' and 'pullTime' from 'setDeviceAutomationInOutLimit'. TEST: Use 'setDeviceAutomationInOutLimit' to let HUB1200/HUB2000 charge with connected ACE 1500"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|