iobroker.sigenergy 2.3.0 → 2.3.2
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 +6 -0
- package/io-package.json +26 -13
- package/main.js +40 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -153,6 +153,12 @@ Status and power readings for the DC charger.
|
|
|
153
153
|
|
|
154
154
|
## Changelog
|
|
155
155
|
|
|
156
|
+
### 2.3.2 (2026-06-10)
|
|
157
|
+
- (ssbingo) fix: show 'pre-V2.6' instead of 'unknown' when device responds but has no extended plant registers; add per-probe debug log with Modbus exception message
|
|
158
|
+
|
|
159
|
+
### 2.3.1 (2026-06-10)
|
|
160
|
+
- (ssbingo) feat: detect Modbus protocol level on startup by probing registers 30088/30200/30228/30286; read firmware version (30525); log result and store as info.protocolLevel state
|
|
161
|
+
|
|
156
162
|
### 2.3.0 (2026-06-10)
|
|
157
163
|
- (ssbingo) feat: add common.states enum maps for emsWorkMode/runningState/remoteEmsMode/dcCharger.runningState; wire PSS/PID/AC Charger write registers (FC06/FC10) with subscribe and onStateChange handlers
|
|
158
164
|
|
package/io-package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "sigenergy",
|
|
4
|
-
"version": "2.3.
|
|
4
|
+
"version": "2.3.2",
|
|
5
5
|
"news": {
|
|
6
|
-
"2.3.
|
|
7
|
-
"en": "(ssbingo)
|
|
8
|
-
"de": "(ssbingo)
|
|
9
|
-
"ru": "(ssbingo)
|
|
10
|
-
"pt": "(ssbingo)
|
|
11
|
-
"nl": "(ssbingo)
|
|
12
|
-
"fr": "(ssbingo)
|
|
13
|
-
"it": "(ssbingo)
|
|
14
|
-
"es": "(ssbingo)
|
|
15
|
-
"pl": "(ssbingo)
|
|
16
|
-
"uk": "(ssbingo)
|
|
17
|
-
"zh-cn": "(ssbingo)
|
|
6
|
+
"2.3.2": {
|
|
7
|
+
"en": "(ssbingo) fix: show 'pre-V2.6' instead of 'unknown' when device responds but has no extended plant registers; add per-probe debug log with Modbus exception message",
|
|
8
|
+
"de": "(ssbingo) fix: 'pre-V2.6' statt 'unknown' wenn Gerät antwortet aber keine erweiterten Plant-Register hat; Debug-Log pro Probe mit Modbus-Exception-Meldung ergänzt",
|
|
9
|
+
"ru": "(ssbingo) fix: отображать 'pre-V2.6' вместо 'unknown' если устройство отвечает, но не имеет расширенных регистров plant; добавлено отладочное сообщение на каждый зонд с кодом Modbus-исключения",
|
|
10
|
+
"pt": "(ssbingo) fix: mostrar 'pre-V2.6' em vez de 'unknown' quando o dispositivo responde mas não tem registos plant estendidos; log de debug por sonda com mensagem de excepção Modbus",
|
|
11
|
+
"nl": "(ssbingo) fix: 'pre-V2.6' tonen in plaats van 'unknown' als het apparaat reageert maar geen uitgebreide plant-registers heeft; debug-log per probe met Modbus-uitzonderingsmelding",
|
|
12
|
+
"fr": "(ssbingo) fix: afficher 'pre-V2.6' au lieu de 'unknown' si l'appareil répond mais n'a pas de registres plant étendus ; log de débogage par sonde avec message d'exception Modbus",
|
|
13
|
+
"it": "(ssbingo) fix: mostrare 'pre-V2.6' invece di 'unknown' quando il dispositivo risponde ma non ha registri plant estesi; log di debug per sonda con messaggio di eccezione Modbus",
|
|
14
|
+
"es": "(ssbingo) fix: mostrar 'pre-V2.6' en lugar de 'unknown' cuando el dispositivo responde pero no tiene registros plant extendidos; log de depuración por sonda con mensaje de excepción Modbus",
|
|
15
|
+
"pl": "(ssbingo) fix: pokazywać 'pre-V2.6' zamiast 'unknown' gdy urządzenie odpowiada ale nie ma rozszerzonych rejestrów plant; log debugowania na sondę z komunikatem wyjątku Modbus",
|
|
16
|
+
"uk": "(ssbingo) fix: відображати 'pre-V2.6' замість 'unknown' коли пристрій відповідає, але не має розширених регістрів plant; журнал налагодження на зонд з повідомленням про виняток Modbus",
|
|
17
|
+
"zh-cn": "(ssbingo) fix: 当设备响应但无扩展 plant 寄存器时显示 'pre-V2.6' 而非 'unknown';为每个探针添加含 Modbus 异常信息的调试日志"
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
"titleLang": {
|
|
@@ -178,6 +178,19 @@
|
|
|
178
178
|
"def": "idle"
|
|
179
179
|
},
|
|
180
180
|
"native": {}
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"_id": "info.protocolLevel",
|
|
184
|
+
"type": "state",
|
|
185
|
+
"common": {
|
|
186
|
+
"name": "Detected Modbus protocol level",
|
|
187
|
+
"type": "string",
|
|
188
|
+
"role": "text",
|
|
189
|
+
"read": true,
|
|
190
|
+
"write": false,
|
|
191
|
+
"def": ""
|
|
192
|
+
},
|
|
193
|
+
"native": {}
|
|
181
194
|
}
|
|
182
195
|
]
|
|
183
196
|
}
|
package/main.js
CHANGED
|
@@ -60,6 +60,7 @@ class Sigenergy extends utils.Adapter {
|
|
|
60
60
|
// calling setStateAsync on a stopped adapter.
|
|
61
61
|
this._stopped = false;
|
|
62
62
|
this._controlRegistersRead = false;
|
|
63
|
+
this._protocolDetected = false;
|
|
63
64
|
this._essPreheatingUnsupported = false;
|
|
64
65
|
|
|
65
66
|
this.on('ready', this.onReady.bind(this));
|
|
@@ -247,6 +248,10 @@ class Sigenergy extends utils.Adapter {
|
|
|
247
248
|
await this._readControlRegisters();
|
|
248
249
|
this._controlRegistersRead = true;
|
|
249
250
|
}
|
|
251
|
+
if (!this._protocolDetected) {
|
|
252
|
+
await this._detectProtocolLevel();
|
|
253
|
+
this._protocolDetected = true;
|
|
254
|
+
}
|
|
250
255
|
|
|
251
256
|
const _t0 = Date.now();
|
|
252
257
|
await this._readPlant();
|
|
@@ -501,6 +506,41 @@ class Sigenergy extends utils.Adapter {
|
|
|
501
506
|
}
|
|
502
507
|
}
|
|
503
508
|
|
|
509
|
+
async _detectProtocolLevel() {
|
|
510
|
+
const plantId = this.config.plantId || 247;
|
|
511
|
+
const inverterId = this.config.inverterId || 1;
|
|
512
|
+
|
|
513
|
+
const probes = [
|
|
514
|
+
{ addr: 30088, level: 'V2.6' },
|
|
515
|
+
{ addr: 30200, level: 'V2.7' },
|
|
516
|
+
{ addr: 30228, level: 'V2.8' },
|
|
517
|
+
{ addr: 30286, level: 'V2.9' },
|
|
518
|
+
];
|
|
519
|
+
|
|
520
|
+
let detectedLevel = null;
|
|
521
|
+
for (const probe of probes) {
|
|
522
|
+
try {
|
|
523
|
+
await this.modbus.readInputRegisters(plantId, probe.addr, 1);
|
|
524
|
+
detectedLevel = probe.level;
|
|
525
|
+
} catch (err) {
|
|
526
|
+
this.log.debug(`[protocolProbe] addr=${probe.addr} (${probe.level}): ${err.message}`);
|
|
527
|
+
break;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
let firmwareVersion = 'unknown';
|
|
532
|
+
try {
|
|
533
|
+
const raw = await this.modbus.readInputRegisters(inverterId, 30525, 15);
|
|
534
|
+
firmwareVersion = ModbusConnection.parseValue(raw, 'STRING', null) || 'unknown';
|
|
535
|
+
} catch {
|
|
536
|
+
// not critical
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
const levelStr = detectedLevel ? `>=${detectedLevel}` : 'pre-V2.6';
|
|
540
|
+
this.log.info(`Detected protocol level: ${levelStr} (firmware: ${firmwareVersion})`);
|
|
541
|
+
await this.setStateAsync('info.protocolLevel', { val: levelStr, ack: true });
|
|
542
|
+
}
|
|
543
|
+
|
|
504
544
|
async _readControlRegisters() {
|
|
505
545
|
const plantId = this.config.plantId || 247;
|
|
506
546
|
const inverterId = this.config.inverterId || 1;
|