iobroker.sun2000 0.6.2 → 0.7.1

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
@@ -5,7 +5,11 @@
5
5
  [![Downloads](https://img.shields.io/npm/dm/iobroker.sun2000.svg)](https://www.npmjs.com/package/iobroker.sun2000)
6
6
  ![Number of Installations](https://iobroker.live/badges/sun2000-installed.svg)
7
7
  ![Current version in stable repository](https://iobroker.live/badges/sun2000-stable.svg)
8
- [![Documentation](https://img.shields.io/badge/Documentation-2D963D?logo=read-the-docs&logoColor=white)](./docs/README.md)
8
+ [![Documentation](https://img.shields.io/badge/Documentation-2D963D?logo=read-the-docs&logoColor=white)](https://github.com/bolliy/ioBroker.sun2000/blob/main/docs/README.md)
9
+ [![Wiki](https://img.shields.io/badge/wiki-documentation-forestgreen)](https://github.com/bolliy/ioBroker.sun2000/wiki)
10
+ [![Donate](https://img.shields.io/badge/paypal-donate%20|%20spenden-blue.svg)](https://www.paypal.com/donate/?hosted_button_id=ZTX3VP9LZBDCG)
11
+ [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/bolliy)
12
+
9
13
 
10
14
  [![NPM](https://nodei.co/npm/iobroker.sun2000.png?downloads=true)](https://nodei.co/npm/iobroker.sun2000/)
11
15
 
@@ -17,16 +21,20 @@ Sentry reporting is used starting with js-controller 3.0.
17
21
 
18
22
  ## sun2000 adapter for ioBroker
19
23
 
20
- Read register data from Huawei SUN2000 inverter and LUNA2000 battery using Modbus TCP.
24
+ Read and write register data from Huawei SUN2000 inverter and LUNA2000 battery using Modbus TCP. Third-party devices can be integrated via the modbus proxy. Even a Huawei SmartLogger can be integrated.
21
25
 
22
26
  [Huawei product information](https://solar.huawei.com/en/professionals/all-products?residential-smart-pv)
23
27
 
24
28
  Feel free to follow the discussions in the german [iobroker forum](https://forum.iobroker.net/topic/71768/test-adapter-sun2000-v0-1-x-huawei-wechselrichter)
25
29
 
30
+ ## Dependencies
31
+ * Node.js 18.x or higher
32
+ * ioBroker host (js-controller) 5.x or higher
33
+
26
34
  ## Documentation
27
35
 
28
- See the [documentation page](./docs/README.md) or
29
- browse in the [wiki](https://github.com/bolliy/ioBroker.sun2000/wiki)
36
+ See the [documentation page](https://github.com/bolliy/ioBroker.sun2000/blob/main/docs/README.md) or
37
+ browse in the [wiki](https://github.com/bolliy/ioBroker.sun2000/wiki)
30
38
 
31
39
  ## Supported hardware
32
40
 
@@ -52,9 +60,17 @@ browse in the [wiki](https://github.com/bolliy/ioBroker.sun2000/wiki)
52
60
  Placeholder for the next version (at the beginning of the line):
53
61
  ### **WORK IN PROGRESS**
54
62
  -->
63
+ ### 0.7.1 (2024-04-09)
64
+ * inverter model name too many characters #73
65
+
66
+ ### 0.7.0 (2024-04-03)
67
+ * breaking changes
68
+ - Node.js 18.x or higher required
69
+ - ioBroker host (js-controller) 5.x or higher
70
+
55
71
  ### 0.6.2 (2024-03-31)
56
72
  * standby detection adjusted
57
- * Improvement of logs
73
+ * improvement of logs
58
74
 
59
75
  ### 0.6.1 (2024-03-23)
60
76
  * Battery control: After the second failed attempt, the control event is discarded
@@ -65,7 +81,7 @@ browse in the [wiki](https://github.com/bolliy/ioBroker.sun2000/wiki)
65
81
  * fix the standby detection #60
66
82
 
67
83
  ### 0.5.1 (2024-03-11)
68
- * Config page restructured
84
+ * config page restructured
69
85
  * read only the required string data
70
86
  * fix interval medium
71
87
 
@@ -153,4 +169,6 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
153
169
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
154
170
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
155
171
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
156
- SOFTWARE.
172
+ SOFTWARE.
173
+
174
+ [def]: https://github.com/bolliy/ioBroker.sun2000/wiki
package/admin/sun2000.png CHANGED
Binary file
package/io-package.json CHANGED
@@ -1,8 +1,34 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "sun2000",
4
- "version": "0.6.2",
4
+ "version": "0.7.1",
5
5
  "news": {
6
+ "0.7.1": {
7
+ "en": "inverter model name too many characters #73",
8
+ "de": "wechselrichter modellname zu viele zeichen #73",
9
+ "ru": "инверторное имя модели слишком много символов #73",
10
+ "pt": "inversor nome modelo muitos caracteres #73",
11
+ "nl": "inverter modelnaam te veel tekens #73",
12
+ "fr": "nom de modèle d'onduleur trop de caractères #73",
13
+ "it": "inverter nome modello troppi personaggi #73",
14
+ "es": "inverter nombre de modelo demasiados caracteres #73",
15
+ "pl": "inverter model nazwa zbyt wiele znaków # 73",
16
+ "uk": "ім'я інвертора занадто багато символів #73",
17
+ "zh-cn": "翻转模型名称过多字符 # 73"
18
+ },
19
+ "0.7.0": {
20
+ "en": "breaking changes\nNode.js 18.x or higher required\nioBroker host (js-controller) 5.x or higher",
21
+ "de": "änderungen\nNode.js 18.x oder höher erforderlich\nioBroker Host (js-controller) 5.x oder höher",
22
+ "ru": "изменения\nNode.js 18.x или выше требуется\nioBroker host (js-controller) 5.x или выше",
23
+ "pt": "alterações de ruptura\nNode.js 18.x ou superior requerido\nhospedeiro ioBroker (js-controller) 5.x ou superior",
24
+ "nl": "wijzigingen breken\nNode.js 18.x of hoger vereist\nioBroker host (js-controller) 5.x of hoger",
25
+ "fr": "casser les changements\nNode.js 18.x ou plus requis\nioBroker host (js-controller) 5.x ou plus",
26
+ "it": "cambiamenti di rottura\nNode.js 18.x o superiore richiesto\nioBroker host (js-controller) 5.x o superiore",
27
+ "es": "cambios de ruptura\nNode.js 18.x o superior requerido\nioBroker host (js-controller) 5.x o superior",
28
+ "pl": "łamanie zmian\nNode.js 18,x lub wyższa wymagana\njoBroker host (kontroler js-) 5.x lub wyższy",
29
+ "uk": "поломка змін\nNode.js 18.x або вище потрібно\nioBroker host (js-controller) 5.x або вище",
30
+ "zh-cn": "断开更改\n所需节点.js 18.x或更高\nioBroker 主机(js-controller) 5.x或更高"
31
+ },
6
32
  "0.6.2": {
7
33
  "en": "standby detection adjusted\nImprovement of logs",
8
34
  "de": "standby-erkennung angepasst\nVerbesserung der Protokolle",
@@ -67,32 +93,6 @@
67
93
  "pl": "Data umieszczenia w wykazie\nniektóre mierniki wskazują, że jednostka została zmieniona (na przykład sun2000.0.meter.activePowerL1) (# 56)\nsun2000 serie M2 lub wyższe mogą być również przetwarzane",
68
94
  "uk": "Інтеграція [Huawei SmartLogger](https://support.huawei.com/enterprise/de/doc/EDOC1100130069/d8a00460)\nзмінено блок лічильників (наприклад, Sun2000.0.meter.activePowerL1) (#56)\nсонце2000 serie M2 або вище можна обробити",
69
95
  "zh-cn": "[Huawei SmartLogger]的集成(https://support.huawei.com/economist/de/doc/EDOC110013069/d8a00460) 互联网档案馆的存檔,存档日期2013-12-20\n某些度数表示单位已更改( 例如 sun 2000. 0. meter. activePowerL1) (# 56)\n太阳2000 serie M2 或以上也可以加工"
70
- },
71
- "0.4.1": {
72
- "en": "read PV string data slower (medium interval)",
73
- "de": "pV-Stringdaten langsamer lesen (mittleres Intervall)",
74
- "ru": "читать данные строки PV медленнее (средний интервал)",
75
- "pt": "ler dados de cadeia de caracteres PV mais lento (intervalo médio)",
76
- "nl": "lees PV-stringgegevens langzamer (medium interval)",
77
- "fr": "lire les données de chaîne PV plus lentement (intervalle moyen)",
78
- "it": "leggere i dati della stringa PV più lento (intervallo medio)",
79
- "es": "leer datos de cadena PV más lento (intervalo medio)",
80
- "pl": "odczyt danych strun fotowoltaicznych wolniej (interwał średni)",
81
- "uk": "читати повільніші дані ПВ (середній інтервал)",
82
- "zh-cn": "读取较慢的光电字符串数据( 中间隔)"
83
- },
84
- "0.4.0": {
85
- "en": "detect standby mode of inverters (#34)\ndevices in standby often give incorrect values. These are assigned \"0\" (#40)\nthe modbus register and the length are stored in the description of the states\nimplemented modbus-proxy (read-only cache)\nread register data from SDongleA \nadditional loop interval medium (SDongle data)\nIntegration of [NRGkick Wallbox](https://www.nrgkick.com)\nread string data faster (high interval)",
86
- "de": "standby-modus von wechselrichtern erkennen (#34)\ngeräte im Standby geben oft falsche Werte. Diese werden \"0\" zugeordnet (#40)\ndas modbusregister und die länge werden in der beschreibung der zustände gespeichert\nimplementiert modbus-proxy (nur lesen cache)\nregisterdaten von SDongleA lesen\nzusätzliches Loop-Intervallmedium (SDongle-Daten)\nIntegration von [NRGkick Wallbox](https://www.nrgkick.com)\nstringdaten schneller lesen (hohes intervall)",
87
- "ru": "#34\nустройства в режиме ожидания часто дают неправильные значения. Назначены \"0\" (#40)\nрегистр modbus и длина хранятся в описании состояний\nреализованный modbus-proxy (только для чтения)\nчитать данные реестра SDongleA\nдополнительная интерактивная среда (данные SDongle)\nИнтеграция [NRGkick Wallbox] (https://www.nrgkick.com)\nчитать строковые данные быстрее (высокий интервал)",
88
- "pt": "detectar modo de espera de inversores (#34)\ndispositivos em espera muitas vezes dão valores incorretos. Estes são atribuídos \"0\" (#40)\no registro do modbus e o comprimento são armazenados na descrição dos estados\nimplementado modbus-proxy (apenas leitura cache)\nler dados de registro de SDongleA\nmeio de intervalo de loop adicional (dados de SDongle)\nIntegração de [NRGkick Wallbox](https://www.nrgkick.com)\nler dados de cadeia mais rápido (alto intervalo)",
89
- "nl": "de standbymodus van de inverters detecteren (#34)\napparaten in stand-by geven vaak onjuiste waarden. Deze worden toegewezen aan \"0\" (#40)\nde modbus register en de lengte worden opgeslagen in de beschrijving van de staten\ngeïmplementeerd modbus-proxy (alleen-lezen cache)\nlees registergegevens van SDongleA\nextra loopintervalmedium (SDongle-gegevens)\nIntegratie van [NRGkick Wallbox](https://www.nrgkick.com)\nlees tekstgegevens sneller (hoog interval)",
90
- "fr": "détecter le mode veille des onduleurs (#34)\nles dispositifs en attente donnent souvent des valeurs incorrectes. Ils sont assignés « 0 » (#40)\nle registre modbus et la longueur sont stockés dans la description des états\nmis en œuvre modbus-proxy (cache de lecture seule)\nlire les données du registre de SDongleA\nmilieu d'intervalle de boucle supplémentaire (données SDongle)\nIntégration de [NRGkick Wallbox](https://www.nrgkick.com)\nlire les données de chaîne plus rapidement (intervalle élevé)",
91
- "it": "rilevare modalità standby di inverter (#34)\ni dispositivi in standby spesso danno valori errati. Questi sono assegnati \"0\" (#40)\nil registro modbus e la lunghezza sono memorizzate nella descrizione degli stati\nimplementato modbus-proxy ( cache di sola lettura)\nleggere i dati del registro da SDongleA\nintervallo di loop aggiuntivo medio (dati del triangolo)\nIntegrazione [NRGkick Wallbox](https://www.nrgkick.com)\nleggere i dati della stringa più velocemente (alto intervallo)",
92
- "es": "detectar el modo de espera de los inversores (#34)\ndispositivos en standby a menudo dan valores incorrectos. Estos son asignados \"0\" (#40)\nel registro del modbus y la longitud se almacenan en la descripción de los estados\naplicado modbus-proxy (caché de sólo lectura)\nread register data from SDongleA\nintervalo de bucle adicional medio (datos de SDongle)\nIntegración de [NRGkick Wallbox](https://www.nrgkick.com)\nleer datos de cadena más rápido (intervalo alto)",
93
- "pl": "wykrywanie trybu czuwania inwerterów (# 34)\nurządzenia w trybie czuwania często dają nieprawidłowe wartości. Są one przypisane \"0\" (# 40)\nrejestr modbus i długość są przechowywane w opisie stanów\nzaimplementowany modbus- proxy (tylko read- cache)\nczytaj dane rejestru z SDongleA\ndodatkowe medium interwałowe pętli (dane SDongle)\nW związku z tym Komisja uznała, że nie ma podstaw, aby stwierdzić, że w odniesieniu do niektórych rodzajów działalności, które nie są objęte zakresem rozporządzenia (WE) nr 659 / 1999, nie można uznać, że działalność ta nie jest zgodna z rynkiem wewnętrznym\nodczyt danych łańcuchowych szybciej (wysoki interwał)",
94
- "uk": "виявити режим очікування інверторів (#34)\nпристрої в режимі очікування часто дають неправильні значення. Присвоюється \"0\" (#40)\nреєстр модбусів і довжина зберігаються в описі станів\nреалізований модбус-проксі (тільки кеш)\nчитати реєстраційні дані з SDongleA\nдодатковий інтервал петлі середній (SDongle data)\nІнтеграція [NRGkick Wallbox](https://www.nrgkick.com)\nчитати дані рядка швидше (високий інтервал)",
95
- "zh-cn": "检测反转器的备用模式 (# 34)\n正在待命的设备往往给出错误的值。 这些被分配为\"0\" (# 40)\nmodbus 寄存器和长度存储在状态描述中\n已执行的 modbus- 代理( 只读缓存)\n从 SDongleA 读取寄存器数据\n额外的循环间隔介质( SDongle 数据)\n整合[NRGkick Wallbox](https://www.nrgkick.com)\n更快地读取字符串数据( 高间隔)"
96
96
  }
97
97
  },
98
98
  "titleLang": {
@@ -109,17 +109,17 @@
109
109
  "zh-cn": "Huawei sun2000 inverter"
110
110
  },
111
111
  "desc": {
112
- "en": "Read data from up to 5 Huawei SUN2000 inverters and LUNA2000 batteries using Modbus TCP.\nThird-party devices can be integrated via the modbus proxy.\n",
113
- "de": "Daten von bis zu 5 Huawei SUN2000 Wechselrichtern und LUNA2000 Batterien können über Modbus TCP ausgelesen werden.\nMit dem integrierten Modbus-Proxy können Geräte von Drittanbietern eingebunden werden.",
114
- "ru": "Считывайте данные с пяти инверторов Huawei SUN2000 и аккумуляторов LUNA2000 с помощью Modbus TCP.\nУстройства сторонних производителей можно интегрировать через прокси-сервер Modbus.",
115
- "pt": "Leia dados de até 5 inversores Huawei SUN2000 e baterias LUNA2000 usando Modbus TCP.\nDispositivos de terceiros podem ser integrados através do proxy modbus.",
116
- "nl": "Lees gegevens van maximaal 5 Huawei SUN2000-omvormers en LUNA2000-batterijen met behulp van Modbus TCP.\nApparaten van derden kunnen via de modbus-proxy worden geïntegreerd.",
117
- "fr": "Lisez les données de jusqu'à 5 onduleurs Huawei SUN2000 et batteries LUNA2000 à l'aide de Modbus TCP.\nDes appareils tiers peuvent être intégrés via le proxy Modbus.",
118
- "it": "Leggi i dati da un massimo di 5 inverter Huawei SUN2000 e batterie LUNA2000 utilizzando Modbus TCP.\nI dispositivi di terze parti possono essere integrati tramite il proxy Modbus.",
119
- "es": "Lea datos de hasta 5 inversores Huawei SUN2000 y baterías LUNA2000 mediante Modbus TCP.\nSe pueden integrar dispositivos de terceros a través del proxy modbus.",
120
- "pl": "Odczyt danych z maksymalnie 5 inwerterów Huawei SUN2000 i akumulatorów LUNA2000 za pomocą protokołu Modbus TCP.\nUrządzenia innych firm można zintegrować za pośrednictwem serwera proxy Modbus.",
121
- "uk": "Зчитування даних до 5 інверторів Huawei SUN2000 і акумуляторів LUNA2000 за допомогою Modbus TCP.\nПристрої сторонніх виробників можна інтегрувати через проксі-сервер Modbus.",
122
- "zh-cn": "使用Modbus TCP读取最多5台华为SUN2000逆变器和LUNA2000电池的数据。\n第三方设备可以通过modbus代理集成。"
112
+ "en": "To read and write data from up to 5 Huawei SUN2000 inverters and LUNA2000 batteries via Modbus TCP. Third-party devices can be integrated via the modbus proxy.",
113
+ "de": "Zum Lesen und Schreiben von Daten von bis zu 5 Huawei SUN2000 Wechselrichtern und LUNA2000 Batterien über Modbus TCP. Drittgeräte können über den Modbus Proxy integriert werden.",
114
+ "ru": "Прочитать и писать данные до 5 инверторов Huawei SUN2000 и батарей LUNA2000 через Modbus TCP. Сторонние устройства могут быть интегрированы через modbus proxy.",
115
+ "pt": "Para ler e escrever dados de até 5 inversores Huawei SUN2000 e baterias LUNA2000 via Modbus TCP. Dispositivos de terceiros podem ser integrados através do proxy modbus.",
116
+ "nl": "Gegevens lezen en schrijven van maximaal 5 Huawei SUN2000 omvormers en LUNA2000 batterijen via Modbus TCP. De apparaten van derden kunnen worden geïntegreerd via de modbus proxy.",
117
+ "fr": "Pour lire et écrire des données de jusqu'à 5 onduleurs Huawei SUN2000 et batteries LUNA2000 via Modbus TCP. Les périphériques tiers peuvent être intégrés via le proxy modbus.",
118
+ "it": "Per leggere e scrivere dati da un massimo di 5 inverter Huawei SUN2000 e batterie LUNA2000 tramite Modbus TCP. I dispositivi di terze parti possono essere integrati tramite il proxy modbus.",
119
+ "es": "Para leer y escribir datos de hasta 5 inversores Huawei SUN2000 y baterías LUNA2000 a través de Modbus TCP. Los dispositivos de terceros se pueden integrar a través del modbus proxy.",
120
+ "pl": "Do odczytu i zapisu danych z do 5 Huawei SUN2000 inwerterów i akumulatorów LUNA2000 za pośrednictwem Modbus TCP. Urządzenia trójstronne mogą być zintegrowane za pośrednictwem proxy modbus.",
121
+ "uk": "Щоб читати та писати дані від 5 інверторів Huawei SUN2000 та батарей LUNA2000 через Modbus TCP. Сторонні пристрої можуть бути інтегровані через проксі модбуса.",
122
+ "zh-cn": "通过Modbus TCP读取和写入最多5个Huawei SUN2000反转器和LUNA2000电池的数据。 第三方设备可以通过modbus代理集成."
123
123
  },
124
124
  "authors": [
125
125
  "bolliy <stephan@mante.info>"
@@ -130,7 +130,7 @@
130
130
  "sun2000",
131
131
  "luna2000",
132
132
  "inverter",
133
- "charger",
133
+ "smartcharger",
134
134
  "sdongle"
135
135
  ],
136
136
  "tier": 2,
@@ -164,26 +164,50 @@
164
164
  "condition": {
165
165
  "operand": "and",
166
166
  "rules": [
167
- "oldVersion<=0.6.1",
168
- "newVersion>0.6.1"
167
+ "oldVersion<=0.6.2",
168
+ "newVersion>0.6.2"
169
169
  ]
170
170
  },
171
171
  "title": {
172
- "en": "node.js 18.x or higher required"
172
+ "en": "node.js 18.x or higher required",
173
+ "de": "node.js 18.x oder höher erforderlich",
174
+ "ru": "node.js 18.x или выше требуется",
175
+ "pt": "node.js 18.x ou superior requerido",
176
+ "nl": "node.js 18.x of hoger vereist",
177
+ "fr": "node.js 18.x ou plus requis",
178
+ "it": "node.js 18.x o superiore richiesto",
179
+ "es": "node.js 18.x o superior requerido",
180
+ "pl": "node.js 18,x lub wyższa wymagana",
181
+ "uk": "node.js 18.x або вище потрібно",
182
+ "zh-cn": "节点.js 18.x或更高"
173
183
  },
174
184
  "text": {
175
- "en": "Please try to stay current with your Node.js version because the support is limited in time. As of now all Node.js versions below 18.x are no longer supported. (End Of Life)."
185
+ "en": "Please try to stay current with your Node.js version because the support is limited in time. As of now all Node.js versions below 18.x are no longer supported. (End Of Life).",
186
+ "de": "Bitte versuchen Sie die Node.js-Version aktuell zu halten, da die Unterstützung zeitlich begrenzt ist. Ab sofort werden alle Node.js Versionen unter 18.x nicht mehr unterstützt. (End Of Life).",
187
+ "ru": "Пожалуйста, попытайтесь оставаться в курсе своей версии Node.js, потому что поддержка ограничена во времени. На данный момент все версии Node.js ниже 18.x больше не поддерживаются. (Конец жизни).",
188
+ "pt": "Por favor, tente manter-se atual com sua versão Node.js porque o suporte é limitado a tempo. A partir de agora todas as versões do Node.js abaixo de 18.x não são mais suportadas. (End Of Life).",
189
+ "nl": "Probeer om actueel te blijven met uw Node.js-versie omdat de ondersteuning beperkt is in de tijd. Vanaf nu worden alle Node.js versies onder 18.x niet meer ondersteund. (Einde van het leven).",
190
+ "fr": "Veuillez essayer de rester à jour avec votre version Node.js car le support est limité dans le temps. Toutes les versions de Node.js sous 18.x ne sont plus prises en charge. (Fin de vie).",
191
+ "it": "Si prega di cercare di rimanere corrente con la versione Node.js perché il supporto è limitato nel tempo. A partire da ora tutte le versioni Node.js inferiori a 18.x non sono più supportate. (End Of Life).",
192
+ "es": "Por favor, trate de mantenerse actualizado con su versión Node.js porque el soporte es limitado en el tiempo. A partir de ahora todas las versiones Node.js debajo de 18.x ya no están soportadas. (End Of Life).",
193
+ "pl": "Proszę spróbować pozostać na bieżąco z wersją Node.js ponieważ wsparcie jest ograniczone w czasie. Od teraz wszystkie wersje Node.js poniżej 18.x nie są już obsługiwane. (Koniec życia).",
194
+ "uk": "Будь-ласка, будь ласка, намагайтеся постійно триматися з версією Node.js, оскільки підтримка обмежена в часі. Зараз всі версії Node.js нижче 18.x не підтримуються. (Для життя).",
195
+ "zh-cn": "请尝试保留您的 Node.js 版本, 因为支持时间有限 。 到目前为止,18x以下的所有Node.js版本不再被支持. (寿终."
176
196
  },
177
- "level": "warn",
197
+ "level": "info",
178
198
  "buttons": [
179
199
  "agree",
180
200
  "cancel"
181
- ]
201
+ ],
202
+ "link": "https://github.com/bolliy/ioBroker.sun2000/wiki/Update-node.js",
203
+ "linkText": {
204
+ "en": "The node.js update procedure is described here."
205
+ }
182
206
  }
183
207
  ],
184
208
  "dependencies": [
185
209
  {
186
- "js-controller": ">=3.3.22"
210
+ "js-controller": ">=5.0.0"
187
211
  }
188
212
  ],
189
213
  "globalDependencies": [
@@ -280,7 +304,7 @@
280
304
  "role": "indicator.port",
281
305
  "read": true,
282
306
  "write": false,
283
- "desc": " Device modbus port"
307
+ "desc": "Device modbus port"
284
308
  }
285
309
  },
286
310
  {
@@ -295,7 +319,7 @@
295
319
  "role": "indicator.id",
296
320
  "read": true,
297
321
  "write": false,
298
- "desc": "deevice modbus IDs"
322
+ "desc": "device modbus IDs"
299
323
  }
300
324
  },
301
325
  {
@@ -5,7 +5,7 @@ class ServiceQueueMap {
5
5
  this.adapter = adapterInstance;
6
6
  this.log = this.adapter.logger;
7
7
  this.inverterInfo = inverter;
8
- this._modbusClient = undefined;
8
+ this._modbusClient = null;
9
9
  this._serviceMap = new Map();
10
10
  this._eventMap = new Map();
11
11
  this._initialized = false;
@@ -94,6 +94,36 @@ class ServiceQueueMap {
94
94
  if (event.value < 0) event.value = 0;
95
95
  return await this._writeRegisters(47242,dataType.numToArray(event.value,dataType.uint32));
96
96
  }
97
+ },
98
+ {
99
+ state: {id: 'activePowerControlMode', name: 'Active Power Control Mode', type: 'number', unit: '', role: 'value', desc: 'reg:47415, len:1'},
100
+ type : deviceType.meter,
101
+ fn: async event => {
102
+ if (event.value > 7) event.value = 0;
103
+ if (event.value < 0) event.value = 0;
104
+ const ret = await this._writeRegisters(47415,dataType.numToArray(event.value,dataType.uint16));
105
+ if (ret) this.inverterInfo.instance.stateCache.set(this.inverterInfo.path+'.'+event.id, event.value);
106
+ return ret;
107
+ }
108
+ },
109
+ {
110
+ state: { id: 'maximumFeedGridPower', name: 'Maximum Feed Grid Power', type: 'number', unit: 'kW', role: 'value.power', desc: 'reg: 47416, len: 2'},
111
+ type : deviceType.meter,
112
+ fn: async event => {
113
+ const max = this.inverterInfo.instance.stateCache.get('collected.ratedCapacity')?.value ?? 0;
114
+ if (event.value > max/1000) event.value = 0;
115
+ if (event.value < -1) event.value = 0;
116
+ return await this._writeRegisters(47416,dataType.numToArray(event.value*1000,dataType.uint32));
117
+ }
118
+ },
119
+ {
120
+ state: { id: 'maximumFeedGridPower_percent', name: 'Maximum Feed Grid Power %', type: 'number', unit: '%', role: 'value', desc: 'reg: 47418, len: 2'},
121
+ type : deviceType.meter,
122
+ fn: async event => {
123
+ if (event.value > 100) event.value = 0;
124
+ if (event.value < 0) event.value = 0;
125
+ return await this._writeRegisters(47418,dataType.numToArray(event.value*10,dataType.int16));
126
+ }
97
127
  }
98
128
  ];
99
129
 
@@ -104,6 +134,8 @@ class ServiceQueueMap {
104
134
  for (const item of this.serviceFields) {
105
135
  //no battery - no controls
106
136
  if (item.type == deviceType.battery && this.inverterInfo?.numberBatteryUnits == 0) continue;
137
+ //if (item.type == deviceType.meter && !this.inverterInfo?.meter) continue; //v0.8.0
138
+ if (item.type == deviceType.meter) continue;
107
139
 
108
140
  if (item?.state) {
109
141
  this._serviceMap.set(item.state.id, item);
@@ -142,7 +142,7 @@ class DriverBase {
142
142
  break;
143
143
  }
144
144
  }
145
- if (!this.modbusAllowed && reg.standby !== true) continue; //standby - v0.6.x
145
+ if (!this.modbusAllowed && reg.standby !== true) continue; //standby - v0.6.2
146
146
  if (!dataRefreshRate.compare(refreshRate,reg.refresh)) continue; //refreshrate unequal
147
147
  if (reg.type == deviceType.meter && this.deviceInfo?.meter == false) continue; //meter
148
148
  if (reg.type == deviceType.battery && this.deviceInfo?.numberBatteryUnits == 0) continue; //battery
@@ -169,6 +169,7 @@ class DriverBase {
169
169
  readRegisters++;
170
170
  this._errorCount = 0;
171
171
  } catch (err) {
172
+ //Only increase if modbus is not connected
172
173
  if (err.modbusCode === undefined) this._errorCount ++;
173
174
  if (!reg.readErrorHook || !reg.readErrorHook(err,reg)) {
174
175
  this.log.warn(`Error while reading from ${modbusClient.ipAddress} [Reg: ${reg.address}, Len: ${reg.length}, modbusID: ${modbusClient.id}] with: ${err.message}`);
@@ -22,11 +22,11 @@ class InverterInfo extends DriverBase {
22
22
  type : deviceType.inverter,
23
23
  states: [{
24
24
  state: {id: 'info.model', name: 'Model', type: 'string', role: 'info.name', desc: 'reg:30000, len:15'},
25
- register: {reg: 30000, type: dataType.string, length: 15}
25
+ register: {reg: 30000, type: dataType.string, length: 8}
26
26
  },
27
27
  {
28
28
  state: {id: 'info.serialNumber', name: 'Serial number', type: 'string', role: 'info.serial', desc: 'reg:30015, len:10'},
29
- register: {reg: 30015, type: dataType.string, length: 10}
29
+ register: {reg: 30015, type: dataType.string, length: 6}
30
30
  },
31
31
  {
32
32
  state: {id: 'info.modelID', name: 'Model ID', type: 'number', role: 'info.hardware', desc: 'reg:30070, len:1' },
@@ -70,7 +70,7 @@ class InverterInfo extends DriverBase {
70
70
  this._errorCount = 0;
71
71
  }
72
72
  } else {
73
- if (this._errorCount > 2 && this._modbusAllowed) {
73
+ if (this._errorCount > 3 && this._modbusAllowed) {
74
74
  this.log.warn('It will try again when the sun rises for modbus id '+this._modbusId+' :-)');
75
75
  this._modbusAllowed = false;
76
76
  }
@@ -109,7 +109,7 @@ class InverterSun2000 extends DriverBase{
109
109
  type : deviceType.inverter,
110
110
  states: [{
111
111
  state: {id: 'info.model', name: 'Model', type: 'string', role: 'info.name'},
112
- register: {reg: 30000, type: dataType.string, length: 15},
112
+ register: {reg: 30000, type: dataType.string, length: 8},
113
113
  store: storeType.never
114
114
  },
115
115
  {
@@ -119,7 +119,7 @@ class InverterSun2000 extends DriverBase{
119
119
  },
120
120
  {
121
121
  state: {id: 'info.serialNumber', name: 'Serial number', type: 'string', role: 'info.serial'},
122
- register: {reg: 30015, type: dataType.string, length: 10},
122
+ register: {reg: 30015, type: dataType.string, length: 6},
123
123
  store: storeType.never
124
124
  },
125
125
  {
@@ -212,7 +212,7 @@ class InverterSun2000 extends DriverBase{
212
212
  states: [
213
213
  {
214
214
  state: { id: 'battery.unit.1.SN', name: 'serial number', type: 'string', unit: '', role: 'value'},
215
- register: { reg: 37052, type: dataType.string, length: 10},
215
+ register: { reg: 37052, type: dataType.string, length: 6},
216
216
  store: storeType.never
217
217
  },
218
218
  ],
@@ -385,7 +385,7 @@ class InverterSun2000 extends DriverBase{
385
385
  }
386
386
  },
387
387
  {
388
- //read also standby
388
+ //read also in standby mode
389
389
  address : 32089,
390
390
  length : 1,
391
391
  info : 'inverter deviceStatus',
@@ -403,14 +403,15 @@ class InverterSun2000 extends DriverBase{
403
403
  }
404
404
  return value;
405
405
  },
406
- },{
406
+ },
407
+ {
407
408
  state: {id: 'derived.deviceStatus', name: 'Device Status Information', type: 'string', unit: '', role: 'value'}
408
409
  }
409
410
  ],
410
411
  readErrorHook: (err,reg) => { //(err,reg)
411
412
  if (err.modbusCode === undefined) {
412
413
  reg.lastread = this._newNowTime();
413
- //return true; //Error has been handled
414
+ //return true; //Error has been self handled
414
415
  }
415
416
  },
416
417
  postHook: (path) => {
@@ -18,11 +18,11 @@ class Sdongle extends DriverBase{
18
18
  info : 'SDongle info 1',
19
19
  states : [{
20
20
  state: {id: 'sdongle.sn', name: 'Serial Number', type: 'string', unit: '', role: 'value', desc: 'reg:30015, len:10'},
21
- register: {reg: 30015, type: dataType.string, length: 10}
21
+ register: {reg: 30015, type: dataType.string, length: 6}
22
22
  },
23
23
  {
24
24
  state: {id: 'sdongle.OSVersion', name: 'OS Version', type: 'string', unit: '', role: 'value', desc: 'reg:30050, len:15'},
25
- register: {reg: 30050, type: dataType.string, length: 15}
25
+ register: {reg: 30050, type: dataType.string, length: 8}
26
26
  },
27
27
  {
28
28
  state: {id: 'sdongle.protokolVersion', name: 'Protokol Version', type: 'number', unit: '', role: 'value',desc: 'reg:30068, len:2'},
package/lib/types.js CHANGED
@@ -1,3 +1,4 @@
1
+
1
2
  const modbusErrorMessages =
2
3
  [
3
4
  'Unknown error',
@@ -190,14 +191,13 @@ const dataType = {
190
191
  const bytearray = [];
191
192
  for(let i = 0; i < length; i++)
192
193
  {
193
- if (array[i] > 0 ) {
194
- bytearray.push(array[i] >> 8); //right shift
195
- bytearray.push(array[i] & 0xff);
196
- }
194
+ bytearray.push(array[i] >> 8); //right shift
195
+ bytearray.push(array[i] & 0xff);
196
+
197
197
  }
198
198
  //const value = String.fromCharCode.apply(null, bytearray);
199
199
  const value = String.fromCharCode(...bytearray);
200
- return new String(value).trim();
200
+ return new String(value).replace(/\0/g,'');
201
201
  }
202
202
  };
203
203
 
package/main.js CHANGED
@@ -226,7 +226,7 @@ class Sun2000 extends utils.Adapter {
226
226
  }, msToMidnight);
227
227
  }
228
228
 
229
-
229
+ /*
230
230
  sendToSentry (msg) {
231
231
  if (this.supportsFeature && this.supportsFeature('PLUGINS')) {
232
232
  const sentryInstance = this.getPluginInstance('sentry');
@@ -241,6 +241,7 @@ class Sun2000 extends utils.Adapter {
241
241
  }
242
242
  }
243
243
  }
244
+ */
244
245
 
245
246
  async endOfmodbusAdjust (info) {
246
247
  if (!info.modbusAdjust) {
@@ -340,7 +341,7 @@ class Sun2000 extends utils.Adapter {
340
341
  this.settings.cb.tou = this.config.cb_tou;
341
342
 
342
343
  if (this.settings.modbusAdjust) {
343
- await this.setStateAsync('info.JSONhealth', {val: '{ message: "Adjust modbus settings"}', ack: true});
344
+ await this.setStateAsync('info.JSONhealth', {val: '{message: "Adjust modbus settings"}', ack: true});
344
345
  } else {
345
346
  await this.setStateAsync('info.JSONhealth', {val: '{message : "Information is collected"}', ack: true});
346
347
  }
@@ -375,6 +376,7 @@ class Sun2000 extends utils.Adapter {
375
376
  });
376
377
  }
377
378
  }
379
+ //SDongle
378
380
  if (this.settings.sd.active) {
379
381
  this.devices.push({
380
382
  index: 0,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.sun2000",
3
- "version": "0.6.2",
3
+ "version": "0.7.1",
4
4
  "description": "sun2000",
5
5
  "author": {
6
6
  "name": "bolliy",
@@ -19,7 +19,7 @@
19
19
  "url": "https://github.com/bolliy/ioBroker.sun2000.git"
20
20
  },
21
21
  "engines": {
22
- "node": ">= 16"
22
+ "node": ">= 18"
23
23
  },
24
24
  "dependencies": {
25
25
  "@iobroker/adapter-core": "^3.0.6",
@@ -33,12 +33,12 @@
33
33
  "@alcalzone/release-script-plugin-license": "^3.7.0",
34
34
  "@alcalzone/release-script-plugin-manual-review": "^3.7.0",
35
35
  "@iobroker/adapter-dev": "^1.3.0",
36
- "@iobroker/testing": "^4.1.0",
37
- "@tsconfig/node16": "^16.1.2",
36
+ "@iobroker/testing": "^4.1.1",
37
+ "@tsconfig/node16": "^16.1.3",
38
38
  "@types/chai": "^4.3.14",
39
39
  "@types/chai-as-promised": "^7.1.8",
40
40
  "@types/mocha": "^10.0.4",
41
- "@types/node": "^20.11.30",
41
+ "@types/node": "^20.12.2",
42
42
  "@types/proxyquire": "^1.3.31",
43
43
  "@types/sinon": "^17.0.3",
44
44
  "@types/sinon-chai": "^3.2.12",
@@ -49,7 +49,7 @@
49
49
  "proxyquire": "^2.1.3",
50
50
  "sinon": "^17.0.1",
51
51
  "sinon-chai": "^3.7.0",
52
- "typescript": "~5.3.3"
52
+ "typescript": "~5.4.3"
53
53
  },
54
54
  "main": "main.js",
55
55
  "files": [