iobroker.solarviewdatareader 1.2.4 → 1.2.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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2019-2025 Achim Fürhoff <achim.fuerhoff@outlook.de>
3
+ Copyright (c) 2019-2026 Achim Fürhoff <achim.fuerhoff@outlook.de>
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -60,6 +60,16 @@ UL3, IL3 = mains voltage, mains power phase 3
60
60
  TKK= Temperature inverter
61
61
 
62
62
  ## Changelog
63
+ ### 1.2.6 (2026-09-13)
64
+ * (afuerhoff) dependencies updated
65
+ * (afuerhoff) issues detected by repository checker fixed [#289], [#305]
66
+
67
+ ### 1.2.5 (2026-05-16)
68
+ * (copilot) Adapter requires node.js >= 22 now
69
+ * (afuerhoff) dependencies updated
70
+ * (afuerhoff) dependabot.yml fixed [#246](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/246)
71
+ * (afuerhoff) license information updated
72
+
63
73
  ### 1.2.4 (2025-10-24)
64
74
  * (afuerhoff) dependencies updated
65
75
  * (afuerhoff) npm security changes
@@ -75,21 +85,12 @@ TKK= Temperature inverter
75
85
  * (afuerhoff) testing updated [#217](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/217)
76
86
  * (afuerhoff) @iobroker-bot warning fixed [#209](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/209)
77
87
 
78
- ### 1.2.1 (2025-02-26)
79
- * (afuerhoff) dependencies updated
80
-
81
- ### 1.2.0 (2024-12-20)
82
- * (afuerhoff) dependencies updated
83
- * (afuerhoff) Migration to ESLint 9 and @iobroker/eslint-config - issue [#189]
84
- * (afuerhoff) eslint: code optimized
85
- * (afuerhoff) fixing chksum message if inverter 2 - 4 is not available
86
- * (afuerhoff) logging optimized
87
- * (afuerhoff) net handling optimized
88
+ [Older changelogs can be found there](CHANGELOG_OLD.md)
88
89
 
89
90
  ## License
90
91
  MIT License
91
92
 
92
- Copyright (c) 2019-2025 Achim Fürhoff <achim.fuerhoff@outlook.de>
93
+ Copyright (c) 2019-2026 Achim Fürhoff <achim.fuerhoff@outlook.de>
93
94
 
94
95
  Permission is hereby granted, free of charge, to any person obtaining a copy
95
96
  of this software and associated documentation files (the "Software"), to deal
@@ -8,6 +8,7 @@
8
8
  "Inverter 2": "Wechselrichter 2",
9
9
  "Inverter 3": "Wechselrichter 3",
10
10
  "Inverter 4": "Wechselrichter 4",
11
+ "Main settings": "Haupteinstellungen",
11
12
  "Please check if inverter 1 available": "Bitte prüfen Sie, ob Wechselrichter 1 verfügbar ist",
12
13
  "Please check if inverter 2 available": "Bitte prüfen Sie, ob Wechselrichter 2 verfügbar ist",
13
14
  "Please check if inverter 3 available": "Bitte prüfen Sie, ob Wechselrichter 3 verfügbar ist",
@@ -25,6 +26,7 @@
25
26
  "Please enter the interval end (e.g. 23:59)": "Bitte geben Sie das Intervallende ein (z. B. 23:59).",
26
27
  "Please enter the interval start (e.g. 00:00)": "Bitte geben Sie den Intervallstart ein (z. B. 00:00).",
27
28
  "Please enter the port": "Bitte geben Sie den Port ein",
29
+ "Port": "Port",
28
30
  "Self consumption meter 1": "Eigenverbrauchsmesser 1",
29
31
  "Self consumption meter 2": "Eigenverbrauchsmesser 2",
30
32
  "Self consumption meter 3": "Eigenverbrauchsmesser 3",
@@ -35,6 +37,7 @@
35
37
  "SolarView is a data logger for several inverter. Further informations can be get over the link.": "SolarView ist ein Datenlogger für mehrere Wechselrichter. ",
36
38
  "System variable": "Systemvariable",
37
39
  "System variable e.g. hm-rega.0.12345": "Systemvariable z.B. hm-rega.0.12345",
40
+ "d0-converter": "d0-Konverter",
38
41
  "polling interval in seconds": "Abfrageintervall in Sekunden",
39
42
  "solarviewdatareader adapter settings": "Adaptereinstellungen für solarviewdatareader"
40
43
  }
@@ -8,6 +8,7 @@
8
8
  "Inverter 2": "Inverter 2",
9
9
  "Inverter 3": "Inverter 3",
10
10
  "Inverter 4": "Inverter 4",
11
+ "Main settings": "Main settings",
11
12
  "Please check if inverter 1 available": "Please check if inverter 1 available",
12
13
  "Please check if inverter 2 available": "Please check if inverter 2 available",
13
14
  "Please check if inverter 3 available": "Please check if inverter 3 available",
@@ -25,6 +26,7 @@
25
26
  "Please enter the interval end (e.g. 23:59)": "Please enter the interval end (e.g. 23:59)",
26
27
  "Please enter the interval start (e.g. 00:00)": "Please enter the interval start (e.g. 00:00)",
27
28
  "Please enter the port": "Please enter the port",
29
+ "Port": "Port",
28
30
  "Self consumption meter 1": "Self consumption meter 1",
29
31
  "Self consumption meter 2": "Self consumption meter 2",
30
32
  "Self consumption meter 3": "Self consumption meter 3",
@@ -35,6 +37,7 @@
35
37
  "SolarView is a data logger for several inverter. Further informations can be get over the link.": "SolarView is a data logger for several inverter. Further informations can be get over the link.",
36
38
  "System variable": "System variable",
37
39
  "System variable e.g. hm-rega.0.12345": "System variable e.g. hm-rega.0.12345",
40
+ "d0-converter": "d0-converter",
38
41
  "polling interval in seconds": "polling interval in seconds",
39
42
  "solarviewdatareader adapter settings": "Adapter settings for solarviewdatareader"
40
43
  }
@@ -8,6 +8,7 @@
8
8
  "Inverter 2": "Inversor 2",
9
9
  "Inverter 3": "Inversor 3",
10
10
  "Inverter 4": "Inversor 4",
11
+ "Main settings": "Configuraciones principales",
11
12
  "Please check if inverter 1 available": "Por favor, compruebe si el inversor 1 disponible",
12
13
  "Please check if inverter 2 available": "Por favor, compruebe si el inversor 2 está disponible",
13
14
  "Please check if inverter 3 available": "Por favor verifica si el inversor 3 está disponible.",
@@ -25,6 +26,7 @@
25
26
  "Please enter the interval end (e.g. 23:59)": "Ingrese el final del intervalo (por ejemplo, 23:59)",
26
27
  "Please enter the interval start (e.g. 00:00)": "Introduzca el inicio del intervalo (p. Ej., 00:00)",
27
28
  "Please enter the port": "Por favor ingrese el puerto",
29
+ "Port": "Puerto",
28
30
  "Self consumption meter 1": "Medidor de autoconsumo 1",
29
31
  "Self consumption meter 2": "Medidor de autoconsumo 2",
30
32
  "Self consumption meter 3": "Medidor de autoconsumo 3",
@@ -35,6 +37,7 @@
35
37
  "SolarView is a data logger for several inverter. Further informations can be get over the link.": "SolarView es un registrador de datos para varios inversores. ",
36
38
  "System variable": "Variable del sistema",
37
39
  "System variable e.g. hm-rega.0.12345": "Variable del sistema, p. hm-rega.0.12345",
40
+ "d0-converter": "convertidor d0",
38
41
  "polling interval in seconds": "intervalo de sondeo en segundos",
39
42
  "solarviewdatareader adapter settings": "Ajustes del adaptador para solarviewdatareader"
40
43
  }
@@ -8,6 +8,7 @@
8
8
  "Inverter 2": "Onduleur 2",
9
9
  "Inverter 3": "Onduleur 3",
10
10
  "Inverter 4": "Onduleur 4",
11
+ "Main settings": "Paramètres principaux",
11
12
  "Please check if inverter 1 available": "Veuillez vérifier si le convertisseur 1 est disponible",
12
13
  "Please check if inverter 2 available": "Veuillez vérifier si l'onduleur 2 est disponible",
13
14
  "Please check if inverter 3 available": "Veuillez vérifier si l'onduleur 3 est disponible",
@@ -25,6 +26,7 @@
25
26
  "Please enter the interval end (e.g. 23:59)": "Veuillez saisir la fin de l'intervalle (par exemple 23:59)",
26
27
  "Please enter the interval start (e.g. 00:00)": "Veuillez saisir le début de l'intervalle (par exemple 00:00)",
27
28
  "Please enter the port": "S'il vous plaît entrer le port",
29
+ "Port": "Port",
28
30
  "Self consumption meter 1": "Compteur d'autoconsommation 1",
29
31
  "Self consumption meter 2": "Compteur d'autoconsommation 2",
30
32
  "Self consumption meter 3": "Compteur d'autoconsommation 3",
@@ -35,6 +37,7 @@
35
37
  "SolarView is a data logger for several inverter. Further informations can be get over the link.": "SolarView est un enregistreur de données pour plusieurs onduleurs. ",
36
38
  "System variable": "Variable système",
37
39
  "System variable e.g. hm-rega.0.12345": "Variable système, par ex. hm-rega.0.12345",
40
+ "d0-converter": "convertisseur d0",
38
41
  "polling interval in seconds": "intervalle d'interrogation en secondes",
39
42
  "solarviewdatareader adapter settings": "Paramètres d'adaptateur pour solarviewdatareader"
40
43
  }
@@ -8,6 +8,7 @@
8
8
  "Inverter 2": "Inverter 2",
9
9
  "Inverter 3": "Inverter 3",
10
10
  "Inverter 4": "Inverter 4",
11
+ "Main settings": "Impostazioni principali",
11
12
  "Please check if inverter 1 available": "Si prega di verificare se l'inverter 1 è disponibile",
12
13
  "Please check if inverter 2 available": "Si prega di verificare se l'inverter 2 è disponibile",
13
14
  "Please check if inverter 3 available": "Si prega di verificare se l'inverter 3 è disponibile",
@@ -25,6 +26,7 @@
25
26
  "Please enter the interval end (e.g. 23:59)": "Inserisci la fine dell'intervallo (ad es. 23:59)",
26
27
  "Please enter the interval start (e.g. 00:00)": "Si prega di inserire l'inizio dell'intervallo (es. 00:00)",
27
28
  "Please enter the port": "Si prega di inserire il porto",
29
+ "Port": "Porta",
28
30
  "Self consumption meter 1": "Indicatore di autoconsumo 1",
29
31
  "Self consumption meter 2": "Contatore di autoconsumo 2",
30
32
  "Self consumption meter 3": "Indicatore di autoconsumo 3",
@@ -35,6 +37,7 @@
35
37
  "SolarView is a data logger for several inverter. Further informations can be get over the link.": "SolarView è un data logger per diversi inverter. ",
36
38
  "System variable": "Variabile di sistema",
37
39
  "System variable e.g. hm-rega.0.12345": "Variabile di sistema ad es. hm-rega.0.12345",
40
+ "d0-converter": "convertitore d0",
38
41
  "polling interval in seconds": "intervallo di polling in secondi",
39
42
  "solarviewdatareader adapter settings": "Impostazioni dell'adattatore per solarviewdatareader"
40
43
  }
@@ -8,6 +8,7 @@
8
8
  "Inverter 2": "Omvormer 2",
9
9
  "Inverter 3": "Omvormer 3",
10
10
  "Inverter 4": "Omvormer 4",
11
+ "Main settings": "Belangrijkste instellingen",
11
12
  "Please check if inverter 1 available": "Controleer of inverter 1 beschikbaar is",
12
13
  "Please check if inverter 2 available": "Controleer of inverter 2 beschikbaar is",
13
14
  "Please check if inverter 3 available": "Controleer of inverter 3 beschikbaar is",
@@ -25,6 +26,7 @@
25
26
  "Please enter the interval end (e.g. 23:59)": "Voer het einde van het interval in (bijv. 23:59)",
26
27
  "Please enter the interval start (e.g. 00:00)": "Voer de intervalstart in (bijv. 00:00)",
27
28
  "Please enter the port": "Voer de poort in",
29
+ "Port": "Haven",
28
30
  "Self consumption meter 1": "Eigen verbruik meter 1",
29
31
  "Self consumption meter 2": "Eigen verbruik meter 2",
30
32
  "Self consumption meter 3": "Eigen verbruik meter 3",
@@ -35,6 +37,7 @@
35
37
  "SolarView is a data logger for several inverter. Further informations can be get over the link.": "SolarView is een datalogger voor verschillende omvormers. ",
