iobroker.zendure-solarflow 2.0.4 → 3.0.0-alpha.3
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 +8 -5
- package/admin/build/index.js +35 -35
- package/admin/build/index.js.map +2 -2
- package/build/constants/constants.js +41 -0
- package/build/constants/constants.js.map +7 -0
- package/build/helpers/helpers.js +93 -96
- package/build/helpers/helpers.js.map +2 -2
- package/build/main.js +108 -180
- package/build/main.js.map +2 -2
- package/build/models/IDeviceAutomationPayload.js.map +1 -1
- package/build/models/{IPack2Device.js → IDevicePack.js} +3 -3
- package/build/models/IDevicePack.js.map +7 -0
- package/build/models/{ISolarFlowDeviceDetails.js → IHaDeviceListData.js} +3 -3
- package/build/models/IHaDeviceListData.js.map +7 -0
- package/build/models/{ISolarflowDevRegisterResponse.js → IZenHaDeviceDetails.js} +3 -3
- package/build/models/IZenHaDeviceDetails.js.map +7 -0
- package/build/models/{ISolarFlowPaths.js → IZenHaMqttData.js} +3 -3
- package/build/models/IZenHaMqttData.js.map +7 -0
- package/build/models/deviceModels/Ace1500.js +77 -0
- package/build/models/deviceModels/Ace1500.js.map +7 -0
- package/build/models/deviceModels/Aio2400.js +121 -0
- package/build/models/deviceModels/Aio2400.js.map +7 -0
- package/build/models/deviceModels/Hyper2000.js +200 -0
- package/build/models/deviceModels/Hyper2000.js.map +7 -0
- package/build/models/deviceModels/Sf2400Ac.js +146 -0
- package/build/models/deviceModels/Sf2400Ac.js.map +7 -0
- package/build/models/deviceModels/Sf800.js +144 -0
- package/build/models/deviceModels/Sf800.js.map +7 -0
- package/build/models/deviceModels/SfHub1200.js +179 -0
- package/build/models/deviceModels/SfHub1200.js.map +7 -0
- package/build/models/deviceModels/SfHub2000.js +177 -0
- package/build/models/deviceModels/SfHub2000.js.map +7 -0
- package/build/models/deviceModels/ZenHaDevice.js +1093 -0
- package/build/models/deviceModels/ZenHaDevice.js.map +7 -0
- package/build/services/jobSchedule.js +19 -58
- package/build/services/jobSchedule.js.map +2 -2
- package/build/services/mqttCloudZenService.js +79 -0
- package/build/services/mqttCloudZenService.js.map +7 -0
- package/build/services/mqttLocalService.js +70 -0
- package/build/services/mqttLocalService.js.map +7 -0
- package/build/services/mqttSharedService.js +432 -0
- package/build/services/mqttSharedService.js.map +7 -0
- package/build/services/zenWebService.js +84 -0
- package/build/services/zenWebService.js.map +7 -0
- package/io-package.json +70 -27
- package/package.json +2 -2
- package/build/constants/paths.js +0 -52
- package/build/constants/paths.js.map +0 -7
- package/build/helpers/createSolarFlowLocalStates.js +0 -113
- package/build/helpers/createSolarFlowLocalStates.js.map +0 -7
- package/build/helpers/createSolarFlowStates.js +0 -193
- package/build/helpers/createSolarFlowStates.js.map +0 -7
- package/build/models/IPack2Device.js.map +0 -7
- package/build/models/ISolarFlowDeviceDetails.js.map +0 -7
- package/build/models/ISolarFlowPaths.js.map +0 -7
- package/build/models/ISolarflowDevRegisterResponse.js.map +0 -7
- package/build/services/adapterService.js +0 -142
- package/build/services/adapterService.js.map +0 -7
- package/build/services/calculationService.js +0 -350
- package/build/services/calculationService.js.map +0 -7
- package/build/services/fallbackMqttService.js +0 -461
- package/build/services/fallbackMqttService.js.map +0 -7
- package/build/services/fallbackWebService.js +0 -80
- package/build/services/fallbackWebService.js.map +0 -7
- package/build/services/mqttService.js +0 -1545
- package/build/services/mqttService.js.map +0 -7
- package/build/services/webService.js +0 -119
- package/build/services/webService.js.map +0 -7
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var Ace1500_exports = {};
|
|
20
|
+
__export(Ace1500_exports, {
|
|
21
|
+
Ace1500: () => Ace1500
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(Ace1500_exports);
|
|
24
|
+
var import_aceControlStates = require("../../constants/aceControlStates");
|
|
25
|
+
var import_aceStates = require("../../constants/aceStates");
|
|
26
|
+
var import_ZenHaDevice = require("./ZenHaDevice");
|
|
27
|
+
class Ace1500 extends import_ZenHaDevice.ZenHaDevice {
|
|
28
|
+
constructor(_adapter, _productKey, _deviceKey, _productName, _deviceName, _zenHaDeviceDetails) {
|
|
29
|
+
super(
|
|
30
|
+
_adapter,
|
|
31
|
+
_productKey,
|
|
32
|
+
_deviceKey,
|
|
33
|
+
_productName,
|
|
34
|
+
_deviceName,
|
|
35
|
+
_zenHaDeviceDetails
|
|
36
|
+
);
|
|
37
|
+
this.maxInputLimit = 900;
|
|
38
|
+
this.maxOutputLimit = 900;
|
|
39
|
+
this.states = import_aceStates.aceStates;
|
|
40
|
+
this.controlStates = import_aceControlStates.aceControlStates;
|
|
41
|
+
}
|
|
42
|
+
setDcSwitch(dcSwitch) {
|
|
43
|
+
var _a;
|
|
44
|
+
if (this.adapter.mqttClient && this.productKey && this.deviceKey) {
|
|
45
|
+
const setDcSwitchContent = {
|
|
46
|
+
properties: { dcSwitch: dcSwitch ? 1 : 0 }
|
|
47
|
+
};
|
|
48
|
+
this.adapter.log.debug(
|
|
49
|
+
`[setDcSwitch] Set DC Switch for device ${this.deviceKey} to ${dcSwitch}!`
|
|
50
|
+
);
|
|
51
|
+
(_a = this.adapter.mqttClient) == null ? void 0 : _a.publish(
|
|
52
|
+
this.iotTopic,
|
|
53
|
+
JSON.stringify(setDcSwitchContent)
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
setAcSwitch(acSwitch) {
|
|
58
|
+
var _a;
|
|
59
|
+
if (this.adapter.mqttClient && this.productKey && this.deviceKey) {
|
|
60
|
+
const setAcSwitchContent = {
|
|
61
|
+
properties: { acSwitch: acSwitch ? 1 : 0 }
|
|
62
|
+
};
|
|
63
|
+
this.adapter.log.debug(
|
|
64
|
+
`[setAcSwitch] Set AC Switch for device ${this.deviceKey} to ${acSwitch}!`
|
|
65
|
+
);
|
|
66
|
+
(_a = this.adapter.mqttClient) == null ? void 0 : _a.publish(
|
|
67
|
+
this.iotTopic,
|
|
68
|
+
JSON.stringify(setAcSwitchContent)
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
74
|
+
0 && (module.exports = {
|
|
75
|
+
Ace1500
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=Ace1500.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/models/deviceModels/Ace1500.ts"],
|
|
4
|
+
"sourcesContent": ["import { aceControlStates } from \"../../constants/aceControlStates\";\nimport { aceStates } from \"../../constants/aceStates\";\nimport { ZendureSolarflow } from \"../../main\";\nimport { IZenHaDeviceDetails } from \"../IZenHaDeviceDetails\";\nimport { ZenHaDevice } from \"./ZenHaDevice\";\n\nexport class Ace1500 extends ZenHaDevice {\n maxInputLimit = 900;\n maxOutputLimit = 900;\n\n states = aceStates;\n controlStates = aceControlStates;\n\n public constructor(\n _adapter: ZendureSolarflow,\n _productKey: string,\n _deviceKey: string,\n _productName: string,\n _deviceName: string,\n _zenHaDeviceDetails?: IZenHaDeviceDetails\n ) {\n super(\n _adapter,\n _productKey,\n _deviceKey,\n _productName,\n _deviceName,\n _zenHaDeviceDetails\n );\n }\n\n public setDcSwitch(dcSwitch: boolean): void {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n const setDcSwitchContent = {\n properties: { dcSwitch: dcSwitch ? 1 : 0 },\n };\n this.adapter.log.debug(\n `[setDcSwitch] Set DC Switch for device ${this.deviceKey} to ${dcSwitch}!`\n );\n this.adapter.mqttClient?.publish(\n this.iotTopic,\n JSON.stringify(setDcSwitchContent)\n );\n }\n }\n\n public setAcSwitch(acSwitch: boolean): void {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n const setAcSwitchContent = {\n properties: { acSwitch: acSwitch ? 1 : 0 },\n };\n this.adapter.log.debug(\n `[setAcSwitch] Set AC Switch for device ${this.deviceKey} to ${acSwitch}!`\n );\n this.adapter.mqttClient?.publish(\n this.iotTopic,\n JSON.stringify(setAcSwitchContent)\n );\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAAiC;AACjC,uBAA0B;AAG1B,yBAA4B;AAErB,MAAM,gBAAgB,+BAAY;AAAA,EAOhC,YACL,UACA,aACA,YACA,cACA,aACA,qBACA;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AArBF,yBAAgB;AAChB,0BAAiB;AAEjB,kBAAS;AACT,yBAAgB;AAAA,EAkBhB;AAAA,EAEO,YAAY,UAAyB;AA/B9C;AAgCI,QAAI,KAAK,QAAQ,cAAc,KAAK,cAAc,KAAK,WAAW;AAChE,YAAM,qBAAqB;AAAA,QACzB,YAAY,EAAE,UAAU,WAAW,IAAI,EAAE;AAAA,MAC3C;AACA,WAAK,QAAQ,IAAI;AAAA,QACf,0CAA0C,KAAK,SAAS,OAAO,QAAQ;AAAA,MACzE;AACA,iBAAK,QAAQ,eAAb,mBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,KAAK,UAAU,kBAAkB;AAAA;AAAA,IAErC;AAAA,EACF;AAAA,EAEO,YAAY,UAAyB;AA9C9C;AA+CI,QAAI,KAAK,QAAQ,cAAc,KAAK,cAAc,KAAK,WAAW;AAChE,YAAM,qBAAqB;AAAA,QACzB,YAAY,EAAE,UAAU,WAAW,IAAI,EAAE;AAAA,MAC3C;AACA,WAAK,QAAQ,IAAI;AAAA,QACf,0CAA0C,KAAK,SAAS,OAAO,QAAQ;AAAA,MACzE;AACA,iBAAK,QAAQ,eAAb,mBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,KAAK,UAAU,kBAAkB;AAAA;AAAA,IAErC;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var Aio2400_exports = {};
|
|
20
|
+
__export(Aio2400_exports, {
|
|
21
|
+
Aio2400: () => Aio2400
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(Aio2400_exports);
|
|
24
|
+
var import_aioControlStates = require("../../constants/aioControlStates");
|
|
25
|
+
var import_aioStates = require("../../constants/aioStates");
|
|
26
|
+
var import_ZenHaDevice = require("./ZenHaDevice");
|
|
27
|
+
class Aio2400 extends import_ZenHaDevice.ZenHaDevice {
|
|
28
|
+
constructor(_adapter, _productKey, _deviceKey, _productName, _deviceName, _zenHaDeviceDetails) {
|
|
29
|
+
super(
|
|
30
|
+
_adapter,
|
|
31
|
+
_productKey,
|
|
32
|
+
_deviceKey,
|
|
33
|
+
_productName,
|
|
34
|
+
_deviceName,
|
|
35
|
+
_zenHaDeviceDetails
|
|
36
|
+
);
|
|
37
|
+
this.maxInputLimit = 0;
|
|
38
|
+
this.maxOutputLimit = 1200;
|
|
39
|
+
this.states = import_aioStates.aioStates;
|
|
40
|
+
this.controlStates = import_aioControlStates.aioControlStates;
|
|
41
|
+
}
|
|
42
|
+
async setDeviceAutomationInOutLimit(limit) {
|
|
43
|
+
var _a;
|
|
44
|
+
if (this.adapter.mqttClient && this.productKey && this.deviceKey) {
|
|
45
|
+
this.adapter.log.debug(
|
|
46
|
+
`[setDeviceAutomationInOutLimit] Set device Automation limit to ${limit}!`
|
|
47
|
+
);
|
|
48
|
+
if (limit) {
|
|
49
|
+
limit = Math.round(limit);
|
|
50
|
+
} else {
|
|
51
|
+
limit = 0;
|
|
52
|
+
}
|
|
53
|
+
if (this.adapter.config.useLowVoltageBlock) {
|
|
54
|
+
const lowVoltageBlockState = await this.adapter.getStateAsync(
|
|
55
|
+
this.productKey + "." + this.deviceKey + ".control.lowVoltageBlock"
|
|
56
|
+
);
|
|
57
|
+
if (lowVoltageBlockState && lowVoltageBlockState.val && lowVoltageBlockState.val == true && limit > 0) {
|
|
58
|
+
limit = 0;
|
|
59
|
+
}
|
|
60
|
+
const fullChargeNeeded = await this.adapter.getStateAsync(
|
|
61
|
+
this.productKey + "." + this.deviceKey + ".control.fullChargeNeeded"
|
|
62
|
+
);
|
|
63
|
+
if (fullChargeNeeded && fullChargeNeeded.val && fullChargeNeeded.val == true && limit > 0) {
|
|
64
|
+
limit = 0;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (limit < 0) {
|
|
68
|
+
this.adapter.log.debug(
|
|
69
|
+
`[setDeviceAutomationInOutLimit] AIO 2400 can not charge by AC!`
|
|
70
|
+
);
|
|
71
|
+
return;
|
|
72
|
+
} else {
|
|
73
|
+
if (limit > this.maxOutputLimit) {
|
|
74
|
+
limit = this.maxOutputLimit;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (limit < 100 && limit != 90 && limit != 60 && limit != 30 && limit != 0) {
|
|
78
|
+
if (limit < 100 && limit > 90) {
|
|
79
|
+
limit = 90;
|
|
80
|
+
} else if (limit > 60 && limit < 90) {
|
|
81
|
+
limit = 60;
|
|
82
|
+
} else if (limit > 30 && limit < 60) {
|
|
83
|
+
limit = 30;
|
|
84
|
+
} else if (limit < 30) {
|
|
85
|
+
limit = 30;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
this.adapter.msgCounter += 1;
|
|
89
|
+
const timestamp = /* @__PURE__ */ new Date();
|
|
90
|
+
timestamp.setMilliseconds(0);
|
|
91
|
+
let _arguments = [];
|
|
92
|
+
this.adapter.log.debug(
|
|
93
|
+
`[setDeviceAutomationInOutLimit] Using FEED IN variant of AIO device automation, as device '${this.productKey}' detected and limit is positive!`
|
|
94
|
+
);
|
|
95
|
+
_arguments = [
|
|
96
|
+
{
|
|
97
|
+
autoModelProgram: 2,
|
|
98
|
+
autoModelValue: limit,
|
|
99
|
+
msgType: 1,
|
|
100
|
+
autoModel: 8
|
|
101
|
+
}
|
|
102
|
+
];
|
|
103
|
+
const deviceAutomation = {
|
|
104
|
+
arguments: _arguments,
|
|
105
|
+
function: "deviceAutomation",
|
|
106
|
+
messageId: this.adapter.msgCounter,
|
|
107
|
+
deviceKey: this.deviceKey,
|
|
108
|
+
timestamp: timestamp.getTime() / 1e3
|
|
109
|
+
};
|
|
110
|
+
(_a = this.adapter.mqttClient) == null ? void 0 : _a.publish(
|
|
111
|
+
this.functionTopic,
|
|
112
|
+
JSON.stringify(deviceAutomation)
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
118
|
+
0 && (module.exports = {
|
|
119
|
+
Aio2400
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=Aio2400.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/models/deviceModels/Aio2400.ts"],
|
|
4
|
+
"sourcesContent": ["import { aioControlStates } from \"../../constants/aioControlStates\";\nimport { aioStates } from \"../../constants/aioStates\";\nimport { ZendureSolarflow } from \"../../main\";\nimport { IDeviceAutomationPayload } from \"../IDeviceAutomationPayload\";\nimport { IZenHaDeviceDetails } from \"../IZenHaDeviceDetails\";\nimport { ZenHaDevice } from \"./ZenHaDevice\";\n\nexport class Aio2400 extends ZenHaDevice {\n maxInputLimit = 0;\n maxOutputLimit = 1200;\n\n states = aioStates;\n controlStates = aioControlStates;\n\n public constructor(\n _adapter: ZendureSolarflow,\n _productKey: string,\n _deviceKey: string,\n _productName: string,\n _deviceName: string,\n _zenHaDeviceDetails?: IZenHaDeviceDetails\n ) {\n super(\n _adapter,\n _productKey,\n _deviceKey,\n _productName,\n _deviceName,\n _zenHaDeviceDetails\n );\n }\n\n public async setDeviceAutomationInOutLimit(\n limit: number // can be negative, negative will trigger charging mode\n ): Promise<void> {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n this.adapter.log.debug(\n `[setDeviceAutomationInOutLimit] Set device Automation limit to ${limit}!`\n );\n\n if (limit) {\n limit = Math.round(limit);\n } else {\n limit = 0;\n }\n\n if (this.adapter.config.useLowVoltageBlock) {\n const lowVoltageBlockState = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.lowVoltageBlock\"\n );\n if (\n lowVoltageBlockState &&\n lowVoltageBlockState.val &&\n lowVoltageBlockState.val == true &&\n limit > 0\n ) {\n limit = 0;\n }\n\n const fullChargeNeeded = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.fullChargeNeeded\"\n );\n\n if (\n fullChargeNeeded &&\n fullChargeNeeded.val &&\n fullChargeNeeded.val == true &&\n limit > 0\n ) {\n limit = 0;\n }\n }\n\n if (limit < 0) {\n this.adapter.log.debug(\n `[setDeviceAutomationInOutLimit] AIO 2400 can not charge by AC!`\n );\n return;\n } else {\n if (limit > this.maxOutputLimit) {\n limit = this.maxOutputLimit;\n }\n }\n\n if (\n limit < 100 &&\n limit != 90 &&\n limit != 60 &&\n limit != 30 &&\n limit != 0\n ) {\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 (limit < 100 && limit > 90) {\n limit = 90;\n } else if (limit > 60 && limit < 90) {\n limit = 60;\n } else if (limit > 30 && limit < 60) {\n limit = 30;\n } else if (limit < 30) {\n limit = 30;\n }\n }\n\n this.adapter.msgCounter += 1;\n\n const timestamp = new Date();\n timestamp.setMilliseconds(0);\n\n let _arguments: IDeviceAutomationPayload[] = [];\n\n // Output\n this.adapter.log.debug(\n `[setDeviceAutomationInOutLimit] Using FEED IN variant of AIO device automation, as device '${this.productKey}' detected and limit is positive!`\n );\n _arguments = [\n {\n autoModelProgram: 2,\n autoModelValue: limit,\n msgType: 1,\n autoModel: 8,\n },\n ];\n\n const deviceAutomation = {\n arguments: _arguments,\n function: \"deviceAutomation\",\n messageId: this.adapter.msgCounter,\n deviceKey: this.deviceKey,\n timestamp: timestamp.getTime() / 1000,\n };\n this.adapter.mqttClient?.publish(\n this.functionTopic,\n JSON.stringify(deviceAutomation)\n );\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAAiC;AACjC,uBAA0B;AAI1B,yBAA4B;AAErB,MAAM,gBAAgB,+BAAY;AAAA,EAOhC,YACL,UACA,aACA,YACA,cACA,aACA,qBACA;AACA;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AArBF,yBAAgB;AAChB,0BAAiB;AAEjB,kBAAS;AACT,yBAAgB;AAAA,EAkBhB;AAAA,EAEA,MAAa,8BACX,OACe;AAlCnB;AAmCI,QAAI,KAAK,QAAQ,cAAc,KAAK,cAAc,KAAK,WAAW;AAChE,WAAK,QAAQ,IAAI;AAAA,QACf,kEAAkE,KAAK;AAAA,MACzE;AAEA,UAAI,OAAO;AACT,gBAAQ,KAAK,MAAM,KAAK;AAAA,MAC1B,OAAO;AACL,gBAAQ;AAAA,MACV;AAEA,UAAI,KAAK,QAAQ,OAAO,oBAAoB;AAC1C,cAAM,uBAAuB,MAAM,KAAK,QAAQ;AAAA,UAC9C,KAAK,aAAa,MAAM,KAAK,YAAY;AAAA,QAC3C;AACA,YACE,wBACA,qBAAqB,OACrB,qBAAqB,OAAO,QAC5B,QAAQ,GACR;AACA,kBAAQ;AAAA,QACV;AAEA,cAAM,mBAAmB,MAAM,KAAK,QAAQ;AAAA,UAC1C,KAAK,aAAa,MAAM,KAAK,YAAY;AAAA,QAC3C;AAEA,YACE,oBACA,iBAAiB,OACjB,iBAAiB,OAAO,QACxB,QAAQ,GACR;AACA,kBAAQ;AAAA,QACV;AAAA,MACF;AAEA,UAAI,QAAQ,GAAG;AACb,aAAK,QAAQ,IAAI;AAAA,UACf;AAAA,QACF;AACA;AAAA,MACF,OAAO;AACL,YAAI,QAAQ,KAAK,gBAAgB;AAC/B,kBAAQ,KAAK;AAAA,QACf;AAAA,MACF;AAEA,UACE,QAAQ,OACR,SAAS,MACT,SAAS,MACT,SAAS,MACT,SAAS,GACT;AAEA,YAAI,QAAQ,OAAO,QAAQ,IAAI;AAC7B,kBAAQ;AAAA,QACV,WAAW,QAAQ,MAAM,QAAQ,IAAI;AACnC,kBAAQ;AAAA,QACV,WAAW,QAAQ,MAAM,QAAQ,IAAI;AACnC,kBAAQ;AAAA,QACV,WAAW,QAAQ,IAAI;AACrB,kBAAQ;AAAA,QACV;AAAA,MACF;AAEA,WAAK,QAAQ,cAAc;AAE3B,YAAM,YAAY,oBAAI,KAAK;AAC3B,gBAAU,gBAAgB,CAAC;AAE3B,UAAI,aAAyC,CAAC;AAG9C,WAAK,QAAQ,IAAI;AAAA,QACf,8FAA8F,KAAK,UAAU;AAAA,MAC/G;AACA,mBAAa;AAAA,QACX;AAAA,UACE,kBAAkB;AAAA,UAClB,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,WAAW;AAAA,QACb;AAAA,MACF;AAEA,YAAM,mBAAmB;AAAA,QACvB,WAAW;AAAA,QACX,UAAU;AAAA,QACV,WAAW,KAAK,QAAQ;AAAA,QACxB,WAAW,KAAK;AAAA,QAChB,WAAW,UAAU,QAAQ,IAAI;AAAA,MACnC;AACA,iBAAK,QAAQ,eAAb,mBAAyB;AAAA,QACvB,KAAK;AAAA,QACL,KAAK,UAAU,gBAAgB;AAAA;AAAA,IAEnC;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var Hyper2000_exports = {};
|
|
20
|
+
__export(Hyper2000_exports, {
|
|
21
|
+
Hyper2000: () => Hyper2000
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(Hyper2000_exports);
|
|
24
|
+
var import_hyperControlStates = require("../../constants/hyperControlStates");
|
|
25
|
+
var import_hyperStates = require("../../constants/hyperStates");
|
|
26
|
+
var import_ZenHaDevice = require("./ZenHaDevice");
|
|
27
|
+
class Hyper2000 extends import_ZenHaDevice.ZenHaDevice {
|
|
28
|
+
constructor(_adapter, _productKey, _deviceKey, _productName, _deviceName, _zenHaDeviceDetails) {
|
|
29
|
+
super(
|
|
30
|
+
_adapter,
|
|
31
|
+
_productKey,
|
|
32
|
+
_deviceKey,
|
|
33
|
+
_productName,
|
|
34
|
+
_deviceName,
|
|
35
|
+
_zenHaDeviceDetails
|
|
36
|
+
);
|
|
37
|
+
this.maxInputLimit = -1200;
|
|
38
|
+
this.maxOutputLimit = 1200;
|
|
39
|
+
this.states = import_hyperStates.hyperStates;
|
|
40
|
+
this.controlStates = import_hyperControlStates.hyperControlStates;
|
|
41
|
+
}
|
|
42
|
+
async setAcMode(acMode) {
|
|
43
|
+
var _a;
|
|
44
|
+
if (this.adapter.mqttClient && this.productKey && this.deviceKey) {
|
|
45
|
+
if (acMode >= 0 && acMode <= 3) {
|
|
46
|
+
const setAcMode = { properties: { acMode } };
|
|
47
|
+
this.adapter.log.debug(`[setAcMode] Set AC mode to ${acMode}!`);
|
|
48
|
+
(_a = this.adapter.mqttClient) == null ? void 0 : _a.publish(
|
|
49
|
+
this.iotTopic,
|
|
50
|
+
JSON.stringify(setAcMode)
|
|
51
|
+
);
|
|
52
|
+
const smartMode = await this.adapter.getStateAsync(
|
|
53
|
+
this.productKey + "." + this.deviceKey + ".control.smartMode"
|
|
54
|
+
);
|
|
55
|
+
if (smartMode && !smartMode.val) {
|
|
56
|
+
this.adapter.log.warn(
|
|
57
|
+
`[setAcMode] AC mode was switched and smartMode is false - changes will be written to flash memory. In the worst case, the device may break or changes may no longer be saved!`
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
this.adapter.log.error(
|
|
62
|
+
`[setAcMode] AC mode must be a value between 0 and 3!`
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
setAcSwitch(acSwitch) {
|
|
68
|
+
var _a;
|
|
69
|
+
if (this.adapter.mqttClient && this.productKey && this.deviceKey) {
|
|
70
|
+
const setAcSwitchContent = {
|
|
71
|
+
properties: { acSwitch: acSwitch ? 1 : 0 }
|
|
72
|
+
};
|
|
73
|
+
this.adapter.log.debug(
|
|
74
|
+
`[setAcSwitch] Set AC Switch for device ${this.deviceKey} to ${acSwitch}!`
|
|
75
|
+
);
|
|
76
|
+
(_a = this.adapter.mqttClient) == null ? void 0 : _a.publish(
|
|
77
|
+
this.iotTopic,
|
|
78
|
+
JSON.stringify(setAcSwitchContent)
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async setDeviceAutomationInOutLimit(limit) {
|
|
83
|
+
var _a;
|
|
84
|
+
if (this.adapter.mqttClient && this.productKey && this.deviceKey) {
|
|
85
|
+
this.adapter.log.debug(
|
|
86
|
+
`[setDeviceAutomationInOutLimit] Set device Automation limit to ${limit}!`
|
|
87
|
+
);
|
|
88
|
+
if (limit) {
|
|
89
|
+
limit = Math.round(limit);
|
|
90
|
+
} else {
|
|
91
|
+
limit = 0;
|
|
92
|
+
}
|
|
93
|
+
if (this.adapter.config.useLowVoltageBlock) {
|
|
94
|
+
const lowVoltageBlockState = await this.adapter.getStateAsync(
|
|
95
|
+
this.productKey + "." + this.deviceKey + ".control.lowVoltageBlock"
|
|
96
|
+
);
|
|
97
|
+
if (lowVoltageBlockState && lowVoltageBlockState.val && lowVoltageBlockState.val == true && limit > 0) {
|
|
98
|
+
limit = 0;
|
|
99
|
+
}
|
|
100
|
+
const fullChargeNeeded = await this.adapter.getStateAsync(
|
|
101
|
+
this.productKey + "." + this.deviceKey + ".control.fullChargeNeeded"
|
|
102
|
+
);
|
|
103
|
+
if (fullChargeNeeded && fullChargeNeeded.val && fullChargeNeeded.val == true && limit > 0) {
|
|
104
|
+
limit = 0;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (limit < 0) {
|
|
108
|
+
if (limit < this.maxInputLimit) {
|
|
109
|
+
limit = this.maxInputLimit;
|
|
110
|
+
}
|
|
111
|
+
} else {
|
|
112
|
+
if (limit > this.maxOutputLimit) {
|
|
113
|
+
limit = this.maxOutputLimit;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
this.adapter.msgCounter += 1;
|
|
117
|
+
const timestamp = /* @__PURE__ */ new Date();
|
|
118
|
+
timestamp.setMilliseconds(0);
|
|
119
|
+
let _arguments = [];
|
|
120
|
+
if (limit < 0) {
|
|
121
|
+
this.adapter.log.debug(
|
|
122
|
+
`[setDeviceAutomationInOutLimit] Using CHARGE variant of HYPER device automation, as device '${this.deviceKey}' detected and limit is negative!`
|
|
123
|
+
);
|
|
124
|
+
_arguments = [
|
|
125
|
+
{
|
|
126
|
+
autoModelProgram: 1,
|
|
127
|
+
autoModelValue: {
|
|
128
|
+
chargingType: 1,
|
|
129
|
+
price: 2,
|
|
130
|
+
chargingPower: -limit,
|
|
131
|
+
prices: [
|
|
132
|
+
1,
|
|
133
|
+
1,
|
|
134
|
+
1,
|
|
135
|
+
1,
|
|
136
|
+
1,
|
|
137
|
+
1,
|
|
138
|
+
1,
|
|
139
|
+
1,
|
|
140
|
+
1,
|
|
141
|
+
1,
|
|
142
|
+
1,
|
|
143
|
+
1,
|
|
144
|
+
1,
|
|
145
|
+
1,
|
|
146
|
+
1,
|
|
147
|
+
1,
|
|
148
|
+
1,
|
|
149
|
+
1,
|
|
150
|
+
1,
|
|
151
|
+
1,
|
|
152
|
+
1,
|
|
153
|
+
1,
|
|
154
|
+
1,
|
|
155
|
+
1
|
|
156
|
+
],
|
|
157
|
+
outPower: 0,
|
|
158
|
+
freq: 0
|
|
159
|
+
},
|
|
160
|
+
msgType: 1,
|
|
161
|
+
autoModel: 8
|
|
162
|
+
}
|
|
163
|
+
];
|
|
164
|
+
} else {
|
|
165
|
+
this.adapter.log.debug(
|
|
166
|
+
`[setDeviceAutomationInOutLimit] Using FEED IN variant of HYPER device automation, as device '${this.productName}' detected and limit is positive!`
|
|
167
|
+
);
|
|
168
|
+
_arguments = [
|
|
169
|
+
{
|
|
170
|
+
autoModelProgram: 2,
|
|
171
|
+
autoModelValue: {
|
|
172
|
+
chargingType: 0,
|
|
173
|
+
chargingPower: 0,
|
|
174
|
+
freq: 0,
|
|
175
|
+
outPower: limit
|
|
176
|
+
},
|
|
177
|
+
msgType: 1,
|
|
178
|
+
autoModel: 8
|
|
179
|
+
}
|
|
180
|
+
];
|
|
181
|
+
}
|
|
182
|
+
const deviceAutomation = {
|
|
183
|
+
arguments: _arguments,
|
|
184
|
+
function: "deviceAutomation",
|
|
185
|
+
messageId: this.adapter.msgCounter,
|
|
186
|
+
deviceKey: this.deviceKey,
|
|
187
|
+
timestamp: timestamp.getTime() / 1e3
|
|
188
|
+
};
|
|
189
|
+
(_a = this.adapter.mqttClient) == null ? void 0 : _a.publish(
|
|
190
|
+
this.functionTopic,
|
|
191
|
+
JSON.stringify(deviceAutomation)
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
197
|
+
0 && (module.exports = {
|
|
198
|
+
Hyper2000
|
|
199
|
+
});
|
|
200
|
+
//# sourceMappingURL=Hyper2000.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/models/deviceModels/Hyper2000.ts"],
|
|
4
|
+
"sourcesContent": ["import { hyperControlStates } from \"../../constants/hyperControlStates\";\nimport { hyperStates } from \"../../constants/hyperStates\";\nimport { ZendureSolarflow } from \"../../main\";\nimport { IDeviceAutomationPayload } from \"../IDeviceAutomationPayload\";\nimport { IZenHaDeviceDetails } from \"../IZenHaDeviceDetails\";\nimport { ZenHaDevice } from \"./ZenHaDevice\";\n\nexport class Hyper2000 extends ZenHaDevice {\n maxInputLimit = -1200;\n maxOutputLimit = 1200;\n\n states = hyperStates;\n controlStates = hyperControlStates;\n\n public constructor(\n _adapter: ZendureSolarflow,\n _productKey: string,\n _deviceKey: string,\n _productName: string,\n _deviceName: string,\n _zenHaDeviceDetails?: IZenHaDeviceDetails\n ) {\n super(\n _adapter,\n _productKey,\n _deviceKey,\n _productName,\n _deviceName,\n _zenHaDeviceDetails\n );\n }\n\n public async setAcMode(acMode: number): Promise<void> {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n if (acMode >= 0 && acMode <= 3) {\n const setAcMode = { properties: { acMode: acMode } };\n this.adapter.log.debug(`[setAcMode] Set AC mode to ${acMode}!`);\n this.adapter.mqttClient?.publish(\n this.iotTopic,\n JSON.stringify(setAcMode)\n );\n\n // Check if device is HUB, then check if smartMode is false - if so send a warning to log!\n const smartMode = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.smartMode\"\n );\n\n if (smartMode && !smartMode.val) {\n this.adapter.log.warn(\n `[setAcMode] AC mode was switched and smartMode is false - changes will be written to flash memory. In the worst case, the device may break or changes may no longer be saved!`\n );\n }\n } else {\n this.adapter.log.error(\n `[setAcMode] AC mode must be a value between 0 and 3!`\n );\n }\n }\n }\n\n public setAcSwitch(acSwitch: boolean): void {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n const setAcSwitchContent = {\n properties: { acSwitch: acSwitch ? 1 : 0 },\n };\n this.adapter.log.debug(\n `[setAcSwitch] Set AC Switch for device ${this.deviceKey} to ${acSwitch}!`\n );\n this.adapter.mqttClient?.publish(\n this.iotTopic,\n JSON.stringify(setAcSwitchContent)\n );\n }\n }\n\n public async setDeviceAutomationInOutLimit(\n limit: number // can be negative, negative will trigger charging mode\n ): Promise<void> {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n this.adapter.log.debug(\n `[setDeviceAutomationInOutLimit] Set device Automation limit to ${limit}!`\n );\n\n if (limit) {\n limit = Math.round(limit);\n } else {\n limit = 0;\n }\n\n if (this.adapter.config.useLowVoltageBlock) {\n const lowVoltageBlockState = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.lowVoltageBlock\"\n );\n if (\n lowVoltageBlockState &&\n lowVoltageBlockState.val &&\n lowVoltageBlockState.val == true &&\n limit > 0\n ) {\n limit = 0;\n }\n\n const fullChargeNeeded = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.fullChargeNeeded\"\n );\n\n if (\n fullChargeNeeded &&\n fullChargeNeeded.val &&\n fullChargeNeeded.val == true &&\n limit > 0\n ) {\n limit = 0;\n }\n }\n\n if (limit < 0) {\n // Get input limit, make number positive and the new value negative\n if (limit < this.maxInputLimit) {\n limit = this.maxInputLimit;\n }\n } else {\n if (limit > this.maxOutputLimit) {\n limit = this.maxOutputLimit;\n }\n }\n\n this.adapter.msgCounter += 1;\n\n const timestamp = new Date();\n timestamp.setMilliseconds(0);\n\n let _arguments: IDeviceAutomationPayload[] = [];\n\n if (limit < 0) {\n this.adapter.log.debug(\n `[setDeviceAutomationInOutLimit] Using CHARGE variant of HYPER device automation, as device '${this.deviceKey}' detected and limit is negative!`\n );\n // Input / Charge\n _arguments = [\n {\n autoModelProgram: 1,\n autoModelValue: {\n chargingType: 1,\n price: 2,\n chargingPower: -limit,\n prices: [\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n 1, 1, 1,\n ],\n outPower: 0,\n freq: 0,\n },\n msgType: 1,\n autoModel: 8,\n },\n ];\n } else {\n this.adapter.log.debug(\n `[setDeviceAutomationInOutLimit] Using FEED IN variant of HYPER device automation, as device '${this.productName}' detected and limit is positive!`\n );\n // Output\n _arguments = [\n {\n autoModelProgram: 2,\n autoModelValue: {\n chargingType: 0,\n chargingPower: 0,\n freq: 0,\n outPower: limit,\n },\n msgType: 1,\n autoModel: 8,\n },\n ];\n }\n\n const deviceAutomation = {\n arguments: _arguments,\n function: \"deviceAutomation\",\n messageId: this.adapter.msgCounter,\n deviceKey: this.deviceKey,\n timestamp: timestamp.getTime() / 1000,\n };\n this.adapter.mqttClient?.publish(\n this.functionTopic,\n JSON.stringify(deviceAutomation)\n );\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var Sf2400Ac_exports = {};
|
|
20
|
+
__export(Sf2400Ac_exports, {
|
|
21
|
+
Sf2400Ac: () => Sf2400Ac
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(Sf2400Ac_exports);
|
|
24
|
+
var import_ac2400ControlStates = require("../../constants/ac2400ControlStates");
|
|
25
|
+
var import_ac2400States = require("../../constants/ac2400States");
|
|
26
|
+
var import_ZenHaDevice = require("./ZenHaDevice");
|
|
27
|
+
class Sf2400Ac extends import_ZenHaDevice.ZenHaDevice {
|
|
28
|
+
constructor(_adapter, _productKey, _deviceKey, _productName, _deviceName, _zenHaDeviceDetails) {
|
|
29
|
+
super(
|
|
30
|
+
_adapter,
|
|
31
|
+
_productKey,
|
|
32
|
+
_deviceKey,
|
|
33
|
+
_productName,
|
|
34
|
+
_deviceName,
|
|
35
|
+
_zenHaDeviceDetails
|
|
36
|
+
);
|
|
37
|
+
this.maxInputLimit = 2400;
|
|
38
|
+
this.maxOutputLimit = 2400;
|
|
39
|
+
this.states = import_ac2400States.ac2400States;
|
|
40
|
+
this.controlStates = import_ac2400ControlStates.ac2400ControlStates;
|
|
41
|
+
}
|
|
42
|
+
async setAcMode(acMode) {
|
|
43
|
+
var _a;
|
|
44
|
+
if (this.adapter.mqttClient && this.productKey && this.deviceKey) {
|
|
45
|
+
if (acMode >= 0 && acMode <= 3) {
|
|
46
|
+
const setAcMode = { properties: { acMode } };
|
|
47
|
+
this.adapter.log.debug(`[setAcMode] Set AC mode to ${acMode}!`);
|
|
48
|
+
(_a = this.adapter.mqttClient) == null ? void 0 : _a.publish(
|
|
49
|
+
this.iotTopic,
|
|
50
|
+
JSON.stringify(setAcMode)
|
|
51
|
+
);
|
|
52
|
+
const smartMode = await this.adapter.getStateAsync(
|
|
53
|
+
this.productKey + "." + this.deviceKey + ".control.smartMode"
|
|
54
|
+
);
|
|
55
|
+
if (smartMode && !smartMode.val) {
|
|
56
|
+
this.adapter.log.warn(
|
|
57
|
+
`[setAcMode] AC mode was switched and smartMode is false - changes will be written to flash memory. In the worst case, the device may break or changes may no longer be saved!`
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
this.adapter.log.error(
|
|
62
|
+
`[setAcMode] AC mode must be a value between 0 and 3!`
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
setAcSwitch(acSwitch) {
|
|
68
|
+
var _a;
|
|
69
|
+
if (this.adapter.mqttClient && this.productKey && this.deviceKey) {
|
|
70
|
+
const setAcSwitchContent = {
|
|
71
|
+
properties: { acSwitch: acSwitch ? 1 : 0 }
|
|
72
|
+
};
|
|
73
|
+
this.adapter.log.debug(
|
|
74
|
+
`[setAcSwitch] Set AC Switch for device ${this.deviceKey} to ${acSwitch}!`
|
|
75
|
+
);
|
|
76
|
+
(_a = this.adapter.mqttClient) == null ? void 0 : _a.publish(
|
|
77
|
+
this.iotTopic,
|
|
78
|
+
JSON.stringify(setAcSwitchContent)
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async setDeviceAutomationInOutLimit(limit) {
|
|
83
|
+
var _a;
|
|
84
|
+
if (this.adapter.mqttClient && this.productKey && this.deviceKey) {
|
|
85
|
+
this.adapter.log.debug(
|
|
86
|
+
`[setDeviceAutomationInOutLimit] Set device Automation limit to ${limit}!`
|
|
87
|
+
);
|
|
88
|
+
if (limit) {
|
|
89
|
+
limit = Math.round(limit);
|
|
90
|
+
} else {
|
|
91
|
+
limit = 0;
|
|
92
|
+
}
|
|
93
|
+
if (this.adapter.config.useLowVoltageBlock) {
|
|
94
|
+
const lowVoltageBlockState = await this.adapter.getStateAsync(
|
|
95
|
+
this.productKey + "." + this.deviceKey + ".control.lowVoltageBlock"
|
|
96
|
+
);
|
|
97
|
+
if (lowVoltageBlockState && lowVoltageBlockState.val && lowVoltageBlockState.val == true && limit > 0) {
|
|
98
|
+
limit = 0;
|
|
99
|
+
}
|
|
100
|
+
const fullChargeNeeded = await this.adapter.getStateAsync(
|
|
101
|
+
this.productKey + "." + this.deviceKey + ".control.fullChargeNeeded"
|
|
102
|
+
);
|
|
103
|
+
if (fullChargeNeeded && fullChargeNeeded.val && fullChargeNeeded.val == true && limit > 0) {
|
|
104
|
+
limit = 0;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
if (limit < 0) {
|
|
108
|
+
if (limit < this.maxInputLimit) {
|
|
109
|
+
limit = this.maxInputLimit;
|
|
110
|
+
}
|
|
111
|
+
} else {
|
|
112
|
+
if (limit > this.maxOutputLimit) {
|
|
113
|
+
limit = this.maxOutputLimit;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
this.adapter.msgCounter += 1;
|
|
117
|
+
const timestamp = /* @__PURE__ */ new Date();
|
|
118
|
+
timestamp.setMilliseconds(0);
|
|
119
|
+
this.adapter.log.debug(
|
|
120
|
+
`[setDeviceAutomationInOutLimit] Using HEMS Variant of device automation, as deviceKey '${this.deviceKey}' detected!`
|
|
121
|
+
);
|
|
122
|
+
const _arguments = {
|
|
123
|
+
outputPower: limit > 0 ? limit : 0,
|
|
124
|
+
chargeState: limit > 0 ? 0 : 1,
|
|
125
|
+
chargePower: limit > 0 ? 0 : -limit,
|
|
126
|
+
mode: 9
|
|
127
|
+
};
|
|
128
|
+
const hemsEP = {
|
|
129
|
+
arguments: _arguments,
|
|
130
|
+
function: "hemsEP",
|
|
131
|
+
messageId: this.adapter.msgCounter,
|
|
132
|
+
deviceKey: this.deviceKey,
|
|
133
|
+
timestamp: timestamp.getTime() / 1e3
|
|
134
|
+
};
|
|
135
|
+
(_a = this.adapter.mqttClient) == null ? void 0 : _a.publish(
|
|
136
|
+
this.functionTopic,
|
|
137
|
+
JSON.stringify(hemsEP)
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
143
|
+
0 && (module.exports = {
|
|
144
|
+
Sf2400Ac
|
|
145
|
+
});
|
|
146
|
+
//# sourceMappingURL=Sf2400Ac.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/models/deviceModels/Sf2400Ac.ts"],
|
|
4
|
+
"sourcesContent": ["import { ac2400ControlStates } from \"../../constants/ac2400ControlStates\";\nimport { ac2400States } from \"../../constants/ac2400States\";\nimport { ZendureSolarflow } from \"../../main\";\nimport { IHemsEpPayload } from \"../IDeviceAutomationPayload\";\nimport { IZenHaDeviceDetails } from \"../IZenHaDeviceDetails\";\nimport { ZenHaDevice } from \"./ZenHaDevice\";\n\nexport class Sf2400Ac extends ZenHaDevice {\n maxInputLimit = 2400;\n maxOutputLimit = 2400;\n\n states = ac2400States;\n controlStates = ac2400ControlStates;\n\n public constructor(\n _adapter: ZendureSolarflow,\n _productKey: string,\n _deviceKey: string,\n _productName: string,\n _deviceName: string,\n _zenHaDeviceDetails?: IZenHaDeviceDetails\n ) {\n super(\n _adapter,\n _productKey,\n _deviceKey,\n _productName,\n _deviceName,\n _zenHaDeviceDetails\n );\n }\n\n public async setAcMode(acMode: number): Promise<void> {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n if (acMode >= 0 && acMode <= 3) {\n const setAcMode = { properties: { acMode: acMode } };\n this.adapter.log.debug(`[setAcMode] Set AC mode to ${acMode}!`);\n this.adapter.mqttClient?.publish(\n this.iotTopic,\n JSON.stringify(setAcMode)\n );\n\n // Check if device is HUB, then check if smartMode is false - if so send a warning to log!\n const smartMode = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.smartMode\"\n );\n\n if (smartMode && !smartMode.val) {\n this.adapter.log.warn(\n `[setAcMode] AC mode was switched and smartMode is false - changes will be written to flash memory. In the worst case, the device may break or changes may no longer be saved!`\n );\n }\n } else {\n this.adapter.log.error(\n `[setAcMode] AC mode must be a value between 0 and 3!`\n );\n }\n }\n }\n\n public setAcSwitch(acSwitch: boolean): void {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n const setAcSwitchContent = {\n properties: { acSwitch: acSwitch ? 1 : 0 },\n };\n this.adapter.log.debug(\n `[setAcSwitch] Set AC Switch for device ${this.deviceKey} to ${acSwitch}!`\n );\n this.adapter.mqttClient?.publish(\n this.iotTopic,\n JSON.stringify(setAcSwitchContent)\n );\n }\n }\n\n public async setDeviceAutomationInOutLimit(\n limit: number // can be negative, negative will trigger charging mode\n ): Promise<void> {\n if (this.adapter.mqttClient && this.productKey && this.deviceKey) {\n this.adapter.log.debug(\n `[setDeviceAutomationInOutLimit] Set device Automation limit to ${limit}!`\n );\n\n if (limit) {\n limit = Math.round(limit);\n } else {\n limit = 0;\n }\n\n if (this.adapter.config.useLowVoltageBlock) {\n const lowVoltageBlockState = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.lowVoltageBlock\"\n );\n if (\n lowVoltageBlockState &&\n lowVoltageBlockState.val &&\n lowVoltageBlockState.val == true &&\n limit > 0\n ) {\n limit = 0;\n }\n\n const fullChargeNeeded = await this.adapter.getStateAsync(\n this.productKey + \".\" + this.deviceKey + \".control.fullChargeNeeded\"\n );\n\n if (\n fullChargeNeeded &&\n fullChargeNeeded.val &&\n fullChargeNeeded.val == true &&\n limit > 0\n ) {\n limit = 0;\n }\n }\n\n if (limit < 0) {\n // Get input limit, make number positive and the new value negative\n if (limit < this.maxInputLimit) {\n limit = this.maxInputLimit;\n }\n } else {\n if (limit > this.maxOutputLimit) {\n limit = this.maxOutputLimit;\n }\n }\n\n this.adapter.msgCounter += 1;\n\n const timestamp = new Date();\n timestamp.setMilliseconds(0);\n\n // Device Automation for Solarflow 2400 AC and Solarflow 800\n this.adapter.log.debug(\n `[setDeviceAutomationInOutLimit] Using HEMS Variant of device automation, as deviceKey '${this.deviceKey}' detected!`\n );\n\n // HEMS Variante\n const _arguments: IHemsEpPayload = {\n outputPower: limit > 0 ? limit : 0,\n chargeState: limit > 0 ? 0 : 1,\n chargePower: limit > 0 ? 0 : -limit,\n mode: 9,\n };\n\n const hemsEP = {\n arguments: _arguments,\n function: \"hemsEP\",\n messageId: this.adapter.msgCounter,\n deviceKey: this.deviceKey,\n timestamp: timestamp.getTime() / 1000,\n };\n this.adapter.mqttClient?.publish(\n this.functionTopic,\n JSON.stringify(hemsEP)\n );\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|