iobroker.zendure-solarflow 1.6.4 → 1.6.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 CHANGED
@@ -46,6 +46,14 @@ If you find the adapter useful for you and want to support my work, feel free to
46
46
  [![Donate](https://img.shields.io/badge/PayPal-00457C?style=for-the-badge&logo=paypal&logoColor=white)](https://www.paypal.com/paypalme/PeterFrommert)
47
47
 
48
48
  ## Changelog
49
+ ### 1.6.6 (2024-06-21)
50
+
51
+ - Tweaked recurring refresh of access token.
52
+
53
+ ### 1.6.5 (2024-06-20)
54
+
55
+ - Fix reconnect issue. Adapter will now restart if connection semms to be broken.
56
+
49
57
  ### 1.6.4 (2024-06-03)
50
58
 
51
59
  - Fix services
@@ -28,25 +28,29 @@ var import_node_schedule = require("node-schedule");
28
28
  var import_mqttService = require("./mqttService");
29
29
  var import_webService = require("./webService");
30
30
  var import_calculationService = require("./calculationService");
31
- const refreshAccessToken = (adapter) => {
31
+ const refreshAccessToken = async (adapter) => {
32
32
  var _a, _b;
33
- adapter.log.info(`[startRefreshAccessTokenTimerJob] Refreshing accessToken!`);
33
+ adapter.log.info(`[startRefreshAccessTokenTimerJob] Stop connections!`);
34
34
  if (adapter.resetValuesJob) {
35
35
  adapter.resetValuesJob.cancel();
36
- adapter.resetValuesJob = void 0;
37
36
  }
38
37
  if (adapter.checkStatesJob) {
39
38
  (_a = adapter.checkStatesJob) == null ? void 0 : _a.cancel();
40
- adapter.checkStatesJob = void 0;
41
39
  }
42
40
  if (adapter.calculationJob) {
43
41
  adapter.calculationJob.cancel();
44
- adapter.calculationJob = void 0;
45
42
  }
46
43
  if (adapter.mqttClient) {
47
44
  adapter.mqttClient.end();
48
- adapter.mqttClient = void 0;
49
45
  }
46
+ adapter.log.info(
47
+ `[startRefreshAccessTokenTimerJob] Refreshing accessToken in 10 seconds!`
48
+ );
49
+ await adapter.delay(10 * 1e3);
50
+ adapter.resetValuesJob = void 0;
51
+ adapter.checkStatesJob = void 0;
52
+ adapter.calculationJob = void 0;
53
+ adapter.mqttClient = void 0;
50
54
  if (adapter.config.userName && adapter.config.password) {
51
55
  (_b = (0, import_webService.login)(adapter)) == null ? void 0 : _b.then((_accessToken) => {
52
56
  adapter.accessToken = _accessToken;
@@ -101,15 +105,16 @@ const startCheckStatesAndConnectionJob = async (adapter) => {
101
105
  const fiveMinutesAgo = (Date.now() / 1e3 - 5 * 60) * 1e3;
102
106
  const tenMinutesAgo = (Date.now() / 1e3 - 10 * 60) * 1e3;
103
107
  if (lastUpdate && lastUpdate.val && Number(lastUpdate.val) < fiveMinutesAgo && (wifiState == null ? void 0 : wifiState.val) == "Connected") {
104
- adapter.log.debug(
108
+ adapter.log.warn(
105
109
  `[checkStatesJob] Last update for deviceKey ${device.deviceKey} was at ${new Date(
106
110
  Number(lastUpdate)
107
- )}, device seems to be online - so maybe connection is broken - reconnect!`
111
+ )}, device seems to be online - so maybe connection is broken - restart adapter in 20 seconds!`
108
112
  );
109
- refreshAccessToken(adapter);
113
+ await adapter.delay(20 * 1e3);
114
+ adapter.restart();
110
115
  refreshAccessTokenNeeded = true;
111
116
  }
112
- if (lastUpdate && lastUpdate.val && Number(lastUpdate.val) < tenMinutesAgo) {
117
+ if (lastUpdate && lastUpdate.val && Number(lastUpdate.val) < tenMinutesAgo && !refreshAccessTokenNeeded) {
113
118
  adapter.log.debug(
114
119
  `[checkStatesJob] Last update for deviceKey ${device.deviceKey} was at ${new Date(
115
120
  Number(lastUpdate)
@@ -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 { login } from \"./webService\";\r\nimport { ISolarFlowDeviceDetails } from \"../models/ISolarFlowDeviceDetails\";\r\nimport { calculateEnergy, resetTodaysValues } from \"./calculationService\";\r\n\r\nconst refreshAccessToken = (adapter: ZendureSolarflow): void => {\r\n // Relogin every 3 hours to get a fresh accessToken!\r\n adapter.log.info(`[startRefreshAccessTokenTimerJob] Refreshing accessToken!`);\r\n\r\n // Scheduler beenden\r\n if (adapter.resetValuesJob) {\r\n adapter.resetValuesJob.cancel();\r\n adapter.resetValuesJob = undefined;\r\n }\r\n\r\n if (adapter.checkStatesJob) {\r\n adapter.checkStatesJob?.cancel();\r\n adapter.checkStatesJob = undefined;\r\n }\r\n\r\n if (adapter.calculationJob) {\r\n adapter.calculationJob.cancel();\r\n adapter.calculationJob = undefined;\r\n }\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.setState(\"info.connection\", true, true);\r\n\r\n connectMqttClient(adapter);\r\n });\r\n }\r\n};\r\n\r\nexport const startRefreshAccessTokenTimerJob = async (\r\n adapter: ZendureSolarflow,\r\n): Promise<void> => {\r\n adapter.refreshAccessTokenInterval = adapter.setInterval(\r\n () => {\r\n refreshAccessToken(adapter);\r\n },\r\n 3 * 60 * 60 * 1000,\r\n );\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(\"*/30 * * * * *\", () => {\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 startCheckStatesAndConnectionJob = 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 let refreshAccessTokenNeeded = false;\r\n\r\n adapter.log.debug(\r\n `[checkStatesJob] Starting check of states and connection!`,\r\n );\r\n\r\n adapter.checkStatesJob = scheduleJob(\"*/5 * * * *\", async () => {\r\n adapter.deviceList.forEach(async (device: ISolarFlowDeviceDetails) => {\r\n if (refreshAccessTokenNeeded) {\r\n return;\r\n }\r\n\r\n const lastUpdate = await adapter?.getStateAsync(\r\n device.productKey + \".\" + device.deviceKey + \".lastUpdate\",\r\n );\r\n\r\n const wifiState = await adapter?.getStateAsync(\r\n device.productKey + \".\" + device.deviceKey + \".wifiState\",\r\n );\r\n\r\n const fiveMinutesAgo = (Date.now() / 1000 - 5 * 60) * 1000; // Five minutes ago\r\n const tenMinutesAgo = (Date.now() / 1000 - 10 * 60) * 1000; // Ten minutes ago\r\n\r\n //adapter.log.debug(\r\n // `[checkStatesJob] lastUpdate for device ${device.deviceKey} was at ${lastUpdate?.val}, timestamp fiveMinutes ago: ${fiveMinutesAgo}, Wifi State: ${wifiState?.val}!`,\r\n //);\r\n\r\n if (\r\n lastUpdate &&\r\n lastUpdate.val &&\r\n Number(lastUpdate.val) < fiveMinutesAgo &&\r\n wifiState?.val == \"Connected\"\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 )}, device seems to be online - so maybe connection is broken - reconnect!`,\r\n );\r\n\r\n refreshAccessToken(adapter);\r\n\r\n // set marker, so we discontinue the forEach Loop because of reconnect!\r\n refreshAccessTokenNeeded = true;\r\n }\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};\r\n"],
5
- "mappings": "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",
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 { login } from \"./webService\";\r\nimport { ISolarFlowDeviceDetails } from \"../models/ISolarFlowDeviceDetails\";\r\nimport { calculateEnergy, resetTodaysValues } from \"./calculationService\";\r\n\r\nconst refreshAccessToken = async (adapter: ZendureSolarflow): Promise<void> => {\r\n // Relogin every 3 hours to get a fresh accessToken!\r\n adapter.log.info(`[startRefreshAccessTokenTimerJob] Stop connections!`);\r\n\r\n // Scheduler beenden\r\n if (adapter.resetValuesJob) {\r\n adapter.resetValuesJob.cancel();\r\n }\r\n\r\n if (adapter.checkStatesJob) {\r\n adapter.checkStatesJob?.cancel();\r\n }\r\n\r\n if (adapter.calculationJob) {\r\n adapter.calculationJob.cancel();\r\n }\r\n\r\n if (adapter.mqttClient) {\r\n adapter.mqttClient.end();\r\n }\r\n\r\n adapter.log.info(\r\n `[startRefreshAccessTokenTimerJob] Refreshing accessToken in 10 seconds!`,\r\n );\r\n await adapter.delay(10 * 1000);\r\n\r\n adapter.resetValuesJob = undefined;\r\n adapter.checkStatesJob = undefined;\r\n adapter.calculationJob = undefined;\r\n adapter.mqttClient = undefined;\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.setState(\"info.connection\", true, true);\r\n\r\n connectMqttClient(adapter);\r\n });\r\n }\r\n};\r\n\r\nexport const startRefreshAccessTokenTimerJob = async (\r\n adapter: ZendureSolarflow,\r\n): Promise<void> => {\r\n adapter.refreshAccessTokenInterval = adapter.setInterval(\r\n () => {\r\n refreshAccessToken(adapter);\r\n },\r\n 3 * 60 * 60 * 1000,\r\n );\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(\"*/30 * * * * *\", () => {\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 startCheckStatesAndConnectionJob = 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 let refreshAccessTokenNeeded = false;\r\n\r\n adapter.log.debug(\r\n `[checkStatesJob] Starting check of states and connection!`,\r\n );\r\n\r\n adapter.checkStatesJob = scheduleJob(\"*/5 * * * *\", async () => {\r\n adapter.deviceList.forEach(async (device: ISolarFlowDeviceDetails) => {\r\n if (refreshAccessTokenNeeded) {\r\n return;\r\n }\r\n\r\n const lastUpdate = await adapter?.getStateAsync(\r\n device.productKey + \".\" + device.deviceKey + \".lastUpdate\",\r\n );\r\n\r\n const wifiState = await adapter?.getStateAsync(\r\n device.productKey + \".\" + device.deviceKey + \".wifiState\",\r\n );\r\n\r\n const fiveMinutesAgo = (Date.now() / 1000 - 5 * 60) * 1000; // Five minutes ago\r\n const tenMinutesAgo = (Date.now() / 1000 - 10 * 60) * 1000; // Ten minutes ago\r\n\r\n if (\r\n lastUpdate &&\r\n lastUpdate.val &&\r\n Number(lastUpdate.val) < fiveMinutesAgo &&\r\n wifiState?.val == \"Connected\"\r\n ) {\r\n adapter.log.warn(\r\n `[checkStatesJob] Last update for deviceKey ${\r\n device.deviceKey\r\n } was at ${new Date(\r\n Number(lastUpdate),\r\n )}, device seems to be online - so maybe connection is broken - restart adapter in 20 seconds!`,\r\n );\r\n\r\n await adapter.delay(20 * 1000);\r\n adapter.restart();\r\n\r\n // set marker, so we discontinue the forEach Loop because of reconnect!\r\n refreshAccessTokenNeeded = true;\r\n }\r\n\r\n if (\r\n lastUpdate &&\r\n lastUpdate.val &&\r\n Number(lastUpdate.val) < tenMinutesAgo &&\r\n !refreshAccessTokenNeeded\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};\r\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "zendure-solarflow",
4
- "version": "1.6.4",
4
+ "version": "1.6.6",
5
5
  "news": {
6
+ "1.6.6": {
7
+ "en": "Tweaked recurring refresh of access token.",
8
+ "de": "Tweaked wiederkehrende Erfrischung des Zugangs zu Token.",
9
+ "ru": "Сжатое повторяющееся обновление токена доступа.",
10
+ "pt": "Atualização recorrente de token de acesso.",
11
+ "nl": "Getweaked returning refresh of access token.",
12
+ "fr": "Changez de jeton d'accès.",
13
+ "it": "Tweaked rinfresco ricorrente di accesso token.",
14
+ "es": "Refrigerio recurrente de token de acceso.",
15
+ "pl": "Podmienił powtarzające się odświeżanie tokena dostępu.",
16
+ "uk": "Запечена рецидивна обробка токени доступу.",
17
+ "zh-cn": "不断刷新访问标志."
18
+ },
19
+ "1.6.5": {
20
+ "en": "Fix reconnect issue. Adapter will now restart if connection semms to be broken.",
21
+ "de": "Reconnect Problem behoben. Adapter wird jetzt neu starten, wenn Verbindungssemms gebrochen werden.",
22
+ "ru": "Переключение. Адаптер теперь перезапустится, если соединение будет сломано.",
23
+ "pt": "Corrigir problema de reconectar. O adaptador reiniciará agora se os semms de conexão forem quebrados.",
24
+ "nl": "Maak opnieuw verbinding probleem. Adapter zal nu herstarten als verbinding sems worden verbroken.",
25
+ "fr": "Correction du problème de reconnect. L'adaptateur redémarre maintenant si la connexion semms doit être cassée.",
26
+ "it": "Risolvi il problema della riconnette. L'adattatore riavvia ora se la connessione semms per essere rotto.",
27
+ "es": "Arregla el problema de reconexión. El adaptador se reiniciará ahora si semms de conexión para ser roto.",
28
+ "pl": "Napraw ponownie połączenie. Adapter ponownie uruchomi się, jeśli semms połączenia zostanie przerwany.",
29
+ "uk": "Виправлення проблеми відключення. Перехідник тепер перезавантажить, якщо з'єднання зламається.",
30
+ "zh-cn": "修复重联问题. 如果连接 semms 要中断, 适配器现在将重新启动 ."
31
+ },
6
32
  "1.6.4": {
7
33
  "en": "Fix services",
8
34
  "de": "Dienstleistungen",
@@ -67,32 +93,6 @@
67
93
  "pl": "Popraw problem, że czasem dane nie są aktualizowane\nDodawanie trybu czuwania HUB (20W) w przypadku niskiego wejścia solarinput",
68
94
  "uk": "Виправлення проблеми, які одноразові дані не оновлено\nДодайте автономне використання HUB (20W) при низькому доступі",
69
95
  "zh-cn": "解决数据有时不更新的问题\n当太阳输入量低时添加 HUB( 20W) 的备用用法"
70
- },
71
- "1.5.3": {
72
- "en": "Fix autoRecover datatype issue",
73
- "de": "AutoRecover Datatype Problem",
74
- "ru": "Вопрос о типе данных autoRecover",
75
- "pt": "Corrigir problema do tipo de dados autoRecover",
76
- "nl": "Repareren autoRecover datatype probleem",
77
- "fr": "Correction problème de type de données autoRecover",
78
- "it": "Risolvere il problema del tipo di dati autoRecover",
79
- "es": "Corrección de autoRecover datatype problema",
80
- "pl": "Napraw wydanie typu danych autoRecover",
81
- "uk": "Фіксувати автоматичнийВихід даних",
82
- "zh-cn": "自动恢复数据类型问题"
83
- },
84
- "1.5.2": {
85
- "en": "Minor bugfixes and improvements",
86
- "de": "Minor Bugfixes und Verbesserungen",
87
- "ru": "Незначительные исправления и улучшения",
88
- "pt": "Pequenas correções e melhorias",
89
- "nl": "Kleine bugfixes en verbeteringen",
90
- "fr": "Corrections mineures et améliorations",
91
- "it": "Minor bugfix e miglioramenti",
92
- "es": "Fixes menores y mejoras",
93
- "pl": "Niewielkie poprawki i ulepszenia",
94
- "uk": "Мінорні виправлення та вдосконалення",
95
- "zh-cn": "小错误修正和改进"
96
96
  }
97
97
  },
98
98
  "titleLang": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.zendure-solarflow",
3
- "version": "1.6.4",
3
+ "version": "1.6.6",
4
4
  "description": "zendure-solarflow",
5
5
  "author": {
6
6
  "name": "Peter",