iobroker.zendure-solarflow 1.13.1 → 1.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +14 -2
  2. package/admin/build/index.js +76 -55
  3. package/admin/build/index.js.map +4 -4
  4. package/build/constants/ac2400ControlStates.js +187 -0
  5. package/build/constants/ac2400ControlStates.js.map +7 -0
  6. package/build/constants/ac2400States.js +120 -0
  7. package/build/constants/ac2400States.js.map +7 -0
  8. package/build/constants/aceControlStates.js +196 -0
  9. package/build/constants/aceControlStates.js.map +7 -0
  10. package/build/constants/aceStates.js +7 -1
  11. package/build/constants/aceStates.js.map +2 -2
  12. package/build/constants/aioControlStates.js +173 -0
  13. package/build/constants/aioControlStates.js.map +7 -0
  14. package/build/constants/hubControlStates.js +188 -0
  15. package/build/constants/hubControlStates.js.map +7 -0
  16. package/build/constants/hyperControlStates.js +186 -0
  17. package/build/constants/hyperControlStates.js.map +7 -0
  18. package/build/constants/solarflow800ControlStates.js +187 -0
  19. package/build/constants/solarflow800ControlStates.js.map +7 -0
  20. package/build/constants/solarflow800ProControlStates.js +187 -0
  21. package/build/constants/solarflow800ProControlStates.js.map +7 -0
  22. package/build/constants/solarflow800ProStates.js +95 -0
  23. package/build/constants/solarflow800ProStates.js.map +7 -0
  24. package/build/constants/solarflow800States.js +95 -0
  25. package/build/constants/solarflow800States.js.map +7 -0
  26. package/build/helpers/createCalculationStates.js +37 -39
  27. package/build/helpers/createCalculationStates.js.map +2 -2
  28. package/build/helpers/createControlStates.js +46 -315
  29. package/build/helpers/createControlStates.js.map +2 -2
  30. package/build/helpers/createSolarFlowLocalStates.js +23 -30
  31. package/build/helpers/createSolarFlowLocalStates.js.map +2 -2
  32. package/build/helpers/createSolarFlowStates.js +42 -23
  33. package/build/helpers/createSolarFlowStates.js.map +2 -2
  34. package/build/main.js +64 -56
  35. package/build/main.js.map +2 -2
  36. package/build/models/ISolarflowState.js.map +1 -1
  37. package/build/services/adapterService.js +1 -1
  38. package/build/services/adapterService.js.map +2 -2
  39. package/build/services/fallbackMqttService.js +2 -2
  40. package/build/services/fallbackMqttService.js.map +2 -2
  41. package/build/services/mqttService.js +51 -68
  42. package/build/services/mqttService.js.map +2 -2
  43. package/io-package.json +54 -54
  44. package/package.json +9 -9
@@ -24,38 +24,33 @@ module.exports = __toCommonJS(createSolarFlowLocalStates_exports);
24
24
  var import_createCalculationStates = require("./createCalculationStates");
25
25
  var import_createControlStates = require("./createControlStates");
26
26
  var import_createSolarFlowStates = require("./createSolarFlowStates");
27
- const createSolarFlowLocalStates = async (adapter, productKey, deviceKey) => {
28
- productKey = productKey.replace(adapter.FORBIDDEN_CHARS, "");
29
- deviceKey = deviceKey.replace(adapter.FORBIDDEN_CHARS, "");
30
- let productName = "";
31
- let type = "";
27
+ const getProductNameFromProductKey = (productKey) => {
32
28
  switch (productKey) {
33
29
  case "73bkTV":
34
- productName = "Hub 1200";
35
- type = "solarflow";
36
- break;
30
+ return "Solarflow2.0";
37
31
  case "A8yh63":
38
- productName = "Hub 2000";
39
- type = "solarflow";
40
- break;
32
+ return "Solarflow Hub 2000";
41
33
  case "yWF7hV":
42
- productName = "AIO 2400";
43
- type = "aio";
44
- break;
34
+ return "Solarflow AIO zy";
45
35
  case "ja72U0ha":
46
- productName = "Hyper 2000";
47
- type = "hyper";
48
- break;
36
+ return "Hyper 2000";
49
37
  case "gDa3tb":
50
- productName = "Hyper 2000";
51
- type = "hyper";
52
- break;
38
+ return "Hyper 2000";
53
39
  case "8bM93H":
54
- productName = "ACE 1500";
55
- type = "ace";
56
- break;
40
+ return "ACE 1500";
57
41
  default:
58
- break;
42
+ return "";
43
+ }
44
+ };
45
+ const createSolarFlowLocalStates = async (adapter, productKey, deviceKey) => {
46
+ productKey = productKey.replace(adapter.FORBIDDEN_CHARS, "");
47
+ deviceKey = deviceKey.replace(adapter.FORBIDDEN_CHARS, "");
48
+ const productName = getProductNameFromProductKey(productKey);
49
+ if (productName == "") {
50
+ adapter.log.error(
51
+ `[createSolarFlowLocalStates] Unknown product (${productKey}/${deviceKey}). We cannot create control states! Please contact the developer!`
52
+ );
53
+ return;
59
54
  }
60
55
  adapter.log.debug(
61
56
  `[createSolarFlowLocalStates] Creating or updating SolarFlow states for ${productName} (${productKey}/${deviceKey}).`
@@ -80,7 +75,7 @@ const createSolarFlowLocalStates = async (adapter, productKey, deviceKey) => {
80
75
  },
81
76
  native: {}
82
77
  }));