36
38
  "System variable": "Systeemvariabele",
37
39
  "System variable e.g. hm-rega.0.12345": "Systeemvariabele, b.v. hm-rega.0.12345",
40
+ "d0-converter": "d0-converter",
38
41
  "polling interval in seconds": "polling-interval in seconden",
39
42
  "solarviewdatareader adapter settings": "Adapterinstellingen voor solarviewdatareader"
40
43
  }
@@ -8,6 +8,7 @@
8
8
  "Inverter 2": "Falownik 2",
9
9
  "Inverter 3": "Falownik 3",
10
10
  "Inverter 4": "Falownik 4",
11
+ "Main settings": "Główne ustawienia",
11
12
  "Please check if inverter 1 available": "Sprawdź, czy dostępny jest falownik 1",
12
13
  "Please check if inverter 2 available": "Sprawdź, czy dostępny jest falownik 2",
13
14
  "Please check if inverter 3 available": "Sprawdź, czy dostępny jest falownik 3",
@@ -25,6 +26,7 @@
25
26
  "Please enter the interval end (e.g. 23:59)": "Wprowadź koniec interwału (np. 23:59)",
26
27
  "Please enter the interval start (e.g. 00:00)": "Wprowadź początek interwału (np. 00:00)",
27
28
  "Please enter the port": "Proszę wejść do portu",
29
+ "Port": "Port",
28
30
  "Self consumption meter 1": "Licznik zużycia własnego 1",
29
31
  "Self consumption meter 2": "Licznik zużycia własnego 2",
30
32
  "Self consumption meter 3": "Licznik zużycia własnego 3",
@@ -35,6 +37,7 @@
35
37
  "SolarView is a data logger for several inverter. Further informations can be get over the link.": "SolarView to rejestrator danych dla kilku falowników. ",
36
38
  "System variable": "Zmienna systemowa",
37
39
  "System variable e.g. hm-rega.0.12345": "Zmienna systemowa, np. hm-rega.0.12345",
40
+ "d0-converter": "konwerter d0",
38
41
  "polling interval in seconds": "interwał odpytywania w sekundach",
39
42
  "solarviewdatareader adapter settings": "Ustawienia adaptera dla solarviewdatareader"
40
43
  }
@@ -8,6 +8,7 @@
8
8
  "Inverter 2": "Inversor 2",
9
9
  "Inverter 3": "Inversor 3",
10
10
  "Inverter 4": "Inversor 4",
11
+ "Main settings": "Configurações principais",
11
12
  "Please check if inverter 1 available": "Por favor, verifique se o inversor 1 está disponível",
12
13
  "Please check if inverter 2 available": "Por favor, verifique se o inversor 2 está disponível",
13
14
  "Please check if inverter 3 available": "Por favor, verifique se o inversor 3 está disponível",
@@ -25,6 +26,7 @@
25
26
  "Please enter the interval end (e.g. 23:59)": "Insira o fim do intervalo (por exemplo, 23:59)",
26
27
  "Please enter the interval start (e.g. 00:00)": "Insira o início do intervalo (por exemplo, 00:00)",
27
28
  "Please enter the port": "Por favor, insira o porto",
29
+ "Port": "Porta",
28
30
  "Self consumption meter 1": "Medidor de auto consumo 1",
29
31
  "Self consumption meter 2": "Medidor de autoconsumo 2",
30
32
  "Self consumption meter 3": "Medidor de autoconsumo 3",
@@ -35,6 +37,7 @@
35
37
  "SolarView is a data logger for several inverter. Further informations can be get over the link.": "O SolarView é um data logger para vários inversores. ",
36
38
  "System variable": "Variável do sistema",
37
39
  "System variable e.g. hm-rega.0.12345": "Variável do sistema, por ex. hm-rega.0.12345",
40
+ "d0-converter": "conversor d0",
38
41
  "polling interval in seconds": "intervalo de sondagem em segundos",
39
42
  "solarviewdatareader adapter settings": "Configurações do adaptador para solarviewdatareader"
40
43
  }
@@ -8,6 +8,7 @@
8
8
  "Inverter 2": "Инвертор 2",
9
9
  "Inverter 3": "Инвертор 3",
10
10
  "Inverter 4": "Инвертор 4",
11
+ "Main settings": "Основные настройки",
11
12
  "Please check if inverter 1 available": "Пожалуйста, проверьте, доступен ли инвертор 1",
12
13
  "Please check if inverter 2 available": "Пожалуйста, проверьте, доступен ли инвертор 2",
13
14
  "Please check if inverter 3 available": "Пожалуйста, проверьте, доступен ли инвертор 3",
@@ -25,6 +26,7 @@
25
26
  "Please enter the interval end (e.g. 23:59)": "Введите конец интервала (например, 23:59)",
26
27
  "Please enter the interval start (e.g. 00:00)": "Введите начало интервала (например, 00:00)",
27
28
  "Please enter the port": "Пожалуйста, введите порт",
29
+ "Port": "Порт",
28
30
  "Self consumption meter 1": "Счетчик собственного потребления 1",
29
31
  "Self consumption meter 2": "Счетчик собственного потребления 2",
30
32
  "Self consumption meter 3": "Счетчик собственного потребления 3",
@@ -35,6 +37,7 @@
35
37
  "SolarView is a data logger for several inverter. Further informations can be get over the link.": "SolarView - это регистратор данных для нескольких инверторов. ",
36
38
  "System variable": "Системная переменная",
37
39
  "System variable e.g. hm-rega.0.12345": "Системная переменная, например. хм-rega.0.12345",
40
+ "d0-converter": "d0-конвертер",
38
41
  "polling interval in seconds": "интервал опроса в секундах",
39
42
  "solarviewdatareader adapter settings": "Настройки адаптера для solarviewdatareader"
40
43
  }
@@ -8,6 +8,7 @@
8
8
  "Inverter 2": "Інвертор 2",
9
9
  "Inverter 3": "Інвертор 3",
10
10
  "Inverter 4": "Інвертор 4",
11
+ "Main settings": "Основні налаштування",
11
12
  "Please check if inverter 1 available": "Будь ласка, перевірте, чи доступний інвертор 1",
12
13
  "Please check if inverter 2 available": "Будь ласка, перевірте, чи доступний інвертор 2",
13
14
  "Please check if inverter 3 available": "Будь ласка, перевірте, чи доступний інвертор 3",
@@ -25,6 +26,7 @@
25
26
  "Please enter the interval end (e.g. 23:59)": "Будь ласка, введіть кінець інтервалу (наприклад, 23:59)",
26
27
  "Please enter the interval start (e.g. 00:00)": "Будь ласка, введіть початок інтервалу (наприклад, 00:00)",
27
28
  "Please enter the port": "Будь ласка, введіть порт",
29
+ "Port": "Порт",
28
30
  "Self consumption meter 1": "Лічильник власного споживання 1",
29
31
  "Self consumption meter 2": "Лічильник власного споживання 2",
30
32
  "Self consumption meter 3": "Лічильник власного споживання 3",
@@ -35,6 +37,7 @@
35
37
  "SolarView is a data logger for several inverter. Further informations can be get over the link.": "SolarView — це реєстратор даних для кількох інверторів. Додаткову інформацію можна отримати за посиланням.",
36
38
  "System variable": "Системна змінна",
37
39
  "System variable e.g. hm-rega.0.12345": "Системна змінна напр. hm-rega.0.12345",
40
+ "d0-converter": "d0-конвертер",
38
41
  "polling interval in seconds": "інтервал опитування в секундах",
39
42
  "solarviewdatareader adapter settings": "Параметри адаптера для solarviewdatareader"
40
43
  }
@@ -8,6 +8,7 @@
8
8
  "Inverter 2": "逆变器2",
9
9
  "Inverter 3": "逆变器3",
10
10
  "Inverter 4": "逆变器4",
11
+ "Main settings": "主要设置",
11
12
  "Please check if inverter 1 available": "请检查逆变器1是否可用",
12
13
  "Please check if inverter 2 available": "请检查逆变器2是否可用",
13
14
  "Please check if inverter 3 available": "请检查逆变器3是否可用",
@@ -25,6 +26,7 @@
25
26
  "Please enter the interval end (e.g. 23:59)": "请输入间隔结束时间(例如23:59)",
26
27
  "Please enter the interval start (e.g. 00:00)": "请输入间隔开始时间(例如00:00)",
27
28
  "Please enter the port": "请输入端口",
29
+ "Port": "港口",
28
30
  "Self consumption meter 1": "自用电表1",
29
31
  "Self consumption meter 2": "自用电表2",
30
32
  "Self consumption meter 3": "自用电度表3",
@@ -35,6 +37,7 @@
35
37
  "SolarView is a data logger for several inverter. Further informations can be get over the link.": "SolarView是多个逆变器的数据记录器。",
36
38
  "System variable": "系统变量",
37
39
  "System variable e.g. hm-rega.0.12345": "系统变量例如hm-rega.0.12345",
40
+ "d0-converter": "d0转换器",
38
41
  "polling interval in seconds": "以秒为单位的轮询间隔",
39
42
  "solarviewdatareader adapter settings": "solarviewdatareader的适配器设置"
40
43
  }
package/build/main.js CHANGED
@@ -22,7 +22,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
22
22
  mod
23
23
  ));
24
24
  var utils = __toESM(require("@iobroker/adapter-core"));
