iobroker.zendure-solarflow 1.7.5 → 1.7.6
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/constants/aceStates.js +84 -0
- package/build/constants/aceStates.js.map +7 -0
- package/build/constants/aioStates.js +83 -0
- package/build/constants/aioStates.js.map +7 -0
- package/build/constants/hubStates.js +83 -0
- package/build/constants/hubStates.js.map +7 -0
- package/build/constants/hyperStates.js +121 -0
- package/build/constants/hyperStates.js.map +7 -0
- package/build/constants/sharedStates.js +202 -0
- package/build/constants/sharedStates.js.map +7 -0
- package/build/helpers/createControlStates.js +7 -2
- package/build/helpers/createControlStates.js.map +2 -2
- package/build/helpers/createSolarFlowStates.js +37 -529
- package/build/helpers/createSolarFlowStates.js.map +2 -2
- package/build/main.js +5 -3
- package/build/main.js.map +2 -2
- package/build/models/ISolarflowState.js +17 -0
- package/build/models/ISolarflowState.js.map +7 -0
- package/io-package.json +14 -14
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/helpers/createSolarFlowStates.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\n\r\nimport { ZendureSolarflow } from \"../main\";\r\nimport { ISolarFlowDeviceDetails } from \"../models/ISolarFlowDeviceDetails\";\r\nimport { updateSolarFlowState } from \"../services/adapterService\";\r\nimport { createCalculationStates } from \"./createCalculationStates\";\r\nimport { createControlStates } from \"./createControlStates\";\r\n//import { deleteCalculationStates } from \"./deleteCalculationStates\";\r\n\r\nexport const createSolarFlowStates = async (\r\n adapter: ZendureSolarflow,\r\n device: ISolarFlowDeviceDetails,\r\n type: string\r\n): Promise<void> => {\r\n const productKey = device.productKey.replace(adapter.FORBIDDEN_CHARS, \"\");\r\n const deviceKey = device.deviceKey.replace(adapter.FORBIDDEN_CHARS, \"\");\r\n\r\n adapter.log.debug(\r\n `[createSolarFlowStates] Creating or updating SolarFlow states for productKey ${productKey} and deviceKey ${deviceKey}.`\r\n );\r\n\r\n // Create device (e.g. the product type -> SolarFlow)\r\n await adapter?.extendObject(productKey, {\r\n type: \"device\",\r\n common: {\r\n name: {\r\n de: `${device.productName} (${productKey})`,\r\n en: `${device.productName} (${productKey})`,\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n // Create channel (e.g. the device specific key)\r\n await adapter?.extendObject(productKey + \".\" + deviceKey, {\r\n type: \"channel\",\r\n common: {\r\n name: { 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?.extendObject(`${productKey}.${deviceKey}.calculations`, {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: \"Berechnungen f\u00FCr Ger\u00E4t \" + deviceKey,\r\n en: \"Calculations for Device \" + deviceKey,\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n // Create pack data folder\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.packData`, {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: \"Batterie Packs\",\r\n en: \"Battery packs\",\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.lastUpdate`, {\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 await adapter?.extendObject(`${productKey}.${deviceKey}.buzzerSwitch`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Sounds am HUB aktivieren\",\r\n en: \"Enable buzzer on HUB\",\r\n },\r\n type: \"boolean\",\r\n desc: \"buzzerSwitch\",\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?.extendObject(`${productKey}.${deviceKey}.packState`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Systemstatus\", en: \"Status of system\" },\r\n type: \"string\",\r\n desc: \"packState\",\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?.extendObject(`${productKey}.${deviceKey}.electricLevel`, {\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 // Set sn number from device\r\n if (device.electricity) {\r\n await updateSolarFlowState(\r\n adapter,\r\n device.productKey,\r\n device.deviceKey,\r\n \"electricLevel\",\r\n device.electricity\r\n );\r\n }\r\n\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.name`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Name\", en: \"Name\" },\r\n type: \"string\",\r\n desc: \"name\",\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?.extendObject(`${productKey}.${deviceKey}.snNumber`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Seriennnummer\", en: \"Serial ID\" },\r\n type: \"string\",\r\n desc: \"snNumber\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n // Set sn number from device\r\n if (device.snNumber) {\r\n await updateSolarFlowState(\r\n adapter,\r\n device.productKey,\r\n device.deviceKey,\r\n \"snNumber\",\r\n device.snNumber.toString()\r\n );\r\n }\r\n\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.productName`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Produkt Name\", en: \"Product name\" },\r\n type: \"string\",\r\n desc: \"productName\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n // Set product name from device\r\n await updateSolarFlowState(\r\n adapter,\r\n device.productKey,\r\n device.deviceKey,\r\n \"productName\",\r\n device.productName\r\n );\r\n\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.registeredServer`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Registrierter Server\", en: \"Registered server\" },\r\n type: \"string\",\r\n desc: \"registeredServer\",\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?.extendObject(`${productKey}.${deviceKey}.energyPower`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Leistung am Smartmeter\", en: \"Smartmeter energy power\" },\r\n type: \"number\",\r\n desc: \"energyPower\",\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 await adapter?.extendObject(`${productKey}.${deviceKey}.outputPackPower`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Ladeleistung zur Batterie\", 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 await adapter?.extendObject(`${productKey}.${deviceKey}.packInputPower`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Entladeleistung aus Batterie\", 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 await adapter?.extendObject(`${productKey}.${deviceKey}.solarInputPower`, {\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 await adapter?.extendObject(`${productKey}.${deviceKey}.pvPower1`, {\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 await adapter?.extendObject(`${productKey}.${deviceKey}.pvPower2`, {\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 await adapter?.extendObject(`${productKey}.${deviceKey}.remainInputTime`, {\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 await adapter?.extendObject(`${productKey}.${deviceKey}.remainOutTime`, {\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 await adapter?.extendObject(`${productKey}.${deviceKey}.socSet`, {\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 await adapter?.extendObject(`${productKey}.${deviceKey}.minSoc`, {\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 await adapter?.extendObject(`${productKey}.${deviceKey}.inverseMaxPower`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Maximal akzeptabler Eingang des PV-Mikrowechselrichters\",\r\n en: \"highest acceptable input power\",\r\n },\r\n type: \"number\",\r\n desc: \"inverseMaxPower\",\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?.extendObject(`${productKey}.${deviceKey}.wifiState`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"WiFi Status\",\r\n en: \"WiFi Status\",\r\n },\r\n type: \"string\",\r\n desc: \"wifiState\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n // Set wifi state from device\r\n await updateSolarFlowState(\r\n adapter,\r\n device.productKey,\r\n device.deviceKey,\r\n \"wifiState\",\r\n device.wifiStatus ? \"Connected\" : \"Disconnected\"\r\n );\r\n\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.hubState`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Verhalten wenn minimale reservierte Ladung erreicht\",\r\n en: \"Behavior when minimum reserved charge is reached\",\r\n },\r\n type: \"string\",\r\n desc: \"hubState\",\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?.extendObject(`${productKey}.${deviceKey}.packNum`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Anzahl der angeschlossenen Batterien\",\r\n en: \"Number of batteries\",\r\n },\r\n type: \"number\",\r\n desc: \"packNum\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n },\r\n native: {},\r\n });\r\n\r\n /* ACE only States */\r\n\r\n if (type == \"ace\") {\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.dcOutputPower`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Aktuelle DC Ausgangsleistung\",\r\n en: \"Current DC output power\",\r\n },\r\n type: \"number\",\r\n desc: \"dcOutputPower\",\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 await adapter?.extendObject(`${productKey}.${deviceKey}.dcSwitch`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"DC Schalter\",\r\n en: \"DC switch\",\r\n },\r\n type: \"boolean\",\r\n desc: \"dcSwitch\",\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 await adapter?.extendObject(`${productKey}.${deviceKey}.inputLimit`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Limit der Eingangsleistung\", en: \"limit of input power\" },\r\n type: \"number\",\r\n desc: \"inputLimit\",\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 await adapter?.extendObject(`${productKey}.${deviceKey}.gridPower`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Leistung vom Stromnetz\", en: \"Grid power\" },\r\n type: \"number\",\r\n desc: \"gridPower\",\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 /* Solarflow only States */\r\n\r\n if (type == \"solarflow\") {\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.pass`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Bypass an/aus\", en: \"Bypass on/off\" },\r\n type: \"boolean\",\r\n desc: \"pass\",\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?.extendObject(`${productKey}.${deviceKey}.autoRecover`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Am n\u00E4chsten Tag Bypass auf Automatik\",\r\n en: \"Automatic recovery of bypass\",\r\n },\r\n type: \"boolean\",\r\n desc: \"autoRecover\",\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 /* Hyper only States */\r\n\r\n if (type == \"hyper\") {\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.hyperTmp`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Temperatur des Hyper 2000\",\r\n en: \"Temperature of Hyper 2000\",\r\n },\r\n type: \"number\",\r\n desc: \"hyperTmp\",\r\n role: \"value\",\r\n read: true,\r\n write: false,\r\n unit: \"\u00B0C\",\r\n },\r\n native: {},\r\n });\r\n }\r\n\r\n /* Solarflow and Hyper only States */\r\n\r\n if (type == \"solarflow\" || type == \"hyper\") {\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.passMode`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Einstellung des Bypass Modus\",\r\n en: \"Setting of bypass mode\",\r\n },\r\n type: \"string\",\r\n desc: \"passMode\",\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?.extendObject(`${productKey}.${deviceKey}.pvBrand`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Wechselrichter Hersteller\", en: \"brand of inverter\" },\r\n type: \"string\",\r\n desc: \"pvBrand\",\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?.extendObject(`${productKey}.${deviceKey}.outputHomePower`, {\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 await adapter?.extendObject(`${productKey}.${deviceKey}.outputLimit`, {\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 if (type == \"ace\" || type == \"hyper\") {\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.acMode`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"AC Modus\",\r\n en: \"AC mode\",\r\n },\r\n type: \"number\",\r\n desc: \"acMode\",\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?.extendObject(`${productKey}.${deviceKey}.batteryElectric`, {\r\n type: \"state\",\r\n common: {\r\n name: { de: \"Batterie Leistung\", en: \"Battery electric\" },\r\n type: \"number\",\r\n desc: \"batteryElectric\",\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 await adapter?.extendObject(`${productKey}.${deviceKey}.gridInputPower`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Aktuelle AC Eingangsleistung\",\r\n en: \"current ac input power\",\r\n },\r\n type: \"number\",\r\n desc: \"gridInputPower\",\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 await adapter?.extendObject(`${productKey}.${deviceKey}.acOutputPower`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"Aktuelle AC Ausgangsleistung\",\r\n en: \"Current AC output power\",\r\n },\r\n type: \"number\",\r\n desc: \"acOutputPower\",\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 await adapter?.extendObject(`${productKey}.${deviceKey}.acSwitch`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: \"AC Schalter\",\r\n en: \"AC switch\",\r\n },\r\n type: \"boolean\",\r\n desc: \"acSwitch\",\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 // Create control states only when using App MQTT servers - and not the fallback one!\r\n if (!adapter.config.useFallbackService) {\r\n await createControlStates(adapter, productKey, deviceKey, type);\r\n }\r\n\r\n if (\r\n adapter.config.useCalculation &&\r\n (type == \"solarflow\" || type == \"hyper\")\r\n ) {\r\n await createCalculationStates(adapter, productKey, deviceKey);\r\n } else {\r\n //await deleteCalculationStates(adapter, productKey, deviceKey);\r\n }\r\n};\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\r\n\r\nimport { aceStates } from \"../constants/aceStates\";\r\nimport { aioStates } from \"../constants/aioStates\";\r\nimport { hubStates } from \"../constants/hubStates\";\r\nimport { hyperStates } from \"../constants/hyperStates\";\r\nimport { ZendureSolarflow } from \"../main\";\r\nimport { ISolarFlowDeviceDetails } from \"../models/ISolarFlowDeviceDetails\";\r\nimport { ISolarflowState } from \"../models/ISolarflowState\";\r\nimport { updateSolarFlowState } from \"../services/adapterService\";\r\nimport { createCalculationStates } from \"./createCalculationStates\";\r\nimport { createControlStates } from \"./createControlStates\";\r\n//import { deleteCalculationStates } from \"./deleteCalculationStates\";\r\n\r\nconst getStateDefinition = (type: string): ISolarflowState[] => {\r\n switch (type) {\r\n case \"aio\":\r\n return aioStates;\r\n case \"hyper\":\r\n return hyperStates;\r\n case \"solarflow\":\r\n return hubStates;\r\n case \"ace\":\r\n return aceStates;\r\n default:\r\n return [];\r\n }\r\n};\r\n\r\nexport const createSolarFlowStates = async (\r\n adapter: ZendureSolarflow,\r\n device: ISolarFlowDeviceDetails,\r\n type: string\r\n): Promise<void> => {\r\n const productKey = device.productKey.replace(adapter.FORBIDDEN_CHARS, \"\");\r\n const deviceKey = device.deviceKey.replace(adapter.FORBIDDEN_CHARS, \"\");\r\n\r\n adapter.log.debug(\r\n `[createSolarFlowStates] Creating or updating SolarFlow states for ${device.productName} (${productKey}/${deviceKey}) and name '${device.name}'.`\r\n );\r\n\r\n // Create device (e.g. the product type -> SolarFlow)\r\n await adapter?.extendObject(productKey, {\r\n type: \"device\",\r\n common: {\r\n name: {\r\n de: `${device.productName} (${productKey})`,\r\n en: `${device.productName} (${productKey})`,\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n // Create channel (e.g. the device specific key)\r\n await adapter?.extendObject(productKey + \".\" + deviceKey, {\r\n type: \"channel\",\r\n common: {\r\n name: { 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?.extendObject(`${productKey}.${deviceKey}.calculations`, {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: \"Berechnungen f\u00FCr Ger\u00E4t \" + deviceKey,\r\n en: \"Calculations for Device \" + deviceKey,\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n // Create pack data folder\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.packData`, {\r\n type: \"channel\",\r\n common: {\r\n name: {\r\n de: \"Batterie Packs\",\r\n en: \"Battery packs\",\r\n },\r\n },\r\n native: {},\r\n });\r\n\r\n const states = getStateDefinition(type);\r\n\r\n states.forEach(async (state: ISolarflowState) => {\r\n await adapter?.extendObject(`${productKey}.${deviceKey}.${state.title}`, {\r\n type: \"state\",\r\n common: {\r\n name: {\r\n de: state.nameDe,\r\n en: state.nameEn,\r\n },\r\n type: state.type,\r\n desc: state.title,\r\n role: state.role,\r\n read: true,\r\n write: false,\r\n unit: state.unit,\r\n },\r\n native: {},\r\n });\r\n });\r\n\r\n // Set sn number from device\r\n if (device.electricity) {\r\n await updateSolarFlowState(\r\n adapter,\r\n device.productKey,\r\n device.deviceKey,\r\n \"electricLevel\",\r\n device.electricity\r\n );\r\n }\r\n\r\n // Set sn number from device\r\n if (device.snNumber) {\r\n await updateSolarFlowState(\r\n adapter,\r\n device.productKey,\r\n device.deviceKey,\r\n \"snNumber\",\r\n device.snNumber.toString()\r\n );\r\n }\r\n\r\n // Set product name from device\r\n await updateSolarFlowState(\r\n adapter,\r\n device.productKey,\r\n device.deviceKey,\r\n \"productName\",\r\n device.productName\r\n );\r\n\r\n // Set wifi state from device\r\n await updateSolarFlowState(\r\n adapter,\r\n device.productKey,\r\n device.deviceKey,\r\n \"wifiState\",\r\n device.wifiStatus ? \"Connected\" : \"Disconnected\"\r\n );\r\n\r\n // Create control states only when using App MQTT servers - and not the fallback one!\r\n if (!adapter.config.useFallbackService) {\r\n await createControlStates(adapter, productKey, deviceKey, type);\r\n }\r\n\r\n if (\r\n adapter.config.useCalculation &&\r\n (type == \"solarflow\" || type == \"hyper\")\r\n ) {\r\n await createCalculationStates(adapter, productKey, deviceKey);\r\n } else {\r\n //await deleteCalculationStates(adapter, productKey, deviceKey);\r\n }\r\n};\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,uBAA0B;AAC1B,uBAA0B;AAC1B,uBAA0B;AAC1B,yBAA4B;AAI5B,4BAAqC;AACrC,qCAAwC;AACxC,iCAAoC;AAGpC,MAAM,qBAAqB,CAAC,SAAoC;AAC9D,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO,CAAC;AAAA,EACZ;AACF;AAEO,MAAM,wBAAwB,OACnC,SACA,QACA,SACkB;AAClB,QAAM,aAAa,OAAO,WAAW,QAAQ,QAAQ,iBAAiB,EAAE;AACxE,QAAM,YAAY,OAAO,UAAU,QAAQ,QAAQ,iBAAiB,EAAE;AAEtE,UAAQ,IAAI;AAAA,IACV,qEAAqE,OAAO,WAAW,KAAK,UAAU,IAAI,SAAS,eAAe,OAAO,IAAI;AAAA,EAC/I;AAGA,SAAM,mCAAS,aAAa,YAAY;AAAA,IACtC,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,QACJ,IAAI,GAAG,OAAO,WAAW,KAAK,UAAU;AAAA,QACxC,IAAI,GAAG,OAAO,WAAW,KAAK,UAAU;AAAA,MAC1C;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAGA,SAAM,mCAAS,aAAa,aAAa,MAAM,WAAW;AAAA,IACxD,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM,EAAE,IAAI,gBAAgB,WAAW,IAAI,gBAAgB,UAAU;AAAA,IACvE;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAGA,SAAM,mCAAS,aAAa,GAAG,UAAU,IAAI,SAAS,iBAAiB;AAAA,IACrE,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,QACJ,IAAI,kCAA4B;AAAA,QAChC,IAAI,6BAA6B;AAAA,MACnC;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAGA,SAAM,mCAAS,aAAa,GAAG,UAAU,IAAI,SAAS,aAAa;AAAA,IACjE,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MACN;AAAA,IACF;AAAA,IACA,QAAQ,CAAC;AAAA,EACX;AAEA,QAAM,SAAS,mBAAmB,IAAI;AAEtC,SAAO,QAAQ,OAAO,UAA2B;AAC/C,WAAM,mCAAS,aAAa,GAAG,UAAU,IAAI,SAAS,IAAI,MAAM,KAAK,IAAI;AAAA,MACvE,MAAM;AAAA,MACN,QAAQ;AAAA,QACN,MAAM;AAAA,UACJ,IAAI,MAAM;AAAA,UACV,IAAI,MAAM;AAAA,QACZ;AAAA,QACA,MAAM,MAAM;AAAA,QACZ,MAAM,MAAM;AAAA,QACZ,MAAM,MAAM;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,QACP,MAAM,MAAM;AAAA,MACd;AAAA,MACA,QAAQ,CAAC;AAAA,IACX;AAAA,EACF,CAAC;AAGD,MAAI,OAAO,aAAa;AACtB,cAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AAGA,MAAI,OAAO,UAAU;AACnB,cAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,MACA,OAAO,SAAS,SAAS;AAAA,IAC3B;AAAA,EACF;AAGA,YAAM;AAAA,IACJ;AAAA,IACA,OAAO;AAAA,IACP,OAAO;AAAA,IACP;AAAA,IACA,OAAO;AAAA,EACT;AAGA,YAAM;AAAA,IACJ;AAAA,IACA,OAAO;AAAA,IACP,OAAO;AAAA,IACP;AAAA,IACA,OAAO,aAAa,cAAc;AAAA,EACpC;AAGA,MAAI,CAAC,QAAQ,OAAO,oBAAoB;AACtC,cAAM,gDAAoB,SAAS,YAAY,WAAW,IAAI;AAAA,EAChE;AAEA,MACE,QAAQ,OAAO,mBACd,QAAQ,eAAe,QAAQ,UAChC;AACA,cAAM,wDAAwB,SAAS,YAAY,SAAS;AAAA,EAC9D,OAAO;AAAA,EAEP;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/main.js
CHANGED
|
@@ -115,7 +115,7 @@ class ZendureSolarflow extends utils.Adapter {
|
|
|
115
115
|
if (result) {
|
|
116
116
|
console.log(result);
|
|
117
117
|
this.deviceList = result.filter(
|
|
118
|
-
(device) => device.productName.toLowerCase().includes("solarflow") || device.productName.toLocaleLowerCase()
|
|
118
|
+
(device) => device.productName.toLowerCase().includes("solarflow") || device.productName.toLocaleLowerCase().includes("hyper") || device.productName.toLocaleLowerCase() == "ace 1500"
|
|
119
119
|
);
|
|
120
120
|
await (0, import_adapterService.checkDevicesServer)(this);
|
|
121
121
|
this.log.info(
|
|
@@ -124,10 +124,12 @@ class ZendureSolarflow extends utils.Adapter {
|
|
|
124
124
|
await this.deviceList.forEach(
|
|
125
125
|
async (device) => {
|
|
126
126
|
let type = "solarflow";
|
|
127
|
-
if (device.productName.toLocaleLowerCase()
|
|
127
|
+
if (device.productName.toLocaleLowerCase().includes("hyper")) {
|
|
128
128
|
type = "hyper";
|
|
129
|
-
} else if (device.productName.toLocaleLowerCase()
|
|
129
|
+
} else if (device.productName.toLocaleLowerCase().includes("ace")) {
|
|
130
130
|
type = "ace";
|
|
131
|
+
} else if (device.productName.toLocaleLowerCase().includes("aio")) {
|
|
132
|
+
type = "aio";
|
|
131
133
|
}
|
|
132
134
|
await (0, import_createSolarFlowStates.createSolarFlowStates)(this, device, type);
|
|
133
135
|
await (0, import_adapterService.updateSolarFlowState)(
|
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 setAcMode,\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 == \"acMode\") {\r\n setAcMode(this, productKey, deviceKey, Number(state.val));\r\n } else if (stateName2 == \"autoRecover\") {\r\n setAutoRecover(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n } else if (stateName2 == \"buzzerSwitch\") {\r\n setBuzzerSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n // The state was deleted\r\n //this.log.debug(`state ${id} deleted`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nif (require.main !== module) {\r\n // Export the constructor in compact mode\r\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) =>\r\n new ZendureSolarflow(options);\r\n} else {\r\n // otherwise start the instance directly\r\n (() => new ZendureSolarflow())();\r\n}\r\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,YAAuB;AACvB,yBAYO;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;AAjEzC;AAkEI,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;AAC1D,WAAK,IAAI,MAAM,4CAA4C;AAE3D,4DAAuB,IAAI,EAAE,KAAK,CAAC,SAAoC;AAErE,YAAI,KAAK,UAAU,KAAK,WAAW,KAAK,QAAQ,KAAK,QAAQ;AAC3D;AAAA,YACE;AAAA,YACA,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,UACP;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,WACE,CAAC,KAAK,OAAO,sBACb,KAAK,OAAO,YACZ,KAAK,OAAO,UACZ;AAEA,yCAAM,IAAI,MAAV,mBACI,KAAK,CAAC,iBAAyB;AAC/B,aAAK,cAAc;AAEnB,aAAK,SAAS,mBAAmB,MAAM,IAAI;AAC3C,aAAK,YAAY,oBAAI,KAAK;AAG1B,6CAAc,IAAI,EACf,KAAK,OAAO,WAAsC;AACjD,cAAI,QAAQ;AAEV,oBAAQ,IAAI,MAAM;AAElB,iBAAK,aAAa,OAAO;AAAA,cACvB,CAAC,WACC,OAAO,YAAY,YAAY,EAAE,SAAS,WAAW,KACrD,OAAO,YAAY,kBAAkB,
|
|
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 setAcMode,\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().includes(\"hyper\") ||\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 //console.log(this.deviceList);\r\n\r\n await this.deviceList.forEach(\r\n async (device: ISolarFlowDeviceDetails) => {\r\n let type = \"solarflow\";\r\n\r\n if (\r\n device.productName.toLocaleLowerCase().includes(\"hyper\")\r\n ) {\r\n type = \"hyper\";\r\n } else if (\r\n device.productName.toLocaleLowerCase().includes(\"ace\")\r\n ) {\r\n type = \"ace\";\r\n } else if (\r\n device.productName.toLocaleLowerCase().includes(\"aio\")\r\n ) {\r\n type = \"aio\";\r\n }\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 == \"acMode\") {\r\n setAcMode(this, productKey, deviceKey, Number(state.val));\r\n } else if (stateName2 == \"autoRecover\") {\r\n setAutoRecover(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n } else if (stateName2 == \"buzzerSwitch\") {\r\n setBuzzerSwitch(\r\n this,\r\n productKey,\r\n deviceKey,\r\n state.val ? true : false\r\n );\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n // The state was deleted\r\n //this.log.debug(`state ${id} deleted`);\r\n }\r\n }\r\n }\r\n}\r\n\r\nif (require.main !== module) {\r\n // Export the constructor in compact mode\r\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) =>\r\n new ZendureSolarflow(options);\r\n} else {\r\n // otherwise start the instance directly\r\n (() => new ZendureSolarflow())();\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["_a"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
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 __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
var ISolarflowState_exports = {};
|
|
16
|
+
module.exports = __toCommonJS(ISolarflowState_exports);
|
|
17
|
+
//# sourceMappingURL=ISolarflowState.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/models/ISolarflowState.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/indent */\nexport interface ISolarflowState {\n title: string;\n nameDe: string;\n nameEn: string;\n role: string;\n type: ioBroker.CommonType; // Datentyp\n unit?: string;\n states?: string | string[] | Record<string, string> | undefined;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "zendure-solarflow",
|
|
4
|
-
"version": "1.7.
|
|
4
|
+
"version": "1.7.6",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.7.6": {
|
|
7
|
+
"en": "Fix support for 'Hyper_Test' devices\nImproved code for state creation",
|
|
8
|
+
"de": "Unterstützung für 'Hyper_Test'-Geräte beheben\nVerbesserter Code für die staatliche Schöpfung",
|
|
9
|
+
"ru": "Поддержка 'Hyper_Test'\nУлучшенный код для создания государства",
|
|
10
|
+
"pt": "Suporte fixo para dispositivos 'Hyper_Test'\nCódigo melhorado para a criação do estado",
|
|
11
|
+
"nl": "Ondersteuning voor 'Hyper_Test'-apparaten herstellen\nVerbeterde code voor het aanmaken van staten",
|
|
12
|
+
"fr": "Correction de la prise en charge des périphériques 'Hyper_Test'\nCode amélioré pour la création d'État",
|
|
13
|
+
"it": "Supporto per dispositivi 'Hyper_Test'\nCodice migliorato per la creazione di stato",
|
|
14
|
+
"es": "Soporte fijo para dispositivos 'Hyper_Test'\nCódigo mejorado para la creación del estado",
|
|
15
|
+
"pl": "Napraw obsługę urządzeń 'Hyper _ Test'\nUlepszony kodeks tworzenia państwa",
|
|
16
|
+
"uk": "Фіксована підтримка пристроїв «Hyper_Test»\nПокращений код для державного створення",
|
|
17
|
+
"zh-cn": "修正“ Hyper_ test” 设备的支持\n改进国家创建的代码"
|
|
18
|
+
},
|
|
6
19
|
"1.7.5": {
|
|
7
20
|
"en": "Fix controlling AC mode for Hyper 2000 (set acMode to 1: Charge by AC, 2: Output to AC)\nShow product name in channel name\nShow battery type as state in packData\nShow Hyper Temperature in States",
|
|
8
21
|
"de": "Fix Controlling AC-Modus für Hyper 2000 (Set acMode auf 1: Lade durch AC, 2: Ausgabe auf AC)\nProduktname in Kanalname anzeigen\nBatterietyp als Zustand in packData anzeigen\nHypertemperatur in den Staaten anzeigen",
|
|
@@ -80,19 +93,6 @@
|
|
|
80
93
|
"pl": "Dodaj wsparcie dla Hyper 2000 i ACE 1500. Może nie wszystkie stany i parametry sterowania są dostępne. Nadal muszę przeprowadzić śledztwo.\nKilka drobnych poprawek.",
|
|
81
94
|
"uk": "Додайте підтримку Hyper 2000 і ACE 1500. Може бути не всі стани і контрольний параметр. Наскільки потрібно робити деякі дослідження.\nДеякі незначні виправлення.",
|
|
82
95
|
"zh-cn": "添加支持Hyper 2000和ACE 1500. 也许并非所有状态和控制参数都可用。 还需要调查一下.\n一些小错误修正."
|
|
83
|
-
},
|
|
84
|
-
"1.6.7": {
|
|
85
|
-
"en": "Fix reconnect again. Adapter will now restart every 3 hours to cleanup fully.",
|
|
86
|
-
"de": "Reconnect wieder reparieren. Adapter wird jetzt alle 3 Stunden neu starten, um vollständig zu reinigen.",
|
|
87
|
-
"ru": "Повторите подключение. Адаптер теперь перезапускается каждые 3 часа, чтобы полностью очиститься.",
|
|
88
|
-
"pt": "Reconectar novamente. O adaptador agora reiniciará a cada 3 horas para limpar totalmente.",
|
|
89
|
-
"nl": "Maak opnieuw verbinding. Adapter zal nu om de 3 uur opnieuw opstarten om volledig op te ruimen.",
|
|
90
|
-
"fr": "Réparer la connexion. Adaptateur va maintenant redémarrer toutes les 3 heures pour nettoyer complètement.",
|
|
91
|
-
"it": "Risolvi di nuovo la connessione. L'adattatore si riavvia ogni 3 ore per pulire completamente.",
|
|
92
|
-
"es": "Arregla la reconexión de nuevo. El adaptador se reiniciará cada 3 horas para limpiar completamente.",
|
|
93
|
-
"pl": "Napraw ponownie połączenie. Adapter będzie teraz ponownie uruchomić co 3 godziny, aby w pełni posprzątać.",
|
|
94
|
-
"uk": "Виправлення повторного підключення. Адаптер тепер перезавантажить кожні 3 години для очищення повністю.",
|
|
95
|
-
"zh-cn": "恢复连接 适配器现在将每3小时重新启动一次,以全面清理."
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"titleLang": {
|