iobroker.zendure-solarflow 1.2.3 → 1.2.4
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 +4 -0
- package/admin/build/index.js +1 -1
- package/admin/build/index.js.map +2 -2
- package/build/main.js +5 -4
- package/build/main.js.map +2 -2
- package/build/services/jobSchedule.js +11 -5
- package/build/services/jobSchedule.js.map +2 -2
- package/io-package.json +14 -14
- package/package.json +1 -1
package/build/main.js
CHANGED
|
@@ -48,12 +48,12 @@ class ZendureSolarflow extends utils.Adapter {
|
|
|
48
48
|
// Access Token for Zendure Rest API
|
|
49
49
|
this.deviceList = [];
|
|
50
50
|
this.paths = void 0;
|
|
51
|
-
this.interval = void 0;
|
|
52
51
|
this.lastLogin = void 0;
|
|
53
52
|
this.mqttClient = void 0;
|
|
54
53
|
this.resetValuesJob = void 0;
|
|
55
54
|
this.checkStatesJob = void 0;
|
|
56
55
|
this.calculationJob = void 0;
|
|
56
|
+
this.refreshAccessTokenInterval = void 0;
|
|
57
57
|
this.on("ready", this.onReady.bind(this));
|
|
58
58
|
this.on("stateChange", this.onStateChange.bind(this));
|
|
59
59
|
this.on("unload", this.onUnload.bind(this));
|
|
@@ -128,8 +128,9 @@ class ZendureSolarflow extends utils.Adapter {
|
|
|
128
128
|
}
|
|
129
129
|
);
|
|
130
130
|
(0, import_mqttService.connectMqttClient)(this);
|
|
131
|
-
(0, import_jobSchedule.
|
|
131
|
+
(0, import_jobSchedule.startResetValuesJob)(this);
|
|
132
132
|
(0, import_jobSchedule.startCheckStatesJob)(this);
|
|
133
|
+
(0, import_jobSchedule.startRefreshAccessTokenTimerJob)(this);
|
|
133
134
|
if (this.config.useCalculation) {
|
|
134
135
|
(0, import_jobSchedule.startCalculationJob)(this);
|
|
135
136
|
}
|
|
@@ -156,8 +157,8 @@ class ZendureSolarflow extends utils.Adapter {
|
|
|
156
157
|
onUnload(callback) {
|
|
157
158
|
var _a;
|
|
158
159
|
try {
|
|
159
|
-
if (this.
|
|
160
|
-
this.clearInterval(this.
|
|
160
|
+
if (this.refreshAccessTokenInterval) {
|
|
161
|
+
this.clearInterval(this.refreshAccessTokenInterval);
|
|
161
162
|
}
|
|
162
163
|
if (this.resetValuesJob) {
|
|
163
164
|
this.resetValuesJob.cancel();
|
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 setChargeLimit,\r\n setDischargeLimit,\r\n setOutputLimit,\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 {\r\n startCalculationJob,\r\n startCheckStatesJob,\r\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,YAAuB;AACvB,yBAKO;AACP,wBAAqC;AAGrC,mBAAqC;AAErC,
|
|
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 setChargeLimit,\r\n setDischargeLimit,\r\n setOutputLimit,\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 {\r\n startCalculationJob,\r\n startCheckStatesJob,\r\n startRefreshAccessTokenTimerJob,\r\n startResetValuesJob,\r\n} from \"./services/jobSchedule\";\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\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 /**\r\n * Is called when databases are connected and adapter received configuration.\r\n */\r\n private async onReady(): Promise<void> {\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 Username and Password is provided, try to login and get the access token.\r\n if (this.config.userName && this.config.password) {\r\n login(this)\r\n ?.then((_accessToken: string) => {\r\n this.accessToken = _accessToken;\r\n\r\n this.connected = true;\r\n this.lastLogin = new Date();\r\n\r\n // Try to get the device list\r\n getDeviceList(this)\r\n .then(async (result: ISolarFlowDeviceDetails[]) => {\r\n if (result) {\r\n // Device List found. Save in the adapter properties and connect to MQTT\r\n\r\n // Filtering to SolarFlow devices\r\n this.deviceList = result.filter((device) =>\r\n device.productName.toLowerCase().includes(\"solarflow\"),\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 // States erstellen\r\n await createSolarFlowStates(\r\n this,\r\n device.productKey,\r\n device.deviceKey,\r\n );\r\n\r\n // Set electricLevel (soc) from device details.\r\n await updateSolarFlowState(\r\n this,\r\n device.productKey,\r\n device.deviceKey,\r\n \"electricLevel\",\r\n device.electricity,\r\n );\r\n\r\n // Set name from device details.\r\n await updateSolarFlowState(\r\n this,\r\n device.productKey,\r\n device.deviceKey,\r\n \"name\",\r\n device.name,\r\n );\r\n\r\n // Set name from device details.\r\n await updateSolarFlowState(\r\n this,\r\n device.productKey,\r\n device.deviceKey,\r\n \"productName\",\r\n device.productName,\r\n );\r\n\r\n // Set Serial ID from device details.\r\n await updateSolarFlowState(\r\n this,\r\n device.productKey,\r\n device.deviceKey,\r\n \"snNumber\",\r\n device.snNumber,\r\n );\r\n\r\n await updateSolarFlowState(\r\n this,\r\n device.productKey,\r\n device.deviceKey,\r\n \"registeredServer\",\r\n this.config.server,\r\n );\r\n },\r\n );\r\n\r\n connectMqttClient(this);\r\n\r\n // Schedule Jobs\r\n startResetValuesJob(this);\r\n startCheckStatesJob(this);\r\n startRefreshAccessTokenTimerJob(this);\r\n\r\n if (this.config.useCalculation) {\r\n startCalculationJob(this);\r\n }\r\n }\r\n })\r\n .catch(() => {\r\n this.connected = false;\r\n this.log?.error(\"[onReady] Retrieving device failed!\");\r\n });\r\n })\r\n .catch((error) => {\r\n this.connected = false;\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.connected = false;\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 // 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 // !!! Only stateChanges with ack==false are allowed to be processed.\r\n 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 == \"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 == \"lowVoltageBlock\") {\r\n if (this.config.useLowVoltageBlock) {\r\n if (state.val == true) {\r\n // Low Voltage Block activated, stop power input\r\n setOutputLimit(this, productKey, deviceKey, 0);\r\n }\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
|
}
|
|
@@ -20,17 +20,18 @@ var jobSchedule_exports = {};
|
|
|
20
20
|
__export(jobSchedule_exports, {
|
|
21
21
|
startCalculationJob: () => startCalculationJob,
|
|
22
22
|
startCheckStatesJob: () => startCheckStatesJob,
|
|
23
|
-
|
|
23
|
+
startRefreshAccessTokenTimerJob: () => startRefreshAccessTokenTimerJob,
|
|
24
|
+
startResetValuesJob: () => startResetValuesJob
|
|
24
25
|
});
|
|
25
26
|
module.exports = __toCommonJS(jobSchedule_exports);
|
|
26
27
|
var import_node_schedule = require("node-schedule");
|
|
27
28
|
var import_mqttService = require("./mqttService");
|
|
28
29
|
var import_webService = require("./webService");
|
|
29
30
|
var import_calculationService = require("./calculationService");
|
|
30
|
-
const
|
|
31
|
-
adapter.
|
|
31
|
+
const startRefreshAccessTokenTimerJob = async (adapter) => {
|
|
32
|
+
adapter.refreshAccessTokenInterval = adapter.setInterval(() => {
|
|
32
33
|
var _a;
|
|
33
|
-
adapter.log.info(`[
|
|
34
|
+
adapter.log.info(`[startRefreshAccessTokenTimerJob] Refreshing accessToken!`);
|
|
34
35
|
if (adapter.mqttClient) {
|
|
35
36
|
adapter.mqttClient.end();
|
|
36
37
|
adapter.mqttClient = void 0;
|
|
@@ -43,6 +44,10 @@ const startReloginAndResetValuesJob = async (adapter) => {
|
|
|
43
44
|
(0, import_mqttService.connectMqttClient)(adapter);
|
|
44
45
|
});
|
|
45
46
|
}
|
|
47
|
+
}, 3 * 60 * 60 * 1e3);
|
|
48
|
+
};
|
|
49
|
+
const startResetValuesJob = async (adapter) => {
|
|
50
|
+
adapter.resetValuesJob = (0, import_node_schedule.scheduleJob)("5 0 0 * * *", () => {
|
|
46
51
|
(0, import_calculationService.resetTodaysValues)(adapter);
|
|
47
52
|
});
|
|
48
53
|
};
|
|
@@ -101,6 +106,7 @@ const startCheckStatesJob = async (adapter) => {
|
|
|
101
106
|
0 && (module.exports = {
|
|
102
107
|
startCalculationJob,
|
|
103
108
|
startCheckStatesJob,
|
|
104
|
-
|
|
109
|
+
startRefreshAccessTokenTimerJob,
|
|
110
|
+
startResetValuesJob
|
|
105
111
|
});
|
|
106
112
|
//# sourceMappingURL=jobSchedule.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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 { calculateEnergy, resetTodaysValues } from \"./calculationService\";\r\n\r\nexport const
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,2BAA4B;AAE5B,yBAAkC;AAClC,wBAAqC;AAErC,gCAAmD;AAE5C,MAAM,
|
|
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 { calculateEnergy, resetTodaysValues } from \"./calculationService\";\r\n\r\nexport const startRefreshAccessTokenTimerJob = async (adapter: ZendureSolarflow): Promise<void> => {\r\n adapter.refreshAccessTokenInterval = adapter.setInterval(() => {\r\n // Relogin at night to get a fresh accessToken!\r\n adapter.log.info(`[startRefreshAccessTokenTimerJob] Refreshing accessToken!`);\r\n\r\n if (adapter.mqttClient) {\r\n adapter.mqttClient.end();\r\n adapter.mqttClient = undefined;\r\n }\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 }, 3 * 60 * 60 * 1000)\r\n}\r\n\r\nexport const startResetValuesJob = async (\r\n adapter: ZendureSolarflow,\r\n): Promise<void> => {\r\n adapter.resetValuesJob = scheduleJob(\"5 0 0 * * *\", () => {\r\n // Reset Values\r\n resetTodaysValues(adapter);\r\n });\r\n};\r\n\r\nexport const startCalculationJob = async (\r\n adapter: ZendureSolarflow,\r\n): Promise<void> => {\r\n adapter.calculationJob = scheduleJob(\"*/10 * * * * *\", () => {\r\n adapter.deviceList.forEach((device) => {\r\n calculateEnergy(adapter, device.productKey, device.deviceKey);\r\n });\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 `[checkStatesJob] Last update for deviceKey ${\r\n device.deviceKey\r\n } 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 if (device.electricity) {\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 })\r\n .catch(() => {\r\n adapter.log?.error(\r\n \"[checkStatesJob] Retrieving device failedRetrieving device failed!\",\r\n );\r\n });\r\n });\r\n};\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,2BAA4B;AAE5B,yBAAkC;AAClC,wBAAqC;AAErC,gCAAmD;AAE5C,MAAM,kCAAkC,OAAO,YAA6C;AACjG,UAAQ,6BAA6B,QAAQ,YAAY,MAAM;AATjE;AAWI,YAAQ,IAAI,KAAK,2DAA2D;AAE5E,QAAI,QAAQ,YAAY;AACtB,cAAQ,WAAW,IAAI;AACvB,cAAQ,aAAa;AAAA,IACvB;AAEA,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;AAAA,EACF,GAAG,IAAI,KAAK,KAAK,GAAI;AACvB;AAEO,MAAM,sBAAsB,OACjC,YACkB;AAClB,UAAQ,qBAAiB,kCAAY,eAAe,MAAM;AAExD,qDAAkB,OAAO;AAAA,EAC3B,CAAC;AACH;AAEO,MAAM,sBAAsB,OACjC,YACkB;AAClB,UAAQ,qBAAiB,kCAAY,kBAAkB,MAAM;AAC3D,YAAQ,WAAW,QAAQ,CAAC,WAAW;AACrC,qDAAgB,SAAS,OAAO,YAAY,OAAO,SAAS;AAAA,IAC9D,CAAC;AAAA,EACH,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,8CACE,OAAO,SACT,WAAW,IAAI;AAAA,cACb,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,cAAI,OAAO,aAAa;AACtB,mBAAM,mCAAS;AAAA,cACb,OAAO,aAAa,MAAM,OAAO,YAAY;AAAA,cAC7C,OAAO;AAAA,cACP;AAAA;AAAA,UAEJ;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,CAAC,EACA,MAAM,MAAM;AAtGnB;AAuGQ,oBAAQ,QAAR,mBAAa;AAAA,QACX;AAAA;AAAA,IAEJ,CAAC;AAAA,EACL,CAAC;AACH;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "zendure-solarflow",
|
|
4
|
-
"version": "1.2.
|
|
4
|
+
"version": "1.2.4",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.2.4": {
|
|
7
|
+
"en": "Use setInterval instead of cronjob for refreshing access token",
|
|
8
|
+
"de": "Verwenden Sie setInterval anstelle von cronjob für den erfrischenden Zugang zuken",
|
|
9
|
+
"ru": "Использовать setInterval вместо cronjob для обновления токена доступа",
|
|
10
|
+
"pt": "Use setInterval em vez de cronjob para atualizar o token de acesso",
|
|
11
|
+
"nl": "Gebruik setInterval in plaats van cronjob voor verfrissende toegang token",
|
|
12
|
+
"fr": "Utiliser setInterval au lieu de cronjob pour rafraîchir l'accès jeton",
|
|
13
|
+
"it": "Utilizzare setInterval invece di cronjob per rinfrescare l'accesso token",
|
|
14
|
+
"es": "Use setInterval en lugar de cronjob para el acceso refrescante token",
|
|
15
|
+
"pl": "Użyj setInterval zamiast cronjob do odświeżania token dostępu",
|
|
16
|
+
"uk": "Використовуйте setInterval замість cronjob для оновлення доступу token",
|
|
17
|
+
"zh-cn": "使用设置 Interval 而非 cronjob 来刷新访问符"
|
|
18
|
+
},
|
|
6
19
|
"1.2.3": {
|
|
7
20
|
"en": "Fix ACK on onStateChange\nUpdate Readme",
|
|
8
21
|
"de": "Reparieren Sie ACK auf onState Veränderung\nUpdate Reader",
|
|
@@ -80,19 +93,6 @@
|
|
|
80
93
|
"pl": "Spróbuj naprawić wartości reset o północy",
|
|
81
94
|
"uk": "Спробуйте виправити значення скидання на ніч",
|
|
82
95
|
"zh-cn": "尝试在午夜修复重置值"
|
|
83
|
-
},
|
|
84
|
-
"1.1.21": {
|
|
85
|
-
"en": "Fix calculation timeframe",
|
|
86
|
-
"de": "Berechnungs-Zeitrahmen",
|
|
87
|
-
"ru": "График расчета",
|
|
88
|
-
"pt": "Tempo de cálculo fixo",
|
|
89
|
-
"nl": "De berekeningsperiode vaststellen",
|
|
90
|
-
"fr": "Fixer le délai de calcul",
|
|
91
|
-
"it": "Fissare il tempo di calcolo",
|
|
92
|
-
"es": "Plazo de cálculo fijo",
|
|
93
|
-
"pl": "Poprawiony harmonogram obliczeń",
|
|
94
|
-
"uk": "Фіксація графіка розрахунку",
|
|
95
|
-
"zh-cn": "固定计算时限"
|
|
96
96
|
}
|
|
97
97
|
},
|
|
98
98
|
"title": "Zendure Solarflow",
|