25
- var net = __toESM(require("net"));
25
+ var net = __toESM(require("node:net"));
26
26
  class Solarviewdatareader extends utils.Adapter {
27
27
  tout;
28
28
  jobSchedule;
@@ -624,7 +624,7 @@ class Solarviewdatareader extends utils.Adapter {
624
624
  this.conn.on("error", this.onErrorHandler.bind(this));
625
625
  this.conn.on("timeout", this.onTimeoutHandler.bind(this));
626
626
  await this.setCmdQueue();
627
- this.jobSchedule = setInterval(async () => {
627
+ this.jobSchedule = this.setInterval(async () => {
628
628
  try {
629
629
  await this.setCmdQueue();
630
630
  } catch (error) {
@@ -706,7 +706,7 @@ class Solarviewdatareader extends utils.Adapter {
706
706
  this.errorHandler(`conn.on error - cmd: ${this.lastCommand}`, error);
707
707
  }
708
708
  _sleep(milliseconds) {
709
- return new Promise((resolve) => setTimeout(resolve, milliseconds));
709
+ return new Promise((resolve) => this.setTimeout(resolve, milliseconds));
710
710
  }
711
711
  connectAsync = (port, ip_address) => {
712
712
  return new Promise((resolve, reject) => {
@@ -808,8 +808,8 @@ class Solarviewdatareader extends utils.Adapter {
808
808
  }
809
809
  onUnload(callback) {
810
810
  try {
811
- clearInterval(this.jobSchedule);
812
- clearTimeout(this.tout);
811
+ this.clearInterval(this.jobSchedule);
812
+ this.clearTimeout(this.tout);
813
813
  this.conn.destroy();
814
814
  this.setStateChanged("info.connection", { val: false, ack: true });
815
815
  this.log.info("cleaned everything up...");
package/build/main.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/main.ts"],
4
- "sourcesContent": ["'use strict';\n/*\n * Created with @iobroker/create-adapter v1.14.0\n */\n\n// The adapter-core module gives you access to the core ioBroker functions\nimport * as utils from '@iobroker/adapter-core';\n\n// Load your modules here, e.g.:\nimport * as net from 'net';\n\ninterface IChecksumResult {\n result: boolean;\n chksum: number;\n ind: number;\n data: Buffer;\n}\n\nclass Solarviewdatareader extends utils.Adapter {\n private tout!: NodeJS.Timeout;\n private jobSchedule!: NodeJS.Timeout;\n private chkCnt: number;\n private conn!: net.Socket;\n private lastCommand: string;\n private commandQueue: string[];\n private isProcessingQueue: boolean;\n private isProcessingCmd: boolean;\n private isError: boolean;\n\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'solarviewdatareader',\n });\n this.on('ready', this.onReady.bind(this));\n this.on('unload', this.onUnload.bind(this));\n this.lastCommand = '';\n this.commandQueue = [];\n this.isProcessingQueue = false;\n this.isProcessingCmd = false;\n this.chkCnt = 0;\n this.isError = false;\n }\n\n private async createObject(id: string, obj: ioBroker.SettableObject): Promise<void> {\n await this.setObjectNotExistsAsync(id, obj);\n await this.extendObject(id, obj);\n\n const currentState = await this.getStateAsync(id);\n const stCommon: ioBroker.StateCommon = obj.common as ioBroker.StateCommon; // Type Assertion\n if (currentState === null && stCommon.def !== undefined) {\n await this.setState(id, stCommon.def, true); // set default\n }\n }\n\n private async createGlobalObjects(): Promise<void> {\n const options: [string, ioBroker.SettableObject][] = [\n [\n 'info.connection',\n {\n type: 'state',\n common: {\n name: 'connection',\n type: 'boolean',\n role: 'indicator.connected',\n def: false,\n read: true,\n write: false,\n desc: 'Solarview connection state',\n unit: '',\n },\n native: {},\n },\n ],\n [\n 'info.lastUpdate',\n {\n type: 'state',\n common: {\n name: 'lastUpdate',\n type: 'string',\n role: 'date',\n def: new Date('1900-01-01T00:00:00').toString(),\n read: true,\n write: false,\n desc: 'Last connection date/time',\n unit: '',\n },\n native: {},\n },\n ],\n ];\n\n for (const option of options) {\n await this.createObject(...option);\n }\n }\n\n private async createSolarviewObjects(device: string, additional: boolean = false): Promise<void> {\n let options: [string, ioBroker.SettableObject][] = [\n [device, { type: 'channel', common: { name: device }, native: {} }],\n [\n `${device}.current`,\n {\n type: 'state',\n common: {\n name: 'current',\n type: 'number',\n role: 'value.power',\n def: 0,\n read: true,\n write: false,\n desc: 'Current PAC',\n unit: 'W',\n },\n native: {},\n },\n ],\n [\n `${device}.daily`,\n {\n type: 'state',\n common: {\n name: 'daily',\n type: 'number',\n role: 'value.energy',\n def: 0,\n read: true,\n write: false,\n desc: 'Daily yield',\n unit: 'kWh',\n },\n native: {},\n },\n ],\n [\n `${device}.monthly`,\n {\n type: 'state',\n common: {\n name: 'monthly',\n type: 'number',\n role: 'value.energy',\n def: 0,\n read: true,\n write: false,\n desc: 'Monthly yield',\n unit: 'kWh',\n },\n native: {},\n },\n ],\n [\n `${device}.yearly`,\n {\n type: 'state',\n common: {\n name: 'yearly',\n type: 'number',\n role: 'value.energy',\n def: 0,\n read: true,\n write: false,\n desc: 'Yearly yield',\n unit: 'kWh',\n },\n native: {},\n },\n ],\n [\n `${device}.total`,\n {\n type: 'state',\n common: {\n name: 'total',\n type: 'number',\n role: 'value.energy',\n def: 0,\n read: true,\n write: false,\n desc: 'Total yield',\n unit: 'kWh',\n },\n native: {},\n },\n ],\n ];\n\n if (additional) {\n const additionalOptions: [string, ioBroker.SettableObject][] = [\n [\n `${device}.udc`,\n {\n type: 'state',\n common: {\n name: 'udc',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.idc`,\n {\n type: 'state',\n common: {\n name: 'idc',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.udcb`,\n {\n type: 'state',\n common: {\n name: 'udcb',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.idcb`,\n {\n type: 'state',\n common: {\n name: 'idcb',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.udcc`,\n {\n type: 'state',\n common: {\n name: 'udcc',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.idcc`,\n {\n type: 'state',\n common: {\n name: 'idcc',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.udcd`,\n {\n type: 'state',\n common: {\n name: 'udcd',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.idcd`,\n {\n type: 'state',\n common: {\n name: 'idcd',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.ul1`,\n {\n type: 'state',\n common: {\n name: 'ul1',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Mains voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.il1`,\n {\n type: 'state',\n common: {\n name: 'il1',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Mains current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.ul2`,\n {\n type: 'state',\n common: {\n name: 'ul2',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Mains voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.il2`,\n {\n type: 'state',\n common: {\n name: 'il2',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Mains current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.ul3`,\n {\n type: 'state',\n common: {\n name: 'ul3',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Mains voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.il3`,\n {\n type: 'state',\n common: {\n name: 'il3',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Mains current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.tkk`,\n {\n type: 'state',\n common: {\n name: 'tkk',\n type: 'number',\n role: 'value.temperature',\n def: 0,\n read: true,\n write: false,\n desc: 'Temperature',\n unit: '\u00B0C',\n },\n native: {},\n },\n ],\n ];\n options = options.concat(additionalOptions);\n }\n\n for (const option of options) {\n await this.createObject(...option);\n }\n }\n\n //for compatibility reasons. Minute interval changed to seconds.\n private async adjustIntervalToSeconds(): Promise<void> {\n const adapterObj: ioBroker.Object | null | undefined = await this.getForeignObjectAsync(\n `system.adapter.${this.namespace}`,\n );\n if (!this.config.interval_seconds) {\n if (adapterObj) {\n adapterObj.native.interval_seconds = true;\n adapterObj.native.intervalVal *= 60;\n this.log.warn('Interval changed to seconds!');\n this.log.info('Interval attribute changed! Please check the configuration');\n this.log.info('Adapter restarts');\n }\n }\n }\n\n // Nullen voranstellen - add Leading Zero\n private aLZ(n: number): string {\n return n <= 9 ? `0${n}` : n.toString();\n }\n\n private calcChecksum(inputString: string): IChecksumResult {\n const buffer = Buffer.from(inputString);\n let sum = 0;\n let index = 0;\n\n for (let i = 0; i < buffer.length; i++) {\n sum = (sum + buffer[i]) % 128;\n if (buffer[i] === 125) {\n index = i + 2;\n break;\n }\n }\n\n const result: IChecksumResult = {\n result: buffer[index] === sum,\n chksum: sum,\n ind: index,\n data: buffer,\n };\n\n return result;\n }\n\n private preprocessSolarviewData(response: Buffer): string[] {\n let sv_data = response.toString('ascii');\n sv_data = sv_data.replace(/[{}]+/g, ''); // Remove \"{}\"\n return sv_data.split(',');\n }\n\n private getSolarviewPrefix(dataCode: string): string {\n const prefixMap: { [key: string]: string } = {\n '00': 'pvig.',\n '01': 'pvi1.',\n '02': 'pvi2.',\n '03': 'pvi3.',\n '04': 'pvi4.',\n 10: 'scm0.',\n 11: 'scm1.',\n 12: 'scm2.',\n 13: 'scm3.',\n 14: 'scm4.',\n 21: 'd0supply.',\n 22: 'd0consumption.',\n };\n return prefixMap[dataCode] || '';\n }\n\n private async updateSolarviewStates(sv_data: string[], sv_prefix: string): Promise<void> {\n try {\n this.updateState(`${sv_prefix}current`, sv_data, 10);\n if (sv_prefix === 'pvig.') {\n await this.handleCCUUpdate(sv_data);\n }\n this.updateState(`${sv_prefix}daily`, sv_data, 6);\n this.updateState(`${sv_prefix}monthly`, sv_data, 7);\n this.updateState(`${sv_prefix}yearly`, sv_data, 8);\n this.updateState(`${sv_prefix}total`, sv_data, 9);\n\n if (sv_data.length >= 23) {\n this.updateExtendedStates(sv_data, sv_prefix);\n }\n } catch (error: unknown) {\n this.errorHandler(`updateSolarviewStates`, error);\n throw error;\n }\n }\n\n private async handleCCUUpdate(sv_data: string[]): Promise<void> {\n try {\n if (this.config.setCCU) {\n const obj = await this.findForeignObjectAsync(this.config.CCUSystemV, null);\n if (obj && obj.name) {\n this.log.debug(`set CCU system variable: ${this.config.CCUSystemV}`);\n this.setForeignState(this.config.CCUSystemV, { val: Number(sv_data[10]), ack: false });\n } else {\n this.log.error(`CCU system variable ${this.config.CCUSystemV} does not exist!`);\n }\n }\n } catch (error: unknown) {\n this.errorHandler(`handleCCUUpdate`, error);\n throw error;\n }\n }\n\n private updateExtendedStates(sv_data: string[], sv_prefix: string): void {\n this.updateState(`${sv_prefix}udc`, sv_data, 11);\n this.updateState(`${sv_prefix}idc`, sv_data, 12);\n this.updateState(`${sv_prefix}udcb`, sv_data, 13);\n this.updateState(`${sv_prefix}idcb`, sv_data, 14);\n this.updateState(`${sv_prefix}udcc`, sv_data, 15);\n this.updateState(`${sv_prefix}idcc`, sv_data, 16);\n this.updateState(`${sv_prefix}udcd`, sv_data, 17);\n this.updateState(`${sv_prefix}idcd`, sv_data, 18);\n\n if (sv_data.length === 27) {\n // Neue Version Solarview\n this.updateState(`${sv_prefix}ul1`, sv_data, 19);\n this.updateState(`${sv_prefix}il1`, sv_data, 20);\n this.updateState(`${sv_prefix}ul2`, sv_data, 21);\n this.updateState(`${sv_prefix}il2`, sv_data, 22);\n this.updateState(`${sv_prefix}ul3`, sv_data, 23);\n this.updateState(`${sv_prefix}il3`, sv_data, 24);\n this.updateState(`${sv_prefix}tkk`, sv_data, 25);\n } else if (sv_data.length === 23) {\n // Alte Version Solarview\n this.updateState(`${sv_prefix}ul1`, sv_data, 19);\n this.updateState(`${sv_prefix}il1`, sv_data, 20);\n this.updateState(`${sv_prefix}tkk`, sv_data, 21);\n }\n }\n\n private updateState(stateName: string, sv_data: string[], index: number): void {\n const value = Number(sv_data[index]);\n this.setStateChanged(stateName, { val: value, ack: true });\n }\n\n private async onReady(): Promise<void> {\n try {\n const starttime = this.config.intervalstart.split(':').slice(0, 2).join(':');\n const endtime = this.config.intervalend.split(':').slice(0, 2).join(':');\n\n this.log.info(\n `start solarview ${this.config.ipaddress}:${this.config.port} - polling interval: ${this.config.intervalVal}s (${starttime} to ${\n endtime\n })`,\n );\n this.log.info(`d0 converter: ${this.config.d0converter.toString()}`);\n\n await this.createGlobalObjects();\n\n await this.createSolarviewObjects('pvig', false);\n if (this.config.d0converter) {\n await this.createSolarviewObjects('d0supply', false);\n }\n if (this.config.d0converter) {\n await this.createSolarviewObjects('d0consumption', false);\n }\n if (this.config.scm0) {\n await this.createSolarviewObjects('scm0', false);\n }\n if (this.config.scm1) {\n await this.createSolarviewObjects('scm1', false);\n }\n if (this.config.scm2) {\n await this.createSolarviewObjects('scm2', false);\n }\n if (this.config.scm3) {\n await this.createSolarviewObjects('scm3', false);\n }\n if (this.config.scm4) {\n await this.createSolarviewObjects('scm4', false);\n }\n if (this.config.pvi1) {\n await this.createSolarviewObjects('pvi1', true);\n }\n if (this.config.pvi2) {\n await this.createSolarviewObjects('pvi2', true);\n }\n if (this.config.pvi3) {\n await this.createSolarviewObjects('pvi3', true);\n }\n if (this.config.pvi4) {\n await this.createSolarviewObjects('pvi4', true);\n }\n\n if (!this.config.interval_seconds) {\n await this.adjustIntervalToSeconds.call(this);\n }\n\n this.conn = new net.Socket();\n this.conn.setTimeout(2000);\n this.conn.on('data', this.onDataHandler.bind(this));\n this.conn.on('close', this.onCloseHandler.bind(this));\n this.conn.on('error', this.onErrorHandler.bind(this));\n this.conn.on('timeout', this.onTimeoutHandler.bind(this));\n\n //First start\n await this.setCmdQueue();\n\n this.jobSchedule = setInterval(async () => {\n try {\n await this.setCmdQueue();\n } catch (error: any) {\n this.log.error(`onReady.schedule: ${error.message}`);\n }\n }, this.config.intervalVal * 1000);\n } catch (error: unknown) {\n this.errorHandler(`onReady`, error);\n }\n }\n\n private onTimeoutHandler(): void {\n this.log.error('onTimeoutHandler: socket timeout');\n this.conn.end();\n }\n\n private async onDataHandler(data: any): Promise<void> {\n try {\n await this.processData(data);\n this.conn.end();\n } catch (error: unknown) {\n this.errorHandler(`conn.on data`, error);\n }\n }\n\n private processData = async (data: Buffer): Promise<void> => {\n try {\n const strdata: string[] = this.preprocessSolarviewData(data);\n const id = this.getSolarviewPrefix(strdata[0]);\n const cs: IChecksumResult = this.calcChecksum(data.toString('ascii'));\n if (cs.result) {\n await this.handleChecksumSuccess(strdata, id, data);\n } else {\n this.handleChecksumFailure(strdata, cs);\n }\n } catch (error: unknown) {\n this.errorHandler(`processData`, error);\n throw error;\n }\n };\n\n private async handleChecksumSuccess(sv_data: string[], sv_prefix: string, response: Buffer): Promise<void> {\n try {\n this.chkCnt = 0;\n this.log.debug(`${response.toString('ascii')}`);\n\n await this.updateSolarviewStates(sv_data, sv_prefix);\n\n const sDate = `${sv_data[3]}-${this.aLZ(parseInt(sv_data[2]))}-${this.aLZ(parseInt(sv_data[1]))} ${this.aLZ(parseInt(sv_data[4]))}:${this.aLZ(parseInt(sv_data[5]))}`;\n this.setStateChanged('info.lastUpdate', { val: sDate, ack: true });\n this.setStateChanged('info.connection', { val: true, ack: true });\n } catch (error: unknown) {\n this.errorHandler(`handleChecksumSuccess`, error);\n throw error;\n }\n }\n\n private handleChecksumFailure(sv_data: string[], csum: IChecksumResult): void {\n if (csum.chksum !== 0) {\n if (csum.data.toString('ascii') != ';-)\\n') {\n this.chkCnt += 1;\n this.log.warn(`checksum not correct! ${sv_data[0]}: ${csum.data.toString('ascii')}`);\n } else {\n //else -> option not supported from Solarview due to missing Inverter -> chksum ;-)\\n\n this.log.warn(`command ${this.lastCommand} not supported!`);\n }\n }\n }\n\n private async onCloseHandler(): Promise<void> {\n try {\n if (this.lastCommand) {\n this.log.debug(`Connection closed after executing command: ${this.lastCommand}`);\n } else {\n this.log.debug('Connection closed');\n }\n this.isProcessingCmd = false;\n if (this.chkCnt > 3) {\n await this.setState('info.connection', false, true);\n this.log.warn('Solarview Server is not reachable');\n this.chkCnt = 0;\n }\n } catch (error: unknown) {\n this.errorHandler(`conn.on close`, error);\n }\n }\n\n private onErrorHandler(error: unknown): void {\n this.errorHandler(`conn.on error - cmd: ${this.lastCommand}`, error);\n }\n\n private _sleep(milliseconds: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, milliseconds));\n }\n\n private connectAsync = (port: number, ip_address: string): Promise<void> => {\n return new Promise((resolve, reject) => {\n this.conn.connect(port, ip_address, () => {\n resolve();\n });\n this.conn.on('error', err => {\n reject(err);\n });\n });\n };\n\n private async setCmdQueue(): Promise<void> {\n try {\n const commands: string[] = [];\n const { d0converter, scm0, scm1, scm2, scm3, scm4, pvi1, pvi2, pvi3, pvi4, intervalstart, intervalend } =\n this.config;\n\n const starttime = intervalstart.split(':').slice(0, 2).join(':');\n let endtime = intervalend.split(':').slice(0, 2).join(':');\n endtime = endtime === '00:00' ? '23:59' : endtime;\n\n const dnow = new Date();\n const dstart = new Date(`${dnow.getFullYear()}-${dnow.getMonth() + 1}-${dnow.getDate()} ${starttime}`);\n const dend = new Date(`${dnow.getFullYear()}-${dnow.getMonth() + 1}-${dnow.getDate()} ${endtime}`);\n\n if (dnow >= dstart && dnow <= dend) {\n commands.push('00*'); // pvig\n if (d0converter) {\n commands.push('21*');\n }\n if (pvi1) {\n commands.push('01*');\n }\n if (pvi2) {\n commands.push('02*');\n }\n if (pvi3) {\n commands.push('03*');\n }\n if (pvi4) {\n commands.push('04*');\n }\n }\n\n if (d0converter) {\n commands.push('22*');\n }\n if (scm0) {\n commands.push('10*');\n }\n if (scm1) {\n commands.push('11*');\n }\n if (scm2) {\n commands.push('12*');\n }\n if (scm3) {\n commands.push('13*');\n }\n if (scm4) {\n commands.push('14*');\n }\n\n // Befehle zur Warteschlange hinzuf\u00FCgen\n this.commandQueue.push(...commands);\n\n // Verarbeite die Warteschlange\n await this.processQueue();\n } catch (error: unknown) {\n this.errorHandler(`setCmdQueue`, error);\n }\n }\n\n private async processQueue(): Promise<void> {\n if (this.isProcessingQueue) {\n this.log.warn(`processQueue: command queue not empty! Waiting for solarview server ...`);\n return;\n }\n this.isProcessingQueue = true;\n\n while (this.commandQueue.length > 0) {\n if (!this.isProcessingCmd) {\n const cmd = this.commandQueue.shift();\n if (cmd) {\n try {\n this.isProcessingCmd = true;\n await this.executeCommand(cmd);\n if (this.isError === true) {\n this.log.info('Server connection is now working again!');\n this.isError = false;\n }\n } catch {\n this.isError = true;\n this.commandQueue.length = 0; // Queue l\u00F6schen\n this.isProcessingQueue = false;\n this.isProcessingCmd = false;\n }\n }\n }\n await this._sleep(500);\n }\n this.isProcessingQueue = false;\n }\n\n private async executeCommand(cmd: string): Promise<void> {\n this.log.debug(`Attempting to execute command: ${cmd}`);\n this.lastCommand = cmd;\n await this.connectAsync(this.config.port, this.config.ipaddress);\n this.conn.write(cmd);\n this.log.debug(`Command successfully sent: ${cmd}`);\n }\n\n private onUnload(callback: () => void): void {\n try {\n clearInterval(this.jobSchedule);\n clearTimeout(this.tout);\n this.conn.destroy();\n this.setStateChanged('info.connection', { val: false, ack: true });\n this.log.info('cleaned everything up...');\n callback();\n } catch (error: unknown) {\n this.errorHandler('onUnload', error);\n callback();\n }\n }\n\n private errorHandler(errTitle: string, error: unknown): void {\n if (error instanceof Error) {\n if (error.message.includes('EHOSTUNREACH') || error.message.includes('ECONNREFUSED')) {\n this.log.warn(`${errTitle}: Solarview server is not reachable! Please check the server.`);\n } else {\n this.log.error(`${errTitle}: ${error.message}\\nStacktrace: ${error.stack}`);\n }\n } else if (typeof error === 'string') {\n this.log.error(`${errTitle}: ${error}`);\n } else {\n this.log.error(`${errTitle}: Unknown error occurred: {error}`);\n }\n }\n}\n\nif (require.main !== module) {\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) => new Solarviewdatareader(options);\n} else {\n (() => new Solarviewdatareader())();\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["'use strict';\n/*\n * Created with @iobroker/create-adapter v1.14.0\n */\n\n// The adapter-core module gives you access to the core ioBroker functions\nimport * as utils from '@iobroker/adapter-core';\n\n// Load your modules here, e.g.:\nimport * as net from 'node:net';\n\ninterface IChecksumResult {\n result: boolean;\n chksum: number;\n ind: number;\n data: Buffer;\n}\n\nclass Solarviewdatareader extends utils.Adapter {\n private tout!: ioBroker.Timeout;\n private jobSchedule!: ioBroker.Interval | undefined;\n private chkCnt: number;\n private conn!: net.Socket;\n private lastCommand: string;\n private commandQueue: string[];\n private isProcessingQueue: boolean;\n private isProcessingCmd: boolean;\n private isError: boolean;\n\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'solarviewdatareader',\n });\n this.on('ready', this.onReady.bind(this));\n this.on('unload', this.onUnload.bind(this));\n this.lastCommand = '';\n this.commandQueue = [];\n this.isProcessingQueue = false;\n this.isProcessingCmd = false;\n this.chkCnt = 0;\n this.isError = false;\n }\n\n private async createObject(id: string, obj: ioBroker.SettableObject): Promise<void> {\n await this.setObjectNotExistsAsync(id, obj);\n await this.extendObject(id, obj);\n\n const currentState = await this.getStateAsync(id);\n const stCommon: ioBroker.StateCommon = obj.common as ioBroker.StateCommon; // Type Assertion\n if (currentState === null && stCommon.def !== undefined) {\n await this.setState(id, stCommon.def, true); // set default\n }\n }\n\n private async createGlobalObjects(): Promise<void> {\n const options: [string, ioBroker.SettableObject][] = [\n [\n 'info.connection',\n {\n type: 'state',\n common: {\n name: 'connection',\n type: 'boolean',\n role: 'indicator.connected',\n def: false,\n read: true,\n write: false,\n desc: 'Solarview connection state',\n unit: '',\n },\n native: {},\n },\n ],\n [\n 'info.lastUpdate',\n {\n type: 'state',\n common: {\n name: 'lastUpdate',\n type: 'string',\n role: 'date',\n def: new Date('1900-01-01T00:00:00').toString(),\n read: true,\n write: false,\n desc: 'Last connection date/time',\n unit: '',\n },\n native: {},\n },\n ],\n ];\n\n for (const option of options) {\n await this.createObject(...option);\n }\n }\n\n private async createSolarviewObjects(device: string, additional: boolean = false): Promise<void> {\n let options: [string, ioBroker.SettableObject][] = [\n [device, { type: 'channel', common: { name: device }, native: {} }],\n [\n `${device}.current`,\n {\n type: 'state',\n common: {\n name: 'current',\n type: 'number',\n role: 'value.power',\n def: 0,\n read: true,\n write: false,\n desc: 'Current PAC',\n unit: 'W',\n },\n native: {},\n },\n ],\n [\n `${device}.daily`,\n {\n type: 'state',\n common: {\n name: 'daily',\n type: 'number',\n role: 'value.energy',\n def: 0,\n read: true,\n write: false,\n desc: 'Daily yield',\n unit: 'kWh',\n },\n native: {},\n },\n ],\n [\n `${device}.monthly`,\n {\n type: 'state',\n common: {\n name: 'monthly',\n type: 'number',\n role: 'value.energy',\n def: 0,\n read: true,\n write: false,\n desc: 'Monthly yield',\n unit: 'kWh',\n },\n native: {},\n },\n ],\n [\n `${device}.yearly`,\n {\n type: 'state',\n common: {\n name: 'yearly',\n type: 'number',\n role: 'value.energy',\n def: 0,\n read: true,\n write: false,\n desc: 'Yearly yield',\n unit: 'kWh',\n },\n native: {},\n },\n ],\n [\n `${device}.total`,\n {\n type: 'state',\n common: {\n name: 'total',\n type: 'number',\n role: 'value.energy',\n def: 0,\n read: true,\n write: false,\n desc: 'Total yield',\n unit: 'kWh',\n },\n native: {},\n },\n ],\n ];\n\n if (additional) {\n const additionalOptions: [string, ioBroker.SettableObject][] = [\n [\n `${device}.udc`,\n {\n type: 'state',\n common: {\n name: 'udc',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.idc`,\n {\n type: 'state',\n common: {\n name: 'idc',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.udcb`,\n {\n type: 'state',\n common: {\n name: 'udcb',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.idcb`,\n {\n type: 'state',\n common: {\n name: 'idcb',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.udcc`,\n {\n type: 'state',\n common: {\n name: 'udcc',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.idcc`,\n {\n type: 'state',\n common: {\n name: 'idcc',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.udcd`,\n {\n type: 'state',\n common: {\n name: 'udcd',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.idcd`,\n {\n type: 'state',\n common: {\n name: 'idcd',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Generator current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.ul1`,\n {\n type: 'state',\n common: {\n name: 'ul1',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Mains voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.il1`,\n {\n type: 'state',\n common: {\n name: 'il1',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Mains current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.ul2`,\n {\n type: 'state',\n common: {\n name: 'ul2',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Mains voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.il2`,\n {\n type: 'state',\n common: {\n name: 'il2',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Mains current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.ul3`,\n {\n type: 'state',\n common: {\n name: 'ul3',\n type: 'number',\n role: 'value.voltage',\n def: 0,\n read: true,\n write: false,\n desc: 'Mains voltage',\n unit: 'V',\n },\n native: {},\n },\n ],\n [\n `${device}.il3`,\n {\n type: 'state',\n common: {\n name: 'il3',\n type: 'number',\n role: 'value.current',\n def: 0,\n read: true,\n write: false,\n desc: 'Mains current',\n unit: 'A',\n },\n native: {},\n },\n ],\n [\n `${device}.tkk`,\n {\n type: 'state',\n common: {\n name: 'tkk',\n type: 'number',\n role: 'value.temperature',\n def: 0,\n read: true,\n write: false,\n desc: 'Temperature',\n unit: '\u00B0C',\n },\n native: {},\n },\n ],\n ];\n options = options.concat(additionalOptions);\n }\n\n for (const option of options) {\n await this.createObject(...option);\n }\n }\n\n //for compatibility reasons. Minute interval changed to seconds.\n private async adjustIntervalToSeconds(): Promise<void> {\n const adapterObj: ioBroker.Object | null | undefined = await this.getForeignObjectAsync(\n `system.adapter.${this.namespace}`,\n );\n if (!this.config.interval_seconds) {\n if (adapterObj) {\n adapterObj.native.interval_seconds = true;\n adapterObj.native.intervalVal *= 60;\n this.log.warn('Interval changed to seconds!');\n this.log.info('Interval attribute changed! Please check the configuration');\n this.log.info('Adapter restarts');\n }\n }\n }\n\n // Nullen voranstellen - add Leading Zero\n private aLZ(n: number): string {\n return n <= 9 ? `0${n}` : n.toString();\n }\n\n private calcChecksum(inputString: string): IChecksumResult {\n const buffer = Buffer.from(inputString);\n let sum = 0;\n let index = 0;\n\n for (let i = 0; i < buffer.length; i++) {\n sum = (sum + buffer[i]) % 128;\n if (buffer[i] === 125) {\n index = i + 2;\n break;\n }\n }\n\n const result: IChecksumResult = {\n result: buffer[index] === sum,\n chksum: sum,\n ind: index,\n data: buffer,\n };\n\n return result;\n }\n\n private preprocessSolarviewData(response: Buffer): string[] {\n let sv_data = response.toString('ascii');\n sv_data = sv_data.replace(/[{}]+/g, ''); // Remove \"{}\"\n return sv_data.split(',');\n }\n\n private getSolarviewPrefix(dataCode: string): string {\n const prefixMap: { [key: string]: string } = {\n '00': 'pvig.',\n '01': 'pvi1.',\n '02': 'pvi2.',\n '03': 'pvi3.',\n '04': 'pvi4.',\n 10: 'scm0.',\n 11: 'scm1.',\n 12: 'scm2.',\n 13: 'scm3.',\n 14: 'scm4.',\n 21: 'd0supply.',\n 22: 'd0consumption.',\n };\n return prefixMap[dataCode] || '';\n }\n\n private async updateSolarviewStates(sv_data: string[], sv_prefix: string): Promise<void> {\n try {\n this.updateState(`${sv_prefix}current`, sv_data, 10);\n if (sv_prefix === 'pvig.') {\n await this.handleCCUUpdate(sv_data);\n }\n this.updateState(`${sv_prefix}daily`, sv_data, 6);\n this.updateState(`${sv_prefix}monthly`, sv_data, 7);\n this.updateState(`${sv_prefix}yearly`, sv_data, 8);\n this.updateState(`${sv_prefix}total`, sv_data, 9);\n\n if (sv_data.length >= 23) {\n this.updateExtendedStates(sv_data, sv_prefix);\n }\n } catch (error: unknown) {\n this.errorHandler(`updateSolarviewStates`, error);\n throw error;\n }\n }\n\n private async handleCCUUpdate(sv_data: string[]): Promise<void> {\n try {\n if (this.config.setCCU) {\n const obj = await this.findForeignObjectAsync(this.config.CCUSystemV, null);\n if (obj && obj.name) {\n this.log.debug(`set CCU system variable: ${this.config.CCUSystemV}`);\n this.setForeignState(this.config.CCUSystemV, { val: Number(sv_data[10]), ack: false });\n } else {\n this.log.error(`CCU system variable ${this.config.CCUSystemV} does not exist!`);\n }\n }\n } catch (error: unknown) {\n this.errorHandler(`handleCCUUpdate`, error);\n throw error;\n }\n }\n\n private updateExtendedStates(sv_data: string[], sv_prefix: string): void {\n this.updateState(`${sv_prefix}udc`, sv_data, 11);\n this.updateState(`${sv_prefix}idc`, sv_data, 12);\n this.updateState(`${sv_prefix}udcb`, sv_data, 13);\n this.updateState(`${sv_prefix}idcb`, sv_data, 14);\n this.updateState(`${sv_prefix}udcc`, sv_data, 15);\n this.updateState(`${sv_prefix}idcc`, sv_data, 16);\n this.updateState(`${sv_prefix}udcd`, sv_data, 17);\n this.updateState(`${sv_prefix}idcd`, sv_data, 18);\n\n if (sv_data.length === 27) {\n // Neue Version Solarview\n this.updateState(`${sv_prefix}ul1`, sv_data, 19);\n this.updateState(`${sv_prefix}il1`, sv_data, 20);\n this.updateState(`${sv_prefix}ul2`, sv_data, 21);\n this.updateState(`${sv_prefix}il2`, sv_data, 22);\n this.updateState(`${sv_prefix}ul3`, sv_data, 23);\n this.updateState(`${sv_prefix}il3`, sv_data, 24);\n this.updateState(`${sv_prefix}tkk`, sv_data, 25);\n } else if (sv_data.length === 23) {\n // Alte Version Solarview\n this.updateState(`${sv_prefix}ul1`, sv_data, 19);\n this.updateState(`${sv_prefix}il1`, sv_data, 20);\n this.updateState(`${sv_prefix}tkk`, sv_data, 21);\n }\n }\n\n private updateState(stateName: string, sv_data: string[], index: number): void {\n const value = Number(sv_data[index]);\n this.setStateChanged(stateName, { val: value, ack: true });\n }\n\n private async onReady(): Promise<void> {\n try {\n const starttime = this.config.intervalstart.split(':').slice(0, 2).join(':');\n const endtime = this.config.intervalend.split(':').slice(0, 2).join(':');\n\n this.log.info(\n `start solarview ${this.config.ipaddress}:${this.config.port} - polling interval: ${this.config.intervalVal}s (${starttime} to ${\n endtime\n })`,\n );\n this.log.info(`d0 converter: ${this.config.d0converter.toString()}`);\n\n await this.createGlobalObjects();\n\n await this.createSolarviewObjects('pvig', false);\n if (this.config.d0converter) {\n await this.createSolarviewObjects('d0supply', false);\n }\n if (this.config.d0converter) {\n await this.createSolarviewObjects('d0consumption', false);\n }\n if (this.config.scm0) {\n await this.createSolarviewObjects('scm0', false);\n }\n if (this.config.scm1) {\n await this.createSolarviewObjects('scm1', false);\n }\n if (this.config.scm2) {\n await this.createSolarviewObjects('scm2', false);\n }\n if (this.config.scm3) {\n await this.createSolarviewObjects('scm3', false);\n }\n if (this.config.scm4) {\n await this.createSolarviewObjects('scm4', false);\n }\n if (this.config.pvi1) {\n await this.createSolarviewObjects('pvi1', true);\n }\n if (this.config.pvi2) {\n await this.createSolarviewObjects('pvi2', true);\n }\n if (this.config.pvi3) {\n await this.createSolarviewObjects('pvi3', true);\n }\n if (this.config.pvi4) {\n await this.createSolarviewObjects('pvi4', true);\n }\n\n if (!this.config.interval_seconds) {\n await this.adjustIntervalToSeconds.call(this);\n }\n\n this.conn = new net.Socket();\n this.conn.setTimeout(2000);\n this.conn.on('data', this.onDataHandler.bind(this));\n this.conn.on('close', this.onCloseHandler.bind(this));\n this.conn.on('error', this.onErrorHandler.bind(this));\n this.conn.on('timeout', this.onTimeoutHandler.bind(this));\n\n //First start\n await this.setCmdQueue();\n\n this.jobSchedule = this.setInterval(async () => {\n try {\n await this.setCmdQueue();\n } catch (error: any) {\n this.log.error(`onReady.schedule: ${error.message}`);\n }\n }, this.config.intervalVal * 1000);\n } catch (error: unknown) {\n this.errorHandler(`onReady`, error);\n }\n }\n\n private onTimeoutHandler(): void {\n this.log.error('onTimeoutHandler: socket timeout');\n this.conn.end();\n }\n\n private async onDataHandler(data: any): Promise<void> {\n try {\n await this.processData(data);\n this.conn.end();\n } catch (error: unknown) {\n this.errorHandler(`conn.on data`, error);\n }\n }\n\n private processData = async (data: Buffer): Promise<void> => {\n try {\n const strdata: string[] = this.preprocessSolarviewData(data);\n const id = this.getSolarviewPrefix(strdata[0]);\n const cs: IChecksumResult = this.calcChecksum(data.toString('ascii'));\n if (cs.result) {\n await this.handleChecksumSuccess(strdata, id, data);\n } else {\n this.handleChecksumFailure(strdata, cs);\n }\n } catch (error: unknown) {\n this.errorHandler(`processData`, error);\n throw error;\n }\n };\n\n private async handleChecksumSuccess(sv_data: string[], sv_prefix: string, response: Buffer): Promise<void> {\n try {\n this.chkCnt = 0;\n this.log.debug(`${response.toString('ascii')}`);\n\n await this.updateSolarviewStates(sv_data, sv_prefix);\n\n const sDate = `${sv_data[3]}-${this.aLZ(parseInt(sv_data[2]))}-${this.aLZ(parseInt(sv_data[1]))} ${this.aLZ(parseInt(sv_data[4]))}:${this.aLZ(parseInt(sv_data[5]))}`;\n this.setStateChanged('info.lastUpdate', { val: sDate, ack: true });\n this.setStateChanged('info.connection', { val: true, ack: true });\n } catch (error: unknown) {\n this.errorHandler(`handleChecksumSuccess`, error);\n throw error;\n }\n }\n\n private handleChecksumFailure(sv_data: string[], csum: IChecksumResult): void {\n if (csum.chksum !== 0) {\n if (csum.data.toString('ascii') != ';-)\\n') {\n this.chkCnt += 1;\n this.log.warn(`checksum not correct! ${sv_data[0]}: ${csum.data.toString('ascii')}`);\n } else {\n //else -> option not supported from Solarview due to missing Inverter -> chksum ;-)\\n\n this.log.warn(`command ${this.lastCommand} not supported!`);\n }\n }\n }\n\n private async onCloseHandler(): Promise<void> {\n try {\n if (this.lastCommand) {\n this.log.debug(`Connection closed after executing command: ${this.lastCommand}`);\n } else {\n this.log.debug('Connection closed');\n }\n this.isProcessingCmd = false;\n if (this.chkCnt > 3) {\n await this.setState('info.connection', false, true);\n this.log.warn('Solarview Server is not reachable');\n this.chkCnt = 0;\n }\n } catch (error: unknown) {\n this.errorHandler(`conn.on close`, error);\n }\n }\n\n private onErrorHandler(error: unknown): void {\n this.errorHandler(`conn.on error - cmd: ${this.lastCommand}`, error);\n }\n\n private _sleep(milliseconds: number): Promise<void> {\n return new Promise(resolve => this.setTimeout(resolve, milliseconds));\n }\n\n private connectAsync = (port: number, ip_address: string): Promise<void> => {\n return new Promise((resolve, reject) => {\n this.conn.connect(port, ip_address, () => {\n resolve();\n });\n this.conn.on('error', err => {\n reject(err);\n });\n });\n };\n\n private async setCmdQueue(): Promise<void> {\n try {\n const commands: string[] = [];\n const { d0converter, scm0, scm1, scm2, scm3, scm4, pvi1, pvi2, pvi3, pvi4, intervalstart, intervalend } =\n this.config;\n\n const starttime = intervalstart.split(':').slice(0, 2).join(':');\n let endtime = intervalend.split(':').slice(0, 2).join(':');\n endtime = endtime === '00:00' ? '23:59' : endtime;\n\n const dnow = new Date();\n const dstart = new Date(`${dnow.getFullYear()}-${dnow.getMonth() + 1}-${dnow.getDate()} ${starttime}`);\n const dend = new Date(`${dnow.getFullYear()}-${dnow.getMonth() + 1}-${dnow.getDate()} ${endtime}`);\n\n if (dnow >= dstart && dnow <= dend) {\n commands.push('00*'); // pvig\n if (d0converter) {\n commands.push('21*');\n }\n if (pvi1) {\n commands.push('01*');\n }\n if (pvi2) {\n commands.push('02*');\n }\n if (pvi3) {\n commands.push('03*');\n }\n if (pvi4) {\n commands.push('04*');\n }\n }\n\n if (d0converter) {\n commands.push('22*');\n }\n if (scm0) {\n commands.push('10*');\n }\n if (scm1) {\n commands.push('11*');\n }\n if (scm2) {\n commands.push('12*');\n }\n if (scm3) {\n commands.push('13*');\n }\n if (scm4) {\n commands.push('14*');\n }\n\n // Befehle zur Warteschlange hinzuf\u00FCgen\n this.commandQueue.push(...commands);\n\n // Verarbeite die Warteschlange\n await this.processQueue();\n } catch (error: unknown) {\n this.errorHandler(`setCmdQueue`, error);\n }\n }\n\n private async processQueue(): Promise<void> {\n if (this.isProcessingQueue) {\n this.log.warn(`processQueue: command queue not empty! Waiting for solarview server ...`);\n return;\n }\n this.isProcessingQueue = true;\n\n while (this.commandQueue.length > 0) {\n if (!this.isProcessingCmd) {\n const cmd = this.commandQueue.shift();\n if (cmd) {\n try {\n this.isProcessingCmd = true;\n await this.executeCommand(cmd);\n if (this.isError === true) {\n this.log.info('Server connection is now working again!');\n this.isError = false;\n }\n } catch {\n this.isError = true;\n this.commandQueue.length = 0; // Queue l\u00F6schen\n this.isProcessingQueue = false;\n this.isProcessingCmd = false;\n }\n }\n }\n await this._sleep(500);\n }\n this.isProcessingQueue = false;\n }\n\n private async executeCommand(cmd: string): Promise<void> {\n this.log.debug(`Attempting to execute command: ${cmd}`);\n this.lastCommand = cmd;\n await this.connectAsync(this.config.port, this.config.ipaddress);\n this.conn.write(cmd);\n this.log.debug(`Command successfully sent: ${cmd}`);\n }\n\n private onUnload(callback: () => void): void {\n try {\n this.clearInterval(this.jobSchedule);\n this.clearTimeout(this.tout);\n this.conn.destroy();\n this.setStateChanged('info.connection', { val: false, ack: true });\n this.log.info('cleaned everything up...');\n callback();\n } catch (error: unknown) {\n this.errorHandler('onUnload', error);\n callback();\n }\n }\n\n private errorHandler(errTitle: string, error: unknown): void {\n if (error instanceof Error) {\n if (error.message.includes('EHOSTUNREACH') || error.message.includes('ECONNREFUSED')) {\n this.log.warn(`${errTitle}: Solarview server is not reachable! Please check the server.`);\n } else {\n this.log.error(`${errTitle}: ${error.message}\\nStacktrace: ${error.stack}`);\n }\n } else if (typeof error === 'string') {\n this.log.error(`${errTitle}: ${error}`);\n } else {\n this.log.error(`${errTitle}: Unknown error occurred: {error}`);\n }\n }\n}\n\nif (require.main !== module) {\n module.exports = (options: Partial<utils.AdapterOptions> | undefined) => new Solarviewdatareader(options);\n} else {\n (() => new Solarviewdatareader())();\n}\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": "solarviewdatareader",
4
- "version": "1.2.4",
4
+ "version": "1.2.6",
5
5
  "news": {
6
+ "1.2.6": {
7
+ "en": "dependencies updated\nissues detected by repository checker fixed [#289], [#305]",
8
+ "de": "Abhängigkeiten aktualisiert\nRepository-Checker hat Probleme behoben [#289], [#305]",
9
+ "ru": "зависимости обновлены\nисправлены проблемы, обнаруженные средством проверки репозитория [#289], [#305]",
10
+ "pt": "dependências atualizadas\nproblemas detectados pelo repositório corrigidos [#289], [#305]",
11
+ "nl": "afhankelijkheden bijgewerkt\nproblemen die door de repository checker zijn ontdekt, zijn opgelost [#289], [#305]",
12
+ "fr": "dépendances mises à jour\nproblèmes détectés par Repository Checker résolus [#289], [#305]",
13
+ "it": "dipendenze aggiornate\nproblemi rilevati da Repository Checker risolti [#289], [#305]",
14
+ "es": "dependencias actualizadas\nproblemas detectados por Repository Checker [#289], [#305]",
15
+ "pl": "aktualizacja zależności\nnaprawiono problemy wykryte przez moduł sprawdzający repozytorium [#289], [#305]",
16
+ "uk": "залежності оновлені\nВиправлені проблеми, виявлені перевіркою сховища [#289], [#305]",
17
+ "zh-cn": "依赖关系已更新\n存储库检查器检测到的问题已修复 [#289]、[#305]"
18
+ },
19
+ "1.2.5": {
20
+ "en": "Adapter requires node.js >= 22 now\ndependencies updated\ndependabot.yml fixed [#246](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/246)\nlicense information updated",
21
+ "de": "Adapter benötigt node.js >= 22 jetzt\naktualisierte abhängigkeiten\nabhängigkeitabot.yml behoben [#246](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/246)\nlizenzinformationen aktualisiert",
22
+ "ru": "Адаптер требует node.js >= 22 сейчас\nобновленные зависимости\nhttps://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/246\nлицензионная информация обновлена",
23
+ "pt": "Adaptador requer nod.js >= 22 agora\ndependências atualizadas\ndependebot.yml fixa [#246](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/246)\ninformação atualizada da licença",
24
+ "nl": "Voor de adapter zijn node.js < 22 nu nodig\nafhankelijkheden bijgewerkt\nafhankelijkabot.yml fixed [#246](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/246)\nlicentieinformatie bijgewerkt",
25
+ "fr": "Adaptateur nécessite node.js >= 22 maintenant\ndépendances mises à jour\ndependabot.yml corrigé [#246](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/246)\ninformations de licence mises à jour",
26
+ "it": "Adattatore richiede node.js >= 22 ora\ndipendenze aggiornate\ndipendeabot.yml fissato [#246](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/246)\ninformazioni sulla licenza aggiornate",
27
+ "es": "Adaptador requiere node.js ю= 22 ahora\ndependencias actualizadas\ndependabot.yml fixed [#246](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/246)\ninformación actualizada sobre licencias",
28
+ "pl": "Adapter wymaga node.js > = 22\nzaktualizowane zależności\nconsiderabot.yml fixed [# 246] (https: / / github.com / afuerhoff / ioBroker.solarviewdatarader / issues / 246)\naktualizacja informacji licencyjnych",
29
+ "uk": "Адаптер вимагає node.js >= 22 тепер\nоновлені залежності\njavaScript licenses API Веб-сайт Go1.13.8\nінформація про ліцензію оновлено",
30
+ "zh-cn": "适配器需要节点.js 现在22\n更新依赖关系\ndeskabot.yml 已固定 [# 246] (https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/246) (中文(简体) )\n更新许可证信息"
31
+ },
6
32
  "1.2.4": {
7
33
  "en": "dependencies updated\nnpm security changes\nrepository checker warnings fixed",
8
34
  "de": "aktualisierte abhängigkeiten\nnpm sicherheitsänderungen\nrepository checker warnungen fixiert",
@@ -67,32 +93,6 @@
67
93
  "pl": "zaktualizowane zależności\nMigracja do ESLint 9 i @ iobroker / eslint- config - wydanie [# 189]\neslint: zoptymalizowany kod\nnaprawianie wiadomości chksum, jeśli inwerter 2 - 4 nie jest dostępny\nzoptymalizowane logowanie\nzoptymalizowana obsługa sieci",
68
94
  "uk": "оновлені залежності\nМіграція в ESLint 9 і @iobroker/eslint-config - problem [#189]\neslint: код оптимізований\nфіксація chksum повідомлення, якщо інвертор 2 - 4 не доступний\nоптимізоване завантаження\nоптимізоване використання сітки",
69
95
  "zh-cn": "更新依赖关系\n迁移到ESLint 9 和 @iobroduc/eslint-config - 发行 [#189]\neslint: 代码优化\n如果不可用反转器 2 - 4 , 则修复 chksum 消息\n记录优化\n净处理优化"
70
- },
71
- "1.1.4": {
72
- "en": "dependencies updated\nFixes [#182](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/182)",
73
- "de": "aktualisierte abhängigkeiten\n[#182](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/182)",
74
- "ru": "обновленная информация о зависимостях\nFixes [#182] (https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/182)",
75
- "pt": "dependências atualizadas\nCorrige [#182](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/182)",
76
- "nl": "afhankelijkheden bijgewerkt\nFixes [#182](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/182)",
77
- "fr": "dépendances mises à jour\nCorrections [#182](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/182)",
78
- "it": "dipendenze aggiornate\n[#182](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/182)",
79
- "es": "dependencias actualizadas\nFixes [#182](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/182)",
80
- "pl": "zaktualizowane zależności\nFixes [# 182] (https: / / github.com / afuerhoff / ioBroker.solarviewdatarader / issues / 182)",
81
- "uk": "оновлені залежності\nВиправлення [#182](https://github.com/afuerhoff/ioBroker.solarviewdatareader/products/182)",
82
- "zh-cn": "更新依赖关系\nFixs [#182] (https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/182) (英语)"
83
- },
84
- "1.1.3": {
85
- "en": "adapter checker changes [#176](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/176)\ndependencies updated",
86
- "de": "adapter-Checker ändert [#176](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/176)\naktualisierte abhängigkeiten",
87
- "ru": "изменение адаптера [#176] (https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/176)\nобновленная информация о зависимостях",
88
- "pt": "alterações do verificador do adaptador [#176](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/176)\ndependências atualizadas",
89
- "nl": "wijzigingen van de adaptercontrole [#176](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/176)\nafhankelijkheden bijgewerkt",
90
- "fr": "changement d'adaptateur [#176](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/176)\ndépendances mises à jour",
91
- "it": "modifica dell'adattatore [#176](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/176)\ndipendenze aggiornate",
92
- "es": "adapter checker changes [#176](https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/176)\ndependencias actualizadas",
93
- "pl": "zAŁĄCZNIK II\nzaktualizowane zależności",
94
- "uk": "[#176](https://github.com/afuerhoff/ioBroker.solarviewdatareader/products/176)\nоновлені залежності",
95
- "zh-cn": "适配器检查器改变 [# 176] (https://github.com/afuerhoff/ioBroker.solarviewdatareader/issues/ 1976) (中文(简体) )\n更新依赖关系"
96
96
  }
97
97
  },
98
98
  "titleLang": {
@@ -131,8 +131,7 @@
131
131
  ],
132
132
  "licenseInformation": {
133
133
  "license": "MIT",
134
- "type": "free",
135
- "link": "https://github.com/afuerhoff/ioBroker.solarviewdatareader/blob/master/LICENSE"
134
+ "type": "free"
136
135
  },
137
136
  "tier": 3,
138
137
  "platform": "Javascript/Node.js",
@@ -153,12 +152,12 @@
153
152
  },
154
153
  "dependencies": [
155
154
  {
156
- "js-controller": ">=5.0.19"
155
+ "js-controller": ">=6.0.11"
157
156
  }
158
157
  ],
159
158
  "globalDependencies": [
160
159
  {
161
- "admin": ">=6.17.14"
160
+ "admin": ">=7.6.20"
162
161
  }
163
162
  ]
164
163
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.solarviewdatareader",
3
- "version": "1.2.4",
3
+ "version": "1.2.6",
4
4
  "description": "Get data from SolarView",
5
5
  "author": {
6
6
  "name": "Achim Fürhoff",
@@ -19,23 +19,23 @@
19
19
  "url": "https://github.com/afuerhoff/ioBroker.solarviewdatareader"
20
20
  },
21
21
  "dependencies": {
22
- "@iobroker/adapter-core": "^3.3.2"
22
+ "@iobroker/adapter-core": "^3.4.3"
23
23
  },
24
24
  "devDependencies": {
25
- "@alcalzone/release-script": "^5.0.0",
26
- "@alcalzone/release-script-plugin-iobroker": "^4.0.0",
27
- "@alcalzone/release-script-plugin-license": "^4.0.0",
28
- "@alcalzone/release-script-plugin-manual-review": "^4.0.0",
25
+ "@alcalzone/release-script": "^5.2.1",
26
+ "@alcalzone/release-script-plugin-iobroker": "^5.2.0",
27
+ "@alcalzone/release-script-plugin-license": "^5.2.2",
28
+ "@alcalzone/release-script-plugin-manual-review": "^5.2.0",
29
29
  "@iobroker/adapter-dev": "^1.5.0",
30
- "@iobroker/eslint-config": "^2.2.0",
31
- "@iobroker/testing": "^5.1.1",
32
- "@iobroker/types": "^7.0.7",
33
- "@tsconfig/node20": "^20.1.6",
34
- "@types/node": "^22.18.12",
35
- "rimraf": "^6.0.1",
30
+ "@iobroker/eslint-config": "^2.3.4",
31
+ "@iobroker/testing": "^6.2.1",
32
+ "@iobroker/types": "^7.2.2",
33
+ "@tsconfig/node22": "^22.0.6",
34
+ "@types/node": "^22.20.2",
35
+ "rimraf": "^6.1.3",
36
36
  "source-map-support": "^0.5.21",
37
37
  "ts-node": "^10.9.2",
38
- "typescript": "^5.9.3"
38
+ "typescript": "^6.0.3"
39
39
  },
40
40
  "main": "build/main.js",
41
41
  "type": "commonjs",
@@ -72,6 +72,6 @@
72
72
  },
73
73
  "readmeFilename": "README.md",
74
74
  "engines": {
75
- "node": ">=20"
75
+ "node": ">=22"
76
76
  }
77
77
  }
package/admin/words.js DELETED
@@ -1,49 +0,0 @@
1
- /*global systemDictionary:true */
2
- /*
3
- +===================== DO NOT MODIFY ======================+
4
- | This file was generated by translate-adapter, please use |
5
- | `translate-adapter adminLanguages2words` to update it. |
6
- +===================== DO NOT MODIFY ======================+
7
- */
8
- 'use strict';
9
-
10
- systemDictionary = {
11
- "Here you can define the polling interval [between 10 to 3600 seconds]": {"en": "Here you can define the polling interval [between 10 to 3600 seconds]", "de": "Hier können Sie das Polling-Intervall festlegen [zwischen 10 bis 3600 Sekunden]", "ru": "Здесь вы можете определить интервал опроса [от 10 до 3600 секунд]", "pt": "Aqui você pode definir o intervalo de sondagem [entre 10 a 3600 segundos]", "nl": "Hier kunt u het polling-interval definiëren [tussen 10 en 3600 seconden]", "fr": "Ici, vous pouvez définir l'intervalle d'interrogation [entre 10 et 3600 secondes]", "it": "Qui puoi definire l'intervallo di polling [tra 10 e 3600 secondi]", "es": "Aquí puede definir el intervalo de sondeo [entre 10 y 3600 segundos]", "pl": "Tutaj możesz zdefiniować interwał odpytywania [od 10 do 3600 sekund]", "uk": "Тут ви можете визначити інтервал опитування [від 10 до 3600 секунд]", "zh-cn": "在这里您可以定义轮询间隔 [10 到 3600 秒之间]"},
12
- "IP-Address": { "en": "IP-Address", "de": "IP Adresse", "ru": "Айпи адрес", "pt": "Endereço de IP", "nl": "IP adres", "fr": "Adresse IP", "it": "Indirizzo IP", "es": "Dirección IP", "pl": "Adres IP", "uk": "IP-адреса", "zh-cn": "IP地址"},
13
- "Interval": { "en": "Interval", "de": "Intervall", "ru": "интервал", "pt": "Intervalo", "nl": "Interval", "fr": "Intervalle", "it": "Intervallo", "es": "Intervalo", "pl": "Interwał", "uk": "Інтервал", "zh-cn": "间隔"},
14
- "Interval end": { "en": "Interval end", "de": "Intervallende", "ru": "Конец интервала", "pt": "Fim do intervalo", "nl": "Interval einde", "fr": "Fin d'intervalle", "it": "Intervallo di fine", "es": "Fin de intervalo", "pl": "Koniec interwału", "uk": "Кінець інтервалу", "zh-cn": "间隔结束"},
15
- "Interval start": { "en": "Interval start", "de": "Intervallstart", "ru": "Интервальный старт", "pt": "Início do intervalo", "nl": "Interval start", "fr": "Début d'intervalle", "it": "Inizio intervallo", "es": "Inicio de intervalo", "pl": "Początek przerwy", "uk": "Інтервальний початок", "zh-cn": "间隔开始"},
16
- "Inverter 1": { "en": "Inverter 1", "de": "Wechselrichter 1", "ru": "Инвертор 1", "pt": "Inversor 1", "nl": "Omvormer 1", "fr": "Onduleur 1", "it": "Inverter 1", "es": "Inversor 1", "pl": "Falownik 1", "uk": "Інвертор 1", "zh-cn": "逆变器1"},
17
- "Inverter 2": { "en": "Inverter 2", "de": "Wechselrichter 2", "ru": "Инвертор 2", "pt": "Inversor 2", "nl": "Omvormer 2", "fr": "Onduleur 2", "it": "Inverter 2", "es": "Inversor 2", "pl": "Falownik 2", "uk": "Інвертор 2", "zh-cn": "逆变器2"},
18
- "Inverter 3": { "en": "Inverter 3", "de": "Wechselrichter 3", "ru": "Инвертор 3", "pt": "Inversor 3", "nl": "Omvormer 3", "fr": "Onduleur 3", "it": "Inverter 3", "es": "Inversor 3", "pl": "Falownik 3", "uk": "Інвертор 3", "zh-cn": "逆变器3"},
19
- "Inverter 4": { "en": "Inverter 4", "de": "Wechselrichter 4", "ru": "Инвертор 4", "pt": "Inversor 4", "nl": "Omvormer 4", "fr": "Onduleur 4", "it": "Inverter 4", "es": "Inversor 4", "pl": "Falownik 4", "uk": "Інвертор 4", "zh-cn": "逆变器4"},
20
- "Please check if inverter 1 available": { "en": "Please check if inverter 1 available", "de": "Bitte prüfen Sie, ob Wechselrichter 1 verfügbar ist", "ru": "Пожалуйста, проверьте, доступен ли инвертор 1", "pt": "Por favor, verifique se o inversor 1 está disponível", "nl": "Controleer of inverter 1 beschikbaar is", "fr": "Veuillez vérifier si le convertisseur 1 est disponible", "it": "Si prega di verificare se l'inverter 1 è disponibile", "es": "Por favor, compruebe si el inversor 1 disponible", "pl": "Sprawdź, czy dostępny jest falownik 1", "uk": "Будь ласка, перевірте, чи доступний інвертор 1", "zh-cn": "请检查逆变器1是否可用"},
21
- "Please check if inverter 2 available": { "en": "Please check if inverter 2 available", "de": "Bitte prüfen Sie, ob Wechselrichter 2 verfügbar ist", "ru": "Пожалуйста, проверьте, доступен ли инвертор 2", "pt": "Por favor, verifique se o inversor 2 está disponível", "nl": "Controleer of inverter 2 beschikbaar is", "fr": "Veuillez vérifier si l'onduleur 2 est disponible", "it": "Si prega di verificare se l'inverter 2 è disponibile", "es": "Por favor, compruebe si el inversor 2 está disponible", "pl": "Sprawdź, czy dostępny jest falownik 2", "uk": "Будь ласка, перевірте, чи доступний інвертор 2", "zh-cn": "请检查逆变器2是否可用"},
22
- "Please check if inverter 3 available": { "en": "Please check if inverter 3 available", "de": "Bitte prüfen Sie, ob Wechselrichter 3 verfügbar ist", "ru": "Пожалуйста, проверьте, доступен ли инвертор 3", "pt": "Por favor, verifique se o inversor 3 está disponível", "nl": "Controleer of inverter 3 beschikbaar is", "fr": "Veuillez vérifier si l'onduleur 3 est disponible", "it": "Si prega di verificare se l'inverter 3 è disponibile", "es": "Por favor verifica si el inversor 3 está disponible.", "pl": "Sprawdź, czy dostępny jest falownik 3", "uk": "Будь ласка, перевірте, чи доступний інвертор 3", "zh-cn": "请检查逆变器3是否可用"},
23
- "Please check if inverter 4 available": { "en": "Please check if inverter 4 available", "de": "Bitte prüfen Sie, ob Wechselrichter 4 verfügbar ist", "ru": "Пожалуйста, проверьте, если инвертор 4 доступен", "pt": "Por favor, verifique se o inversor 4 está disponível", "nl": "Controleer of omvormer 4 beschikbaar is", "fr": "Veuillez vérifier si l'inverseur 4 est disponible", "it": "Si prega di verificare se l'inverter 4 è disponibile", "es": "Por favor, compruebe si el inversor 4 está disponible.", "pl": "Sprawdź, czy dostępny jest falownik 4", "uk": "Перевірте наявність інвертора 4", "zh-cn": "请检查逆变器4是否可用"},
24
- "Please check if self consumption meter 1 is available": {"en": "Please check if self consumption meter 1 is available", "de": "Bitte prüfen Sie, ob der Eigenverbrauchsmesser 1 verfügbar ist", "ru": "Пожалуйста, проверьте, доступен ли счетчик 1", "pt": "Verifique se o medidor de autoconsumo 1 está disponível", "nl": "Controleer of meter 1 voor eigen verbruik beschikbaar is", "fr": "Veuillez vérifier si le compteur d'autoconsommation 1 est disponible", "it": "Si prega di verificare se il contatore di autoconsumo 1 è disponibile", "es": "Compruebe si el medidor de autoconsumo 1 está disponible", "pl": "Sprawdź, czy miernik zużycia własnego 1 jest dostępny", "uk": "Будь ласка, перевірте, чи доступний лічильник власного споживання 1", "zh-cn": "请检查自用电表1是否可用"},
25
- "Please check if self consumption meter 2 is available": {"en": "Please check if self consumption meter 2 is available", "de": "Bitte prüfen Sie, ob der Eigenverbrauchsmesser 2 verfügbar ist", "ru": "Пожалуйста, проверьте, доступен ли счетчик потребления 2", "pt": "Verifique se o medidor de autoconsumo 2 está disponível", "nl": "Controleer of meter 2 voor eigen verbruik beschikbaar is", "fr": "Veuillez vérifier si le compteur d'autoconsommation 2 est disponible", "it": "Si prega di verificare se il misuratore di autoconsumo 2 è disponibile", "es": "Compruebe si el medidor de autoconsumo 2 está disponible", "pl": "Sprawdź, czy miernik zużycia własnego 2 jest dostępny", "uk": "Будь ласка, перевірте, чи доступний лічильник власного споживання 2", "zh-cn": "请检查自用电表2是否可用"},
26
- "Please check if self consumption meter 3 is available": {"en": "Please check if self consumption meter 3 is available", "de": "Bitte prüfen Sie, ob der Eigenverbrauchsmesser 3 verfügbar ist", "ru": "Пожалуйста, проверьте, доступен ли счетчик 3", "pt": "Verifique se o medidor de autoconsumo 3 está disponível", "nl": "Controleer of meter 3 voor eigen verbruik beschikbaar is", "fr": "Veuillez vérifier si le compteur d'autoconsommation 3 est disponible", "it": "Si prega di verificare se il misuratore di autoconsumo 3 è disponibile", "es": "Compruebe si el medidor de autoconsumo 3 está disponible", "pl": "Sprawdź, czy miernik zużycia własnego 3 jest dostępny", "uk": "Будь ласка, перевірте, чи доступний лічильник власного споживання 3", "zh-cn": "请检查自用电表3是否可用"},
27
- "Please check if self consumption meter 4 is available": {"en": "Please check if self consumption meter 4 is available", "de": "Bitte prüfen Sie, ob der Eigenverbrauchsmesser 4 verfügbar ist", "ru": "Пожалуйста, проверьте, доступен ли счетчик 4", "pt": "Verifique se o medidor de autoconsumo 4 está disponível", "nl": "Controleer of zelfverbruiksmeter 4 beschikbaar is", "fr": "Veuillez vérifier si le compteur d'autoconsommation 4 est disponible", "it": "Verificare se è disponibile il contatore di autoconsumo 4", "es": "Compruebe si el medidor de autoconsumo 4 está disponible", "pl": "Sprawdź, czy miernik zużycia własnego 4 jest dostępny", "uk": "Будь ласка, перевірте, чи доступний лічильник власного споживання 4", "zh-cn": "请检查自用电度表4是否可用"},
28
- "Please check if you use the self consumption meter sum": {"en": "Please check if you use the self consumption meter sum", "de": "Bitte überprüfen Sie, ob Sie die Selbstverbrauchsmessersumme verwenden", "ru": "Пожалуйста, проверьте, если вы используете сумму счетчика самопотребления", "pt": "Verifique se você usa a soma do medidor de autoconsumo", "nl": "Controleer of u de som van de meter voor eigen verbruik gebruikt", "fr": "Veuillez vérifier si vous utilisez la somme du compteur d'autoconsommation", "it": "Si prega di verificare se si utilizza la somma del contatore di autoconsumo", "es": "Compruebe si usa la suma del medidor de autoconsumo", "pl": "Sprawdź, czy używasz sumy licznika zużycia własnego", "uk": "Будь ласка, перевірте, чи використовуєте ви суму лічильника власного споживання", "zh-cn": "请检查您是否使用自费表的总和"},
29
- "Please check if you want to set a system variable in the CCU": {"en": "Please check if you want to set a system variable in the CCU", "de": "Bitte prüfen Sie, ob Sie eine Systemvariable in der CCU setzen möchten", "ru": "Проверьте, хотите ли вы установить системную переменную в CCU", "pt": "Por favor, verifique se você deseja definir uma variável de sistema no CCU", "nl": "Controleer of u een systeemvariabele in de CCU wilt instellen", "fr": "Veuillez vérifier si vous souhaitez définir une variable système dans la CCU.", "it": "Si prega di verificare se si desidera impostare una variabile di sistema nella CCU", "es": "Por favor, compruebe si desea establecer una variable de sistema en la CCU", "pl": "Sprawdź, czy chcesz ustawić zmienną systemową w CCU", "uk": "Перевірте, чи хочете ви встановити системну змінну в CCU", "zh-cn": "请检查是否要在CCU中设置系统变量"},
30
- "Please enter if you have a d0-converter": { "en": "Please enter if you have a d0-converter", "de": "Bitte geben Sie an, ob Sie einen d0-Konverter haben", "ru": "Пожалуйста, введите, если у вас есть d0-конвертер", "pt": "Por favor, digite se você tem um conversor de d0", "nl": "Voer alstublieft in als u een d0-converter heeft", "fr": "S'il vous plaît entrer si vous avez un convertisseur d0", "it": "Si prega di inserire se si dispone di un convertitore d0", "es": "Por favor ingresa si tienes un convertidor d0", "pl": "Wprowadź, jeśli masz konwerter d0", "uk": "Будь ласка, введіть, якщо у вас є d0-конвертер", "zh-cn": "如果您有d0转换器,请输入"},
31
- "Please enter the CCU system variable": { "en": "Please enter the CCU system variable", "de": "Bitte geben Sie die CCU-Systemvariable ein", "ru": "Пожалуйста, введите системную переменную CCU", "pt": "Por favor insira a variável do sistema CCU", "nl": "Voer de CCU-systeemvariabele in", "fr": "Veuillez entrer la variable système CCU", "it": "Si prega di inserire la variabile di sistema CCU", "es": "Por favor ingrese la variable de sistema CCU", "pl": "Wprowadź zmienną systemową CCU", "uk": "Введіть системну змінну CCU", "zh-cn": "请输入CCU系统变量"},
32
- "Please enter the IP-Address from your SolarView data logger": {"en": "Please enter the IP-Address from your SolarView data logger", "de": "Bitte geben Sie die IP-Adresse Ihres SolarView-Datenloggers ein", "ru": "Пожалуйста, введите IP-адрес из вашего регистратора данных SolarView", "pt": "Por favor, digite o endereço IP do seu data logger SolarView", "nl": "Voer het IP-adres in vanuit uw SolarView datalogger", "fr": "Veuillez saisir l'adresse IP de votre enregistreur de données SolarView.", "it": "Inserisci l'indirizzo IP dal tuo data logger SolarView", "es": "Introduzca la dirección IP de su registrador de datos SolarView", "pl": "Wprowadź adres IP z rejestratora danych SolarView", "uk": "Будь ласка, введіть IP-адресу з вашого реєстратора даних SolarView", "zh-cn": "请从SolarView数据记录器输入IP地址"},
33
- "Please enter the interval (cron format)": { "en": "Please enter the interval (cron format)", "de": "Bitte geben Sie das Intervall ein (Cron-Format)", "ru": "Пожалуйста, введите интервал (cron формат)", "pt": "Por favor insira o intervalo (formato cron)", "nl": "Voer het interval in (cron-formaat)", "fr": "S'il vous plaît entrer l'intervalle (format cron)", "it": "Si prega di inserire l'intervallo (formato cron)", "es": "Por favor ingrese el intervalo (formato cron)", "pl": "Wprowadź interwał (format cron)", "uk": "Будь ласка, введіть інтервал (формат cron)", "zh-cn": "请输入间隔(cron格式)"},
34
- "Please enter the interval end (e.g. 23:59)": { "en": "Please enter the interval end (e.g. 23:59)", "de": "Bitte geben Sie das Intervallende ein (z. B. 23:59).", "ru": "Введите конец интервала (например, 23:59)", "pt": "Insira o fim do intervalo (por exemplo, 23:59)", "nl": "Voer het einde van het interval in (bijv. 23:59)", "fr": "Veuillez saisir la fin de l'intervalle (par exemple 23:59)", "it": "Inserisci la fine dell'intervallo (ad es. 23:59)", "es": "Ingrese el final del intervalo (por ejemplo, 23:59)", "pl": "Wprowadź koniec interwału (np. 23:59)", "uk": "Будь ласка, введіть кінець інтервалу (наприклад, 23:59)", "zh-cn": "请输入间隔结束时间(例如23:59)"},
35
- "Please enter the interval start (e.g. 00:00)": { "en": "Please enter the interval start (e.g. 00:00)", "de": "Bitte geben Sie den Intervallstart ein (z. B. 00:00).", "ru": "Введите начало интервала (например, 00:00)", "pt": "Insira o início do intervalo (por exemplo, 00:00)", "nl": "Voer de intervalstart in (bijv. 00:00)", "fr": "Veuillez saisir le début de l'intervalle (par exemple 00:00)", "it": "Si prega di inserire l'inizio dell'intervallo (es. 00:00)", "es": "Introduzca el inicio del intervalo (p. Ej., 00:00)", "pl": "Wprowadź początek interwału (np. 00:00)", "uk": "Будь ласка, введіть початок інтервалу (наприклад, 00:00)", "zh-cn": "请输入间隔开始时间(例如00:00)"},
36
- "Please enter the port": { "en": "Please enter the port", "de": "Bitte geben Sie den Port ein", "ru": "Пожалуйста, введите порт", "pt": "Por favor, insira o porto", "nl": "Voer de poort in", "fr": "S'il vous plaît entrer le port", "it": "Si prega di inserire il porto", "es": "Por favor ingrese el puerto", "pl": "Proszę wejść do portu", "uk": "Будь ласка, введіть порт", "zh-cn": "请输入端口"},
37
- "Self consumption meter 1": { "en": "Self consumption meter 1", "de": "Eigenverbrauchsmesser 1", "ru": "Счетчик собственного потребления 1", "pt": "Medidor de auto consumo 1", "nl": "Eigen verbruik meter 1", "fr": "Compteur d'autoconsommation 1", "it": "Indicatore di autoconsumo 1", "es": "Medidor de autoconsumo 1", "pl": "Licznik zużycia własnego 1", "uk": "Лічильник власного споживання 1", "zh-cn": "自用电表1"},
38
- "Self consumption meter 2": { "en": "Self consumption meter 2", "de": "Eigenverbrauchsmesser 2", "ru": "Счетчик собственного потребления 2", "pt": "Medidor de autoconsumo 2", "nl": "Eigen verbruik meter 2", "fr": "Compteur d'autoconsommation 2", "it": "Contatore di autoconsumo 2", "es": "Medidor de autoconsumo 2", "pl": "Licznik zużycia własnego 2", "uk": "Лічильник власного споживання 2", "zh-cn": "自用电表2"},
39
- "Self consumption meter 3": { "en": "Self consumption meter 3", "de": "Eigenverbrauchsmesser 3", "ru": "Счетчик собственного потребления 3", "pt": "Medidor de autoconsumo 3", "nl": "Eigen verbruik meter 3", "fr": "Compteur d'autoconsommation 3", "it": "Indicatore di autoconsumo 3", "es": "Medidor de autoconsumo 3", "pl": "Licznik zużycia własnego 3", "uk": "Лічильник власного споживання 3", "zh-cn": "自用电度表3"},
40
- "Self consumption meter 4": { "en": "Self consumption meter 4", "de": "Eigenverbrauchsmesser 4", "ru": "Счетчик собственного потребления 4", "pt": "Medidor de autoconsumo 4", "nl": "Eigen verbruik meter 4", "fr": "Compteur d'autoconsommation 4", "it": "Indicatore di autoconsumo 4", "es": "Medidor de autoconsumo 4", "pl": "Licznik zużycia własnego 4", "uk": "Лічильник власного споживання 4", "zh-cn": "自用电度表4"},
41
- "Self consumption meter sum": { "en": "Self consumption meter sum", "de": "Eigenverbrauchsmesser Summe", "ru": "Сумма счетчика собственного потребления", "pt": "Soma de medidor de autoconsumo", "nl": "Som van het eigen verbruik", "fr": "Somme du compteur d'autoconsommation", "it": "Somma dei contatori di autoconsumo", "es": "Suma del medidor de autoconsumo", "pl": "Suma licznika zużycia własnego", "uk": "Сума лічильника власного споживання", "zh-cn": "自耗表总和"},
42
- "Set system variable CCU": { "en": "Set system variable CCU", "de": "Systemvariable CCU setzen", "ru": "Установить системную переменную CCU", "pt": "Definir CCU da variável do sistema", "nl": "Stel systeemvariabele CCU in", "fr": "Définir la variable système CCU", "it": "Imposta CCU variabile di sistema", "es": "Establecer variable de sistema CCU", "pl": "Ustaw zmienną systemową CCU", "uk": "Встановити системну змінну CCU", "zh-cn": "设置系统变量CCU"},
43
- "SolarView Logger": { "en": "SolarView Logger", "de": "SolarView Logger", "ru": "SolarView Logger", "pt": "Logger SolarView", "nl": "SolarView Logger", "fr": "Enregistreur SolarView", "it": "Logger di SolarView", "es": "Registrador SolarView", "pl": "SolarView Logger", "uk": "SolarView Logger", "zh-cn": "SolarView记录器"},
44
- "SolarView is a data logger for several inverter. Further informations can be get over the link.": {"en": "SolarView is a data logger for several inverter. Further informations can be get over the link.", "de": "SolarView ist ein Datenlogger für mehrere Wechselrichter. ", "ru": "SolarView - это регистратор данных для нескольких инверторов. ", "pt": "O SolarView é um data logger para vários inversores. ", "nl": "SolarView is een datalogger voor verschillende omvormers. ", "fr": "SolarView est un enregistreur de données pour plusieurs onduleurs. ", "it": "SolarView è un data logger per diversi inverter. ", "es": "SolarView es un registrador de datos para varios inversores. ", "pl": "SolarView to rejestrator danych dla kilku falowników. ", "uk": "SolarView — це реєстратор даних для кількох інверторів. Додаткову інформацію можна отримати за посиланням.", "zh-cn": "SolarView是多个逆变器的数据记录器。"},
45
- "System variable": { "en": "System variable", "de": "Systemvariable", "ru": "Системная переменная", "pt": "Variável do sistema", "nl": "Systeemvariabele", "fr": "Variable système", "it": "Variabile di sistema", "es": "Variable del sistema", "pl": "Zmienna systemowa", "uk": "Системна змінна", "zh-cn": "系统变量"},
46
- "polling interval in seconds": { "en": "polling interval in seconds", "de": "Abfrageintervall in Sekunden", "ru": "интервал опроса в секундах", "pt": "intervalo de sondagem em segundos", "nl": "polling-interval in seconden", "fr": "intervalle d'interrogation en secondes", "it": "intervallo di polling in secondi", "es": "intervalo de sondeo en segundos", "pl": "interwał odpytywania w sekundach", "uk": "інтервал опитування в секундах", "zh-cn": "以秒为单位的轮询间隔"},
47
- "solarviewdatareader adapter settings": { "en": "Adapter settings for solarviewdatareader", "de": "Adaptereinstellungen für solarviewdatareader", "ru": "Настройки адаптера для solarviewdatareader", "pt": "Configurações do adaptador para solarviewdatareader", "nl": "Adapterinstellingen voor solarviewdatareader", "fr": "Paramètres d'adaptateur pour solarviewdatareader", "it": "Impostazioni dell'adattatore per solarviewdatareader", "es": "Ajustes del adaptador para solarviewdatareader", "pl": "Ustawienia adaptera dla solarviewdatareader", "uk": "Параметри адаптера для solarviewdatareader", "zh-cn": "solarviewdatareader的适配器设置"},
48
- "System variable e.g. hm-rega.0.12345": { "en": "System variable e.g. hm-rega.0.12345", "de": "Systemvariable z.B. hm-rega.0.12345", "ru": "Системная переменная, например. хм-rega.0.12345", "pt": "Variável do sistema, por ex. hm-rega.0.12345", "nl": "Systeemvariabele, b.v. hm-rega.0.12345", "fr": "Variable système, par ex. hm-rega.0.12345", "it": "Variabile di sistema ad es. hm-rega.0.12345", "es": "Variable del sistema, p. hm-rega.0.12345", "pl": "Zmienna systemowa, np. hm-rega.0.12345", "uk": "Системна змінна напр. hm-rega.0.12345", "zh-cn": "系统变量例如hm-rega.0.12345"},
49
- };