iobroker.zendure-solarflow 1.7.0 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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 connectMqttClient,\r\n setAcSwitch,\r\n setAutoRecover,\r\n setBuzzerSwitch,\r\n setChargeLimit,\r\n setDcSwitch,\r\n setDischargeLimit,\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\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 accessToken: string | undefined = undefined; // Access Token for Zendure Rest API\r\n public deviceList: ISolarFlowDeviceDetails[] = [];\r\n public paths: ISolarFlowPaths | undefined = undefined;\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\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 // 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 if (this.config.useFallbackService && this.config.snNumber) {\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 login(this)\r\n ?.then((_accessToken: string) => {\r\n this.accessToken = _accessToken;\r\n\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.toLocaleLowerCase() == \"hyper 2000\" ||\r\n device.productName.toLocaleLowerCase() == \"ace 1500\"\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() == \"hyper 2000\"\r\n ) {\r\n type = \"hyper\";\r\n } else if (\r\n device.productName.toLocaleLowerCase() == \"ace 1500\"\r\n ) {\r\n type = \"ace\";\r\n }\r\n\r\n // States erstellen\r\n await createSolarFlowStates(this, device, type);\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 }\r\n );\r\n\r\n connectMqttClient(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 .catch((error) => {\r\n this.setState(\"info.connection\", false, true);\r\n this.log.error(\r\n \"[onReady] Logon error at Zendure cloud service! Error: \" +\r\n error.toString()\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 onUnload(callback: () => void): void {\r\n try {\r\n if (this.refreshAccessTokenInterval) {\r\n this.clearInterval(this.refreshAccessTokenInterval);\r\n }\r\n\r\n this.mqttClient?.end();\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 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 == \"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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,YAAuB;AACvB,yBAWO;AACP,wBAAqC;AAGrC,mBAAqC;AAGrC,4BAGO;AACP,mCAAsC;AACtC,gCAAuC;AAEvC,iCAA0C;AAEnC,MAAM,yBAAyB,MAAM,QAAQ;AAAA,EAC3C,YAAY,UAAyC,CAAC,GAAG;AAC9D,UAAM;AAAA,MACJ,GAAG;AAAA,MACH,MAAM;AAAA,IACR,CAAC;AAMH,SAAO,cAAkC;AACzC;AAAA,SAAO,aAAwC,CAAC;AAChD,SAAO,QAAqC;AAE5C,SAAO,YAA8B;AAErC,SAAO,aAAqC;AAE5C,SAAO,iBAAkC;AACzC,SAAO,iBAAkC;AACzC,SAAO,iBAAkC;AACzC,SAAO,6BAA4D;AAEnE,SAAO,iCAA2C,CAAC;AAlBjD,SAAK,GAAG,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC;AACxC,SAAK,GAAG,eAAe,KAAK,cAAc,KAAK,IAAI,CAAC;AACpD,SAAK,GAAG,UAAU,KAAK,SAAS,KAAK,IAAI,CAAC;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAc,UAAyB;AAhEzC;AAiEI,UAAM,KAAK,aAAa,QAAQ;AAAA,MAC9B,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,QAAQ,CAAC;AAAA,IACX,CAAC;AAED,UAAM,KAAK,aAAa,mBAAmB;AAAA,MACzC,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI;AAAA,UACJ,IAAI;AAAA,QACN;AAAA,QACA,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA,QAAQ,CAAC;AAAA,IACX,CAAC;AAGD,QAAI,KAAK,OAAO,UAAU,KAAK,OAAO,UAAU,MAAM;AACpD,WAAK,QAAQ;AAAA,IACf,OAAO;AACL,WAAK,QAAQ;AAAA,IACf;AAEA,SAAK,IAAI,MAAM,4BAA4B,KAAK,OAAO,MAAM;AAE7D,QAAI,KAAK,OAAO,sBAAsB,KAAK,OAAO,UAAU;AAE1D,4DAAuB,IAAI,EAAE,KAAK,CAAC,SAAoC;AAErE,YAAI,KAAK,UAAU,KAAK,WAAW,KAAK,QAAQ,KAAK,QAAQ;AAC3D;AAAA,YACE;AAAA,YACA,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,WACE,CAAC,KAAK,OAAO,sBACb,KAAK,OAAO,YACZ,KAAK,OAAO,UACZ;AAEA,yCAAM,IAAI,MAAV,mBACI,KAAK,CAAC,iBAAyB;AAC/B,aAAK,cAAc;AAEnB,aAAK,SAAS,mBAAmB,MAAM,IAAI;AAC3C,aAAK,YAAY,oBAAI,KAAK;AAG1B,6CAAc,IAAI,EACf,KAAK,OAAO,WAAsC;AACjD,cAAI,QAAQ;AAIV,iBAAK,aAAa,OAAO;AAAA,cACvB,CAAC,WACC,OAAO,YAAY,YAAY,EAAE,SAAS,WAAW,KACrD,OAAO,YAAY,kBAAkB,KAAK,gBAC1C,OAAO,YAAY,kBAAkB,KAAK;AAAA,YAC9C;AAEA,sBAAM,0CAAmB,IAAI;AAE7B,iBAAK,IAAI;AAAA,cACP,mBAAmB,KAAK,WAAW,MAAM;AAAA,YAC3C;AAEA,kBAAM,KAAK,WAAW;AAAA,cACpB,OAAO,WAAoC;AACzC,oBAAI,OAAO;AAEX,oBACE,OAAO,YAAY,kBAAkB,KAAK,cAC1C;AACA,yBAAO;AAAA,gBACT,WACE,OAAO,YAAY,kBAAkB,KAAK,YAC1C;AACA,yBAAO;AAAA,gBACT;AAGA,0BAAM,oDAAsB,MAAM,QAAQ,IAAI;AAE9C,0BAAM;AAAA,kBACJ;AAAA,kBACA,OAAO;AAAA,kBACP,OAAO;AAAA,kBACP;AAAA,kBACA,KAAK,OAAO;AAAA,gBACd;AAAA,cACF;AAAA,YACF;AAEA,sDAAkB,IAAI;AAAA,UACxB;AAAA,QACF,CAAC,EACA,MAAM,MAAM;AA/KzB,cAAAA;AAgLc,eAAK,SAAS,mBAAmB,OAAO,IAAI;AAC5C,WAAAA,MAAA,KAAK,QAAL,gBAAAA,IAAU,MAAM;AAAA,QAClB,CAAC;AAAA,MACL,GACC,MAAM,CAAC,UAAU;AAChB,aAAK,SAAS,mBAAmB,OAAO,IAAI;AAC5C,aAAK,IAAI;AAAA,UACP,4DACE,MAAM,SAAS;AAAA,QACnB;AAAA,MACF;AAAA,IACJ,OAAO;AACL,WAAK,SAAS,mBAAmB,OAAO,IAAI;AAC5C,WAAK,IAAI,MAAM,0CAA0C;AAAA,IAE3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,SAAS,UAA4B;AArM/C;AAsMI,QAAI;AACF,UAAI,KAAK,4BAA4B;AACnC,aAAK,cAAc,KAAK,0BAA0B;AAAA,MACpD;AAEA,iBAAK,eAAL,mBAAiB;AAEjB,WAAK,SAAS,mBAAmB,OAAO,IAAI;AAG5C,UAAI,KAAK,gBAAgB;AACvB,aAAK,eAAe,OAAO;AAC3B,aAAK,iBAAiB;AAAA,MACxB;AAEA,UAAI,KAAK,gBAAgB;AACvB,mBAAK,mBAAL,mBAAqB;AACrB,aAAK,iBAAiB;AAAA,MACxB;AAEA,UAAI,KAAK,gBAAgB;AACvB,aAAK,eAAe,OAAO;AAC3B,aAAK,iBAAiB;AAAA,MACxB;AAEA,eAAS;AAAA,IACX,SAAS,GAAG;AACV,eAAS;AAAA,IACX;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,cACN,IACA,OACM;AACN,QAAI,OAAO;AAKT,YAAM,WAAW,GAAG,MAAM,GAAG;AAC7B,YAAM,aAAa,SAAS,CAAC;AAC7B,YAAM,YAAY,SAAS,CAAC;AAC5B,YAAM,aAAa,SAAS,CAAC;AAC7B,YAAM,aAAa,SAAS,CAAC;AAE7B,UAAI,KAAK,OAAO,sBAAsB,cAAc,WAAW;AAC7D,aAAK,IAAI;AAAA,UACP;AAAA,QACF;AAAA,MACF,WAES,MAAM,OAAO,UAAa,MAAM,OAAO,QAAQ,CAAC,MAAM,KAAK;AAClE,gBAAQ,YAAY;AAAA,UAClB,KAAK;AACH,gBAAI,cAAc,kBAAkB;AAClC,qDAAe,MAAM,YAAY,WAAW,OAAO,MAAM,GAAG,CAAC;AAAA,YAC/D,WAAW,cAAc,iBAAiB;AACxC,oDAAc,MAAM,YAAY,WAAW,OAAO,MAAM,GAAG,CAAC;AAAA,YAC9D,WAAW,cAAc,kBAAkB;AACzC,wDAAkB,MAAM,YAAY,WAAW,OAAO,MAAM,GAAG,CAAC;AAAA,YAClE,WAAW,cAAc,eAAe;AACtC,qDAAe,MAAM,YAAY,WAAW,OAAO,MAAM,GAAG,CAAC;AAAA,YAC/D,WAAW,cAAc,YAAY;AACnC,kDAAY,MAAM,YAAY,WAAW,OAAO,MAAM,GAAG,CAAC;AAAA,YAC5D,WAAW,cAAc,YAAY;AACnC;AAAA,gBACE;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,MAAM,MAAM,OAAO;AAAA,cACrB;AAAA,YACF,WAAW,cAAc,YAAY;AACnC;AAAA,gBACE;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,MAAM,MAAM,OAAO;AAAA,cACrB;AAAA,YACF,WAAW,cAAc,eAAe;AACtC;AAAA,gBACE;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,MAAM,MAAM,OAAO;AAAA,cACrB;AAAA,YACF,WAAW,cAAc,gBAAgB;AACvC;AAAA,gBACE;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,MAAM,MAAM,OAAO;AAAA,cACrB;AAAA,YACF;AACA;AAAA,UACF;AACE;AAAA,QACJ;AAAA,MACF,OAAO;AAAA,MAGP;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAI,QAAQ,SAAS,QAAQ;AAE3B,SAAO,UAAU,CAAC,YAChB,IAAI,iBAAiB,OAAO;AAChC,OAAO;AAEL,GAAC,MAAM,IAAI,iBAAiB,GAAG;AACjC;",
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 connectMqttClient,\r\n setAcSwitch,\r\n setAutoRecover,\r\n setBuzzerSwitch,\r\n setChargeLimit,\r\n setDcSwitch,\r\n setDischargeLimit,\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\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 accessToken: string | undefined = undefined; // Access Token for Zendure Rest API\r\n public deviceList: ISolarFlowDeviceDetails[] = [];\r\n public paths: ISolarFlowPaths | undefined = undefined;\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\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 // 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 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 login(this)\r\n ?.then((_accessToken: string) => {\r\n this.accessToken = _accessToken;\r\n\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 console.log(result);\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.toLocaleLowerCase() == \"hyper 2000\" ||\r\n device.productName.toLocaleLowerCase() == \"ace 1500\"\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() == \"hyper 2000\"\r\n ) {\r\n type = \"hyper\";\r\n } else if (\r\n device.productName.toLocaleLowerCase() == \"ace 1500\"\r\n ) {\r\n type = \"ace\";\r\n }\r\n\r\n // States erstellen\r\n await createSolarFlowStates(this, device, type);\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\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() ==\r\n \"ace 1500\"\r\n ) {\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 );\r\n\r\n connectMqttClient(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 .catch((error) => {\r\n this.setState(\"info.connection\", false, true);\r\n this.log.error(\r\n \"[onReady] Logon error at Zendure cloud service! Error: \" +\r\n error.toString()\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 onUnload(callback: () => void): void {\r\n try {\r\n if (this.refreshAccessTokenInterval) {\r\n this.clearInterval(this.refreshAccessTokenInterval);\r\n }\r\n\r\n this.mqttClient?.end();\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 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 == \"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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",
6
6
  "names": ["_a"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/models/ISolarFlowDeviceDetails.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\nexport interface ISolarFlowDeviceDetails {\r\n batteryCode?: string;\r\n bindId?: number;\r\n bindStatus?: number;\r\n bindType?: number;\r\n blueState?: boolean;\r\n deviceKey: string;\r\n electricity?: number; // SOC\r\n fourGStatus?: boolean;\r\n id?: number;\r\n input?: boolean;\r\n inputPower?: number;\r\n isShareFlag?: string;\r\n isSwitch?: boolean;\r\n name?: string; // SolarFlow\r\n networkType?: number;\r\n onlineFlag?: string;\r\n output?: boolean;\r\n outputPower?: number;\r\n packList?: number[];\r\n parallelMode?: number;\r\n productId?: number;\r\n productKey: string;\r\n productName: string;\r\n productType?: number;\r\n remainOutTime?: number;\r\n seriesMode?: number;\r\n slowChargePower?: number;\r\n snNumber?: string;\r\n standard?: string;\r\n temperature?: number;\r\n temperatureUnit?: number;\r\n upgradeStatus?: unknown;\r\n upgradeStatusDes?: string;\r\n upsMode?: boolean;\r\n url?: string;\r\n wifiStatus?: boolean;\r\n}\r\n"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\nexport interface ISolarFlowDeviceDetails {\r\n batteryCode?: string;\r\n bindId?: number;\r\n bindStatus?: number;\r\n bindType?: number;\r\n blueState?: boolean;\r\n deviceKey: string;\r\n electricity?: number; // SOC\r\n fourGStatus?: boolean;\r\n id?: number;\r\n input?: boolean;\r\n inputPower?: number;\r\n isShareFlag?: string;\r\n isSwitch?: boolean;\r\n name?: string; // SolarFlow\r\n networkType?: number;\r\n onlineFlag?: string;\r\n output?: boolean;\r\n outputPower?: number;\r\n packList?: ISolarFlowDeviceDetails[];\r\n parallelMode?: number;\r\n productId?: number;\r\n productKey: string;\r\n productName: string;\r\n productType?: number;\r\n remainOutTime?: number;\r\n seriesMode?: number;\r\n slowChargePower?: number;\r\n snNumber?: string;\r\n standard?: string;\r\n temperature?: number;\r\n temperatureUnit?: number;\r\n upgradeStatus?: unknown;\r\n upgradeStatusDes?: string;\r\n upsMode?: boolean;\r\n url?: string;\r\n wifiStatus?: boolean;\r\n}\r\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -52,7 +52,11 @@ const knownMqttProps = [
52
52
  "acOutputPower",
53
53
  "acSwitch",
54
54
  "dcSwitch",
55
- "dcOutputPower"
55
+ "dcOutputPower",
56
+ "packNum",
57
+ "gridPower",
58
+ "energyPower",
59
+ "batteryElectric"
56
60
  ];
57
61
  // Annotate the CommonJS export names for ESM import in node:
58
62
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/models/ISolarFlowMqttProperties.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\nimport { IPackData } from \"./IPackData\";\r\n\r\nexport interface IMqttData {\r\n properties?: ISolarFlowMqttProperties;\r\n packData?: IPackData[];\r\n}\r\n\r\nexport interface ISolarFlowMqttProperties {\r\n electricLevel?: number;\r\n packData?: IPackData[];\r\n packState?: number;\r\n pass?: number;\r\n passMode?: number;\r\n autoRecover?: number;\r\n outputHomePower?: number;\r\n outputLimit?: number;\r\n buzzerSwitch?: number;\r\n outputPackPower?: number;\r\n packInputPower?: number;\r\n solarInputPower?: number;\r\n pvPower1?: number;\r\n pvPower2?: number;\r\n solarPower1?: number;\r\n solarPower2?: number;\r\n remainOutTime?: number;\r\n remainInputTime?: number;\r\n socSet?: number;\r\n minSoc?: number;\r\n pvBrand?: number;\r\n inverseMaxPower?: number;\r\n wifiState?: number;\r\n hubState?: number;\r\n sn?: string;\r\n inputLimit?: number;\r\n gridInputPower?: number;\r\n acOutputPower?: number;\r\n acSwitch?: number;\r\n dcSwitch?: number;\r\n dcOutputPower?: number;\r\n // ambientLightNess\r\n // ambientLightColor\r\n // ambientLightMode\r\n // ambientSwitch\r\n // lowTemperature\r\n // solarInputPowerCycle\r\n // solarInputPowerCycle2\r\n // electricLevelCycle\r\n // autoModel\r\n // autoHeat\r\n // heatState\r\n // loraInvState\r\n // loraModuleState\r\n // invOutputPower\r\n // masterSoftVersion: 4112\r\n // inputMode\r\n // blueOta\r\n}\r\n\r\nexport const knownMqttProps = [\r\n \"electricLevel\",\r\n \"packData\",\r\n \"packState\",\r\n \"pass\",\r\n \"passMode\",\r\n \"autoRecover\",\r\n \"outputHomePower\",\r\n \"outputLimit\",\r\n \"buzzerSwitch\",\r\n \"outputPackPower\",\r\n \"packInputPower\",\r\n \"solarInputPower\",\r\n \"pvPower1\",\r\n \"pvPower2\",\r\n \"solarPower1\",\r\n \"solarPower2\",\r\n \"remainOutTime\",\r\n \"remainInputTime\",\r\n \"socSet\",\r\n \"minSoc\",\r\n \"pvBrand\",\r\n \"inverseMaxPower\",\r\n \"wifiState\",\r\n \"hubState\",\r\n \"sn\",\r\n \"inputLimit\",\r\n \"gridInputPower\",\r\n \"acOutputPower\",\r\n \"acSwitch\",\r\n \"dcSwitch\",\r\n \"dcOutputPower\",\r\n];\r\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA2DO,MAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\nimport { IPackData } from \"./IPackData\";\r\n\r\nexport interface IMqttData {\r\n properties?: ISolarFlowMqttProperties;\r\n packData?: IPackData[];\r\n}\r\n\r\nexport interface ISolarFlowMqttProperties {\r\n electricLevel?: number;\r\n packData?: IPackData[];\r\n packState?: number;\r\n pass?: number;\r\n passMode?: number;\r\n autoRecover?: number;\r\n outputHomePower?: number;\r\n outputLimit?: number;\r\n buzzerSwitch?: number;\r\n outputPackPower?: number;\r\n packInputPower?: number;\r\n solarInputPower?: number;\r\n pvPower1?: number;\r\n pvPower2?: number;\r\n solarPower1?: number;\r\n solarPower2?: number;\r\n remainOutTime?: number;\r\n remainInputTime?: number;\r\n socSet?: number;\r\n minSoc?: number;\r\n pvBrand?: number;\r\n inverseMaxPower?: number;\r\n wifiState?: number;\r\n hubState?: number;\r\n sn?: string;\r\n inputLimit?: number;\r\n gridInputPower?: number;\r\n acOutputPower?: number;\r\n acSwitch?: number;\r\n dcSwitch?: number;\r\n dcOutputPower?: number;\r\n packNum?: number;\r\n gridPower?: number;\r\n energyPower?: number;\r\n batteryElectric?: number;\r\n // ambientLightNess\r\n // ambientLightColor\r\n // ambientLightMode\r\n // ambientSwitch\r\n // lowTemperature\r\n // solarInputPowerCycle\r\n // solarInputPowerCycle2\r\n // electricLevelCycle\r\n // autoModel\r\n // autoHeat\r\n // heatState\r\n // loraInvState\r\n // loraModuleState\r\n // invOutputPower\r\n // masterSoftVersion: 4112\r\n // inputMode\r\n // blueOta\r\n}\r\n\r\nexport const knownMqttProps = [\r\n \"electricLevel\",\r\n \"packData\",\r\n \"packState\",\r\n \"pass\",\r\n \"passMode\",\r\n \"autoRecover\",\r\n \"outputHomePower\",\r\n \"outputLimit\",\r\n \"buzzerSwitch\",\r\n \"outputPackPower\",\r\n \"packInputPower\",\r\n \"solarInputPower\",\r\n \"pvPower1\",\r\n \"pvPower2\",\r\n \"solarPower1\",\r\n \"solarPower2\",\r\n \"remainOutTime\",\r\n \"remainInputTime\",\r\n \"socSet\",\r\n \"minSoc\",\r\n \"pvBrand\",\r\n \"inverseMaxPower\",\r\n \"wifiState\",\r\n \"hubState\",\r\n \"sn\",\r\n \"inputLimit\",\r\n \"gridInputPower\",\r\n \"acOutputPower\",\r\n \"acSwitch\",\r\n \"dcSwitch\",\r\n \"dcOutputPower\",\r\n \"packNum\",\r\n \"gridPower\",\r\n \"energyPower\",\r\n \"batteryElectric\",\r\n];\r\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA+DO,MAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
6
6
  "names": []
7
7
  }