83
- if (type != "smartPlug") {
78
+ if (productName == null ? void 0 : productName.toLowerCase().includes("smart plug")) {
84
79
  await (adapter == null ? void 0 : adapter.extendObject(`${productKey}.${deviceKey}.packData`, {
85
80
  type: "channel",
86
81
  common: {
@@ -92,7 +87,7 @@ const createSolarFlowLocalStates = async (adapter, productKey, deviceKey) => {
92
87
  native: {}
93
88
  }));
94
89
  }
95
- const states = (0, import_createSolarFlowStates.getStateDefinition)(type);
90
+ const states = (0, import_createSolarFlowStates.getStateDefinition)(productName);
96
91
  states.forEach(async (state) => {
97
92
  await (adapter == null ? void 0 : adapter.extendObject(`${productKey}.${deviceKey}.${state.title}`, {
98
93
  type: "state",
@@ -112,9 +107,7 @@ const createSolarFlowLocalStates = async (adapter, productKey, deviceKey) => {
112
107
  native: {}
113
108
  }));
114
109
  });
115
- if (!adapter.config.useFallbackService) {
116
- await (0, import_createControlStates.createControlStates)(adapter, productKey, deviceKey, type);
117
- }
110
+ await (0, import_createControlStates.createControlStates)(adapter, productKey, deviceKey, productName);
118
111
  if (adapter.config.useCalculation) {
119
112
  await (adapter == null ? void 0 : adapter.extendObject(`${productKey}.${deviceKey}.calculations`, {
120
113
  type: "channel",
@@ -126,7 +119,7 @@ const createSolarFlowLocalStates = async (adapter, productKey, deviceKey) => {
126
119
  },
127
120
  native: {}
128
121
  }));
129
- await (0, import_createCalculationStates.createCalculationStates)(adapter, productKey, deviceKey, type);
122
+ await (0, import_createCalculationStates.createCalculationStates)(adapter, productKey, deviceKey);
130
123
  } else {
131
124
  }
132
125
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/helpers/createSolarFlowLocalStates.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\n\nimport { ZendureSolarflow } from \"../main\";\nimport { ISolarflowState } from \"../models/ISolarflowState\";\nimport { createCalculationStates } from \"./createCalculationStates\";\nimport { createControlStates } from \"./createControlStates\";\nimport { getStateDefinition } from \"./createSolarFlowStates\";\n//import { deleteCalculationStates } from \"./deleteCalculationStates\";\n\nexport const createSolarFlowLocalStates = async (\n adapter: ZendureSolarflow,\n productKey: string,\n deviceKey: string\n): Promise<void> => {\n productKey = productKey.replace(adapter.FORBIDDEN_CHARS, \"\");\n deviceKey = deviceKey.replace(adapter.FORBIDDEN_CHARS, \"\");\n\n let productName = \"\";\n let type = \"\";\n\n switch (productKey) {\n case \"73bkTV\":\n productName = \"Hub 1200\";\n type = \"solarflow\";\n break;\n case \"A8yh63\":\n productName = \"Hub 2000\";\n type = \"solarflow\";\n break;\n case \"yWF7hV\":\n productName = \"AIO 2400\";\n type = \"aio\";\n break;\n case \"ja72U0ha\":\n productName = \"Hyper 2000\";\n type = \"hyper\";\n break;\n case \"gDa3tb\":\n productName = \"Hyper 2000\";\n type = \"hyper\";\n break;\n case \"8bM93H\":\n productName = \"ACE 1500\";\n type = \"ace\";\n break;\n default:\n break;\n }\n\n adapter.log.debug(\n `[createSolarFlowLocalStates] Creating or updating SolarFlow states for ${productName} (${productKey}/${deviceKey}).`\n );\n\n // Create device (e.g. the product type -> SolarFlow)\n await adapter?.extendObject(productKey, {\n type: \"device\",\n common: {\n name: {\n de: `${productName} (${productKey})`,\n en: `${productName} (${productKey})`,\n },\n },\n native: {},\n });\n\n // Create channel (e.g. the device specific key)\n await adapter?.extendObject(productKey + \".\" + deviceKey, {\n type: \"channel\",\n common: {\n name: {\n de: `Device Key ${deviceKey}`,\n en: `Device Key ${deviceKey}`,\n },\n },\n native: {},\n });\n\n // Create pack data folder\n if (type != \"smartPlug\") {\n await adapter?.extendObject(`${productKey}.${deviceKey}.packData`, {\n type: \"channel\",\n common: {\n name: {\n de: \"Batterie Packs\",\n en: \"Battery packs\",\n },\n },\n native: {},\n });\n }\n\n const states = getStateDefinition(type);\n\n states.forEach(async (state: ISolarflowState) => {\n await adapter?.extendObject(`${productKey}.${deviceKey}.${state.title}`, {\n type: \"state\",\n common: {\n name: {\n de: state.nameDe,\n en: state.nameEn,\n },\n type: state.type,\n desc: state.title,\n role: state.role,\n read: true,\n write: false,\n unit: state.unit,\n states: state.states,\n },\n native: {},\n });\n });\n\n // Create control states only when using App MQTT servers - and not the fallback one!\n if (!adapter.config.useFallbackService) {\n await createControlStates(adapter, productKey, deviceKey, type);\n }\n\n if (adapter.config.useCalculation) {\n // Create calculations folder\n await adapter?.extendObject(`${productKey}.${deviceKey}.calculations`, {\n type: \"channel\",\n common: {\n name: {\n de: \"Berechnungen f\u00FCr Ger\u00E4t \" + deviceKey,\n en: \"Calculations for Device \" + deviceKey,\n },\n },\n native: {},\n });\n\n await createCalculationStates(adapter, productKey, deviceKey, type);\n } else {\n //await deleteCalculationStates(adapter, productKey, deviceKey);\n }\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,qCAAwC;AACxC,iCAAoC;AACpC,mCAAmC;AAG5B,MAAM,6BAA6B,OACxC,SACA,YACA,cACkB;AAClB,eAAa,WAAW,QAAQ,QAAQ,iBAAiB,EAAE;AAC3D,cAAY,UAAU,QAAQ,QAAQ,iBAAiB,EAAE;AAEzD,MAAI,cAAc;AAClB,MAAI,OAAO;AAEX,UAAQ,YAAY;AAAA,IAClB,KAAK;AACH,oBAAc;AACd,aAAO;AACP;AAAA,IACF,KAAK;AACH,oBAAc;AACd,aAAO;AACP;AAAA,IACF,KAAK;AACH,oBAAc;AACd,aAAO;AACP;AAAA,IACF,KAAK;AACH,oBAAc;AACd,aAAO;AACP;AAAA,IACF,KAAK;AACH,oBAAc;AACd,aAAO;AACP;AAAA,IACF,KAAK;AACH,oBAAc;AACd,aAAO;AACP;AAAA,IACF;AACE;AAAA,EACJ;AAEA,UAAQ,IAAI;AAAA,IACV,0EAA0E,WAAW,KAAK,UAAU,IAAI,SAAS;AAAA,EACnH;AAGA,SAAM,mCAAS,aAAa,YAAY;AAAA,IACtC,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,QACJ,IAAI,GAAG,WAAW,KAAK,UAAU;AAAA,QACjC,IAAI,GAAG,WAAW,KAAK,UAAU;AAAA,MACnC;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAGA,SAAM,mCAAS,aAAa,aAAa,MAAM,WAAW;AAAA,IACxD,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,QACJ,IAAI,cAAc,SAAS;AAAA,QAC3B,IAAI,cAAc,SAAS;AAAA,MAC7B;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAGA,MAAI,QAAQ,aAAa;AACvB,WAAM,mCAAS,aAAa,GAAG,UAAU,IAAI,SAAS,aAAa;AAAA,MACjE,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,QACN;AAAA,MACF;AAAA,MACA,QAAQ,CAAC;AAAA,IACX;AAAA,EACF;AAEA,QAAM,aAAS,iDAAmB,IAAI;AAEtC,SAAO,QAAQ,OAAO,UAA2B;AAC/C,WAAM,mCAAS,aAAa,GAAG,UAAU,IAAI,SAAS,IAAI,MAAM,KAAK,IAAI;AAAA,MACvE,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI,MAAM;AAAA,UACV,IAAI,MAAM;AAAA,QACZ;AAAA,QACA,MAAM,MAAM;AAAA,QACZ,MAAM,MAAM;AAAA,QACZ,MAAM,MAAM;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM;AAAA,MAChB;AAAA,MACA,QAAQ,CAAC;AAAA,IACX;AAAA,EACF,CAAC;AAGD,MAAI,CAAC,QAAQ,OAAO,oBAAoB;AACtC,cAAM,gDAAoB,SAAS,YAAY,WAAW,IAAI;AAAA,EAChE;AAEA,MAAI,QAAQ,OAAO,gBAAgB;AAEjC,WAAM,mCAAS,aAAa,GAAG,UAAU,IAAI,SAAS,iBAAiB;AAAA,MACrE,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI,kCAA4B;AAAA,UAChC,IAAI,6BAA6B;AAAA,QACnC;AAAA,MACF;AAAA,MACA,QAAQ,CAAC;AAAA,IACX;AAEA,cAAM,wDAAwB,SAAS,YAAY,WAAW,IAAI;AAAA,EACpE,OAAO;AAAA,EAEP;AACF;",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\n\nimport { ZendureSolarflow } from \"../main\";\nimport { ISolarflowState } from \"../models/ISolarflowState\";\nimport { createCalculationStates } from \"./createCalculationStates\";\nimport { createControlStates } from \"./createControlStates\";\nimport { getStateDefinition } from \"./createSolarFlowStates\";\n//import { deleteCalculationStates } from \"./deleteCalculationStates\";\n\nconst getProductNameFromProductKey = (productKey: string): string => {\n switch (productKey) {\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 default:\n return \"\";\n }\n};\n\nexport const createSolarFlowLocalStates = async (\n adapter: ZendureSolarflow,\n productKey: string,\n deviceKey: string\n): Promise<void> => {\n productKey = productKey.replace(adapter.FORBIDDEN_CHARS, \"\");\n deviceKey = deviceKey.replace(adapter.FORBIDDEN_CHARS, \"\");\n\n const productName = getProductNameFromProductKey(productKey);\n\n if (productName == \"\") {\n adapter.log.error(\n `[createSolarFlowLocalStates] Unknown product (${productKey}/${deviceKey}). We cannot create control states! Please contact the developer!`\n );\n return;\n }\n\n adapter.log.debug(\n `[createSolarFlowLocalStates] Creating or updating SolarFlow states for ${productName} (${productKey}/${deviceKey}).`\n );\n\n // Create device (e.g. the product type -> SolarFlow)\n await adapter?.extendObject(productKey, {\n type: \"device\",\n common: {\n name: {\n de: `${productName} (${productKey})`,\n en: `${productName} (${productKey})`,\n },\n },\n native: {},\n });\n\n // Create channel (e.g. the device specific key)\n await adapter?.extendObject(productKey + \".\" + deviceKey, {\n type: \"channel\",\n common: {\n name: {\n de: `Device Key ${deviceKey}`,\n en: `Device Key ${deviceKey}`,\n },\n },\n native: {},\n });\n\n // Create pack data folder\n if (productName?.toLowerCase().includes(\"smart plug\")) {\n await adapter?.extendObject(`${productKey}.${deviceKey}.packData`, {\n type: \"channel\",\n common: {\n name: {\n de: \"Batterie Packs\",\n en: \"Battery packs\",\n },\n },\n native: {},\n });\n }\n\n const states = getStateDefinition(productName);\n\n states.forEach(async (state: ISolarflowState) => {\n await adapter?.extendObject(`${productKey}.${deviceKey}.${state.title}`, {\n type: \"state\",\n common: {\n name: {\n de: state.nameDe,\n en: state.nameEn,\n },\n type: state.type,\n desc: state.title,\n role: state.role,\n read: true,\n write: false,\n unit: state.unit,\n states: state.states,\n },\n native: {},\n });\n });\n\n // Create control states\n await createControlStates(adapter, productKey, deviceKey, productName);\n\n if (adapter.config.useCalculation) {\n // Create calculations folder\n await adapter?.extendObject(`${productKey}.${deviceKey}.calculations`, {\n type: \"channel\",\n common: {\n name: {\n de: \"Berechnungen f\u00FCr Ger\u00E4t \" + deviceKey,\n en: \"Calculations for Device \" + deviceKey,\n },\n },\n native: {},\n });\n\n await createCalculationStates(adapter, productKey, deviceKey);\n } else {\n //await deleteCalculationStates(adapter, productKey, deviceKey);\n }\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,qCAAwC;AACxC,iCAAoC;AACpC,mCAAmC;AAGnC,MAAM,+BAA+B,CAAC,eAA+B;AACnE,UAAQ,YAAY;AAAA,IAClB,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,6BAA6B,OACxC,SACA,YACA,cACkB;AAClB,eAAa,WAAW,QAAQ,QAAQ,iBAAiB,EAAE;AAC3D,cAAY,UAAU,QAAQ,QAAQ,iBAAiB,EAAE;AAEzD,QAAM,cAAc,6BAA6B,UAAU;AAE3D,MAAI,eAAe,IAAI;AACrB,YAAQ,IAAI;AAAA,MACV,iDAAiD,UAAU,IAAI,SAAS;AAAA,IAC1E;AACA;AAAA,EACF;AAEA,UAAQ,IAAI;AAAA,IACV,0EAA0E,WAAW,KAAK,UAAU,IAAI,SAAS;AAAA,EACnH;AAGA,SAAM,mCAAS,aAAa,YAAY;AAAA,IACtC,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,QACJ,IAAI,GAAG,WAAW,KAAK,UAAU;AAAA,QACjC,IAAI,GAAG,WAAW,KAAK,UAAU;AAAA,MACnC;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAGA,SAAM,mCAAS,aAAa,aAAa,MAAM,WAAW;AAAA,IACxD,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,QACJ,IAAI,cAAc,SAAS;AAAA,QAC3B,IAAI,cAAc,SAAS;AAAA,MAC7B;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAGA,MAAI,2CAAa,cAAc,SAAS,eAAe;AACrD,WAAM,mCAAS,aAAa,GAAG,UAAU,IAAI,SAAS,aAAa;AAAA,MACjE,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,QACN;AAAA,MACF;AAAA,MACA,QAAQ,CAAC;AAAA,IACX;AAAA,EACF;AAEA,QAAM,aAAS,iDAAmB,WAAW;AAE7C,SAAO,QAAQ,OAAO,UAA2B;AAC/C,WAAM,mCAAS,aAAa,GAAG,UAAU,IAAI,SAAS,IAAI,MAAM,KAAK,IAAI;AAAA,MACvE,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI,MAAM;AAAA,UACV,IAAI,MAAM;AAAA,QACZ;AAAA,QACA,MAAM,MAAM;AAAA,QACZ,MAAM,MAAM;AAAA,QACZ,MAAM,MAAM;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM;AAAA,MAChB;AAAA,MACA,QAAQ,CAAC;AAAA,IACX;AAAA,EACF,CAAC;AAGD,YAAM,gDAAoB,SAAS,YAAY,WAAW,WAAW;AAErE,MAAI,QAAQ,OAAO,gBAAgB;AAEjC,WAAM,mCAAS,aAAa,GAAG,UAAU,IAAI,SAAS,iBAAiB;AAAA,MACrE,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI,kCAA4B;AAAA,UAChC,IAAI,6BAA6B;AAAA,QACnC;AAAA,MACF;AAAA,MACA,QAAQ,CAAC;AAAA,IACX;AAEA,cAAM,wDAAwB,SAAS,YAAY,SAAS;AAAA,EAC9D,OAAO;AAAA,EAEP;AACF;",
6
6
  "names": []
7
7
  }
@@ -22,36 +22,44 @@ __export(createSolarFlowStates_exports, {
22
22
  getStateDefinition: () => getStateDefinition
23
23
  });
24
24
  module.exports = __toCommonJS(createSolarFlowStates_exports);
25
+ var import_ac2400States = require("../constants/ac2400States");
25
26
  var import_aceStates = require("../constants/aceStates");
26
27
  var import_aioStates = require("../constants/aioStates");
27
28
  var import_hubStates = require("../constants/hubStates");
28
29
  var import_hyperStates = require("../constants/hyperStates");
29
- var import_smartPlugStates = require("../constants/smartPlugStates");
30
+ var import_solarflow800ProStates = require("../constants/solarflow800ProStates");
31
+ var import_solarflow800States = require("../constants/solarflow800States");
30
32
  var import_adapterService = require("../services/adapterService");
31
33
  var import_createCalculationStates = require("./createCalculationStates");
32
34
  var import_createControlStates = require("./createControlStates");
33
- const getStateDefinition = (type) => {
34
- switch (type) {
35
- case "aio":
36
- return import_aioStates.aioStates;
37
- case "hyper":
35
+ const getStateDefinition = (productName) => {
36
+ switch (productName.toLocaleLowerCase()) {
37
+ case "hyper 2000":
38
38
  return import_hyperStates.hyperStates;
39
- case "solarflow":
39
+ case "solarflow 800":
40
+ return import_solarflow800States.solarflow800States;
41
+ case "solarflow2.0":
42
+ return import_hubStates.hubStates;
43
+ case "solarflow hub 2000":
40
44
  return import_hubStates.hubStates;
41
- case "ace":
45
+ case "solarflow aio zy":
46
+ return import_aioStates.aioStates;
47
+ case "ace 1500":
42
48
  return import_aceStates.aceStates;
43
- case "smartPlug":
44
- return import_smartPlugStates.smartPlugStates;
49
+ case "solarflow 800 pro":
50
+ return import_solarflow800ProStates.solarflow800ProStates;
51
+ case "solarflow 2400 ac":
52
+ return import_ac2400States.ac2400States;
45
53
  default:
46
54
  return [];
47
55
  }
48
56
  };
49
- const createSolarFlowStates = async (adapter, device, type) => {
50
- let productKey = device.productKey.replace(adapter.FORBIDDEN_CHARS, "");
51
- let deviceKey = device.deviceKey.replace(adapter.FORBIDDEN_CHARS, "");
52
- if (device.productKey == "s3Xk4x" && adapter && adapter.userId && device.id) {
53
- productKey = adapter.userId;
54
- deviceKey = device.id.toString();
57
+ const createSolarFlowStates = async (adapter, device) => {
58
+ const productKey = device.productKey.replace(adapter.FORBIDDEN_CHARS, "");
59
+ const deviceKey = device.deviceKey.replace(adapter.FORBIDDEN_CHARS, "");
60
+ if (device.productKey == "s3Xk4x") {
61
+ adapter.log.debug(`[createSolarFlowStates] Smart Plug not supported.`);
62
+ return;
55
63
  }
56
64
  adapter.log.debug(
57
65
  `[createSolarFlowStates] Creating or updating SolarFlow states for ${device.productName} (${productKey}/${deviceKey}) and name '${device.name}'.`
@@ -76,7 +84,7 @@ const createSolarFlowStates = async (adapter, device, type) => {
76
84
  },
77
85
  native: {}
78
86
  }));
79
- if (type != "smartPlug") {
87
+ if (!device.productName.toLocaleLowerCase().includes("smart plug")) {
80
88
  await (adapter == null ? void 0 : adapter.extendObject(`${productKey}.${deviceKey}.packData`, {
81
89
  type: "channel",
82
90
  common: {
@@ -88,7 +96,13 @@ const createSolarFlowStates = async (adapter, device, type) => {
88
96
  native: {}
89
97
  }));
90
98
  }
91
- const states = getStateDefinition(type);
99
+ const states = getStateDefinition(device.productName);
100
+ if (states.length == 0) {
101
+ adapter.log.error(
102
+ `[createSolarFlowLocalStates] Unknown product (${device.productName}). We cannot create control states! Please contact the developer!`
103
+ );
104
+ return;
105
+ }
92
106
  states.forEach(async (state) => {
93
107
  await (adapter == null ? void 0 : adapter.extendObject(`${productKey}.${deviceKey}.${state.title}`, {
94
108
  type: "state",
@@ -108,7 +122,7 @@ const createSolarFlowStates = async (adapter, device, type) => {
108
122
  native: {}
109
123
  }));
110
124
  });
111
- if (device.electricity && type != "smartPlug") {
125
+ if (device.electricity && !device.productName.toLocaleLowerCase().includes("smart plug")) {
112
126
  await (0, import_adapterService.updateSolarFlowState)(
113
127
  adapter,
114
128
  device.productKey,
@@ -126,7 +140,7 @@ const createSolarFlowStates = async (adapter, device, type) => {
126
140
  device.snNumber.toString()
127
141
  );
128
142
  }
129
- if (type == "solarflow" && device._connectedWithAce != null && device._connectedWithAce != void 0) {
143
+ if ((device.productName.toLocaleLowerCase() == "solarflow hub 2000" || device.productName.toLocaleLowerCase() == "solarflow2.0") && device._connectedWithAce != null && device._connectedWithAce != void 0) {
130
144
  await (0, import_adapterService.updateSolarFlowState)(
131
145
  adapter,
132
146
  device.productKey,
@@ -149,9 +163,14 @@ const createSolarFlowStates = async (adapter, device, type) => {
149
163
  "wifiState",
150
164
  device.wifiStatus ? "Connected" : "Disconnected"
151
165
  );
152
- if (type != "smartPlug") {
166
+ if (!device.productName.toLocaleLowerCase().includes("smart plug")) {
153
167
  if (!adapter.config.useFallbackService) {
154
- await (0, import_createControlStates.createControlStates)(adapter, productKey, deviceKey, type);
168
+ await (0, import_createControlStates.createControlStates)(
169
+ adapter,
170
+ productKey,
171
+ deviceKey,
172
+ device.productName
173
+ );
155
174
  }
156
175
  if (adapter.config.useCalculation) {
157
176
  await (adapter == null ? void 0 : adapter.extendObject(`${productKey}.${deviceKey}.calculations`, {
@@ -164,7 +183,7 @@ const createSolarFlowStates = async (adapter, device, type) => {
164
183
  },
165
184
  native: {}
166
185
  }));
167
- await (0, import_createCalculationStates.createCalculationStates)(adapter, productKey, deviceKey, type);
186
+ await (0, import_createCalculationStates.createCalculationStates)(adapter, productKey, deviceKey);
168
187
  } else {
169
188
  }
170
189
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/helpers/createSolarFlowStates.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\n\r\nimport { aceStates } from \"../constants/aceStates\";\r\nimport { aioStates } from \"../constants/aioStates\";\r\nimport { hubStates } from \"../constants/hubStates\";\r\nimport { hyperStates } from \"../constants/hyperStates\";\r\nimport { smartPlugStates } from \"../constants/smartPlugStates\";\r\nimport { ZendureSolarflow } from \"../main\";\r\nimport { ISolarFlowDeviceDetails } from \"../models/ISolarFlowDeviceDetails\";\r\nimport { ISolarflowState } from \"../models/ISolarflowState\";\r\nimport { updateSolarFlowState } from \"../services/adapterService\";\r\nimport { createCalculationStates } from \"./createCalculationStates\";\r\nimport { createControlStates } from \"./createControlStates\";\r\n//import { deleteCalculationStates } from \"./deleteCalculationStates\";\r\n\r\nexport const getStateDefinition = (type: string): ISolarflowState[] => {\r\n switch (type) {\r\n case \"aio\":\r\n return aioStates;\r\n case \"hyper\":\r\n return hyperStates;\r\n case \"solarflow\":\r\n return hubStates;\r\n case \"ace\":\r\n return aceStates;\r\n case \"smartPlug\":\r\n return smartPlugStates;\r\n default:\r\n return [];\r\n }\r\n};\r\n\r\nexport const createSolarFlowStates = async (\r\n adapter: ZendureSolarflow,\r\n device: ISolarFlowDeviceDetails,\r\n type: string\r\n): Promise<void> => {\r\n let productKey = device.productKey.replace(adapter.FORBIDDEN_CHARS, \"\");\r\n let deviceKey = device.deviceKey.replace(adapter.FORBIDDEN_CHARS, \"\");\r\n\r\n if (device.productKey == \"s3Xk4x\" && adapter && adapter.userId && device.id) {\r\n productKey = adapter.userId;\r\n deviceKey = device.id.toString();\r\n }\r\n\r\n adapter.log.debug(\r\n `[createSolarFlowStates] Creating or updating SolarFlow states for ${device.productName} (${productKey}/${deviceKey}) and name '${device.name}'.`\r\n );\r\n\r\n // Create device (e.g. the product type -> SolarFlow)\r\n await adapter?.extendObject(productKey, {\r\n type: \"device\",\r\n common: {\r\n name: {\r\n de: `${device.productName} (${productKey})`,\r\n en: `${device.productName} (${productKey})`,\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n // Create channel (e.g. the device specific key)\r\n await adapter?.extendObject(productKey + \".\" + deviceKey, {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: `${device.name} (${deviceKey})`,\r\n en: `${device.name} (${deviceKey})`,\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n // Create pack data folder\r\n if (type != \"smartPlug\") {\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.packData`, {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: \"Batterie Packs\",\r\n en: \"Battery packs\",\r\n },\r\n },\r\n native: {},\r\n });\r\n }\r\n\r\n const states = getStateDefinition(type);\r\n\r\n states.forEach(async (state: ISolarflowState) => {\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.${state.title}`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: state.nameDe,\r\n en: state.nameEn,\r\n },\r\n type: state.type,\r\n desc: state.title,\r\n role: state.role,\r\n read: true,\r\n write: false,\r\n unit: state.unit,\r\n states: state.states,\r\n },\r\n native: {},\r\n });\r\n });\r\n\r\n // Set SOC from device\r\n if (device.electricity && type != \"smartPlug\") {\r\n await updateSolarFlowState(\r\n adapter,\r\n device.productKey,\r\n device.deviceKey,\r\n \"electricLevel\",\r\n device.electricity\r\n );\r\n }\r\n\r\n // Set sn number from device\r\n if (device.snNumber) {\r\n await updateSolarFlowState(\r\n adapter,\r\n productKey,\r\n deviceKey,\r\n \"snNumber\",\r\n device.snNumber.toString()\r\n );\r\n }\r\n\r\n // Set the ACE connection info if is solarflow hub device\r\n if (\r\n type == \"solarflow\" &&\r\n device._connectedWithAce != null &&\r\n device._connectedWithAce != undefined\r\n ) {\r\n await updateSolarFlowState(\r\n adapter,\r\n device.productKey,\r\n device.deviceKey,\r\n \"connectedWithAce\",\r\n device._connectedWithAce\r\n );\r\n }\r\n\r\n // Set product name from device\r\n await updateSolarFlowState(\r\n adapter,\r\n productKey,\r\n deviceKey,\r\n \"productName\",\r\n device.productName\r\n );\r\n\r\n // Set wifi state from device\r\n await updateSolarFlowState(\r\n adapter,\r\n productKey,\r\n deviceKey,\r\n \"wifiState\",\r\n device.wifiStatus ? \"Connected\" : \"Disconnected\"\r\n );\r\n\r\n if (type != \"smartPlug\") {\r\n // Create control states only when using App MQTT servers - and not the fallback one!\r\n if (!adapter.config.useFallbackService) {\r\n await createControlStates(adapter, productKey, deviceKey, type);\r\n }\r\n\r\n if (adapter.config.useCalculation) {\r\n // Create calculations folder\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.calculations`, {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: \"Berechnungen f\u00FCr Ger\u00E4t \" + deviceKey,\r\n en: \"Calculations for Device \" + deviceKey,\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n await createCalculationStates(adapter, productKey, deviceKey, type);\r\n } else {\r\n //await deleteCalculationStates(adapter, productKey, deviceKey);\r\n }\r\n }\r\n};\r\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,uBAA0B;AAC1B,uBAA0B;AAC1B,uBAA0B;AAC1B,yBAA4B;AAC5B,6BAAgC;AAIhC,4BAAqC;AACrC,qCAAwC;AACxC,iCAAoC;AAG7B,MAAM,qBAAqB,CAAC,SAAoC;AACrE,UAAQ,MAAM;AAAA,IACZ,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,CAAC;AAAA,EACZ;AACF;AAEO,MAAM,wBAAwB,OACnC,SACA,QACA,SACkB;AAClB,MAAI,aAAa,OAAO,WAAW,QAAQ,QAAQ,iBAAiB,EAAE;AACtE,MAAI,YAAY,OAAO,UAAU,QAAQ,QAAQ,iBAAiB,EAAE;AAEpE,MAAI,OAAO,cAAc,YAAY,WAAW,QAAQ,UAAU,OAAO,IAAI;AAC3E,iBAAa,QAAQ;AACrB,gBAAY,OAAO,GAAG,SAAS;AAAA,EACjC;AAEA,UAAQ,IAAI;AAAA,IACV,qEAAqE,OAAO,WAAW,KAAK,UAAU,IAAI,SAAS,eAAe,OAAO,IAAI;AAAA,EAC/I;AAGA,SAAM,mCAAS,aAAa,YAAY;AAAA,IACtC,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,QACJ,IAAI,GAAG,OAAO,WAAW,KAAK,UAAU;AAAA,QACxC,IAAI,GAAG,OAAO,WAAW,KAAK,UAAU;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAGA,SAAM,mCAAS,aAAa,aAAa,MAAM,WAAW;AAAA,IACxD,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,QACJ,IAAI,GAAG,OAAO,IAAI,KAAK,SAAS;AAAA,QAChC,IAAI,GAAG,OAAO,IAAI,KAAK,SAAS;AAAA,MAClC;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAGA,MAAI,QAAQ,aAAa;AACvB,WAAM,mCAAS,aAAa,GAAG,UAAU,IAAI,SAAS,aAAa;AAAA,MACjE,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,QACN;AAAA,MACF;AAAA,MACA,QAAQ,CAAC;AAAA,IACX;AAAA,EACF;AAEA,QAAM,SAAS,mBAAmB,IAAI;AAEtC,SAAO,QAAQ,OAAO,UAA2B;AAC/C,WAAM,mCAAS,aAAa,GAAG,UAAU,IAAI,SAAS,IAAI,MAAM,KAAK,IAAI;AAAA,MACvE,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI,MAAM;AAAA,UACV,IAAI,MAAM;AAAA,QACZ;AAAA,QACA,MAAM,MAAM;AAAA,QACZ,MAAM,MAAM;AAAA,QACZ,MAAM,MAAM;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,MAAM,MAAM;AAAA,QACZ,QAAQ,MAAM;AAAA,MAChB;AAAA,MACA,QAAQ,CAAC;AAAA,IACX;AAAA,EACF,CAAC;AAGD,MAAI,OAAO,eAAe,QAAQ,aAAa;AAC7C,cAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AAGA,MAAI,OAAO,UAAU;AACnB,cAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,SAAS,SAAS;AAAA,IAC3B;AAAA,EACF;AAGA,MACE,QAAQ,eACR,OAAO,qBAAqB,QAC5B,OAAO,qBAAqB,QAC5B;AACA,cAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AAGA,YAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO;AAAA,EACT;AAGA,YAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,aAAa,cAAc;AAAA,EACpC;AAEA,MAAI,QAAQ,aAAa;AAEvB,QAAI,CAAC,QAAQ,OAAO,oBAAoB;AACtC,gBAAM,gDAAoB,SAAS,YAAY,WAAW,IAAI;AAAA,IAChE;AAEA,QAAI,QAAQ,OAAO,gBAAgB;AAEjC,aAAM,mCAAS,aAAa,GAAG,UAAU,IAAI,SAAS,iBAAiB;AAAA,QACrE,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,MAAM;AAAA,YACJ,IAAI,kCAA4B;AAAA,YAChC,IAAI,6BAA6B;AAAA,UACnC;AAAA,QACF;AAAA,QACA,QAAQ,CAAC;AAAA,MACX;AAEA,gBAAM,wDAAwB,SAAS,YAAY,WAAW,IAAI;AAAA,IACpE,OAAO;AAAA,IAEP;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\n\r\nimport { ac2400States } from \"../constants/ac2400States\";\r\nimport { aceStates } from \"../constants/aceStates\";\r\nimport { aioStates } from \"../constants/aioStates\";\r\nimport { hubStates } from \"../constants/hubStates\";\r\nimport { hyperStates } from \"../constants/hyperStates\";\r\nimport { solarflow800ProStates } from \"../constants/solarflow800ProStates\";\r\nimport { solarflow800States } from \"../constants/solarflow800States\";\r\nimport { ZendureSolarflow } from \"../main\";\r\nimport { ISolarFlowDeviceDetails } from \"../models/ISolarFlowDeviceDetails\";\r\nimport { ISolarflowState } from \"../models/ISolarflowState\";\r\nimport { updateSolarFlowState } from \"../services/adapterService\";\r\nimport { createCalculationStates } from \"./createCalculationStates\";\r\nimport { createControlStates } from \"./createControlStates\";\r\n//import { deleteCalculationStates } from \"./deleteCalculationStates\";\r\n\r\nexport const getStateDefinition = (productName: string): ISolarflowState[] => {\r\n switch (productName.toLocaleLowerCase()) {\r\n case \"hyper 2000\":\r\n return hyperStates;\r\n case \"solarflow 800\":\r\n return solarflow800States;\r\n case \"solarflow2.0\":\r\n return hubStates;\r\n case \"solarflow hub 2000\":\r\n return hubStates;\r\n case \"solarflow aio zy\":\r\n return aioStates;\r\n case \"ace 1500\":\r\n return aceStates;\r\n case \"solarflow 800 pro\":\r\n return solarflow800ProStates;\r\n case \"solarflow 2400 ac\":\r\n return ac2400States;\r\n default:\r\n return [];\r\n }\r\n};\r\n\r\nexport const createSolarFlowStates = async (\r\n adapter: ZendureSolarflow,\r\n device: ISolarFlowDeviceDetails\r\n): Promise<void> => {\r\n const productKey = device.productKey.replace(adapter.FORBIDDEN_CHARS, \"\");\r\n const deviceKey = device.deviceKey.replace(adapter.FORBIDDEN_CHARS, \"\");\r\n\r\n if (\r\n device.productKey ==\r\n \"s3Xk4x\" /* && adapter && adapter.userId && device.id */\r\n ) {\r\n adapter.log.debug(`[createSolarFlowStates] Smart Plug not supported.`);\r\n return;\r\n // productKey = adapter.userId;\r\n // deviceKey = device.id.toString();\r\n }\r\n\r\n adapter.log.debug(\r\n `[createSolarFlowStates] Creating or updating SolarFlow states for ${device.productName} (${productKey}/${deviceKey}) and name '${device.name}'.`\r\n );\r\n\r\n // Create device (e.g. the product type -> SolarFlow)\r\n await adapter?.extendObject(productKey, {\r\n type: \"device\",\r\n common: {\r\n name: {\r\n de: `${device.productName} (${productKey})`,\r\n en: `${device.productName} (${productKey})`,\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n // Create channel (e.g. the device specific key)\r\n await adapter?.extendObject(productKey + \".\" + deviceKey, {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: `${device.name} (${deviceKey})`,\r\n en: `${device.name} (${deviceKey})`,\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n // Create pack data folder\r\n if (!device.productName.toLocaleLowerCase().includes(\"smart plug\")) {\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.packData`, {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: \"Batterie Packs\",\r\n en: \"Battery packs\",\r\n },\r\n },\r\n native: {},\r\n });\r\n }\r\n\r\n const states = getStateDefinition(device.productName);\r\n\r\n if (states.length == 0) {\r\n adapter.log.error(\r\n `[createSolarFlowLocalStates] Unknown product (${device.productName}). We cannot create control states! Please contact the developer!`\r\n );\r\n return;\r\n }\r\n\r\n states.forEach(async (state: ISolarflowState) => {\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.${state.title}`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: state.nameDe,\r\n en: state.nameEn,\r\n },\r\n type: state.type,\r\n desc: state.title,\r\n role: state.role,\r\n read: true,\r\n write: false,\r\n unit: state.unit,\r\n states: state.states,\r\n },\r\n native: {},\r\n });\r\n });\r\n\r\n // Set SOC from device\r\n if (\r\n device.electricity &&\r\n !device.productName.toLocaleLowerCase().includes(\"smart plug\")\r\n ) {\r\n await updateSolarFlowState(\r\n adapter,\r\n device.productKey,\r\n device.deviceKey,\r\n \"electricLevel\",\r\n device.electricity\r\n );\r\n }\r\n\r\n // Set sn number from device\r\n if (device.snNumber) {\r\n await updateSolarFlowState(\r\n adapter,\r\n productKey,\r\n deviceKey,\r\n \"snNumber\",\r\n device.snNumber.toString()\r\n );\r\n }\r\n\r\n // Set the ACE connection info if is solarflow hub device\r\n if (\r\n (device.productName.toLocaleLowerCase() == \"solarflow hub 2000\" ||\r\n device.productName.toLocaleLowerCase() == \"solarflow2.0\") &&\r\n device._connectedWithAce != null &&\r\n device._connectedWithAce != undefined\r\n ) {\r\n await updateSolarFlowState(\r\n adapter,\r\n device.productKey,\r\n device.deviceKey,\r\n \"connectedWithAce\",\r\n device._connectedWithAce\r\n );\r\n }\r\n\r\n // Set product name from device\r\n await updateSolarFlowState(\r\n adapter,\r\n productKey,\r\n deviceKey,\r\n \"productName\",\r\n device.productName\r\n );\r\n\r\n // Set wifi state from device\r\n await updateSolarFlowState(\r\n adapter,\r\n productKey,\r\n deviceKey,\r\n \"wifiState\",\r\n device.wifiStatus ? \"Connected\" : \"Disconnected\"\r\n );\r\n\r\n if (!device.productName.toLocaleLowerCase().includes(\"smart plug\")) {\r\n // Create control states only when using App MQTT servers - and not the fallback one!\r\n if (!adapter.config.useFallbackService) {\r\n await createControlStates(\r\n adapter,\r\n productKey,\r\n deviceKey,\r\n device.productName\r\n );\r\n }\r\n\r\n if (adapter.config.useCalculation) {\r\n // Create calculations folder\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.calculations`, {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: \"Berechnungen f\u00FCr Ger\u00E4t \" + deviceKey,\r\n en: \"Calculations for Device \" + deviceKey,\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n await createCalculationStates(adapter, productKey, deviceKey);\r\n } else {\r\n //await deleteCalculationStates(adapter, productKey, deviceKey);\r\n }\r\n }\r\n};\r\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/build/main.js CHANGED
@@ -182,21 +182,11 @@ class ZendureSolarflow extends utils.Adapter {
182
182
  await this.deviceList.forEach(
183
183
  async (device) => {
184
184
  var _a;
185
- let type = "solarflow";
186
- if (device.productName.toLocaleLowerCase().includes("hyper")) {
187
- type = "hyper";
188
- } else if (device.productName.toLocaleLowerCase().includes("ace")) {
189
- type = "ace";
190
- } else if (device.productName.toLocaleLowerCase().includes("aio")) {
191
- type = "aio";
192
- } else if (device.productName.toLocaleLowerCase().includes("smart plug")) {
193
- type = "smartPlug";
194
- }
195
185
  if (device.packList && device.packList.length > 0) {
196
186
  device.packList.forEach(async (subDevice) => {
197
187
  if (subDevice.productName.toLocaleLowerCase() == "ace 1500") {
198
188
  device._connectedWithAce = true;
199
- await (0, import_createSolarFlowStates.createSolarFlowStates)(this, subDevice, "ace");
189
+ await (0, import_createSolarFlowStates.createSolarFlowStates)(this, subDevice);
200
190
  await (0, import_adapterService.updateSolarFlowState)(
201
191
  this,
202
192
  subDevice.productKey,
@@ -207,7 +197,7 @@ class ZendureSolarflow extends utils.Adapter {
207
197
  }
208
198
  });
209
199
  }
210
- await (0, import_createSolarFlowStates.createSolarFlowStates)(this, device, type);
200
+ await (0, import_createSolarFlowStates.createSolarFlowStates)(this, device);
211
201
  if (!device.productName.toLowerCase().includes("smart plug")) {
212
202
  await (0, import_adapterService.updateSolarFlowState)(
213
203
  this,
@@ -294,50 +284,68 @@ class ZendureSolarflow extends utils.Adapter {
294
284
  } else if (state.val != void 0 && state.val != null && !state.ack) {
295
285
  switch (stateName1) {
296
286
  case "control":
297
- if (stateName2 == "setOutputLimit") {
298
- (0, import_mqttService.setOutputLimit)(this, productKey, deviceKey, Number(state.val));
299
- } else if (stateName2 == "setInputLimit") {
300
- (0, import_mqttService.setInputLimit)(this, productKey, deviceKey, Number(state.val));
301
- } else if (stateName2 == "dischargeLimit") {
302
- (0, import_mqttService.setDischargeLimit)(this, productKey, deviceKey, Number(state.val));
303
- } else if (stateName2 == "chargeLimit") {
304
- (0, import_mqttService.setChargeLimit)(this, productKey, deviceKey, Number(state.val));
305
- } else if (stateName2 == "passMode") {
306
- (0, import_mqttService.setPassMode)(this, productKey, deviceKey, Number(state.val));
307
- } else if (stateName2 == "dcSwitch") {
308
- (0, import_mqttService.setDcSwitch)(
309
- this,
310
- productKey,
311
- deviceKey,
312
- state.val ? true : false
313
- );
314
- } else if (stateName2 == "acSwitch") {
315
- (0, import_mqttService.setAcSwitch)(
316
- this,
317
- productKey,
318
- deviceKey,
319
- state.val ? true : false
320
- );
321
- } else if (stateName2 == "acMode") {
322
- (0, import_mqttService.setAcMode)(this, productKey, deviceKey, Number(state.val));
323
- } else if (stateName2 == "hubState") {
324
- (0, import_mqttService.setHubState)(this, productKey, deviceKey, Number(state.val));
325
- } else if (stateName2 == "autoModel") {
326
- (0, import_mqttService.setAutoModel)(this, productKey, deviceKey, Number(state.val));
327
- } else if (stateName2 == "autoRecover") {
328
- (0, import_mqttService.setAutoRecover)(
329
- this,
330
- productKey,
331
- deviceKey,
332
- state.val ? true : false
333
- );
334
- } else if (stateName2 == "buzzerSwitch") {
335
- (0, import_mqttService.setBuzzerSwitch)(
336
- this,
337
- productKey,
338
- deviceKey,
339
- state.val ? true : false
340
- );
287
+ switch (stateName2) {
288
+ case "setOutputLimit":
289
+ (0, import_mqttService.setOutputLimit)(this, productKey, deviceKey, Number(state.val));
290
+ break;
291
+ case "setInputLimit":
292
+ (0, import_mqttService.setInputLimit)(this, productKey, deviceKey, Number(state.val));
293
+ break;
294
+ case "chargeLimit":
295
+ (0, import_mqttService.setChargeLimit)(this, productKey, deviceKey, Number(state.val));
296
+ break;
297
+ case "dischargeLimit":
298
+ (0, import_mqttService.setDischargeLimit)(
299
+ this,
300
+ productKey,
301
+ deviceKey,
302
+ Number(state.val)
303
+ );
304
+ break;
305
+ case "passMode":
306
+ (0, import_mqttService.setPassMode)(this, productKey, deviceKey, Number(state.val));
307
+ break;
308
+ case "dcSwitch":
309
+ (0, import_mqttService.setDcSwitch)(
310
+ this,
311
+ productKey,
312
+ deviceKey,
313
+ state.val ? true : false
314
+ );
315
+ break;
316
+ case "acSwitch":
317
+ (0, import_mqttService.setAcSwitch)(
318
+ this,
319
+ productKey,
320
+ deviceKey,
321
+ state.val ? true : false
322
+ );
323
+ break;
324
+ case "acMode":
325
+ (0, import_mqttService.setAcMode)(this, productKey, deviceKey, Number(state.val));
326
+ break;
327
+ case "hubState":
328
+ (0, import_mqttService.setHubState)(this, productKey, deviceKey, Number(state.val));
329
+ break;
330
+ case "autoModel":
331
+ (0, import_mqttService.setAutoModel)(this, productKey, deviceKey, Number(state.val));
332
+ break;
333
+ case "autoRecover":
334
+ (0, import_mqttService.setAutoRecover)(
335
+ this,
336
+ productKey,
337
+ deviceKey,
338
+ state.val ? true : false
339
+ );
340
+ break;
341
+ case "buzzerSwitch":
342
+ (0, import_mqttService.setBuzzerSwitch)(
343
+ this,
344
+ productKey,
345
+ deviceKey,
346
+ state.val ? true : false
347
+ );
348
+ break;
341
349
  }
342
350
  break;
343
351
  default:
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 setDischargeLimit,\r\n setHubState,\r\n setInputLimit,\r\n setOutputLimit,\r\n setPassMode,\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 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 let type = \"solarflow\";\r\n\r\n if (\r\n device.productName.toLocaleLowerCase().includes(\"hyper\")\r\n ) {\r\n type = \"hyper\";\r\n } else if (\r\n device.productName.toLocaleLowerCase().includes(\"ace\")\r\n ) {\r\n type = \"ace\";\r\n } else if (\r\n device.productName.toLocaleLowerCase().includes(\"aio\")\r\n ) {\r\n type = \"aio\";\r\n } else if (\r\n device.productName\r\n .toLocaleLowerCase()\r\n .includes(\"smart plug\")\r\n ) {\r\n //console.log(device);\r\n type = \"smartPlug\";\r\n }\r\n\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, \"ace\");\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, type);\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];\r\n const deviceKey = splitted[3];\r\n const stateName1 = splitted[4];\r\n const stateName2 = splitted[5];\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 if (stateName2 == \"setOutputLimit\") {\r\n setOutputLimit(this, productKey, deviceKey, Number(state.val));\r\n } else if (stateName2 == \"setInputLimit\") {\r\n setInputLimit(this, productKey, deviceKey, Number(state.val));\r\n } else if (stateName2 == \"dischargeLimit\") {\r\n setDischargeLimit(this, productKey, deviceKey, Number(state.val));\r\n } else if (stateName2 == \"chargeLimit\") {\r\n setChargeLimit(this, productKey, deviceKey, Number(state.val));\r\n } else if (stateName2 == \"passMode\") {\r\n setPassMode(this, productKey, deviceKey, Number(state.val));\r\n } else if (stateName2 == \"dcSwitch\") {\r\n setDcSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n } else if (stateName2 == \"acSwitch\") {\r\n setAcSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n } else if (stateName2 == \"acMode\") {\r\n setAcMode(this, productKey, deviceKey, Number(state.val));\r\n } else if (stateName2 == \"hubState\") {\r\n setHubState(this, productKey, deviceKey, Number(state.val));\r\n } else if (stateName2 == \"autoModel\") {\r\n setAutoModel(this, productKey, deviceKey, Number(state.val));\r\n } else if (stateName2 == \"autoRecover\") {\r\n setAutoRecover(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n } else if (stateName2 == \"buzzerSwitch\") {\r\n setBuzzerSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\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 setDischargeLimit,\r\n setHubState,\r\n setInputLimit,\r\n setOutputLimit,\r\n setPassMode,\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 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 }\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/ISolarflowState.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nexport interface ISolarflowState {\n title: string;\n nameDe: string;\n nameEn: string;\n role: string;\n type: ioBroker.CommonType; // Datentyp\n unit?: string;\n states?: string | string[] | Record<string, string> | undefined;\n}\n"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nexport interface ISolarflowState {\n title: string;\n nameDe: string;\n nameEn: string;\n role: string;\n min?: number; // Minimalwert\n max?: number; // Maximalwert\n step?: number; // Schrittweite\n read?: boolean; // Lesezugriff\n write?: boolean; // Schreibzugriff\n type: ioBroker.CommonType; // Datentyp\n unit?: string;\n states?: string | string[] | Record<string, string> | undefined;\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -95,7 +95,7 @@ const checkVoltage = async (adapter, productKey, deviceKey, voltage) => {
95
95
  false,
96
96
  true
97
97
  ));
98
- if (adapter.config.forceShutdownOnLowVoltage) {
98
+ if (adapter.config.useLowVoltageBlock && adapter.config.forceShutdownOnLowVoltage) {
99
99
  (0, import_mqttService.setDischargeLimit)(
100
100
  adapter,
101
101
  productKey,