iobroker.zendure-solarflow 1.1.11 → 1.1.13
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 +7 -0
- package/admin/build/index.js +9 -9
- package/admin/build/index.js.map +2 -2
- package/build/helpers/createCalculationStates.js +275 -0
- package/build/helpers/createCalculationStates.js.map +7 -0
- package/build/helpers/createControlStates.js +111 -0
- package/build/helpers/createControlStates.js.map +7 -0
- package/build/helpers/createSolarFlowStates.js +296 -0
- package/build/helpers/createSolarFlowStates.js.map +7 -0
- package/build/helpers/deleteCalculationStates.js +51 -0
- package/build/helpers/deleteCalculationStates.js.map +7 -0
- package/build/main.js +49 -31
- package/build/main.js.map +3 -3
- package/build/services/adapterService.js +0 -728
- package/build/services/adapterService.js.map +2 -2
- package/build/services/calculationService.js +98 -0
- package/build/services/calculationService.js.map +7 -0
- package/build/services/jobSchedule.js +90 -0
- package/build/services/jobSchedule.js.map +7 -0
- package/build/services/mqttService.js +156 -40
- package/build/services/mqttService.js.map +2 -2
- package/build/services/webService.js +1 -1
- package/build/services/webService.js.map +2 -2
- package/io-package.json +27 -27
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/services/adapterService.ts"],
|
|
4
|
-
"sourcesContent": ["import { ZendureSolarflow } from \"../main\";\r\nimport { IPackData } from \"../models/IPackData\";\r\nimport { ISolarFlowDeviceDetails } from \"../models/ISolarFlowDeviceDetails\";\r\nimport { getDeviceList } from \"./webService\";\r\n\r\n/* eslint-disable @typescript-eslint/indent */\r\nconst createCalculationStates = async (\r\n adapter: ZendureSolarflow,\r\n productKey: string,\r\n deviceKey: string,\r\n): Promise<void> => {\r\n /*\r\n Start Solar Input Energy states\r\n */\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".calculations.solarInputEnergyTodayWh\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Heutiger Solarertrag (Wh)\",\r\n en: \"Todays solar input (Wh)\",\r\n },\r\n type: \"number\",\r\n desc: \"solarInputEnergyTodayWh\",\r\n role: \"value.energy\",\r\n read: true,\r\n write: false,\r\n unit: \"Wh\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".calculations.solarInputEnergyTodaykWh\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Heutiger Solarertrag (kWh)\",\r\n en: \"Todays solar input (kWh)\",\r\n },\r\n type: \"number\",\r\n desc: \"solarInputEnergyTodaykWh\",\r\n role: \"value.energy\",\r\n read: true,\r\n write: false,\r\n unit: \"kWh\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n /*\r\n Start output pack Energy states\r\n */\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".calculations.outputPackEnergyTodayWh\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Heutige Ladung zum Akku (Wh)\",\r\n en: \"todays charge energy to battery (Wh)\",\r\n },\r\n type: \"number\",\r\n desc: \"outputPackEnergyTodayWh\",\r\n role: \"value.energy\",\r\n read: true,\r\n write: false,\r\n unit: \"Wh\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".calculations.outputPackEnergyTodaykWh\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Heutige Ladung zum Akku (kWh)\",\r\n en: \"todays charge energy to battery (kWh)\",\r\n },\r\n type: \"number\",\r\n desc: \"outputPackEnergyTodaykWh\",\r\n role: \"value.energy\",\r\n read: true,\r\n write: false,\r\n unit: \"kWh\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n /*\r\n Start Pack Input Energy states\r\n */\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".calculations.packInputEnergyTodayWh\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Heutige Ladung zum Akku (Wh)\",\r\n en: \"todays charge energy to battery (Wh)\",\r\n },\r\n type: \"number\",\r\n desc: \"packInputEnergyTodayWh\",\r\n role: \"value.energy\",\r\n read: true,\r\n write: false,\r\n unit: \"Wh\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".calculations.packInputEnergyTodaykWh\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Heutige Einspeisung aus Akku (kWh)\",\r\n en: \"Todays discharge energy from battery (kWh)\",\r\n },\r\n type: \"number\",\r\n desc: \"packInputEnergyTodaykWh\",\r\n role: \"value.energy\",\r\n read: true,\r\n write: false,\r\n unit: \"kWh\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n /*\r\n Start outputHome Energy states\r\n */\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".calculations.outputHomeEnergyTodayWh\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Heutige Einspeisung ins Haus (Wh)\",\r\n en: \"Todays input energy to home (Wh)\",\r\n },\r\n type: \"number\",\r\n desc: \"outputHomeEnergyTodayWh\",\r\n role: \"value.energy\",\r\n read: true,\r\n write: false,\r\n unit: \"Wh\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".calculations.outputHomeEnergyTodaykWh\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Heutige Einspeisung ins Haus (kWh)\",\r\n en: \"Todays input energy to home (kWh)\",\r\n },\r\n type: \"number\",\r\n desc: \"outputHomeEnergyTodaykWh\",\r\n role: \"value.energy\",\r\n read: true,\r\n write: false,\r\n unit: \"kWh\",\r\n },\r\n native: {},\r\n },\r\n );\r\n /*\r\n End Energy states\r\n */\r\n\r\n // Calculation input time\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".calculations.remainInputTime\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Erwartete Ladedauer (hh:mm)\",\r\n en: \"remaining charge time (hh:mm)\",\r\n },\r\n type: \"string\",\r\n desc: \"calcRemainInputTime\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n // Calculation remainOutTime\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".calculations.remainOutTime\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Erwartete Entladedauer (hh:mm)\",\r\n en: \"remaining discharge time (hh:mm)\",\r\n },\r\n type: \"string\",\r\n desc: \"calcRemainOutTime\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n },\r\n );\r\n};\r\n\r\nconst createControlStates = async (\r\n adapter: ZendureSolarflow,\r\n productKey: string,\r\n deviceKey: string,\r\n): Promise<void> => {\r\n // Create control folder\r\n await adapter?.extendObjectAsync(productKey + \".\" + deviceKey + \".control\", {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: \"Steuerung f\u00FCr Ger\u00E4t \" + deviceKey,\r\n en: \"Control for device \" + deviceKey,\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n // State zum Setzen des Output Limit\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".control.\" + \"setOutputLimit\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Einzustellende Ausgangsleistung\",\r\n en: \"Control of the output limit\",\r\n },\r\n type: \"number\",\r\n desc: \"setOutputLimit\",\r\n role: \"value.power\",\r\n read: true,\r\n write: true,\r\n min: 0,\r\n unit: \"W\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n // State zum Setzen des Charge Limit\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".control.\" + \"chargeLimit\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Setzen des Lade-Limits\",\r\n en: \"Control of the charge limit\",\r\n },\r\n type: \"number\",\r\n desc: \"chargeLimit\",\r\n role: \"value.battery\",\r\n read: true,\r\n write: true,\r\n min: 40,\r\n max: 100,\r\n unit: \"%\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n // State zum Setzen des Discharge Limit\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".control.\" + \"dischargeLimit\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Setzen des Entlade-Limits\",\r\n en: \"Control of the discharge limit\",\r\n },\r\n type: \"number\",\r\n desc: \"dischargeLimit\",\r\n role: \"value.battery\",\r\n read: true,\r\n write: true,\r\n min: 0,\r\n max: 90,\r\n unit: \"%\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n // Subcribe to control states\r\n adapter?.subscribeStates(\r\n productKey + \".\" + deviceKey + \".control.\" + \"setOutputLimit\",\r\n );\r\n\r\n adapter?.subscribeStates(\r\n productKey + \".\" + deviceKey + \".control.\" + \"chargeLimit\",\r\n );\r\n\r\n adapter?.subscribeStates(\r\n productKey + \".\" + deviceKey + \".control.\" + \"dischargeLimit\",\r\n );\r\n};\r\n\r\nexport const createSolarFlowStates = async (\r\n adapter: ZendureSolarflow,\r\n productKey: string,\r\n deviceKey: string,\r\n): Promise<void> => {\r\n productKey = productKey.replace(adapter.FORBIDDEN_CHARS, \"\");\r\n deviceKey = deviceKey.replace(adapter.FORBIDDEN_CHARS, \"\");\r\n\r\n // Create device (e.g. the product type -> SolarFlow)\r\n await adapter?.extendObjectAsync(productKey, {\r\n type: \"device\",\r\n common: {\r\n name: { de: \"Produkt \" + productKey, en: \"Product \" + productKey },\r\n },\r\n native: {},\r\n });\r\n\r\n // Create channel (e.g. the device specific key)\r\n await adapter?.extendObjectAsync(productKey + \".\" + deviceKey, {\r\n type: \"channel\",\r\n common: {\r\n name: { de: \"Device Key \" + deviceKey, en: \"Device Key \" + deviceKey },\r\n },\r\n native: {},\r\n });\r\n\r\n // Create calculations folder\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".calculations\",\r\n {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: \"Berechnungen f\u00FCr Ger\u00E4t \" + deviceKey,\r\n en: \"Calculations for Device \" + deviceKey,\r\n },\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n // Create pack data folder\r\n await adapter?.extendObjectAsync(productKey + \".\" + deviceKey + \".packData\", {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: \"Akku Packs\",\r\n en: \"Battery packs\",\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"lastUpdate\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Letztes Update\", en: \"Last Update\" },\r\n type: \"number\",\r\n desc: \"lastUpdate\",\r\n role: \"value.time\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"electricLevel\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"SOC Gesamtsystem\", en: \"SOC of the system\" },\r\n type: \"number\",\r\n desc: \"electricLevel\",\r\n role: \"value.battery\",\r\n read: true,\r\n write: false,\r\n unit: \"%\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"outputHomePower\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Ausgangsleistung\", en: \"output power\" },\r\n type: \"number\",\r\n desc: \"outputHomePower\",\r\n role: \"value.power\",\r\n read: true,\r\n write: false,\r\n unit: \"W\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"outputLimit\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Limit der Ausgangsleistung\", en: \"limit of output power\" },\r\n type: \"number\",\r\n desc: \"outputLimit\",\r\n role: \"value.power\",\r\n read: true,\r\n write: false,\r\n unit: \"W\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"outputPackPower\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Ladeleistung zum Akku\", en: \"charge power\" },\r\n type: \"number\",\r\n desc: \"outputPackPower\",\r\n role: \"value.power\",\r\n read: true,\r\n write: false,\r\n unit: \"W\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"packInputPower\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Entladeleistung zum Akku\", en: \"discharge power\" },\r\n type: \"number\",\r\n desc: \"packInputPower\",\r\n role: \"value.power\",\r\n read: true,\r\n write: false,\r\n unit: \"W\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"solarInputPower\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Leistung der Solarmodule\", en: \"solar power\" },\r\n type: \"number\",\r\n desc: \"solarInputPower\",\r\n role: \"value.power\",\r\n read: true,\r\n write: false,\r\n unit: \"W\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"pvPower1\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Leistung PV 1\", en: \"solar power channel 1\" },\r\n type: \"number\",\r\n desc: \"pvPower1\",\r\n role: \"value.power\",\r\n read: true,\r\n write: false,\r\n unit: \"W\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"pvPower2\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Leistung PV 2\", en: \"solar power channel 2\" },\r\n type: \"number\",\r\n desc: \"pvPower2\",\r\n role: \"value.power\",\r\n read: true,\r\n write: false,\r\n unit: \"W\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"remainInputTime\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Erwartete Ladedauer\", en: \"remaining charge time\" },\r\n type: \"number\",\r\n desc: \"remainInputTime\",\r\n role: \"value.interval\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"remainOutTime\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Erwartete Entladedauer (Minuten)\",\r\n en: \"remaining discharge time (minutes)\",\r\n },\r\n type: \"number\",\r\n desc: \"remainOutTime\",\r\n role: \"value.interval\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"socSet\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Max. SOC\", en: \"max. SOC\" },\r\n type: \"number\",\r\n desc: \"socSet\",\r\n role: \"value.battery\",\r\n read: true,\r\n write: false,\r\n unit: \"%\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n await adapter?.extendObjectAsync(\r\n productKey + \".\" + deviceKey + \".\" + \"minSoc\",\r\n {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Min. SOC\", en: \"min. SOC\" },\r\n type: \"number\",\r\n desc: \"minSoc\",\r\n role: \"value.battery\",\r\n read: true,\r\n write: false,\r\n unit: \"%\",\r\n },\r\n native: {},\r\n },\r\n );\r\n\r\n // Subscibe to State updates to listen to changes\r\n adapter?.subscribeStates(\r\n productKey + \".\" + deviceKey + \".\" + \"solarInputPower\",\r\n );\r\n\r\n adapter?.subscribeStates(\r\n productKey + \".\" + deviceKey + \".\" + \"outputPackPower\",\r\n );\r\n\r\n adapter?.subscribeStates(\r\n productKey + \".\" + deviceKey + \".\" + \"packInputPower\",\r\n );\r\n\r\n adapter?.subscribeStates(\r\n productKey + \".\" + deviceKey + \".\" + \"outputHomePower\",\r\n );\r\n\r\n await createControlStates(adapter, productKey, deviceKey);\r\n await createCalculationStates(adapter, productKey, deviceKey);\r\n};\r\n\r\nexport const addOrUpdatePackData = async (\r\n adapter: ZendureSolarflow,\r\n productKey: string,\r\n deviceKey: string,\r\n packData: IPackData[],\r\n): Promise<void> => {\r\n await packData.forEach(async (x) => {\r\n // Process data only with a serial id!\r\n if (x.sn) {\r\n // create a state for the serial id\r\n const key = (productKey + \".\" + deviceKey + \".packData.\" + x.sn).replace(\r\n adapter.FORBIDDEN_CHARS,\r\n \"\",\r\n );\r\n\r\n await adapter?.extendObjectAsync(key + \".sn\", {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Seriennummer\",\r\n en: \"Serial id\",\r\n },\r\n type: \"string\",\r\n desc: \"Serial ID\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n await adapter?.setStateAsync(key + \".sn\", x.sn, true);\r\n\r\n if (x.socLevel) {\r\n // State f\u00FCr socLevel\r\n await adapter?.extendObjectAsync(key + \".socLevel\", {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"SOC der Batterie\",\r\n en: \"soc of battery\",\r\n },\r\n type: \"number\",\r\n desc: \"SOC Level\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n await adapter?.setStateAsync(key + \".socLevel\", x.socLevel, true);\r\n }\r\n\r\n if (x.maxTemp) {\r\n // State f\u00FCr maxTemp\r\n await adapter?.extendObjectAsync(key + \".maxTemp\", {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Max. Temperatur der Batterie\",\r\n en: \"max temp. of battery\",\r\n },\r\n type: \"number\",\r\n desc: \"Max. Temp\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n // Convert Kelvin to Celsius\r\n await adapter?.setStateAsync(\r\n key + \".maxTemp\",\r\n x.maxTemp / 10 - 273.15,\r\n true,\r\n );\r\n }\r\n\r\n if (x.minVol) {\r\n await adapter?.extendObjectAsync(key + \".minVol\", {\r\n type: \"state\",\r\n common: {\r\n name: \"minVol\",\r\n type: \"number\",\r\n desc: \"minVol\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n await adapter?.setStateAsync(key + \".minVol\", x.minVol / 100, true);\r\n }\r\n\r\n if (x.maxVol) {\r\n await adapter?.extendObjectAsync(key + \".maxVol\", {\r\n type: \"state\",\r\n common: {\r\n name: \"maxVol\",\r\n type: \"number\",\r\n desc: \"maxVol\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n await adapter?.setStateAsync(key + \".maxVol\", x.maxVol / 100, true);\r\n }\r\n\r\n if (x.totalVol) {\r\n await adapter?.extendObjectAsync(key + \".totalVol\", {\r\n type: \"state\",\r\n common: {\r\n name: \"totalVol\",\r\n type: \"number\",\r\n desc: \"totalVol\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n await adapter?.setStateAsync(key + \".totalVol\", x.totalVol / 100, true);\r\n }\r\n }\r\n });\r\n};\r\n\r\nexport const startCheckStatesTimer = async (\r\n adapter: ZendureSolarflow,\r\n): Promise<void> => {\r\n // Check for states that has no updates in the last 5 minutes and set them to 0\r\n const statesToReset: string[] = [\r\n \"outputHomePower\",\r\n \"outputPackPower\",\r\n \"packInputPower\",\r\n \"solarInputPower\",\r\n ];\r\n\r\n adapter.interval = adapter.setInterval(async () => {\r\n getDeviceList(adapter)\r\n .then((deviceList: ISolarFlowDeviceDetails[]) => {\r\n deviceList.forEach(async (device: ISolarFlowDeviceDetails) => {\r\n const lastUpdate = await adapter?.getStateAsync(\r\n device.productKey + \".\" + device.deviceKey + \".lastUpdate\",\r\n );\r\n\r\n const tenMinutesAgo = Date.now() / 1000 - 10 * 60; // Ten minutes ago\r\n\r\n if (\r\n lastUpdate &&\r\n lastUpdate.val &&\r\n Number(lastUpdate.val) < tenMinutesAgo\r\n ) {\r\n adapter.log.debug(\r\n `Last update for deviceKey ${device.deviceKey} was at ${new Date(\r\n Number(lastUpdate),\r\n )}, checking for pseudo power values!`,\r\n );\r\n // State was not updated in the last 10 minutes... set states to 0\r\n await statesToReset.forEach(async (stateName: string) => {\r\n await adapter?.setStateAsync(\r\n device.productKey + \".\" + device.deviceKey + \".\" + stateName,\r\n 0,\r\n true,\r\n );\r\n });\r\n\r\n // set electricLevel from deviceList\r\n await adapter?.setStateAsync(\r\n device.productKey + \".\" + device.deviceKey + \".electricLevel\",\r\n device.electricity,\r\n true,\r\n );\r\n }\r\n });\r\n })\r\n .catch(() => {\r\n adapter.log?.error(\"Retrieving device failed!\");\r\n return null;\r\n });\r\n }, 50000);\r\n};\r\n\r\nexport const calculateEnergy = async (\r\n adapter: ZendureSolarflow,\r\n productKey: string,\r\n deviceKey: string,\r\n stateKey: string, // e.g. packInput, outputHome, outputPack, solarInput\r\n state: ioBroker.State,\r\n): Promise<void> => {\r\n const stateNameWh =\r\n productKey +\r\n \".\" +\r\n deviceKey +\r\n \".calculations.\" +\r\n stateKey +\r\n \"EnergyTodayWh\";\r\n\r\n const stateNamekWh =\r\n productKey +\r\n \".\" +\r\n deviceKey +\r\n \".calculations.\" +\r\n stateKey +\r\n \"EnergyTodaykWh\";\r\n const currentVal = await adapter?.getStateAsync(stateNameWh);\r\n\r\n if (\r\n currentVal &&\r\n currentVal.lc &&\r\n state.val != undefined &&\r\n state.val != null\r\n ) {\r\n const timeFrame = state.lc - currentVal?.lc;\r\n const newVal =\r\n Number(currentVal.val) + (Number(state.val) * timeFrame) / 3600000; // Wh\r\n\r\n adapter?.setStateAsync(stateNameWh, newVal, true);\r\n adapter?.setStateAsync(\r\n stateNamekWh,\r\n Number((newVal / 1000).toFixed(2)),\r\n true,\r\n );\r\n } else {\r\n adapter?.setStateAsync(stateNameWh, 0, true);\r\n adapter?.setStateAsync(stateNamekWh, 0, true);\r\n }\r\n};\r\n\r\nexport const resetTodaysValues = async (\r\n adapter: ZendureSolarflow,\r\n): Promise<void> => {\r\n adapter.deviceList.forEach((device: ISolarFlowDeviceDetails) => {\r\n const names = [\"packInput\", \"outputHome\", \"outputPack\", \"solarInput\"];\r\n\r\n names.forEach((name: string) => {\r\n const stateNameWh =\r\n device.productKey +\r\n \".\" +\r\n device.deviceKey +\r\n \".calculations.\" +\r\n name +\r\n \"EnergyTodayWh\";\r\n const stateNamekWh =\r\n device.productKey +\r\n \".\" +\r\n device.deviceKey +\r\n \".calculations.\" +\r\n name +\r\n \"EnergyTodaykWh\";\r\n\r\n adapter?.setStateAsync(stateNameWh, 0, true);\r\n adapter?.setStateAsync(stateNamekWh, 0, true);\r\n });\r\n });\r\n};\r\n\r\nexport const updateSolarFlowState = async (\r\n adapter: ZendureSolarflow,\r\n productKey: string,\r\n deviceKey: string,\r\n state: string,\r\n val: number | string,\r\n): Promise<void> => {\r\n adapter?.setStateAsync(productKey + \".\" + deviceKey + \".\" + state, val, true);\r\n};\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { ZendureSolarflow } from \"../main\";\r\n\r\n/* eslint-disable @typescript-eslint/indent */\r\n\r\nexport const updateSolarFlowState = async (\r\n adapter: ZendureSolarflow,\r\n productKey: string,\r\n deviceKey: string,\r\n state: string,\r\n val: number | string,\r\n): Promise<void> => {\r\n adapter?.setStateAsync(productKey + \".\" + deviceKey + \".\" + state, val, true);\r\n};\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIO,MAAM,uBAAuB,OAClC,SACA,YACA,WACA,OACA,QACkB;AAClB,qCAAS,cAAc,aAAa,MAAM,YAAY,MAAM,OAAO,KAAK;AAC1E;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var calculationService_exports = {};
|
|
20
|
+
__export(calculationService_exports, {
|
|
21
|
+
calculateEnergy: () => calculateEnergy,
|
|
22
|
+
calculateSocAndEnergy: () => calculateSocAndEnergy,
|
|
23
|
+
resetTodaysValues: () => resetTodaysValues
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(calculationService_exports);
|
|
26
|
+
const calculateSocAndEnergy = async (adapter, productKey, deviceKey, stateKey, value) => {
|
|
27
|
+
const currentEnergyState = await (adapter == null ? void 0 : adapter.getStateAsync(
|
|
28
|
+
productKey + "." + deviceKey + ".calculations.energyWh"
|
|
29
|
+
));
|
|
30
|
+
const currentEnergyMaxState = await (adapter == null ? void 0 : adapter.getStateAsync(
|
|
31
|
+
productKey + "." + deviceKey + ".calculations.energyWhMax"
|
|
32
|
+
));
|
|
33
|
+
const newValue = stateKey == "outputPack" ? Number(currentEnergyState == null ? void 0 : currentEnergyState.val) + value : Number(currentEnergyState == null ? void 0 : currentEnergyState.val) - value;
|
|
34
|
+
if (newValue > 0) {
|
|
35
|
+
adapter == null ? void 0 : adapter.setStateAsync(
|
|
36
|
+
productKey + "." + deviceKey + ".calculations.energyWh",
|
|
37
|
+
newValue,
|
|
38
|
+
true
|
|
39
|
+
);
|
|
40
|
+
if (currentEnergyMaxState) {
|
|
41
|
+
const soc = newValue / Number(currentEnergyMaxState.val) * 100;
|
|
42
|
+
adapter == null ? void 0 : adapter.setStateAsync(
|
|
43
|
+
productKey + "." + deviceKey + ".calculations.soc",
|
|
44
|
+
soc,
|
|
45
|
+
true
|
|
46
|
+
);
|
|
47
|
+
if (newValue > Number(currentEnergyMaxState.val)) {
|
|
48
|
+
adapter == null ? void 0 : adapter.setStateAsync(
|
|
49
|
+
productKey + "." + deviceKey + ".calculations.energyWhMax",
|
|
50
|
+
newValue,
|
|
51
|
+
true
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const calculateEnergy = async (adapter, productKey, deviceKey, stateKey, state) => {
|
|
58
|
+
const stateNameWh = productKey + "." + deviceKey + ".calculations." + stateKey + "EnergyTodayWh";
|
|
59
|
+
const stateNamekWh = productKey + "." + deviceKey + ".calculations." + stateKey + "EnergyTodaykWh";
|
|
60
|
+
const currentState = await (adapter == null ? void 0 : adapter.getStateAsync(stateNameWh));
|
|
61
|
+
if ((currentState == null ? void 0 : currentState.val) == 0) {
|
|
62
|
+
adapter == null ? void 0 : adapter.setStateAsync(stateNameWh, 1e-6, true);
|
|
63
|
+
} else if (currentState && currentState.lc && state.val != void 0 && state.val != null) {
|
|
64
|
+
const timeFrame = state.lc - (currentState == null ? void 0 : currentState.lc);
|
|
65
|
+
const addValue = Number(state.val) * timeFrame / 36e5;
|
|
66
|
+
const newValue = Number(currentState.val) + addValue;
|
|
67
|
+
adapter == null ? void 0 : adapter.setStateAsync(stateNameWh, newValue, true);
|
|
68
|
+
adapter == null ? void 0 : adapter.setStateAsync(
|
|
69
|
+
stateNamekWh,
|
|
70
|
+
Number((newValue / 1e3).toFixed(2)),
|
|
71
|
+
true
|
|
72
|
+
);
|
|
73
|
+
if (stateKey == "outputPack" || stateKey == "packInput") {
|
|
74
|
+
calculateSocAndEnergy(adapter, productKey, deviceKey, stateKey, addValue);
|
|
75
|
+
}
|
|
76
|
+
} else {
|
|
77
|
+
adapter == null ? void 0 : adapter.setStateAsync(stateNameWh, 0, true);
|
|
78
|
+
adapter == null ? void 0 : adapter.setStateAsync(stateNamekWh, 0, true);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const resetTodaysValues = async (adapter) => {
|
|
82
|
+
adapter.deviceList.forEach((device) => {
|
|
83
|
+
const names = ["packInput", "outputHome", "outputPack", "solarInput"];
|
|
84
|
+
names.forEach((name) => {
|
|
85
|
+
const stateNameWh = device.productKey + "." + device.deviceKey + ".calculations." + name + "EnergyTodayWh";
|
|
86
|
+
const stateNamekWh = device.productKey + "." + device.deviceKey + ".calculations." + name + "EnergyTodaykWh";
|
|
87
|
+
adapter == null ? void 0 : adapter.setStateAsync(stateNameWh, 0, true);
|
|
88
|
+
adapter == null ? void 0 : adapter.setStateAsync(stateNamekWh, 0, true);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
93
|
+
0 && (module.exports = {
|
|
94
|
+
calculateEnergy,
|
|
95
|
+
calculateSocAndEnergy,
|
|
96
|
+
resetTodaysValues
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=calculationService.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/services/calculationService.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\n\r\nimport { ZendureSolarflow } from \"../main\";\r\nimport { ISolarFlowDeviceDetails } from \"../models/ISolarFlowDeviceDetails\";\r\n\r\nexport const calculateSocAndEnergy = async (\r\n adapter: ZendureSolarflow,\r\n productKey: string,\r\n deviceKey: string,\r\n stateKey: string,\r\n value: number,\r\n): Promise<void> => {\r\n const currentEnergyState = await adapter?.getStateAsync(\r\n productKey + \".\" + deviceKey + \".calculations.energyWh\",\r\n );\r\n\r\n const currentEnergyMaxState = await adapter?.getStateAsync(\r\n productKey + \".\" + deviceKey + \".calculations.energyWhMax\",\r\n );\r\n\r\n const newValue =\r\n stateKey == \"outputPack\"\r\n ? Number(currentEnergyState?.val) + value\r\n : Number(currentEnergyState?.val) - value;\r\n\r\n if (newValue > 0) {\r\n adapter?.setStateAsync(\r\n productKey + \".\" + deviceKey + \".calculations.energyWh\",\r\n newValue,\r\n true,\r\n );\r\n\r\n if (currentEnergyMaxState) {\r\n const soc = (newValue / Number(currentEnergyMaxState.val)) * 100;\r\n adapter?.setStateAsync(\r\n productKey + \".\" + deviceKey + \".calculations.soc\",\r\n soc,\r\n true,\r\n );\r\n\r\n if (newValue > Number(currentEnergyMaxState.val)) {\r\n // Extend maxVal\r\n adapter?.setStateAsync(\r\n productKey + \".\" + deviceKey + \".calculations.energyWhMax\",\r\n newValue,\r\n true,\r\n );\r\n }\r\n }\r\n }\r\n};\r\n\r\nexport const calculateEnergy = async (\r\n adapter: ZendureSolarflow,\r\n productKey: string,\r\n deviceKey: string,\r\n stateKey: string, // e.g. packInput, outputHome, outputPack, solarInput\r\n state: ioBroker.State,\r\n): Promise<void> => {\r\n const stateNameWh =\r\n productKey +\r\n \".\" +\r\n deviceKey +\r\n \".calculations.\" +\r\n stateKey +\r\n \"EnergyTodayWh\";\r\n\r\n const stateNamekWh =\r\n productKey +\r\n \".\" +\r\n deviceKey +\r\n \".calculations.\" +\r\n stateKey +\r\n \"EnergyTodaykWh\";\r\n const currentState = await adapter?.getStateAsync(stateNameWh);\r\n\r\n if (currentState?.val == 0) {\r\n // Workaround, set Val to very low value to avoid Jump in data...\r\n adapter?.setStateAsync(stateNameWh, 0.000001, true);\r\n } else if (\r\n currentState &&\r\n currentState.lc &&\r\n state.val != undefined &&\r\n state.val != null\r\n ) {\r\n const timeFrame = state.lc - currentState?.lc;\r\n\r\n const addValue = (Number(state.val) * timeFrame) / 3600000; // Wh\r\n const newValue = Number(currentState.val) + addValue;\r\n\r\n adapter?.setStateAsync(stateNameWh, newValue, true);\r\n adapter?.setStateAsync(\r\n stateNamekWh,\r\n Number((newValue / 1000).toFixed(2)),\r\n true,\r\n );\r\n\r\n // SOC and energy in batteries\r\n if (stateKey == \"outputPack\" || stateKey == \"packInput\") {\r\n calculateSocAndEnergy(adapter, productKey, deviceKey, stateKey, addValue);\r\n }\r\n } else {\r\n adapter?.setStateAsync(stateNameWh, 0, true);\r\n adapter?.setStateAsync(stateNamekWh, 0, true);\r\n }\r\n};\r\n\r\nexport const resetTodaysValues = async (\r\n adapter: ZendureSolarflow,\r\n): Promise<void> => {\r\n adapter.deviceList.forEach((device: ISolarFlowDeviceDetails) => {\r\n const names = [\"packInput\", \"outputHome\", \"outputPack\", \"solarInput\"];\r\n\r\n names.forEach((name: string) => {\r\n const stateNameWh =\r\n device.productKey +\r\n \".\" +\r\n device.deviceKey +\r\n \".calculations.\" +\r\n name +\r\n \"EnergyTodayWh\";\r\n const stateNamekWh =\r\n device.productKey +\r\n \".\" +\r\n device.deviceKey +\r\n \".calculations.\" +\r\n name +\r\n \"EnergyTodaykWh\";\r\n\r\n adapter?.setStateAsync(stateNameWh, 0, true);\r\n adapter?.setStateAsync(stateNamekWh, 0, true);\r\n });\r\n });\r\n};\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,MAAM,wBAAwB,OACnC,SACA,YACA,WACA,UACA,UACkB;AAClB,QAAM,qBAAqB,OAAM,mCAAS;AAAA,IACxC,aAAa,MAAM,YAAY;AAAA;AAGjC,QAAM,wBAAwB,OAAM,mCAAS;AAAA,IAC3C,aAAa,MAAM,YAAY;AAAA;AAGjC,QAAM,WACJ,YAAY,eACR,OAAO,yDAAoB,GAAG,IAAI,QAClC,OAAO,yDAAoB,GAAG,IAAI;AAExC,MAAI,WAAW,GAAG;AAChB,uCAAS;AAAA,MACP,aAAa,MAAM,YAAY;AAAA,MAC/B;AAAA,MACA;AAAA;AAGF,QAAI,uBAAuB;AACzB,YAAM,MAAO,WAAW,OAAO,sBAAsB,GAAG,IAAK;AAC7D,yCAAS;AAAA,QACP,aAAa,MAAM,YAAY;AAAA,QAC/B;AAAA,QACA;AAAA;AAGF,UAAI,WAAW,OAAO,sBAAsB,GAAG,GAAG;AAEhD,2CAAS;AAAA,UACP,aAAa,MAAM,YAAY;AAAA,UAC/B;AAAA,UACA;AAAA;AAAA,MAEJ;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,kBAAkB,OAC7B,SACA,YACA,WACA,UACA,UACkB;AAClB,QAAM,cACJ,aACA,MACA,YACA,mBACA,WACA;AAEF,QAAM,eACJ,aACA,MACA,YACA,mBACA,WACA;AACF,QAAM,eAAe,OAAM,mCAAS,cAAc;AAElD,OAAI,6CAAc,QAAO,GAAG;AAE1B,uCAAS,cAAc,aAAa,MAAU;AAAA,EAChD,WACE,gBACA,aAAa,MACb,MAAM,OAAO,UACb,MAAM,OAAO,MACb;AACA,UAAM,YAAY,MAAM,MAAK,6CAAc;AAE3C,UAAM,WAAY,OAAO,MAAM,GAAG,IAAI,YAAa;AACnD,UAAM,WAAW,OAAO,aAAa,GAAG,IAAI;AAE5C,uCAAS,cAAc,aAAa,UAAU;AAC9C,uCAAS;AAAA,MACP;AAAA,MACA,QAAQ,WAAW,KAAM,QAAQ,CAAC,CAAC;AAAA,MACnC;AAAA;AAIF,QAAI,YAAY,gBAAgB,YAAY,aAAa;AACvD,4BAAsB,SAAS,YAAY,WAAW,UAAU,QAAQ;AAAA,IAC1E;AAAA,EACF,OAAO;AACL,uCAAS,cAAc,aAAa,GAAG;AACvC,uCAAS,cAAc,cAAc,GAAG;AAAA,EAC1C;AACF;AAEO,MAAM,oBAAoB,OAC/B,YACkB;AAClB,UAAQ,WAAW,QAAQ,CAAC,WAAoC;AAC9D,UAAM,QAAQ,CAAC,aAAa,cAAc,cAAc,YAAY;AAEpE,UAAM,QAAQ,CAAC,SAAiB;AAC9B,YAAM,cACJ,OAAO,aACP,MACA,OAAO,YACP,mBACA,OACA;AACF,YAAM,eACJ,OAAO,aACP,MACA,OAAO,YACP,mBACA,OACA;AAEF,yCAAS,cAAc,aAAa,GAAG;AACvC,yCAAS,cAAc,cAAc,GAAG;AAAA,IAC1C,CAAC;AAAA,EACH,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var jobSchedule_exports = {};
|
|
20
|
+
__export(jobSchedule_exports, {
|
|
21
|
+
startCheckStatesJob: () => startCheckStatesJob,
|
|
22
|
+
startReloginAndResetValuesJob: () => startReloginAndResetValuesJob
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(jobSchedule_exports);
|
|
25
|
+
var import_node_schedule = require("node-schedule");
|
|
26
|
+
var import_mqttService = require("./mqttService");
|
|
27
|
+
var import_webService = require("./webService");
|
|
28
|
+
var import_calculationService = require("./calculationService");
|
|
29
|
+
const startReloginAndResetValuesJob = async (adapter) => {
|
|
30
|
+
adapter.resetValuesJob = (0, import_node_schedule.scheduleJob)("0 0 * * *", () => {
|
|
31
|
+
var _a;
|
|
32
|
+
adapter.log.debug(`Refreshing accessToken!`);
|
|
33
|
+
if (adapter.config.userName && adapter.config.password) {
|
|
34
|
+
(_a = (0, import_webService.login)(adapter)) == null ? void 0 : _a.then((_accessToken) => {
|
|
35
|
+
adapter.accessToken = _accessToken;
|
|
36
|
+
adapter.lastLogin = /* @__PURE__ */ new Date();
|
|
37
|
+
adapter.connected = true;
|
|
38
|
+
(0, import_mqttService.connectMqttClient)(adapter);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
(0, import_calculationService.resetTodaysValues)(adapter);
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
const startCheckStatesJob = async (adapter) => {
|
|
45
|
+
const statesToReset = [
|
|
46
|
+
"outputHomePower",
|
|
47
|
+
"outputPackPower",
|
|
48
|
+
"packInputPower",
|
|
49
|
+
"solarInputPower"
|
|
50
|
+
];
|
|
51
|
+
adapter.checkStatesJob = (0, import_node_schedule.scheduleJob)("*/10 * * * *", async () => {
|
|
52
|
+
(0, import_webService.getDeviceList)(adapter).then((deviceList) => {
|
|
53
|
+
deviceList.forEach(async (device) => {
|
|
54
|
+
const lastUpdate = await (adapter == null ? void 0 : adapter.getStateAsync(
|
|
55
|
+
device.productKey + "." + device.deviceKey + ".lastUpdate"
|
|
56
|
+
));
|
|
57
|
+
const tenMinutesAgo = Date.now() / 1e3 - 10 * 60;
|
|
58
|
+
if (lastUpdate && lastUpdate.val && Number(lastUpdate.val) < tenMinutesAgo) {
|
|
59
|
+
adapter.log.debug(
|
|
60
|
+
`Last update for deviceKey ${device.deviceKey} was at ${new Date(
|
|
61
|
+
Number(lastUpdate)
|
|
62
|
+
)}, checking for pseudo power values!`
|
|
63
|
+
);
|
|
64
|
+
await statesToReset.forEach(async (stateName) => {
|
|
65
|
+
await (adapter == null ? void 0 : adapter.setStateAsync(
|
|
66
|
+
device.productKey + "." + device.deviceKey + "." + stateName,
|
|
67
|
+
0,
|
|
68
|
+
true
|
|
69
|
+
));
|
|
70
|
+
});
|
|
71
|
+
await (adapter == null ? void 0 : adapter.setStateAsync(
|
|
72
|
+
device.productKey + "." + device.deviceKey + ".electricLevel",
|
|
73
|
+
device.electricity,
|
|
74
|
+
true
|
|
75
|
+
));
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}).catch(() => {
|
|
79
|
+
var _a;
|
|
80
|
+
(_a = adapter.log) == null ? void 0 : _a.error("Retrieving device failed!");
|
|
81
|
+
return null;
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
86
|
+
0 && (module.exports = {
|
|
87
|
+
startCheckStatesJob,
|
|
88
|
+
startReloginAndResetValuesJob
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=jobSchedule.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/services/jobSchedule.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\nimport { scheduleJob } from \"node-schedule\";\r\nimport { ZendureSolarflow } from \"../main\";\r\nimport { connectMqttClient } from \"./mqttService\";\r\nimport { getDeviceList, login } from \"./webService\";\r\nimport { ISolarFlowDeviceDetails } from \"../models/ISolarFlowDeviceDetails\";\r\nimport { resetTodaysValues } from \"./calculationService\";\r\n\r\nexport const startReloginAndResetValuesJob = async (\r\n adapter: ZendureSolarflow,\r\n): Promise<void> => {\r\n adapter.resetValuesJob = scheduleJob(\"0 0 * * *\", () => {\r\n // Relogin at night to get a fresh accessToken!\r\n adapter.log.debug(`Refreshing accessToken!`);\r\n\r\n if (adapter.config.userName && adapter.config.password) {\r\n login(adapter)?.then((_accessToken: string) => {\r\n adapter.accessToken = _accessToken;\r\n adapter.lastLogin = new Date();\r\n adapter.connected = true;\r\n\r\n connectMqttClient(adapter);\r\n });\r\n }\r\n\r\n // Reset Values\r\n resetTodaysValues(adapter);\r\n });\r\n};\r\n\r\nexport const startCheckStatesJob = async (\r\n adapter: ZendureSolarflow,\r\n): Promise<void> => {\r\n // Check for states that has no updates in the last 5 minutes and set them to 0\r\n const statesToReset: string[] = [\r\n \"outputHomePower\",\r\n \"outputPackPower\",\r\n \"packInputPower\",\r\n \"solarInputPower\",\r\n ];\r\n\r\n adapter.checkStatesJob = scheduleJob(\"*/10 * * * *\", async () => {\r\n getDeviceList(adapter)\r\n .then((deviceList: ISolarFlowDeviceDetails[]) => {\r\n deviceList.forEach(async (device: ISolarFlowDeviceDetails) => {\r\n const lastUpdate = await adapter?.getStateAsync(\r\n device.productKey + \".\" + device.deviceKey + \".lastUpdate\",\r\n );\r\n\r\n const tenMinutesAgo = Date.now() / 1000 - 10 * 60; // Ten minutes ago\r\n\r\n if (\r\n lastUpdate &&\r\n lastUpdate.val &&\r\n Number(lastUpdate.val) < tenMinutesAgo\r\n ) {\r\n adapter.log.debug(\r\n `Last update for deviceKey ${device.deviceKey} was at ${new Date(\r\n Number(lastUpdate),\r\n )}, checking for pseudo power values!`,\r\n );\r\n // State was not updated in the last 10 minutes... set states to 0\r\n await statesToReset.forEach(async (stateName: string) => {\r\n await adapter?.setStateAsync(\r\n device.productKey + \".\" + device.deviceKey + \".\" + stateName,\r\n 0,\r\n true,\r\n );\r\n });\r\n\r\n // set electricLevel from deviceList\r\n await adapter?.setStateAsync(\r\n device.productKey + \".\" + device.deviceKey + \".electricLevel\",\r\n device.electricity,\r\n true,\r\n );\r\n }\r\n });\r\n })\r\n .catch(() => {\r\n adapter.log?.error(\"Retrieving device failed!\");\r\n return null;\r\n });\r\n });\r\n};\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,2BAA4B;AAE5B,yBAAkC;AAClC,wBAAqC;AAErC,gCAAkC;AAE3B,MAAM,gCAAgC,OAC3C,YACkB;AAClB,UAAQ,qBAAiB,kCAAY,aAAa,MAAM;AAX1D;AAaI,YAAQ,IAAI,MAAM,yBAAyB;AAE3C,QAAI,QAAQ,OAAO,YAAY,QAAQ,OAAO,UAAU;AACtD,yCAAM,OAAO,MAAb,mBAAgB,KAAK,CAAC,iBAAyB;AAC7C,gBAAQ,cAAc;AACtB,gBAAQ,YAAY,oBAAI,KAAK;AAC7B,gBAAQ,YAAY;AAEpB,kDAAkB,OAAO;AAAA,MAC3B;AAAA,IACF;AAGA,qDAAkB,OAAO;AAAA,EAC3B,CAAC;AACH;AAEO,MAAM,sBAAsB,OACjC,YACkB;AAElB,QAAM,gBAA0B;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,UAAQ,qBAAiB,kCAAY,gBAAgB,YAAY;AAC/D,yCAAc,OAAO,EAClB,KAAK,CAAC,eAA0C;AAC/C,iBAAW,QAAQ,OAAO,WAAoC;AAC5D,cAAM,aAAa,OAAM,mCAAS;AAAA,UAChC,OAAO,aAAa,MAAM,OAAO,YAAY;AAAA;AAG/C,cAAM,gBAAgB,KAAK,IAAI,IAAI,MAAO,KAAK;AAE/C,YACE,cACA,WAAW,OACX,OAAO,WAAW,GAAG,IAAI,eACzB;AACA,kBAAQ,IAAI;AAAA,YACV,6BAA6B,OAAO,SAAS,WAAW,IAAI;AAAA,cAC1D,OAAO,UAAU;AAAA,YACnB,CAAC;AAAA,UACH;AAEA,gBAAM,cAAc,QAAQ,OAAO,cAAsB;AACvD,mBAAM,mCAAS;AAAA,cACb,OAAO,aAAa,MAAM,OAAO,YAAY,MAAM;AAAA,cACnD;AAAA,cACA;AAAA;AAAA,UAEJ,CAAC;AAGD,iBAAM,mCAAS;AAAA,YACb,OAAO,aAAa,MAAM,OAAO,YAAY;AAAA,YAC7C,OAAO;AAAA,YACP;AAAA;AAAA,QAEJ;AAAA,MACF,CAAC;AAAA,IACH,CAAC,EACA,MAAM,MAAM;AA/EnB;AAgFQ,oBAAQ,QAAR,mBAAa,MAAM;AACnB,aAAO;AAAA,IACT,CAAC;AAAA,EACL,CAAC;AACH;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -28,6 +28,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
var mqttService_exports = {};
|
|
30
30
|
__export(mqttService_exports, {
|
|
31
|
+
addOrUpdatePackData: () => addOrUpdatePackData,
|
|
31
32
|
connectMqttClient: () => connectMqttClient,
|
|
32
33
|
setChargeLimit: () => setChargeLimit,
|
|
33
34
|
setDischargeLimit: () => setDischargeLimit,
|
|
@@ -37,6 +38,7 @@ module.exports = __toCommonJS(mqttService_exports);
|
|
|
37
38
|
var mqtt = __toESM(require("mqtt"));
|
|
38
39
|
var import_adapterService = require("./adapterService");
|
|
39
40
|
var import_timeHelper = require("../helpers/timeHelper");
|
|
41
|
+
var import_createSolarFlowStates = require("../helpers/createSolarFlowStates");
|
|
40
42
|
let client = void 0;
|
|
41
43
|
let adapter = void 0;
|
|
42
44
|
const onConnected = () => {
|
|
@@ -52,6 +54,117 @@ const onSubscribe = (error) => {
|
|
|
52
54
|
adapter == null ? void 0 : adapter.log.debug("Subscription successful!");
|
|
53
55
|
}
|
|
54
56
|
};
|
|
57
|
+
const addOrUpdatePackData = async (adapter2, productKey, deviceKey, packData) => {
|
|
58
|
+
await packData.forEach(async (x) => {
|
|
59
|
+
if (x.sn) {
|
|
60
|
+
const key = (productKey + "." + deviceKey + ".packData." + x.sn).replace(
|
|
61
|
+
adapter2.FORBIDDEN_CHARS,
|
|
62
|
+
""
|
|
63
|
+
);
|
|
64
|
+
await (adapter2 == null ? void 0 : adapter2.extendObjectAsync(key + ".sn", {
|
|
65
|
+
type: "state",
|
|
66
|
+
common: {
|
|
67
|
+
name: {
|
|
68
|
+
de: "Seriennummer",
|
|
69
|
+
en: "Serial id"
|
|
70
|
+
},
|
|
71
|
+
type: "string",
|
|
72
|
+
desc: "Serial ID",
|
|
73
|
+
role: "value",
|
|
74
|
+
read: true,
|
|
75
|
+
write: false
|
|
76
|
+
},
|
|
77
|
+
native: {}
|
|
78
|
+
}));
|
|
79
|
+
await (adapter2 == null ? void 0 : adapter2.setStateAsync(key + ".sn", x.sn, true));
|
|
80
|
+
if (x.socLevel) {
|
|
81
|
+
await (adapter2 == null ? void 0 : adapter2.extendObjectAsync(key + ".socLevel", {
|
|
82
|
+
type: "state",
|
|
83
|
+
common: {
|
|
84
|
+
name: {
|
|
85
|
+
de: "SOC der Batterie",
|
|
86
|
+
en: "soc of battery"
|
|
87
|
+
},
|
|
88
|
+
type: "number",
|
|
89
|
+
desc: "SOC Level",
|
|
90
|
+
role: "value",
|
|
91
|
+
read: true,
|
|
92
|
+
write: false
|
|
93
|
+
},
|
|
94
|
+
native: {}
|
|
95
|
+
}));
|
|
96
|
+
await (adapter2 == null ? void 0 : adapter2.setStateAsync(key + ".socLevel", x.socLevel, true));
|
|
97
|
+
}
|
|
98
|
+
if (x.maxTemp) {
|
|
99
|
+
await (adapter2 == null ? void 0 : adapter2.extendObjectAsync(key + ".maxTemp", {
|
|
100
|
+
type: "state",
|
|
101
|
+
common: {
|
|
102
|
+
name: {
|
|
103
|
+
de: "Max. Temperatur der Batterie",
|
|
104
|
+
en: "max temp. of battery"
|
|
105
|
+
},
|
|
106
|
+
type: "number",
|
|
107
|
+
desc: "Max. Temp",
|
|
108
|
+
role: "value",
|
|
109
|
+
read: true,
|
|
110
|
+
write: false
|
|
111
|
+
},
|
|
112
|
+
native: {}
|
|
113
|
+
}));
|
|
114
|
+
await (adapter2 == null ? void 0 : adapter2.setStateAsync(
|
|
115
|
+
key + ".maxTemp",
|
|
116
|
+
x.maxTemp / 10 - 273.15,
|
|
117
|
+
true
|
|
118
|
+
));
|
|
119
|
+
}
|
|
120
|
+
if (x.minVol) {
|
|
121
|
+
await (adapter2 == null ? void 0 : adapter2.extendObjectAsync(key + ".minVol", {
|
|
122
|
+
type: "state",
|
|
123
|
+
common: {
|
|
124
|
+
name: "minVol",
|
|
125
|
+
type: "number",
|
|
126
|
+
desc: "minVol",
|
|
127
|
+
role: "value",
|
|
128
|
+
read: true,
|
|
129
|
+
write: false
|
|
130
|
+
},
|
|
131
|
+
native: {}
|
|
132
|
+
}));
|
|
133
|
+
await (adapter2 == null ? void 0 : adapter2.setStateAsync(key + ".minVol", x.minVol / 100, true));
|
|
134
|
+
}
|
|
135
|
+
if (x.maxVol) {
|
|
136
|
+
await (adapter2 == null ? void 0 : adapter2.extendObjectAsync(key + ".maxVol", {
|
|
137
|
+
type: "state",
|
|
138
|
+
common: {
|
|
139
|
+
name: "maxVol",
|
|
140
|
+
type: "number",
|
|
141
|
+
desc: "maxVol",
|
|
142
|
+
role: "value",
|
|
143
|
+
read: true,
|
|
144
|
+
write: false
|
|
145
|
+
},
|
|
146
|
+
native: {}
|
|
147
|
+
}));
|
|
148
|
+
await (adapter2 == null ? void 0 : adapter2.setStateAsync(key + ".maxVol", x.maxVol / 100, true));
|
|
149
|
+
}
|
|
150
|
+
if (x.totalVol) {
|
|
151
|
+
await (adapter2 == null ? void 0 : adapter2.extendObjectAsync(key + ".totalVol", {
|
|
152
|
+
type: "state",
|
|
153
|
+
common: {
|
|
154
|
+
name: "totalVol",
|
|
155
|
+
type: "number",
|
|
156
|
+
desc: "totalVol",
|
|
157
|
+
role: "value",
|
|
158
|
+
read: true,
|
|
159
|
+
write: false
|
|
160
|
+
},
|
|
161
|
+
native: {}
|
|
162
|
+
}));
|
|
163
|
+
await (adapter2 == null ? void 0 : adapter2.setStateAsync(key + ".totalVol", x.totalVol / 100, true));
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
};
|
|
55
168
|
const onMessage = async (topic, message) => {
|
|
56
169
|
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;
|
|
57
170
|
if (adapter) {
|
|
@@ -174,46 +287,48 @@ const onMessage = async (topic, message) => {
|
|
|
174
287
|
"remainOutTime",
|
|
175
288
|
obj.properties.remainOutTime
|
|
176
289
|
);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
const outputPackPower = Number(
|
|
183
|
-
(_x = await adapter.getStateAsync(
|
|
184
|
-
productKey + "." + deviceKey + ".outputPackPower"
|
|
185
|
-
)) == null ? void 0 : _x.val
|
|
186
|
-
);
|
|
187
|
-
if (packInputPower && packInputPower > 0) {
|
|
188
|
-
(0, import_adapterService.updateSolarFlowState)(
|
|
189
|
-
adapter,
|
|
190
|
-
productKey,
|
|
191
|
-
deviceKey,
|
|
192
|
-
"calculations.remainOutTime",
|
|
193
|
-
obj.properties.remainOutTime < 59940 ? (0, import_timeHelper.toHoursAndMinutes)(obj.properties.remainOutTime) : ""
|
|
290
|
+
if (adapter.config.useCalculation) {
|
|
291
|
+
const packInputPower = Number(
|
|
292
|
+
(_w = await adapter.getStateAsync(
|
|
293
|
+
productKey + "." + deviceKey + ".packInputPower"
|
|
294
|
+
)) == null ? void 0 : _w.val
|
|
194
295
|
);
|
|
195
|
-
|
|
196
|
-
adapter
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
"calculations.remainInputTime",
|
|
200
|
-
""
|
|
201
|
-
);
|
|
202
|
-
} else if (outputPackPower && outputPackPower > 0) {
|
|
203
|
-
(0, import_adapterService.updateSolarFlowState)(
|
|
204
|
-
adapter,
|
|
205
|
-
productKey,
|
|
206
|
-
deviceKey,
|
|
207
|
-
"calculations.remainInputTime",
|
|
208
|
-
obj.properties.remainInputTime < 59940 ? (0, import_timeHelper.toHoursAndMinutes)(obj.properties.remainInputTime) : ""
|
|
209
|
-
);
|
|
210
|
-
(0, import_adapterService.updateSolarFlowState)(
|
|
211
|
-
adapter,
|
|
212
|
-
productKey,
|
|
213
|
-
deviceKey,
|
|
214
|
-
"calculations.remainOutTime",
|
|
215
|
-
""
|
|
296
|
+
const outputPackPower = Number(
|
|
297
|
+
(_x = await adapter.getStateAsync(
|
|
298
|
+
productKey + "." + deviceKey + ".outputPackPower"
|
|
299
|
+
)) == null ? void 0 : _x.val
|
|
216
300
|
);
|
|
301
|
+
if (packInputPower && packInputPower > 0) {
|
|
302
|
+
(0, import_adapterService.updateSolarFlowState)(
|
|
303
|
+
adapter,
|
|
304
|
+
productKey,
|
|
305
|
+
deviceKey,
|
|
306
|
+
"calculations.remainOutTime",
|
|
307
|
+
obj.properties.remainOutTime < 59940 ? (0, import_timeHelper.toHoursAndMinutes)(obj.properties.remainOutTime) : ""
|
|
308
|
+
);
|
|
309
|
+
(0, import_adapterService.updateSolarFlowState)(
|
|
310
|
+
adapter,
|
|
311
|
+
productKey,
|
|
312
|
+
deviceKey,
|
|
313
|
+
"calculations.remainInputTime",
|
|
314
|
+
""
|
|
315
|
+
);
|
|
316
|
+
} else if (outputPackPower && outputPackPower > 0) {
|
|
317
|
+
(0, import_adapterService.updateSolarFlowState)(
|
|
318
|
+
adapter,
|
|
319
|
+
productKey,
|
|
320
|
+
deviceKey,
|
|
321
|
+
"calculations.remainInputTime",
|
|
322
|
+
obj.properties.remainInputTime < 59940 ? (0, import_timeHelper.toHoursAndMinutes)(obj.properties.remainInputTime) : ""
|
|
323
|
+
);
|
|
324
|
+
(0, import_adapterService.updateSolarFlowState)(
|
|
325
|
+
adapter,
|
|
326
|
+
productKey,
|
|
327
|
+
deviceKey,
|
|
328
|
+
"calculations.remainOutTime",
|
|
329
|
+
""
|
|
330
|
+
);
|
|
331
|
+
}
|
|
217
332
|
}
|
|
218
333
|
}
|
|
219
334
|
if (((_y = obj.properties) == null ? void 0 : _y.socSet) != null && ((_z = obj.properties) == null ? void 0 : _z.socSet) != void 0) {
|
|
@@ -235,7 +350,7 @@ const onMessage = async (topic, message) => {
|
|
|
235
350
|
);
|
|
236
351
|
}
|
|
237
352
|
if (obj.packData) {
|
|
238
|
-
|
|
353
|
+
addOrUpdatePackData(adapter, productKey, deviceKey, obj.packData);
|
|
239
354
|
}
|
|
240
355
|
}
|
|
241
356
|
if (client) {
|
|
@@ -319,7 +434,7 @@ const connectMqttClient = (_adapter) => {
|
|
|
319
434
|
client.on("error", onError);
|
|
320
435
|
adapter.deviceList.forEach((device) => {
|
|
321
436
|
if (adapter) {
|
|
322
|
-
(0,
|
|
437
|
+
(0, import_createSolarFlowStates.createSolarFlowStates)(adapter, device.productKey, device.deviceKey);
|
|
323
438
|
(0, import_adapterService.updateSolarFlowState)(
|
|
324
439
|
adapter,
|
|
325
440
|
device.productKey,
|
|
@@ -341,6 +456,7 @@ const connectMqttClient = (_adapter) => {
|
|
|
341
456
|
};
|
|
342
457
|
// Annotate the CommonJS export names for ESM import in node:
|
|
343
458
|
0 && (module.exports = {
|
|
459
|
+
addOrUpdatePackData,
|
|
344
460
|
connectMqttClient,
|
|
345
461
|
setChargeLimit,
|
|
346
462
|
setDischargeLimit,
|