@@ -45,6 +45,7 @@ module.exports = __toCommonJS(mqttService_exports);
45
45
  var mqtt = __toESM(require("mqtt"));
46
46
  var import_adapterService = require("./adapterService");
47
47
  var import_calculationService = require("./calculationService");
48
+ var import_ISolarFlowMqttProperties = require("../models/ISolarFlowMqttProperties");
48
49
  var import_jobSchedule = require("./jobSchedule");
49
50
  let adapter = void 0;
50
51
  const addOrUpdatePackData = async (productKey, deviceKey, packData, isSolarFlow) => {
@@ -162,7 +163,7 @@ const addOrUpdatePackData = async (productKey, deviceKey, packData, isSolarFlow)
162
163
  }
163
164
  };
164
165
  const onMessage = async (topic, message) => {
165
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya;
166
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H, _I, _J, _K, _L, _M, _N, _O, _P, _Q, _R, _S, _T, _U, _V, _W, _X, _Y, _Z, __, _$, _aa, _ba, _ca, _da, _ea, _fa, _ga, _ha, _ia, _ja, _ka, _la, _ma, _na, _oa, _pa, _qa, _ra, _sa, _ta, _ua, _va, _wa, _xa, _ya, _za, _Aa, _Ba, _Ca, _Da, _Ea;
166
167
  if (adapter) {
167
168
  const topicSplitted = topic.split("/");
168
169
  const productKey = topicSplitted[1];
@@ -251,7 +252,16 @@ const onMessage = async (topic, message) => {
251
252
  obj.properties.outputHomePower
252
253
  );
253
254
  }
254
- if (((_x = obj.properties) == null ? void 0 : _x.outputLimit) != null && ((_y = obj.properties) == null ? void 0 : _y.outputLimit) != void 0) {
255
+ if (((_x = obj.properties) == null ? void 0 : _x.energyPower) != null && ((_y = obj.properties) == null ? void 0 : _y.energyPower) != void 0) {
256
+ (0, import_adapterService.updateSolarFlowState)(
257
+ adapter,
258
+ productKey,
259
+ deviceKey,
260
+ "energyPower",
261
+ obj.properties.energyPower
262
+ );
263
+ }
264
+ if (((_z = obj.properties) == null ? void 0 : _z.outputLimit) != null && ((_A = obj.properties) == null ? void 0 : _A.outputLimit) != void 0) {
255
265
  (0, import_adapterService.updateSolarFlowState)(
256
266
  adapter,
257
267
  productKey,
@@ -267,8 +277,8 @@ const onMessage = async (topic, message) => {
267
277
  obj.properties.outputLimit
268
278
  );
269
279
  }
270
- if (((_z = obj.properties) == null ? void 0 : _z.buzzerSwitch) != null && ((_A = obj.properties) == null ? void 0 : _A.buzzerSwitch) != void 0) {
271
- const value = ((_B = obj.properties) == null ? void 0 : _B.buzzerSwitch) == 0 ? false : true;
280
+ if (((_B = obj.properties) == null ? void 0 : _B.buzzerSwitch) != null && ((_C = obj.properties) == null ? void 0 : _C.buzzerSwitch) != void 0) {
281
+ const value = ((_D = obj.properties) == null ? void 0 : _D.buzzerSwitch) == 0 ? false : true;
272
282
  (0, import_adapterService.updateSolarFlowState)(
273
283
  adapter,
274
284
  productKey,
@@ -284,7 +294,7 @@ const onMessage = async (topic, message) => {
284
294
  value
285
295
  );
286
296
  }
287
- if (((_C = obj.properties) == null ? void 0 : _C.outputPackPower) != null && ((_D = obj.properties) == null ? void 0 : _D.outputPackPower) != void 0) {
297
+ if (((_E = obj.properties) == null ? void 0 : _E.outputPackPower) != null && ((_F = obj.properties) == null ? void 0 : _F.outputPackPower) != void 0) {
288
298
  (0, import_adapterService.updateSolarFlowState)(
289
299
  adapter,
290
300
  productKey,
@@ -294,7 +304,7 @@ const onMessage = async (topic, message) => {
294
304
  );
295
305
  (0, import_adapterService.updateSolarFlowState)(adapter, productKey, deviceKey, "packInputPower", 0);
296
306
  }
297
- if (((_E = obj.properties) == null ? void 0 : _E.packInputPower) != null && ((_F = obj.properties) == null ? void 0 : _F.packInputPower) != void 0) {
307
+ if (((_G = obj.properties) == null ? void 0 : _G.packInputPower) != null && ((_H = obj.properties) == null ? void 0 : _H.packInputPower) != void 0) {
298
308
  let standbyUsage = 0;
299
309
  const solarInputPower = await (adapter == null ? void 0 : adapter.getStateAsync(
300
310
  `${productKey}.${deviceKey}.solarInputPower`
@@ -317,7 +327,7 @@ const onMessage = async (topic, message) => {
317
327
  0
318
328
  );
319
329
  }
320
- if (((_G = obj.properties) == null ? void 0 : _G.solarInputPower) != null && ((_H = obj.properties) == null ? void 0 : _H.solarInputPower) != void 0) {
330
+ if (((_I = obj.properties) == null ? void 0 : _I.solarInputPower) != null && ((_J = obj.properties) == null ? void 0 : _J.solarInputPower) != void 0) {
321
331
  (0, import_adapterService.updateSolarFlowState)(
322
332
  adapter,
323
333
  productKey,
@@ -326,7 +336,7 @@ const onMessage = async (topic, message) => {
326
336
  obj.properties.solarInputPower
327
337
  );
328
338
  }
329
- if (((_I = obj.properties) == null ? void 0 : _I.pvPower1) != null && ((_J = obj.properties) == null ? void 0 : _J.pvPower1) != void 0) {
339
+ if (((_K = obj.properties) == null ? void 0 : _K.pvPower1) != null && ((_L = obj.properties) == null ? void 0 : _L.pvPower1) != void 0) {
330
340
  (0, import_adapterService.updateSolarFlowState)(
331
341
  adapter,
332
342
  productKey,
@@ -336,7 +346,7 @@ const onMessage = async (topic, message) => {
336
346
  obj.properties.pvPower1
337
347
  );
338
348
  }
339
- if (((_K = obj.properties) == null ? void 0 : _K.pvPower2) != null && ((_L = obj.properties) == null ? void 0 : _L.pvPower2) != void 0) {
349
+ if (((_M = obj.properties) == null ? void 0 : _M.pvPower2) != null && ((_N = obj.properties) == null ? void 0 : _N.pvPower2) != void 0) {
340
350
  (0, import_adapterService.updateSolarFlowState)(
341
351
  adapter,
342
352
  productKey,
@@ -346,7 +356,7 @@ const onMessage = async (topic, message) => {
346
356
  obj.properties.pvPower2
347
357
  );
348
358
  }
349
- if (((_M = obj.properties) == null ? void 0 : _M.solarPower1) != null && ((_N = obj.properties) == null ? void 0 : _N.solarPower1) != void 0) {
359
+ if (((_O = obj.properties) == null ? void 0 : _O.solarPower1) != null && ((_P = obj.properties) == null ? void 0 : _P.solarPower1) != void 0) {
350
360
  (0, import_adapterService.updateSolarFlowState)(
351
361
  adapter,
352
362
  productKey,
@@ -355,7 +365,7 @@ const onMessage = async (topic, message) => {
355
365
  obj.properties.solarPower1
356
366
  );
357
367
  }
358
- if (((_O = obj.properties) == null ? void 0 : _O.solarPower2) != null && ((_P = obj.properties) == null ? void 0 : _P.solarPower2) != void 0) {
368
+ if (((_Q = obj.properties) == null ? void 0 : _Q.solarPower2) != null && ((_R = obj.properties) == null ? void 0 : _R.solarPower2) != void 0) {
359
369
  (0, import_adapterService.updateSolarFlowState)(
360
370
  adapter,
361
371
  productKey,
@@ -364,7 +374,7 @@ const onMessage = async (topic, message) => {
364
374
  obj.properties.solarPower2
365
375
  );
366
376
  }
367
- if (((_Q = obj.properties) == null ? void 0 : _Q.remainOutTime) != null && ((_R = obj.properties) == null ? void 0 : _R.remainOutTime) != void 0) {
377
+ if (((_S = obj.properties) == null ? void 0 : _S.remainOutTime) != null && ((_T = obj.properties) == null ? void 0 : _T.remainOutTime) != void 0) {
368
378
  (0, import_adapterService.updateSolarFlowState)(
369
379
  adapter,
370
380
  productKey,
@@ -373,7 +383,7 @@ const onMessage = async (topic, message) => {
373
383
  obj.properties.remainOutTime
374
384
  );
375
385
  }
376
- if (((_S = obj.properties) == null ? void 0 : _S.remainInputTime) != null && ((_T = obj.properties) == null ? void 0 : _T.remainInputTime) != void 0) {
386
+ if (((_U = obj.properties) == null ? void 0 : _U.remainInputTime) != null && ((_V = obj.properties) == null ? void 0 : _V.remainInputTime) != void 0) {
377
387
  (0, import_adapterService.updateSolarFlowState)(
378
388
  adapter,
379
389
  productKey,
@@ -382,7 +392,7 @@ const onMessage = async (topic, message) => {
382
392
  obj.properties.remainInputTime
383
393
  );
384
394
  }
385
- if (((_U = obj.properties) == null ? void 0 : _U.socSet) != null && ((_V = obj.properties) == null ? void 0 : _V.socSet) != void 0) {
395
+ if (((_W = obj.properties) == null ? void 0 : _W.socSet) != null && ((_X = obj.properties) == null ? void 0 : _X.socSet) != void 0) {
386
396
  (0, import_adapterService.updateSolarFlowState)(
387
397
  adapter,
388
398
  productKey,
@@ -398,7 +408,7 @@ const onMessage = async (topic, message) => {
398
408
  Number(obj.properties.socSet) / 10
399
409
  );
400
410
  }
401
- if (((_W = obj.properties) == null ? void 0 : _W.minSoc) != null && ((_X = obj.properties) == null ? void 0 : _X.minSoc) != void 0) {
411
+ if (((_Y = obj.properties) == null ? void 0 : _Y.minSoc) != null && ((_Z = obj.properties) == null ? void 0 : _Z.minSoc) != void 0) {
402
412
  (0, import_adapterService.updateSolarFlowState)(
403
413
  adapter,
404
414
  productKey,
@@ -414,7 +424,7 @@ const onMessage = async (topic, message) => {
414
424
  Number(obj.properties.minSoc) / 10
415
425
  );
416
426
  }
417
- if (((_Y = obj.properties) == null ? void 0 : _Y.inputLimit) != null && ((_Z = obj.properties) == null ? void 0 : _Z.inputLimit) != void 0) {
427
+ if (((__ = obj.properties) == null ? void 0 : __.inputLimit) != null && ((_$ = obj.properties) == null ? void 0 : _$.inputLimit) != void 0) {
418
428
  (0, import_adapterService.updateSolarFlowState)(
419
429
  adapter,
420
430
  productKey,
@@ -423,7 +433,7 @@ const onMessage = async (topic, message) => {
423
433
  obj.properties.inputLimit
424
434
  );
425
435
  }
426
- if (((__ = obj.properties) == null ? void 0 : __.gridInputPower) != null && ((_$ = obj.properties) == null ? void 0 : _$.gridInputPower) != void 0) {
436
+ if (((_aa = obj.properties) == null ? void 0 : _aa.gridInputPower) != null && ((_ba = obj.properties) == null ? void 0 : _ba.gridInputPower) != void 0) {
427
437
  (0, import_adapterService.updateSolarFlowState)(
428
438
  adapter,
429
439
  productKey,
@@ -432,7 +442,7 @@ const onMessage = async (topic, message) => {
432
442
  obj.properties.gridInputPower
433
443
  );
434
444
  }
435
- if (((_aa = obj.properties) == null ? void 0 : _aa.acOutputPower) != null && ((_ba = obj.properties) == null ? void 0 : _ba.acOutputPower) != void 0) {
445
+ if (((_ca = obj.properties) == null ? void 0 : _ca.acOutputPower) != null && ((_da = obj.properties) == null ? void 0 : _da.acOutputPower) != void 0) {
436
446
  (0, import_adapterService.updateSolarFlowState)(
437
447
  adapter,
438
448
  productKey,
@@ -441,15 +451,24 @@ const onMessage = async (topic, message) => {
441
451
  obj.properties.acOutputPower
442
452
  );
443
453
  }
444
- if (((_ca = obj.properties) == null ? void 0 : _ca.acSwitch) != null && ((_da = obj.properties) == null ? void 0 : _da.acSwitch) != void 0) {
445
- const value = ((_ea = obj.properties) == null ? void 0 : _ea.acSwitch) == 0 ? false : true;
454
+ if (((_ea = obj.properties) == null ? void 0 : _ea.gridPower) != null && ((_fa = obj.properties) == null ? void 0 : _fa.gridPower) != void 0) {
455
+ (0, import_adapterService.updateSolarFlowState)(
456
+ adapter,
457
+ productKey,
458
+ deviceKey,
459
+ "gridPower",
460
+ obj.properties.gridPower
461
+ );
462
+ }
463
+ if (((_ga = obj.properties) == null ? void 0 : _ga.acSwitch) != null && ((_ha = obj.properties) == null ? void 0 : _ha.acSwitch) != void 0) {
464
+ const value = ((_ia = obj.properties) == null ? void 0 : _ia.acSwitch) == 0 ? false : true;
446
465
  (0, import_adapterService.updateSolarFlowState)(adapter, productKey, deviceKey, "acSwitch", value);
447
466
  }
448
- if (((_fa = obj.properties) == null ? void 0 : _fa.dcSwitch) != null && ((_ga = obj.properties) == null ? void 0 : _ga.dcSwitch) != void 0) {
449
- const value = ((_ha = obj.properties) == null ? void 0 : _ha.dcSwitch) == 0 ? false : true;
467
+ if (((_ja = obj.properties) == null ? void 0 : _ja.dcSwitch) != null && ((_ka = obj.properties) == null ? void 0 : _ka.dcSwitch) != void 0) {
468
+ const value = ((_la = obj.properties) == null ? void 0 : _la.dcSwitch) == 0 ? false : true;
450
469
  (0, import_adapterService.updateSolarFlowState)(adapter, productKey, deviceKey, "dcSwitch", value);
451
470
  }
452
- if (((_ia = obj.properties) == null ? void 0 : _ia.dcOutputPower) != null && ((_ja = obj.properties) == null ? void 0 : _ja.dcOutputPower) != void 0) {
471
+ if (((_ma = obj.properties) == null ? void 0 : _ma.dcOutputPower) != null && ((_na = obj.properties) == null ? void 0 : _na.dcOutputPower) != void 0) {
453
472
  (0, import_adapterService.updateSolarFlowState)(
454
473
  adapter,
455
474
  productKey,
@@ -458,11 +477,11 @@ const onMessage = async (topic, message) => {
458
477
  obj.properties.dcOutputPower
459
478
  );
460
479
  }
461
- if (((_ka = obj.properties) == null ? void 0 : _ka.pvBrand) != null && ((_la = obj.properties) == null ? void 0 : _la.pvBrand) != void 0) {
462
- const value = ((_ma = obj.properties) == null ? void 0 : _ma.pvBrand) == 0 ? "Others" : ((_na = obj.properties) == null ? void 0 : _na.pvBrand) == 1 ? "Hoymiles" : ((_oa = obj.properties) == null ? void 0 : _oa.pvBrand) == 2 ? "Enphase" : ((_pa = obj.properties) == null ? void 0 : _pa.pvBrand) == 3 ? "APSystems" : ((_qa = obj.properties) == null ? void 0 : _qa.pvBrand) == 4 ? "Anker" : ((_ra = obj.properties) == null ? void 0 : _ra.pvBrand) == 5 ? "Deye" : ((_sa = obj.properties) == null ? void 0 : _sa.pvBrand) == 6 ? "Bosswerk" : "Unknown";
480
+ if (((_oa = obj.properties) == null ? void 0 : _oa.pvBrand) != null && ((_pa = obj.properties) == null ? void 0 : _pa.pvBrand) != void 0) {
481
+ const value = ((_qa = obj.properties) == null ? void 0 : _qa.pvBrand) == 0 ? "Others" : ((_ra = obj.properties) == null ? void 0 : _ra.pvBrand) == 1 ? "Hoymiles" : ((_sa = obj.properties) == null ? void 0 : _sa.pvBrand) == 2 ? "Enphase" : ((_ta = obj.properties) == null ? void 0 : _ta.pvBrand) == 3 ? "APSystems" : ((_ua = obj.properties) == null ? void 0 : _ua.pvBrand) == 4 ? "Anker" : ((_va = obj.properties) == null ? void 0 : _va.pvBrand) == 5 ? "Deye" : ((_wa = obj.properties) == null ? void 0 : _wa.pvBrand) == 6 ? "Bosswerk" : "Unknown";
463
482
  (0, import_adapterService.updateSolarFlowState)(adapter, productKey, deviceKey, "pvBrand", value);
464
483
  }
465
- if (((_ta = obj.properties) == null ? void 0 : _ta.inverseMaxPower) != null && ((_ua = obj.properties) == null ? void 0 : _ua.inverseMaxPower) != void 0) {
484
+ if (((_xa = obj.properties) == null ? void 0 : _xa.inverseMaxPower) != null && ((_ya = obj.properties) == null ? void 0 : _ya.inverseMaxPower) != void 0) {
466
485
  (0, import_adapterService.updateSolarFlowState)(
467
486
  adapter,
468
487
  productKey,
@@ -471,7 +490,7 @@ const onMessage = async (topic, message) => {
471
490
  obj.properties.inverseMaxPower
472
491
  );
473
492
  }
474
- if (((_va = obj.properties) == null ? void 0 : _va.wifiState) != null && ((_wa = obj.properties) == null ? void 0 : _wa.wifiState) != void 0) {
493
+ if (((_za = obj.properties) == null ? void 0 : _za.wifiState) != null && ((_Aa = obj.properties) == null ? void 0 : _Aa.wifiState) != void 0) {
475
494
  (0, import_adapterService.updateSolarFlowState)(
476
495
  adapter,
477
496
  productKey,
@@ -480,7 +499,16 @@ const onMessage = async (topic, message) => {
480
499
  obj.properties.wifiState == 1 ? "Connected" : "Disconnected"
481
500
  );
482
501
  }
483
- if (((_xa = obj.properties) == null ? void 0 : _xa.hubState) != null && ((_ya = obj.properties) == null ? void 0 : _ya.hubState) != void 0) {
502
+ if (((_Ba = obj.properties) == null ? void 0 : _Ba.packNum) != null && ((_Ca = obj.properties) == null ? void 0 : _Ca.packNum) != void 0) {
503
+ (0, import_adapterService.updateSolarFlowState)(
504
+ adapter,
505
+ productKey,
506
+ deviceKey,
507
+ "packNum",
508
+ obj.properties.packNum
509
+ );
510
+ }
511
+ if (((_Da = obj.properties) == null ? void 0 : _Da.hubState) != null && ((_Ea = obj.properties) == null ? void 0 : _Ea.hubState) != void 0) {
484
512
  (0, import_adapterService.updateSolarFlowState)(
485
513
  adapter,
486
514
  productKey,
@@ -492,6 +520,16 @@ const onMessage = async (topic, message) => {
492
520
  if (obj.packData) {
493
521
  addOrUpdatePackData(productKey, deviceKey, obj.packData, isSolarFlow);
494
522
  }
523
+ if (obj.properties) {
524
+ Object.entries(obj.properties).forEach(([key, value]) => {
525
+ if (import_ISolarFlowMqttProperties.knownMqttProps.includes(key)) {
526
+ } else {
527
+ console.log(
528
+ `${productName == null ? void 0 : productName.val}: ${key} with value ${value} is a UNKNOWN Mqtt Prop!`
529
+ );
530
+ }
531
+ });
532
+ }
495
533
  }
496
534
  };
497
535
  const setChargeLimit = async (adapter2, productKey, deviceKey, socSet) => {
@@ -718,6 +756,39 @@ const connectMqttClient = (_adapter) => {
718
756
  onSubscribeIotTopic(error, device.productKey, device.deviceKey);
719
757
  });
720
758
  }, 1500 * index);
759
+ if (device.packList && device.packList.length > 0) {
760
+ device.packList.forEach(async (subDevice) => {
761
+ if (subDevice.productName.toLocaleLowerCase() == "ace 1500") {
762
+ const reportTopic2 = `/${subDevice.productKey}/${subDevice.deviceKey}/properties/report`;
763
+ const iotTopic2 = `iot/${subDevice.productKey}/${subDevice.deviceKey}/#`;
764
+ setTimeout(() => {
765
+ var _a;
766
+ if (adapter) {
767
+ adapter.log.debug(
768
+ `[connectMqttClient] Subscribing to MQTT Topic: ${reportTopic2}`
769
+ );
770
+ (_a = adapter.mqttClient) == null ? void 0 : _a.subscribe(
771
+ reportTopic2,
772
+ onSubscribeReportTopic
773
+ );
774
+ }
775
+ }, 1e3 * index);
776
+ setTimeout(() => {
777
+ var _a;
778
+ adapter == null ? void 0 : adapter.log.debug(
779
+ `[connectMqttClient] Subscribing to MQTT Topic: ${iotTopic2}`
780
+ );
781
+ (_a = adapter == null ? void 0 : adapter.mqttClient) == null ? void 0 : _a.subscribe(iotTopic2, (error) => {
782
+ onSubscribeIotTopic(
783
+ error,
784
+ subDevice.productKey,
785
+ subDevice.deviceKey
786
+ );
787
+ });
788
+ }, 1500 * index);
789
+ }
790
+ });
791
+ }
721
792
  }
722
793
  }
723
794
  );