iobroker.zendure-solarflow 2.0.0-alpha.0 → 2.0.0
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 +14 -6
- package/build/constants/ac2400ControlStates.js +1 -10
- package/build/constants/ac2400ControlStates.js.map +2 -2
- package/build/constants/aceControlStates.js +1 -1
- package/build/constants/aceControlStates.js.map +1 -1
- package/build/constants/aioControlStates.js +12 -29
- package/build/constants/aioControlStates.js.map +2 -2
- package/build/constants/aioStates.js +7 -0
- package/build/constants/aioStates.js.map +2 -2
- package/build/constants/hubControlStates.js +10 -10
- package/build/constants/hubControlStates.js.map +2 -2
- package/build/constants/hubStates.js +7 -0
- package/build/constants/hubStates.js.map +2 -2
- package/build/constants/hyperControlStates.js +1 -10
- package/build/constants/hyperControlStates.js.map +2 -2
- package/build/constants/sharedStates.js +0 -7
- package/build/constants/sharedStates.js.map +2 -2
- package/build/constants/solarflow800ControlStates.js +1 -10
- package/build/constants/solarflow800ControlStates.js.map +2 -2
- package/build/constants/solarflow800ProControlStates.js +1 -10
- package/build/constants/solarflow800ProControlStates.js.map +2 -2
- package/build/helpers/helpers.js +26 -0
- package/build/helpers/helpers.js.map +2 -2
- package/build/main.js +5 -2
- package/build/main.js.map +2 -2
- package/build/models/IPackData.js.map +1 -1
- package/build/models/ISolarFlowMqttProperties.js.map +2 -2
- package/build/services/adapterService.js +1 -1
- package/build/services/adapterService.js.map +2 -2
- package/build/services/mqttService.js +149 -122
- package/build/services/mqttService.js.map +2 -2
- package/io-package.json +27 -27
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/constants/solarflow800ControlStates.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const solarflow800ControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 800,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 800,\n step: 1,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const solarflow800ControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 800,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 800,\n step: 1,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationInOutLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -179,20 +179,11 @@ const solarflow800ProControlStates = [
|
|
|
179
179
|
read: true,
|
|
180
180
|
write: false
|
|
181
181
|
},
|
|
182
|
-
{
|
|
183
|
-
nameDe: "Smart Mode",
|
|
184
|
-
nameEn: "Smart Mode",
|
|
185
|
-
type: "boolean",
|
|
186
|
-
title: "smartMode",
|
|
187
|
-
role: "switch",
|
|
188
|
-
read: true,
|
|
189
|
-
write: true
|
|
190
|
-
},
|
|
191
182
|
{
|
|
192
183
|
nameDe: "Ger\xE4te Automation Limit (negativ = Laden, positiv = Einspeisen)",
|
|
193
184
|
nameEn: "Device Automation Limit (negative = charging, positive = feed in)",
|
|
194
185
|
type: "number",
|
|
195
|
-
title: "
|
|
186
|
+
title: "setDeviceAutomationInOutLimit",
|
|
196
187
|
role: "value.power",
|
|
197
188
|
read: true,
|
|
198
189
|
write: true,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/constants/solarflow800ProControlStates.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const solarflow800ProControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 800,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 1000,\n step: 1,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nimport { ISolarflowState } from \"../models/ISolarflowState\";\n\nexport const solarflow800ProControlStates: ISolarflowState[] = [\n {\n nameDe: \"Energieplan-Einstellung\",\n nameEn: \"Energyplan\",\n type: \"number\",\n title: \"autoModel\",\n role: \"value\",\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 6: \"Battery priority mode\",\n 7: \"Appointment mode\",\n 8: \"Smart Matching Mode\",\n 9: \"Smart CT Mode\",\n 10: \"Electricity Price\",\n },\n },\n {\n nameDe: \"Setzen des Lade-Limits\",\n nameEn: \"Control of the charge limit\",\n title: \"chargeLimit\",\n type: \"number\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 40,\n max: 100,\n unit: \"%\",\n },\n {\n nameDe: \"Setzen des Entlade-Limits\",\n nameEn: \"Control of the discharge limit\",\n type: \"number\",\n title: \"dischargeLimit\",\n role: \"value.battery\",\n read: true,\n write: true,\n min: 0,\n max: 50,\n unit: \"%\",\n },\n {\n nameDe: \"Sounds am HUB aktivieren\",\n nameEn: \"Enable buzzer on HUB\",\n type: \"boolean\",\n title: \"buzzerSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Einzustellende Ausgangsleistung\",\n nameEn: \"Control of the output limit\",\n type: \"number\",\n title: \"setOutputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 800,\n unit: \"W\",\n },\n {\n nameDe: \"Einstellung des Bypass Modus\",\n nameEn: \"Setting of bypass mode\",\n type: \"number\",\n title: \"passMode\",\n role: \"switch\",\n read: true,\n write: true,\n states: {\n 0: \"Automatic\",\n 1: \"Always off\",\n 2: \"Always on\",\n },\n },\n {\n nameDe: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\n nameEn: \"Automatic recovery of bypass\",\n type: \"boolean\",\n title: \"autoRecover\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"Verhalten wenn minimale reservierte Ladung erreicht\",\n nameEn: \"Behavior when minimum reserved charge is reached\",\n type: \"number\",\n title: \"hubState\",\n role: \"value\",\n read: true,\n write: true,\n min: 0,\n max: 1,\n states: {\n 0: \"Stop output and standby\",\n 1: \"Stop output and shut down\",\n },\n },\n {\n nameDe: \"Einzustellende Eingangsleistung\",\n nameEn: \"Control of the input limit\",\n type: \"number\",\n title: \"setInputLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n max: 1000,\n step: 1,\n unit: \"W\",\n },\n {\n nameDe: \"AC Schalter\",\n nameEn: \"AC switch\",\n type: \"boolean\",\n title: \"acSwitch\",\n role: \"switch\",\n read: true,\n write: true,\n },\n {\n nameDe: \"AC Modus\",\n nameEn: \"AC mode\",\n type: \"number\",\n title: \"acMode\",\n role: \"switch\",\n min: 0,\n max: 2,\n step: 1,\n read: true,\n write: true,\n states: {\n 0: \"Nothing\",\n 1: \"AC input mode\",\n 2: \"AC output mode\",\n },\n },\n {\n nameDe: \"Niedrige Batteriespannung erkannt\",\n nameEn: \"Low Voltage on battery detected\",\n type: \"boolean\",\n title: \"lowVoltageBlock\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Auf 100% laden, Akku muss kalibriert werden!\",\n nameEn: \"Charge to 100%, battery needs to be calibrated\",\n type: \"boolean\",\n title: \"fullChargeNeeded\",\n role: \"indicator.lowbat\",\n read: true,\n write: false,\n },\n {\n nameDe: \"Ger\u00E4te Automation Limit (negativ = Laden, positiv = Einspeisen)\",\n nameEn: \"Device Automation Limit (negative = charging, positive = feed in)\",\n type: \"number\",\n title: \"setDeviceAutomationInOutLimit\",\n role: \"value.power\",\n read: true,\n write: true,\n min: 0,\n unit: \"W\",\n },\n];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/helpers/helpers.js
CHANGED
|
@@ -18,6 +18,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var helpers_exports = {};
|
|
20
20
|
__export(helpers_exports, {
|
|
21
|
+
getMinAndMaxInputLimitForProductKey: () => getMinAndMaxInputLimitForProductKey,
|
|
21
22
|
getMinAndMaxOutputLimitForProductKey: () => getMinAndMaxOutputLimitForProductKey,
|
|
22
23
|
getProductNameFromProductKey: () => getProductNameFromProductKey
|
|
23
24
|
});
|
|
@@ -98,8 +99,33 @@ const getMinAndMaxOutputLimitForProductKey = (productKey, limit) => {
|
|
|
98
99
|
}
|
|
99
100
|
return limit;
|
|
100
101
|
};
|
|
102
|
+
const getMinAndMaxInputLimitForProductKey = (productKey, limit) => {
|
|
103
|
+
let maxLimit = 900;
|
|
104
|
+
const productName = getProductNameFromProductKey(productKey);
|
|
105
|
+
if (productName == null ? void 0 : productName.includes("hyper")) {
|
|
106
|
+
maxLimit = 1200;
|
|
107
|
+
}
|
|
108
|
+
if (productName == null ? void 0 : productName.includes("2400 ac")) {
|
|
109
|
+
maxLimit = 2400;
|
|
110
|
+
}
|
|
111
|
+
if (productName == null ? void 0 : productName.includes("solarflow 800")) {
|
|
112
|
+
maxLimit = 800;
|
|
113
|
+
}
|
|
114
|
+
if (productName == null ? void 0 : productName.includes("ace")) {
|
|
115
|
+
limit = Math.ceil(limit / 100) * 100;
|
|
116
|
+
}
|
|
117
|
+
if (limit < 0) {
|
|
118
|
+
limit = 0;
|
|
119
|
+
} else if (limit > 0 && limit <= 30) {
|
|
120
|
+
limit = 30;
|
|
121
|
+
} else if (limit > maxLimit) {
|
|
122
|
+
limit = maxLimit;
|
|
123
|
+
}
|
|
124
|
+
return limit;
|
|
125
|
+
};
|
|
101
126
|
// Annotate the CommonJS export names for ESM import in node:
|
|
102
127
|
0 && (module.exports = {
|
|
128
|
+
getMinAndMaxInputLimitForProductKey,
|
|
103
129
|
getMinAndMaxOutputLimitForProductKey,
|
|
104
130
|
getProductNameFromProductKey
|
|
105
131
|
});
|
|
@@ -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\nexport const getProductNameFromProductKey = (productKey: string): string => {\n switch (productKey.toLowerCase()) {\n case \"73bktv\":\n return \"solarflow2.0\";\n case \"a8yh63\":\n return \"solarflow hub 2000\";\n case \"ywf7hv\":\n return \"solarflow aio zy\";\n case \"ja72u0ha\":\n return \"hyper 2000\";\n case \"gda3tb\":\n return \"hyper 2000\";\n case \"8bm93h\":\n return \"ace 1500\";\n case \"bc8b7f\":\n return \"solarflow 2400 ac\";\n case \"b1nhmc\":\n return \"solarflow 800\";\n default:\n return \"\";\n }\n};\n\nexport const getMinAndMaxOutputLimitForProductKey = (\n productKey: string,\n limit: number\n): number => {\n const productName = getProductNameFromProductKey(productKey);\n\n if (limit < 100 && limit != 90 && limit != 60 && limit != 30 && limit != 0) {\n // NUR Solarflow HUB: Das Limit kann unter 100 nur in 30er Schritten gesetzt werden, dH. 30/60/90/100, wir rechnen das also um\n if (\n limit < 100 &&\n limit > 90 &&\n !productName?.includes(\"hyper\") &&\n !productName?.includes(\"2400 ac\") &&\n !productName?.includes(\"solarflow 800\")\n ) {\n limit = 90;\n } else if (\n limit > 60 &&\n limit < 90 &&\n !productName?.includes(\"hyper\") &&\n !productName?.includes(\"2400 ac\") &&\n !productName?.includes(\"solarflow 800\")\n ) {\n limit = 60;\n } else if (\n limit > 30 &&\n limit < 60 &&\n !productName?.includes(\"hyper\") &&\n !productName?.includes(\"2400 ac\") &&\n !productName?.includes(\"solarflow 800\")\n ) {\n limit = 30;\n } else if (limit < 30) {\n limit = 30;\n }\n }\n\n switch (productName?.toLocaleLowerCase()) {\n case \"hyper 2000\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow 800\":\n if (limit > 800) {\n limit = 800;\n }\n break;\n case \"solarflow2.0\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow hub 2000\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow aio zy\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow 800 pro\":\n if (limit > 800) {\n limit = 800;\n }\n break;\n case \"solarflow 2400 ac\":\n if (limit > 2400) {\n limit = 2400;\n }\n break;\n default:\n break;\n }\n\n return limit;\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,+BAA+B,CAAC,eAA+B;AAC1E,UAAQ,WAAW,YAAY,GAAG;AAAA,IAChC,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,MAAM,uCAAuC,CAClD,YACA,UACW;AACX,QAAM,cAAc,6BAA6B,UAAU;AAE3D,MAAI,QAAQ,OAAO,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM,SAAS,GAAG;AAE1E,QACE,QAAQ,OACR,QAAQ,MACR,EAAC,2CAAa,SAAS,aACvB,EAAC,2CAAa,SAAS,eACvB,EAAC,2CAAa,SAAS,mBACvB;AACA,cAAQ;AAAA,IACV,WACE,QAAQ,MACR,QAAQ,MACR,EAAC,2CAAa,SAAS,aACvB,EAAC,2CAAa,SAAS,eACvB,EAAC,2CAAa,SAAS,mBACvB;AACA,cAAQ;AAAA,IACV,WACE,QAAQ,MACR,QAAQ,MACR,EAAC,2CAAa,SAAS,aACvB,EAAC,2CAAa,SAAS,eACvB,EAAC,2CAAa,SAAS,mBACvB;AACA,cAAQ;AAAA,IACV,WAAW,QAAQ,IAAI;AACrB,cAAQ;AAAA,IACV;AAAA,EACF;AAEA,UAAQ,2CAAa,qBAAqB;AAAA,IACxC,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,KAAK;AACf,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,KAAK;AACf,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF;AACE;AAAA,EACJ;AAEA,SAAO;AACT;",
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\n\nexport const getProductNameFromProductKey = (productKey: string): string => {\n switch (productKey.toLowerCase()) {\n case \"73bktv\":\n return \"solarflow2.0\";\n case \"a8yh63\":\n return \"solarflow hub 2000\";\n case \"ywf7hv\":\n return \"solarflow aio zy\";\n case \"ja72u0ha\":\n return \"hyper 2000\";\n case \"gda3tb\":\n return \"hyper 2000\";\n case \"8bm93h\":\n return \"ace 1500\";\n case \"bc8b7f\":\n return \"solarflow 2400 ac\";\n case \"b1nhmc\":\n return \"solarflow 800\";\n default:\n return \"\";\n }\n};\n\nexport const getMinAndMaxOutputLimitForProductKey = (\n productKey: string,\n limit: number\n): number => {\n const productName = getProductNameFromProductKey(productKey);\n\n if (limit < 100 && limit != 90 && limit != 60 && limit != 30 && limit != 0) {\n // NUR Solarflow HUB: Das Limit kann unter 100 nur in 30er Schritten gesetzt werden, dH. 30/60/90/100, wir rechnen das also um\n if (\n limit < 100 &&\n limit > 90 &&\n !productName?.includes(\"hyper\") &&\n !productName?.includes(\"2400 ac\") &&\n !productName?.includes(\"solarflow 800\")\n ) {\n limit = 90;\n } else if (\n limit > 60 &&\n limit < 90 &&\n !productName?.includes(\"hyper\") &&\n !productName?.includes(\"2400 ac\") &&\n !productName?.includes(\"solarflow 800\")\n ) {\n limit = 60;\n } else if (\n limit > 30 &&\n limit < 60 &&\n !productName?.includes(\"hyper\") &&\n !productName?.includes(\"2400 ac\") &&\n !productName?.includes(\"solarflow 800\")\n ) {\n limit = 30;\n } else if (limit < 30) {\n limit = 30;\n }\n }\n\n switch (productName?.toLocaleLowerCase()) {\n case \"hyper 2000\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow 800\":\n if (limit > 800) {\n limit = 800;\n }\n break;\n case \"solarflow2.0\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow hub 2000\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow aio zy\":\n if (limit > 1200) {\n limit = 1200;\n }\n break;\n case \"solarflow 800 pro\":\n if (limit > 800) {\n limit = 800;\n }\n break;\n case \"solarflow 2400 ac\":\n if (limit > 2400) {\n limit = 2400;\n }\n break;\n default:\n break;\n }\n\n return limit;\n};\n\nexport const getMinAndMaxInputLimitForProductKey = (\n productKey: string,\n limit: number\n): number => {\n let maxLimit = 900;\n\n const productName = getProductNameFromProductKey(productKey);\n\n if (productName?.includes(\"hyper\")) {\n maxLimit = 1200;\n }\n\n if (productName?.includes(\"2400 ac\")) {\n maxLimit = 2400;\n }\n\n if (productName?.includes(\"solarflow 800\")) {\n maxLimit = 800;\n }\n\n if (productName?.includes(\"ace\")) {\n // Das Limit kann nur in 100er Schritten gesetzt werden\n limit = Math.ceil(limit / 100) * 100;\n }\n\n if (limit < 0) {\n limit = 0;\n } else if (limit > 0 && limit <= 30) {\n limit = 30;\n } else if (limit > maxLimit) {\n limit = maxLimit;\n }\n\n return limit;\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,+BAA+B,CAAC,eAA+B;AAC1E,UAAQ,WAAW,YAAY,GAAG;AAAA,IAChC,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEO,MAAM,uCAAuC,CAClD,YACA,UACW;AACX,QAAM,cAAc,6BAA6B,UAAU;AAE3D,MAAI,QAAQ,OAAO,SAAS,MAAM,SAAS,MAAM,SAAS,MAAM,SAAS,GAAG;AAE1E,QACE,QAAQ,OACR,QAAQ,MACR,EAAC,2CAAa,SAAS,aACvB,EAAC,2CAAa,SAAS,eACvB,EAAC,2CAAa,SAAS,mBACvB;AACA,cAAQ;AAAA,IACV,WACE,QAAQ,MACR,QAAQ,MACR,EAAC,2CAAa,SAAS,aACvB,EAAC,2CAAa,SAAS,eACvB,EAAC,2CAAa,SAAS,mBACvB;AACA,cAAQ;AAAA,IACV,WACE,QAAQ,MACR,QAAQ,MACR,EAAC,2CAAa,SAAS,aACvB,EAAC,2CAAa,SAAS,eACvB,EAAC,2CAAa,SAAS,mBACvB;AACA,cAAQ;AAAA,IACV,WAAW,QAAQ,IAAI;AACrB,cAAQ;AAAA,IACV;AAAA,EACF;AAEA,UAAQ,2CAAa,qBAAqB;AAAA,IACxC,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,KAAK;AACf,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,KAAK;AACf,gBAAQ;AAAA,MACV;AACA;AAAA,IACF,KAAK;AACH,UAAI,QAAQ,MAAM;AAChB,gBAAQ;AAAA,MACV;AACA;AAAA,IACF;AACE;AAAA,EACJ;AAEA,SAAO;AACT;AAEO,MAAM,sCAAsC,CACjD,YACA,UACW;AACX,MAAI,WAAW;AAEf,QAAM,cAAc,6BAA6B,UAAU;AAE3D,MAAI,2CAAa,SAAS,UAAU;AAClC,eAAW;AAAA,EACb;AAEA,MAAI,2CAAa,SAAS,YAAY;AACpC,eAAW;AAAA,EACb;AAEA,MAAI,2CAAa,SAAS,kBAAkB;AAC1C,eAAW;AAAA,EACb;AAEA,MAAI,2CAAa,SAAS,QAAQ;AAEhC,YAAQ,KAAK,KAAK,QAAQ,GAAG,IAAI;AAAA,EACnC;AAEA,MAAI,QAAQ,GAAG;AACb,YAAQ;AAAA,EACV,WAAW,QAAQ,KAAK,SAAS,IAAI;AACnC,YAAQ;AAAA,EACV,WAAW,QAAQ,UAAU;AAC3B,YAAQ;AAAA,EACV;AAEA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/main.js
CHANGED
|
@@ -285,6 +285,9 @@ class ZendureSolarflow extends utils.Adapter {
|
|
|
285
285
|
} else if (state.val != void 0 && state.val != null && !state.ack) {
|
|
286
286
|
switch (stateName1) {
|
|
287
287
|
case "control":
|
|
288
|
+
this.log.debug(
|
|
289
|
+
`[onStateChange] Control state '${stateName2}' changed, new value is ${state.val}, ack = ${state.ack}!`
|
|
290
|
+
);
|
|
288
291
|
switch (stateName2) {
|
|
289
292
|
case "setOutputLimit":
|
|
290
293
|
(0, import_mqttService.setOutputLimit)(this, productKey, deviceKey, Number(state.val));
|
|
@@ -355,8 +358,8 @@ class ZendureSolarflow extends utils.Adapter {
|
|
|
355
358
|
state.val ? true : false
|
|
356
359
|
);
|
|
357
360
|
break;
|
|
358
|
-
case "
|
|
359
|
-
(0, import_mqttService.
|
|
361
|
+
case "setDeviceAutomationInOutLimit":
|
|
362
|
+
(0, import_mqttService.setDeviceAutomationInOutLimit)(
|
|
360
363
|
this,
|
|
361
364
|
productKey,
|
|
362
365
|
deviceKey,
|
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\nimport {\r\n connectCloudMqttClient,\r\n connectLocalMqttClient,\r\n setAcMode,\r\n setAcSwitch,\r\n setAutoModel,\r\n setAutoRecover,\r\n setBuzzerSwitch,\r\n setChargeLimit,\r\n setDcSwitch,\r\n setDeviceAutomationLimit,\r\n setDischargeLimit,\r\n setHubState,\r\n setInputLimit,\r\n setOutputLimit,\r\n setPassMode,\r\n setSmartMode,\r\n} from \"./services/mqttService\";\r\nimport { getDeviceList, login } from \"./services/webService\";\r\nimport { ISolarFlowDeviceDetails } from \"./models/ISolarFlowDeviceDetails\";\r\nimport { ISolarFlowPaths } from \"./models/ISolarFlowPaths\";\r\nimport { pathsEu, pathsGlobal } from \"./constants/paths\";\r\nimport { Job } from \"node-schedule\";\r\nimport { MqttClient } from \"mqtt\";\r\nimport {\r\n checkDevicesServer,\r\n updateSolarFlowState,\r\n} from \"./services/adapterService\";\r\nimport { createSolarFlowStates } from \"./helpers/createSolarFlowStates\";\r\nimport { createDeveloperAccount } from \"./services/fallbackWebService\";\r\nimport { ISolarFlowDevRegisterData } from \"./models/ISolarflowDevRegisterResponse\";\r\nimport { connectFallbackMqttClient } from \"./services/fallbackMqttService\";\r\nimport { IPack2Device } from \"./models/IPack2Device\";\r\nimport { startRefreshAccessTokenTimerJob } from \"./services/jobSchedule\";\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 userId: string | undefined = undefined; // User ID, needed for connection with Smart Plug\r\n public accessToken: string | undefined = undefined; // Access Token for Zendure Rest API\r\n public deviceList: ISolarFlowDeviceDetails[] = [];\r\n public paths: ISolarFlowPaths | undefined = undefined;\r\n public pack2Devices: IPack2Device[] = [];\r\n\r\n public msgCounter: number = 700000;\r\n\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 public createdSnNumberSolarflowStates: string[] = [];\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 // Select paths by config value\r\n if (this.config.server && this.config.server == \"eu\") {\r\n this.paths = pathsEu;\r\n } else {\r\n this.paths = pathsGlobal;\r\n }\r\n\r\n this.log.debug(\"[onReady] Using server \" + this.config.server);\r\n\r\n this.setState(\"info.errorMessage\", \"\", true);\r\n\r\n if (this.config.server == \"local\") {\r\n this.log.debug(\"[onReady] Using local MQTT server\");\r\n\r\n connectLocalMqttClient(this);\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 } else if (this.config.useFallbackService && this.config.snNumber) {\r\n this.log.debug(\"[onReady] Using Fallback Mode (Dev-Server)\");\r\n // Use Fallback service. Using the developer version of the MQTT and Webservice from zendure\r\n createDeveloperAccount(this).then((data: ISolarFlowDevRegisterData) => {\r\n //console.log(data);\r\n if (data.appKey && data.mqttUrl && data.port && data.secret) {\r\n connectFallbackMqttClient(\r\n this,\r\n data.appKey,\r\n data.secret,\r\n data.mqttUrl,\r\n data.port\r\n );\r\n }\r\n });\r\n } else if (\r\n !this.config.useFallbackService &&\r\n this.config.userName &&\r\n this.config.password\r\n ) {\r\n // App mode: If Username and Password is provided, try to login and get the access token.\r\n let _accessToken: string | undefined = undefined;\r\n let retryCounter = 0;\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\r\n while (retryCounter <= 10) {\r\n try {\r\n _accessToken = await login(this);\r\n } catch (ex: any) {\r\n this.setState(\"info.message\", ex.message, true);\r\n if (ex.message.includes(\"Request failed with status code 400\")) {\r\n this.log.warn(\r\n `[onReady] Error 400, maybe your credentials are invalid!`\r\n );\r\n break;\r\n } else {\r\n this.log.error(\r\n `[onReady] Error connecting to Zendure Cloud. Error: ${ex.message}`\r\n );\r\n }\r\n }\r\n\r\n if (_accessToken != undefined) {\r\n this.accessToken = _accessToken;\r\n break;\r\n }\r\n\r\n retryCounter++;\r\n\r\n const milliseconds = 4000 * retryCounter;\r\n\r\n this.log.warn(\r\n `[onReady] Retrying to connect to Zendure Cloud in ${milliseconds / 1000} seconds (Retry #${retryCounter} of 10).`\r\n );\r\n\r\n // Add a small sleep\r\n await new Promise(\r\n (r) =>\r\n (this.retryTimeout = this.setTimeout(r, milliseconds, undefined))\r\n );\r\n }\r\n\r\n if (_accessToken != undefined) {\r\n this.setState(\"info.connection\", true, true);\r\n this.lastLogin = new Date();\r\n\r\n // Try to get the device list\r\n getDeviceList(this)\r\n .then(async (result: ISolarFlowDeviceDetails[]) => {\r\n if (result) {\r\n // Device List found. Save in the adapter properties and connect to MQTT\r\n\r\n // Filtering to SolarFlow devices\r\n this.deviceList = result.filter(\r\n (device) =>\r\n device.productName.toLowerCase().includes(\"solarflow\") ||\r\n device.productName.toLowerCase().includes(\"hyper\") ||\r\n device.productName.toLowerCase() == \"ace 1500\" ||\r\n device.productName.toLowerCase().includes(\"smart plug\")\r\n );\r\n\r\n await checkDevicesServer(this);\r\n\r\n this.log.info(\r\n `[onReady] Found ${this.deviceList.length} SolarFlow device(s).`\r\n );\r\n\r\n await this.deviceList.forEach(\r\n async (device: ISolarFlowDeviceDetails) => {\r\n // Check if has subdevice e.g. ACE?\r\n if (device.packList && device.packList.length > 0) {\r\n device.packList.forEach(async (subDevice) => {\r\n if (\r\n subDevice.productName.toLocaleLowerCase() == \"ace 1500\"\r\n ) {\r\n device._connectedWithAce = true;\r\n // States erstellen\r\n await createSolarFlowStates(this, subDevice);\r\n\r\n await updateSolarFlowState(\r\n this,\r\n subDevice.productKey,\r\n subDevice.deviceKey,\r\n \"registeredServer\",\r\n this.config.server\r\n );\r\n }\r\n });\r\n }\r\n\r\n // States erstellen\r\n await createSolarFlowStates(this, device);\r\n\r\n if (\r\n !device.productName.toLowerCase().includes(\"smart plug\")\r\n ) {\r\n await updateSolarFlowState(\r\n this,\r\n device.productKey,\r\n device.deviceKey,\r\n \"registeredServer\",\r\n this.config.server\r\n );\r\n } else if (this?.userId && device.id) {\r\n await updateSolarFlowState(\r\n this,\r\n this.userId,\r\n device.id?.toString(),\r\n \"registeredServer\",\r\n this.config.server\r\n );\r\n }\r\n }\r\n );\r\n\r\n connectCloudMqttClient(this);\r\n }\r\n })\r\n .catch(() => {\r\n this.setState(\"info.connection\", false, true);\r\n this.log?.error(\"[onReady] Retrieving device failed!\");\r\n });\r\n }\r\n } else {\r\n this.setState(\"info.connection\", false, true);\r\n this.log.error(\"[onReady] No Login Information provided!\");\r\n //this.stop?.();\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 //this.log.debug(`state ${id} changed: ${state.val} (ack = ${state.ack})`);\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 if (this.config.useFallbackService && stateName1 == \"control\") {\r\n this.log.warn(\r\n `[onStateChange] Using Fallback server, control of Solarflow device is not possible!`\r\n );\r\n }\r\n // !!! Only stateChanges with ack==false are allowed to be processed.\r\n else if (state.val != undefined && state.val != null && !state.ack) {\r\n switch (stateName1) {\r\n case \"control\":\r\n switch (stateName2) {\r\n case \"setOutputLimit\":\r\n setOutputLimit(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"setInputLimit\":\r\n setInputLimit(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"chargeLimit\":\r\n setChargeLimit(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"dischargeLimit\":\r\n setDischargeLimit(\r\n this,\r\n productKey,\r\n deviceKey,\r\n Number(state.val)\r\n );\r\n break;\r\n case \"passMode\":\r\n setPassMode(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"dcSwitch\":\r\n setDcSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"acSwitch\":\r\n setAcSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"acMode\":\r\n setAcMode(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"hubState\":\r\n setHubState(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"autoModel\":\r\n setAutoModel(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"autoRecover\":\r\n setAutoRecover(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"buzzerSwitch\":\r\n setBuzzerSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"smartMode\":\r\n setSmartMode(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"setDeviceAutomationLimit\":\r\n setDeviceAutomationLimit(\r\n this,\r\n productKey,\r\n deviceKey,\r\n Number(state.val)\r\n );\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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",
|
|
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\nimport {\r\n connectCloudMqttClient,\r\n connectLocalMqttClient,\r\n setAcMode,\r\n setAcSwitch,\r\n setAutoModel,\r\n setAutoRecover,\r\n setBuzzerSwitch,\r\n setChargeLimit,\r\n setDcSwitch,\r\n setDeviceAutomationInOutLimit,\r\n setDischargeLimit,\r\n setHubState,\r\n setInputLimit,\r\n setOutputLimit,\r\n setPassMode,\r\n setSmartMode,\r\n} from \"./services/mqttService\";\r\nimport { getDeviceList, login } from \"./services/webService\";\r\nimport { ISolarFlowDeviceDetails } from \"./models/ISolarFlowDeviceDetails\";\r\nimport { ISolarFlowPaths } from \"./models/ISolarFlowPaths\";\r\nimport { pathsEu, pathsGlobal } from \"./constants/paths\";\r\nimport { Job } from \"node-schedule\";\r\nimport { MqttClient } from \"mqtt\";\r\nimport {\r\n checkDevicesServer,\r\n updateSolarFlowState,\r\n} from \"./services/adapterService\";\r\nimport { createSolarFlowStates } from \"./helpers/createSolarFlowStates\";\r\nimport { createDeveloperAccount } from \"./services/fallbackWebService\";\r\nimport { ISolarFlowDevRegisterData } from \"./models/ISolarflowDevRegisterResponse\";\r\nimport { connectFallbackMqttClient } from \"./services/fallbackMqttService\";\r\nimport { IPack2Device } from \"./models/IPack2Device\";\r\nimport { startRefreshAccessTokenTimerJob } from \"./services/jobSchedule\";\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 userId: string | undefined = undefined; // User ID, needed for connection with Smart Plug\r\n public accessToken: string | undefined = undefined; // Access Token for Zendure Rest API\r\n public deviceList: ISolarFlowDeviceDetails[] = [];\r\n public paths: ISolarFlowPaths | undefined = undefined;\r\n public pack2Devices: IPack2Device[] = [];\r\n\r\n public msgCounter: number = 700000;\r\n\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 public createdSnNumberSolarflowStates: string[] = [];\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 // Select paths by config value\r\n if (this.config.server && this.config.server == \"eu\") {\r\n this.paths = pathsEu;\r\n } else {\r\n this.paths = pathsGlobal;\r\n }\r\n\r\n this.log.debug(\"[onReady] Using server \" + this.config.server);\r\n\r\n this.setState(\"info.errorMessage\", \"\", true);\r\n\r\n if (this.config.server == \"local\") {\r\n this.log.debug(\"[onReady] Using local MQTT server\");\r\n\r\n connectLocalMqttClient(this);\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 } else if (this.config.useFallbackService && this.config.snNumber) {\r\n this.log.debug(\"[onReady] Using Fallback Mode (Dev-Server)\");\r\n // Use Fallback service. Using the developer version of the MQTT and Webservice from zendure\r\n createDeveloperAccount(this).then((data: ISolarFlowDevRegisterData) => {\r\n //console.log(data);\r\n if (data.appKey && data.mqttUrl && data.port && data.secret) {\r\n connectFallbackMqttClient(\r\n this,\r\n data.appKey,\r\n data.secret,\r\n data.mqttUrl,\r\n data.port\r\n );\r\n }\r\n });\r\n } else if (\r\n !this.config.useFallbackService &&\r\n this.config.userName &&\r\n this.config.password\r\n ) {\r\n // App mode: If Username and Password is provided, try to login and get the access token.\r\n let _accessToken: string | undefined = undefined;\r\n let retryCounter = 0;\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\r\n while (retryCounter <= 10) {\r\n try {\r\n _accessToken = await login(this);\r\n } catch (ex: any) {\r\n this.setState(\"info.message\", ex.message, true);\r\n if (ex.message.includes(\"Request failed with status code 400\")) {\r\n this.log.warn(\r\n `[onReady] Error 400, maybe your credentials are invalid!`\r\n );\r\n break;\r\n } else {\r\n this.log.error(\r\n `[onReady] Error connecting to Zendure Cloud. Error: ${ex.message}`\r\n );\r\n }\r\n }\r\n\r\n if (_accessToken != undefined) {\r\n this.accessToken = _accessToken;\r\n break;\r\n }\r\n\r\n retryCounter++;\r\n\r\n const milliseconds = 4000 * retryCounter;\r\n\r\n this.log.warn(\r\n `[onReady] Retrying to connect to Zendure Cloud in ${milliseconds / 1000} seconds (Retry #${retryCounter} of 10).`\r\n );\r\n\r\n // Add a small sleep\r\n await new Promise(\r\n (r) =>\r\n (this.retryTimeout = this.setTimeout(r, milliseconds, undefined))\r\n );\r\n }\r\n\r\n if (_accessToken != undefined) {\r\n this.setState(\"info.connection\", true, true);\r\n this.lastLogin = new Date();\r\n\r\n // Try to get the device list\r\n getDeviceList(this)\r\n .then(async (result: ISolarFlowDeviceDetails[]) => {\r\n if (result) {\r\n // Device List found. Save in the adapter properties and connect to MQTT\r\n\r\n // Filtering to SolarFlow devices\r\n this.deviceList = result.filter(\r\n (device) =>\r\n device.productName.toLowerCase().includes(\"solarflow\") ||\r\n device.productName.toLowerCase().includes(\"hyper\") ||\r\n device.productName.toLowerCase() == \"ace 1500\" ||\r\n device.productName.toLowerCase().includes(\"smart plug\")\r\n );\r\n\r\n await checkDevicesServer(this);\r\n\r\n this.log.info(\r\n `[onReady] Found ${this.deviceList.length} SolarFlow device(s).`\r\n );\r\n\r\n await this.deviceList.forEach(\r\n async (device: ISolarFlowDeviceDetails) => {\r\n // Check if has subdevice e.g. ACE?\r\n if (device.packList && device.packList.length > 0) {\r\n device.packList.forEach(async (subDevice) => {\r\n if (\r\n subDevice.productName.toLocaleLowerCase() == \"ace 1500\"\r\n ) {\r\n device._connectedWithAce = true;\r\n // States erstellen\r\n await createSolarFlowStates(this, subDevice);\r\n\r\n await updateSolarFlowState(\r\n this,\r\n subDevice.productKey,\r\n subDevice.deviceKey,\r\n \"registeredServer\",\r\n this.config.server\r\n );\r\n }\r\n });\r\n }\r\n\r\n // States erstellen\r\n await createSolarFlowStates(this, device);\r\n\r\n if (\r\n !device.productName.toLowerCase().includes(\"smart plug\")\r\n ) {\r\n await updateSolarFlowState(\r\n this,\r\n device.productKey,\r\n device.deviceKey,\r\n \"registeredServer\",\r\n this.config.server\r\n );\r\n } else if (this?.userId && device.id) {\r\n await updateSolarFlowState(\r\n this,\r\n this.userId,\r\n device.id?.toString(),\r\n \"registeredServer\",\r\n this.config.server\r\n );\r\n }\r\n }\r\n );\r\n\r\n connectCloudMqttClient(this);\r\n }\r\n })\r\n .catch(() => {\r\n this.setState(\"info.connection\", false, true);\r\n this.log?.error(\"[onReady] Retrieving device failed!\");\r\n });\r\n }\r\n } else {\r\n this.setState(\"info.connection\", false, true);\r\n this.log.error(\"[onReady] No Login Information provided!\");\r\n //this.stop?.();\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 //this.log.debug(`state ${id} changed: ${state.val} (ack = ${state.ack})`);\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 if (this.config.useFallbackService && stateName1 == \"control\") {\r\n this.log.warn(\r\n `[onStateChange] Using Fallback server, control of Solarflow device is not possible!`\r\n );\r\n }\r\n // !!! Only stateChanges with ack==false are allowed to be processed.\r\n else 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 setOutputLimit(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"setInputLimit\":\r\n setInputLimit(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"chargeLimit\":\r\n setChargeLimit(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"dischargeLimit\":\r\n setDischargeLimit(\r\n this,\r\n productKey,\r\n deviceKey,\r\n Number(state.val)\r\n );\r\n break;\r\n case \"passMode\":\r\n setPassMode(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"dcSwitch\":\r\n setDcSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"acSwitch\":\r\n setAcSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"acMode\":\r\n setAcMode(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"hubState\":\r\n setHubState(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"autoModel\":\r\n setAutoModel(this, productKey, deviceKey, Number(state.val));\r\n break;\r\n case \"autoRecover\":\r\n setAutoRecover(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"buzzerSwitch\":\r\n setBuzzerSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"smartMode\":\r\n setSmartMode(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n break;\r\n case \"setDeviceAutomationInOutLimit\":\r\n setDeviceAutomationInOutLimit(\r\n this,\r\n productKey,\r\n deviceKey,\r\n Number(state.val)\r\n );\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
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/models/IPackData.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\nexport interface IPackData {\r\n sn: string;\r\n socLevel: number;\r\n maxTemp: number;\r\n minVol: number;\r\n maxVol: number;\r\n totalVol: number;\r\n soh: number;\r\n batcur: number;\r\n //softVersion: number\r\n}\r\n"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\nexport interface IPackData {\r\n sn: string;\r\n socLevel: number;\r\n maxTemp: number;\r\n minVol: number;\r\n maxVol: number;\r\n totalVol: number;\r\n soh: number;\r\n batcur: number;\r\n power?: number;\r\n //softVersion: number\r\n}\r\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/models/ISolarFlowMqttProperties.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\nimport { IPackData } from \"./IPackData\";\r\n\r\nexport interface IMqttData {\r\n timestamp?: number;\r\n properties?: ISolarFlowMqttProperties;\r\n packData?: IPackData[];\r\n power?: number;\r\n}\r\n\r\nexport interface ISolarFlowMqttProperties {\r\n electricLevel?: number;\r\n packData?: IPackData[];\r\n packState?: number;\r\n pass?: number;\r\n passMode?: number;\r\n autoRecover?: number;\r\n outputHomePower?: number;\r\n outputLimit?: number;\r\n buzzerSwitch?: number;\r\n outputPackPower?: number;\r\n packInputPower?: number;\r\n solarInputPower?: number;\r\n pvPower1?: number;\r\n pvPower2?: number;\r\n solarPower1?: number;\r\n solarPower2?: number;\r\n solarPower3?: number;\r\n solarPower4?: number;\r\n remainOutTime?: number;\r\n remainInputTime?: number;\r\n socSet?: number;\r\n minSoc?: number;\r\n pvBrand?: number;\r\n inverseMaxPower?: number;\r\n wifiState?: number;\r\n hubState?: number;\r\n sn?: string;\r\n inputLimit?: number;\r\n gridInputPower?: number;\r\n acOutputPower?: number;\r\n acSwitch?: number;\r\n dcSwitch?: number;\r\n dcOutputPower?: number;\r\n packNum?: number;\r\n gridPower?: number;\r\n energyPower?: number;\r\n batteryElectric?: number;\r\n acMode?: number;\r\n hyperTmp?: number;\r\n autoModel?: number;\r\n heatState?: number;\r\n smartMode?: number;\r\n // ambientLightNess\r\n // ambientLightColor\r\n // ambientLightMode\r\n // ambientSwitch\r\n // lowTemperature\r\n // solarInputPowerCycle\r\n // solarInputPowerCycle2\r\n // electricLevelCycle\r\n\r\n // autoHeat\r\n //\r\n // loraInvState\r\n // loraModuleState\r\n // invOutputPower\r\n // masterSoftVersion: 4112\r\n // inputMode\r\n // blueOta\r\n}\r\n\r\nexport const knownMqttProps = [\r\n \"electricLevel\",\r\n \"packData\",\r\n \"packState\",\r\n \"pass\",\r\n \"passMode\",\r\n \"autoRecover\",\r\n \"outputHomePower\",\r\n \"outputLimit\",\r\n \"buzzerSwitch\",\r\n \"smartMode\",\r\n \"outputPackPower\",\r\n \"packInputPower\",\r\n \"solarInputPower\",\r\n \"pvPower1\",\r\n \"pvPower2\",\r\n \"solarPower1\",\r\n \"solarPower2\",\r\n \"remainOutTime\",\r\n \"remainInputTime\",\r\n \"socSet\",\r\n \"minSoc\",\r\n \"pvBrand\",\r\n \"inverseMaxPower\",\r\n \"wifiState\",\r\n \"hubState\",\r\n \"sn\",\r\n \"inputLimit\",\r\n \"gridInputPower\",\r\n \"acOutputPower\",\r\n \"acSwitch\",\r\n \"dcSwitch\",\r\n \"autoModel\",\r\n \"dcOutputPower\",\r\n \"packNum\",\r\n \"gridPower\",\r\n \"energyPower\",\r\n \"batteryElectric\",\r\n \"acMode\",\r\n \"hyperTmp\",\r\n \"autoModel\",\r\n \"heatState\",\r\n];\r\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\nimport { IPackData } from \"./IPackData\";\r\n\r\n//[onMessage] MQTT message on topic '/A8yh63/R7D06K7W/function/invoke/reply': {\"messageId\":700001,\"deviceId\":\"R7D06K7W\",\"timestamp\":1753079364,\"function\":\"deviceAutomation\",\"output\":\"success\",\"success\":1}\r\nexport interface IMqttData {\r\n timestamp?: number;\r\n properties?: ISolarFlowMqttProperties;\r\n packData?: IPackData[];\r\n power?: number;\r\n function?: string;\r\n deviceId?: string;\r\n output?: string;\r\n success?: number;\r\n}\r\n\r\nexport interface ISolarFlowMqttProperties {\r\n electricLevel?: number;\r\n packData?: IPackData[];\r\n packState?: number;\r\n pass?: number;\r\n passMode?: number;\r\n autoRecover?: number;\r\n outputHomePower?: number;\r\n outputLimit?: number;\r\n buzzerSwitch?: number;\r\n outputPackPower?: number;\r\n packInputPower?: number;\r\n solarInputPower?: number;\r\n pvPower1?: number;\r\n pvPower2?: number;\r\n solarPower1?: number;\r\n solarPower2?: number;\r\n solarPower3?: number;\r\n solarPower4?: number;\r\n remainOutTime?: number;\r\n remainInputTime?: number;\r\n socSet?: number;\r\n minSoc?: number;\r\n pvBrand?: number;\r\n inverseMaxPower?: number;\r\n wifiState?: number;\r\n hubState?: number;\r\n sn?: string;\r\n inputLimit?: number;\r\n gridInputPower?: number;\r\n acOutputPower?: number;\r\n acSwitch?: number;\r\n dcSwitch?: number;\r\n dcOutputPower?: number;\r\n packNum?: number;\r\n gridPower?: number;\r\n energyPower?: number;\r\n batteryElectric?: number;\r\n acMode?: number;\r\n hyperTmp?: number;\r\n autoModel?: number;\r\n heatState?: number;\r\n smartMode?: number;\r\n // ambientLightNess\r\n // ambientLightColor\r\n // ambientLightMode\r\n // ambientSwitch\r\n // lowTemperature\r\n // solarInputPowerCycle\r\n // solarInputPowerCycle2\r\n // electricLevelCycle\r\n\r\n // autoHeat\r\n //\r\n // loraInvState\r\n // loraModuleState\r\n // invOutputPower\r\n // masterSoftVersion: 4112\r\n // inputMode\r\n // blueOta\r\n}\r\n\r\nexport const knownMqttProps = [\r\n \"electricLevel\",\r\n \"packData\",\r\n \"packState\",\r\n \"pass\",\r\n \"passMode\",\r\n \"autoRecover\",\r\n \"outputHomePower\",\r\n \"outputLimit\",\r\n \"buzzerSwitch\",\r\n \"smartMode\",\r\n \"outputPackPower\",\r\n \"packInputPower\",\r\n \"solarInputPower\",\r\n \"pvPower1\",\r\n \"pvPower2\",\r\n \"solarPower1\",\r\n \"solarPower2\",\r\n \"remainOutTime\",\r\n \"remainInputTime\",\r\n \"socSet\",\r\n \"minSoc\",\r\n \"pvBrand\",\r\n \"inverseMaxPower\",\r\n \"wifiState\",\r\n \"hubState\",\r\n \"sn\",\r\n \"inputLimit\",\r\n \"gridInputPower\",\r\n \"acOutputPower\",\r\n \"acSwitch\",\r\n \"dcSwitch\",\r\n \"autoModel\",\r\n \"dcOutputPower\",\r\n \"packNum\",\r\n \"gridPower\",\r\n \"energyPower\",\r\n \"batteryElectric\",\r\n \"acMode\",\r\n \"hyperTmp\",\r\n \"autoModel\",\r\n \"heatState\",\r\n];\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA6EO,MAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -55,7 +55,7 @@ const checkVoltage = async (adapter, productKey, deviceKey, voltage) => {
|
|
|
55
55
|
));
|
|
56
56
|
const autoModel = (_a = await adapter.getStateAsync(productKey + "." + deviceKey + ".autoModel")) == null ? void 0 : _a.val;
|
|
57
57
|
if (autoModel == 8) {
|
|
58
|
-
(0, import_mqttService.
|
|
58
|
+
(0, import_mqttService.setDeviceAutomationInOutLimit)(adapter, productKey, deviceKey, 0);
|
|
59
59
|
} else {
|
|
60
60
|
(0, import_mqttService.setOutputLimit)(adapter, productKey, deviceKey, 0);
|
|
61
61
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/services/adapterService.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\nimport { ZendureSolarflow } from \"../main\";\r\nimport { setSocToZero } from \"./calculationService\";\r\nimport {\r\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,gCAA6B;AAC7B,yBAIO;AAEA,MAAM,uBAAuB,OAClC,SACA,YACA,WACA,OACA,QACkB;AAClB,SAAM,mCAAS,SAAS,GAAG,UAAU,IAAI,SAAS,IAAI,KAAK,IAAI,KAAK;AACtE;AAEO,MAAM,8BAA8B,OACzC,SACA,YACA,WACA,OACA,QACkB;AAElB,QAAM,aAAa,OAAM,mCAAS;AAAA,IAChC,GAAG,UAAU,IAAI,SAAS,YAAY,KAAK;AAAA;AAI7C,MAAI,YAAY;AACd,WAAM,mCAAS;AAAA,MACb,GAAG,UAAU,IAAI,SAAS,YAAY,KAAK;AAAA,MAC3C;AAAA,MACA;AAAA;AAAA,EAEJ;AACF;AAEO,MAAM,eAAe,OAC1B,SACA,YACA,WACA,YACkB;AA9CpB;AA+CE,MAAI,UAAU,MAAM;AAClB,QAAI,QAAQ,OAAO,gBAAgB;AACjC,kDAAa,SAAS,YAAY,SAAS;AAAA,IAC7C;AAEA,QAAI,QAAQ,OAAO,oBAAoB;AAErC,aAAM,mCAAS;AAAA,QACb,GAAG,UAAU,IAAI,SAAS;AAAA,QAC1B;AAAA,QACA;AAAA;AAIF,YAAM,aACJ,WAAM,QAAQ,cAAc,aAAa,MAAM,YAAY,YAAY,MAAvE,mBACC;AACH,UAAI,aAAa,GAAG;AAClB,
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\nimport { ZendureSolarflow } from \"../main\";\r\nimport { setSocToZero } from \"./calculationService\";\r\nimport {\r\n setDeviceAutomationInOutLimit,\r\n setDischargeLimit,\r\n setOutputLimit,\r\n} from \"./mqttService\";\r\n\r\nexport const updateSolarFlowState = async (\r\n adapter: ZendureSolarflow,\r\n productKey: string,\r\n deviceKey: string,\r\n state: string,\r\n val: number | string | boolean\r\n): Promise<void> => {\r\n await adapter?.setState(`${productKey}.${deviceKey}.${state}`, val, true);\r\n};\r\n\r\nexport const updateSolarFlowControlState = async (\r\n adapter: ZendureSolarflow,\r\n productKey: string,\r\n deviceKey: string,\r\n state: string,\r\n val: number | string | boolean\r\n): Promise<void> => {\r\n // First check if state exist\r\n const stateExist = await adapter?.objectExists(\r\n `${productKey}.${deviceKey}.control.${state}`\r\n );\r\n\r\n // Update the control state\r\n if (stateExist) {\r\n await adapter?.setState(\r\n `${productKey}.${deviceKey}.control.${state}`,\r\n val,\r\n true\r\n );\r\n }\r\n};\r\n\r\nexport const checkVoltage = async (\r\n adapter: ZendureSolarflow,\r\n productKey: string,\r\n deviceKey: string,\r\n voltage: number\r\n): Promise<void> => {\r\n if (voltage < 46.1) {\r\n if (adapter.config.useCalculation) {\r\n setSocToZero(adapter, productKey, deviceKey);\r\n }\r\n\r\n if (adapter.config.useLowVoltageBlock) {\r\n // Activate Low Voltage Block\r\n await adapter?.setState(\r\n `${productKey}.${deviceKey}.control.lowVoltageBlock`,\r\n true,\r\n true\r\n );\r\n\r\n // Low Voltage Block activated, stop power input immediately\r\n const autoModel = (\r\n await adapter.getStateAsync(productKey + \".\" + deviceKey + \".autoModel\")\r\n )?.val;\r\n if (autoModel == 8) {\r\n setDeviceAutomationInOutLimit(adapter, productKey, deviceKey, 0);\r\n } else {\r\n setOutputLimit(adapter, productKey, deviceKey, 0);\r\n }\r\n\r\n if (adapter.config.forceShutdownOnLowVoltage) {\r\n const currentSoc = await adapter.getStateAsync(\r\n `${productKey}.${deviceKey}.electricLevel`\r\n );\r\n\r\n if (currentSoc && Number(currentSoc.val) > 50) {\r\n // We can't shut down the device. Full charge needed!\r\n if (adapter.config.fullChargeIfNeeded) {\r\n await adapter?.setState(\r\n `${productKey}.${deviceKey}.control.fullChargeNeeded`,\r\n true,\r\n true\r\n );\r\n }\r\n } else {\r\n if (currentSoc && currentSoc.val) {\r\n setDischargeLimit(\r\n adapter,\r\n productKey,\r\n deviceKey,\r\n Number(currentSoc.val)\r\n );\r\n }\r\n\r\n // Check if device setting is correct\r\n const hubState = await adapter.getStateAsync(\r\n `${productKey}.${deviceKey}.hubState`\r\n );\r\n\r\n if (!hubState || Number(hubState.val) != 1) {\r\n adapter.log.warn(\r\n `[checkVoltage] hubState is not set to 'Stop output and shut down', device will NOT go offline!`\r\n );\r\n }\r\n }\r\n }\r\n }\r\n } else if (voltage >= 47.5) {\r\n // Deactivate Low Voltage Block\r\n const lowVoltageBlock = await adapter.getStateAsync(\r\n `${productKey}.${deviceKey}.control.lowVoltageBlock`\r\n );\r\n\r\n if (lowVoltageBlock && lowVoltageBlock.val == true) {\r\n await adapter?.setState(\r\n `${productKey}.${deviceKey}.control.lowVoltageBlock`,\r\n false,\r\n true\r\n );\r\n\r\n if (\r\n adapter.config.useLowVoltageBlock &&\r\n adapter.config.forceShutdownOnLowVoltage\r\n ) {\r\n setDischargeLimit(\r\n adapter,\r\n productKey,\r\n deviceKey,\r\n adapter.config.dischargeLimit ? adapter.config.dischargeLimit : 5\r\n );\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const checkDevicesServer = async (\r\n adapter: ZendureSolarflow\r\n): Promise<void> => {\r\n const channels = await adapter.getChannelsAsync();\r\n\r\n channels.forEach(async (channel) => {\r\n if (channel._id) {\r\n const splitted = channel._id.split(\".\");\r\n if (splitted.length == 4) {\r\n const productKey = splitted[2];\r\n const deviceKey = splitted[3];\r\n\r\n const currentServerState = await adapter.getStateAsync(\r\n `${productKey}.${deviceKey}.registeredServer`\r\n );\r\n\r\n if (\r\n currentServerState &&\r\n currentServerState.val &&\r\n currentServerState.val != adapter.config.server\r\n ) {\r\n adapter.log.warn(\r\n `Device with ProductKey '${productKey}' and DeviceKey '${deviceKey}' was configured on server '${currentServerState.val}', but adapter is configured to use server '${adapter.config.server}'! No data will be available!`\r\n );\r\n }\r\n }\r\n }\r\n });\r\n};\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|