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.
Files changed (68) hide show
  1. package/README.md +8 -5
  2. package/admin/build/index.js +35 -35
  3. package/admin/build/index.js.map +2 -2
  4. package/build/constants/constants.js +41 -0
  5. package/build/constants/constants.js.map +7 -0
  6. package/build/helpers/helpers.js +93 -96
  7. package/build/helpers/helpers.js.map +2 -2
  8. package/build/main.js +108 -180
  9. package/build/main.js.map +2 -2
  10. package/build/models/IDeviceAutomationPayload.js.map +1 -1
  11. package/build/models/{IPack2Device.js → IDevicePack.js} +3 -3
  12. package/build/models/IDevicePack.js.map +7 -0
  13. package/build/models/{ISolarFlowDeviceDetails.js → IHaDeviceListData.js} +3 -3
  14. package/build/models/IHaDeviceListData.js.map +7 -0
  15. package/build/models/{ISolarflowDevRegisterResponse.js → IZenHaDeviceDetails.js} +3 -3
  16. package/build/models/IZenHaDeviceDetails.js.map +7 -0
  17. package/build/models/{ISolarFlowPaths.js → IZenHaMqttData.js} +3 -3
  18. package/build/models/IZenHaMqttData.js.map +7 -0
  19. package/build/models/deviceModels/Ace1500.js +77 -0
  20. package/build/models/deviceModels/Ace1500.js.map +7 -0
  21. package/build/models/deviceModels/Aio2400.js +121 -0
  22. package/build/models/deviceModels/Aio2400.js.map +7 -0
  23. package/build/models/deviceModels/Hyper2000.js +200 -0
  24. package/build/models/deviceModels/Hyper2000.js.map +7 -0
  25. package/build/models/deviceModels/Sf2400Ac.js +146 -0
  26. package/build/models/deviceModels/Sf2400Ac.js.map +7 -0
  27. package/build/models/deviceModels/Sf800.js +144 -0
  28. package/build/models/deviceModels/Sf800.js.map +7 -0
  29. package/build/models/deviceModels/SfHub1200.js +179 -0
  30. package/build/models/deviceModels/SfHub1200.js.map +7 -0
  31. package/build/models/deviceModels/SfHub2000.js +177 -0
  32. package/build/models/deviceModels/SfHub2000.js.map +7 -0
  33. package/build/models/deviceModels/ZenHaDevice.js +1093 -0
  34. package/build/models/deviceModels/ZenHaDevice.js.map +7 -0
  35. package/build/services/jobSchedule.js +19 -58
  36. package/build/services/jobSchedule.js.map +2 -2
  37. package/build/services/mqttCloudZenService.js +79 -0
  38. package/build/services/mqttCloudZenService.js.map +7 -0
  39. package/build/services/mqttLocalService.js +70 -0
  40. package/build/services/mqttLocalService.js.map +7 -0
  41. package/build/services/mqttSharedService.js +432 -0
  42. package/build/services/mqttSharedService.js.map +7 -0
  43. package/build/services/zenWebService.js +84 -0
  44. package/build/services/zenWebService.js.map +7 -0
  45. package/io-package.json +70 -27
  46. package/package.json +2 -2
  47. package/build/constants/paths.js +0 -52
  48. package/build/constants/paths.js.map +0 -7
  49. package/build/helpers/createSolarFlowLocalStates.js +0 -113
  50. package/build/helpers/createSolarFlowLocalStates.js.map +0 -7
  51. package/build/helpers/createSolarFlowStates.js +0 -193
  52. package/build/helpers/createSolarFlowStates.js.map +0 -7
  53. package/build/models/IPack2Device.js.map +0 -7
  54. package/build/models/ISolarFlowDeviceDetails.js.map +0 -7
  55. package/build/models/ISolarFlowPaths.js.map +0 -7
  56. package/build/models/ISolarflowDevRegisterResponse.js.map +0 -7
  57. package/build/services/adapterService.js +0 -142
  58. package/build/services/adapterService.js.map +0 -7
  59. package/build/services/calculationService.js +0 -350
  60. package/build/services/calculationService.js.map +0 -7
  61. package/build/services/fallbackMqttService.js +0 -461
  62. package/build/services/fallbackMqttService.js.map +0 -7
  63. package/build/services/fallbackWebService.js +0 -80
  64. package/build/services/fallbackWebService.js.map +0 -7
  65. package/build/services/mqttService.js +0 -1545
  66. package/build/services/mqttService.js.map +0 -7
  67. package/build/services/webService.js +0 -119
  68. 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": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAAoC;AACpC,0BAA6B;AAI7B,yBAA4B;AAErB,MAAM,iBAAiB,+BAAY;AAAA,EAOjC,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,UAAU,QAA+B;AAhCxD;AAiCI,QAAI,KAAK,QAAQ,cAAc,KAAK,cAAc,KAAK,WAAW;AAChE,UAAI,UAAU,KAAK,UAAU,GAAG;AAC9B,cAAM,YAAY,EAAE,YAAY,EAAE,OAAe,EAAE;AACnD,aAAK,QAAQ,IAAI,MAAM,8BAA8B,MAAM,GAAG;AAC9D,mBAAK,QAAQ,eAAb,mBAAyB;AAAA,UACvB,KAAK;AAAA,UACL,KAAK,UAAU,SAAS;AAAA;AAI1B,cAAM,YAAY,MAAM,KAAK,QAAQ;AAAA,UACnC,KAAK,aAAa,MAAM,KAAK,YAAY;AAAA,QAC3C;AAEA,YAAI,aAAa,CAAC,UAAU,KAAK;AAC/B,eAAK,QAAQ,IAAI;AAAA,YACf;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,aAAK,QAAQ,IAAI;AAAA,UACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEO,YAAY,UAAyB;AA5D9C;AA6DI,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,EAEA,MAAa,8BACX,OACe;AA7EnB;AA8EI,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;AAEb,YAAI,QAAQ,KAAK,eAAe;AAC9B,kBAAQ,KAAK;AAAA,QACf;AAAA,MACF,OAAO;AACL,YAAI,QAAQ,KAAK,gBAAgB;AAC/B,kBAAQ,KAAK;AAAA,QACf;AAAA,MACF;AAEA,WAAK,QAAQ,cAAc;AAE3B,YAAM,YAAY,oBAAI,KAAK;AAC3B,gBAAU,gBAAgB,CAAC;AAG3B,WAAK,QAAQ,IAAI;AAAA,QACf,0FAA0F,KAAK,SAAS;AAAA,MAC1G;AAGA,YAAM,aAA6B;AAAA,QACjC,aAAa,QAAQ,IAAI,QAAQ;AAAA,QACjC,aAAa,QAAQ,IAAI,IAAI;AAAA,QAC7B,aAAa,QAAQ,IAAI,IAAI,CAAC;AAAA,QAC9B,MAAM;AAAA,MACR;AAEA,YAAM,SAAS;AAAA,QACb,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,MAAM;AAAA;AAAA,IAEzB;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }