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/README.md +5 -0
- package/build/helpers/createControlStates.js +62 -64
- package/build/helpers/createControlStates.js.map +2 -2
- package/build/helpers/createSolarFlowStates.js +87 -33
- package/build/helpers/createSolarFlowStates.js.map +2 -2
- package/build/main.js +16 -0
- package/build/main.js.map +2 -2
- package/build/models/ISolarFlowDeviceDetails.js.map +1 -1
- package/build/models/ISolarFlowMqttProperties.js +5 -1
- package/build/models/ISolarFlowMqttProperties.js.map +2 -2
- package/build/services/mqttService.js +99 -28
- package/build/services/mqttService.js.map +3 -3
- package/io-package.json +14 -14
- package/package.json +1 -1
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;
|
|
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?:
|
|
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;
|
|
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.
|
|
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 (((
|
|
271
|
-
const value = ((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
445
|
-
|
|
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 (((
|
|
449
|
-
const value = ((
|
|
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 (((
|
|
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 (((
|
|
462
|
-
const value = ((
|
|
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 (((
|
|
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 (((
|
|
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 (((
|
|
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
|
);
|