iobroker.sigenergy 2.2.6 → 2.3.0

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
@@ -153,6 +153,13 @@ Status and power readings for the DC charger.
153
153
 
154
154
  ## Changelog
155
155
 
156
+ ### 2.3.0 (2026-06-10)
157
+ - (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
+
159
+ ### 2.2.7 (2026-06-10)
160
+ - (ssbingo) fix: add missing native defaults enableSmartLoads/enableCumulativeEnergy/enableGridCode to io-package.json
161
+ - (ssbingo) fix: update register 30003 desc with V2.7 EMS modes 5 (FullFeedIn) and 9 (Custom)
162
+
156
163
  ### 2.2.6 (2026-06-10)
157
164
  - (ssbingo) feat: V2.9 register audit — add missing register 30279 (current control command value), move DC Charger PV registers 31509/31511 to dcCharger namespace, fix ESS Preheating TOU time gain (null→1)
158
165
  - (ssbingo) feat: implement control write-back for plant.control.*, plant.gridCode.*, inverter.control.*, dcCharger.control.* (FC06/FC10); read RW holding registers on startup
package/io-package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "sigenergy",
4
- "version": "2.2.6",
4
+ "version": "2.3.0",
5
5
  "news": {
6
- "2.2.6": {
7
- "en": "(ssbingo) feat: V2.9 register audit — add register 30279, move DC Charger PV regs 31509/31511 to dcCharger, implement control write-back (FC06/FC10); fix: suppress ESS Preheating log flood; downgrade control startup read errors to debug",
8
- "de": "(ssbingo) feat: V2.9 Register-Audit Register 30279 ergänzt, DC-Charger PV-Register 31509/31511 in dcCharger-Namespace; Steuerungs-Rückschreiben (FC06/FC10); fix: ESS-Vorheizungs-Warn-Flooding unterdrückt; Startup-Lesefehler auf Debug herabgestuft",
9
- "ru": "(ssbingo) feat: аудит регистров V2.9 регистр 30279, PV-регистры DC 31509/31511 в dcCharger, обратная запись управляющих регистров; fix: подавление повторяющихся предупреждений ESS; ошибки чтения при старте понижены до debug",
10
- "pt": "(ssbingo) feat: auditoria V2.9 registo 30279, registos PV DC Charger 31509/31511 para dcCharger, escrita de controlo (FC06/FC10); fix: avisos ESS Preheating suprimidos; erros de leitura ao arranque em debug",
11
- "nl": "(ssbingo) feat: V2.9 register-audit register 30279, PV-registers DC Charger 31509/31511 naar dcCharger, terugschrijven besturingsregisters; fix: ESS-voorverwarmingswaarschuwingen onderdrukt; opstartleesfouten naar debug",
12
- "fr": "(ssbingo) feat: audit V2.9 registre 30279, registres PV DC 31509/31511 vers dcCharger, rétro-écriture contrôle (FC06/FC10) ; fix: avertissements ESS Preheating supprimés ; erreurs lecture démarrage en debug",
13
- "it": "(ssbingo) feat: audit V2.9 registro 30279, registri PV DC 31509/31511 in dcCharger, scrittura controllo (FC06/FC10); fix: avvisi ESS Preheating soppressi; errori lettura avvio in debug",
14
- "es": "(ssbingo) feat: auditoría V2.9 registro 30279, registros PV DC 31509/31511 a dcCharger, escritura control (FC06/FC10); fix: avisos ESS Preheating suprimidos; errores lectura inicio en debug",
15
- "pl": "(ssbingo) feat: audyt V2.9 rejestr 30279, rejestry PV DC 31509/31511 do dcCharger, zapis sterujący (FC06/FC10); fix: ostrzeżenia ESS Preheating wyciszone; błędy odczytu przy starcie w debug",
16
- "uk": "(ssbingo) feat: аудит V2.9 регістр 30279, PV-регістри DC 31509/31511 у dcCharger, зворотний запис керуючих; fix: попередження ESS Preheating придушені; помилки читання при запуску знижені до debug",
17
- "zh-cn": "(ssbingo) feat: V2.9 寄存器审计 寄存器 30279,DC 充电机 PV 31509/31511 dcCharger,控制寄存器回写;fix: 抑制 ESS 预热重复警告;控制启动读取错误降级为 debug"
6
+ "2.3.0": {
7
+ "en": "(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",
8
+ "de": "(ssbingo) feat: common.states Enum-Maps für emsWorkMode/runningState/remoteEmsMode/dcCharger.runningState ergänzt; PSS/PID/AC-Ladegerät Schreib-Register (FC06/FC10) mit Subscribe und onStateChange-Handler verdrahtet",
9
+ "ru": "(ssbingo) feat: добавлены enum-карты common.states для emsWorkMode/runningState/remoteEmsMode/dcCharger.runningState; подключены регистры записи PSS/PID/AC-зарядника (FC06/FC10) с обработчиками subscribe и onStateChange",
10
+ "pt": "(ssbingo) feat: mapas enum common.states adicionados para emsWorkMode/runningState/remoteEmsMode/dcCharger.runningState; registos de escrita PSS/PID/AC Charger (FC06/FC10) com subscribe e handlers onStateChange",
11
+ "nl": "(ssbingo) feat: common.states enum-maps toegevoegd voor emsWorkMode/runningState/remoteEmsMode/dcCharger.runningState; PSS/PID/AC Charger schrijfregisters (FC06/FC10) gekoppeld met subscribe en onStateChange-handlers",
12
+ "fr": "(ssbingo) feat: cartes enum common.states ajoutées pour emsWorkMode/runningState/remoteEmsMode/dcCharger.runningState ; registres d'écriture PSS/PID/AC Charger (FC06/FC10) câblés avec subscribe et handlers onStateChange",
13
+ "it": "(ssbingo) feat: mappe enum common.states aggiunte per emsWorkMode/runningState/remoteEmsMode/dcCharger.runningState; registri di scrittura PSS/PID/AC Charger (FC06/FC10) cablati con subscribe e handler onStateChange",
14
+ "es": "(ssbingo) feat: mapas enum common.states añadidos para emsWorkMode/runningState/remoteEmsMode/dcCharger.runningState; registros de escritura PSS/PID/AC Charger (FC06/FC10) conectados con subscribe y handlers onStateChange",
15
+ "pl": "(ssbingo) feat: mapy enum common.states dodane dla emsWorkMode/runningState/remoteEmsMode/dcCharger.runningState; rejestry zapisu PSS/PID/AC Charger (FC06/FC10) podłączone z subscribe i handlerami onStateChange",
16
+ "uk": "(ssbingo) feat: enum-карти common.states додано для emsWorkMode/runningState/remoteEmsMode/dcCharger.runningState; реєстри запису PSS/PID/AC Charger (FC06/FC10) підключено з subscribe та обробниками onStateChange",
17
+ "zh-cn": "(ssbingo) feat: 为 emsWorkMode/runningState/remoteEmsMode/dcCharger.runningState 添加 common.states 枚举映射;连接 PSS/PID/交流充电桩写寄存器(FC06/FC10),含 subscribe onStateChange 处理器"
18
18
  }
19
19
  },
20
20
  "titleLang": {
@@ -121,6 +121,9 @@
121
121
  "sigenMicroScanFrom": 10,
122
122
  "sigenMicroScanTo": 30,
123
123
  "sigenMicroDevices": "[]",
124
+ "enableSmartLoads": false,
125
+ "enableCumulativeEnergy": false,
126
+ "enableGridCode": false,
124
127
  "enablePss": false,
125
128
  "pssSlaveId": 5,
126
129
  "enablePid": false,
package/lib/registers.js CHANGED
@@ -37,7 +37,7 @@ const PLANT_READ_REGISTERS = [
37
37
  gain: null,
38
38
  unit: '',
39
39
  role: 'value',
40
- desc: 'EMS work mode: 0=MaxSelfConsumption,1=AI,2=TOU,7=RemoteEMS',
40
+ desc: 'EMS work mode: 0=MaxSelfConsumption,1=AI,2=TOU,5=FullFeedIn,7=RemoteEMS,9=Custom',
41
41
  },
42
42
  {
43
43
  addr: 30004,
package/main.js CHANGED
@@ -20,11 +20,25 @@ const {
20
20
  PLANT_WRITE_REGISTERS,
21
21
  INVERTER_WRITE_REGISTERS,
22
22
  DC_CHARGER_WRITE_REGISTERS,
23
+ AC_CHARGER_WRITE_REGISTERS,
24
+ PSS_WRITE_REGISTERS,
25
+ PID_WRITE_REGISTERS,
26
+ RUNNING_STATES,
27
+ EMS_WORK_MODES,
28
+ REMOTE_EMS_MODES,
29
+ DC_CHARGER_RUNNING_STATES,
23
30
  } = require('./lib/registers');
24
31
  const SigenMicroScanner = require('./lib/scanner');
25
32
  const { getRegistersForDevice } = require('./lib/sigenMicroRegisters');
26
33
  const adapterVersion = require('./package.json').version;
27
34
 
35
+ const ENUM_STATES_MAP = {
36
+ 'plant.emsWorkMode': EMS_WORK_MODES,
37
+ 'plant.runningState': RUNNING_STATES,
38
+ 'dcCharger.runningState': DC_CHARGER_RUNNING_STATES,
39
+ 'plant.control.remoteEmsMode': REMOTE_EMS_MODES,
40
+ };
41
+
28
42
  class Sigenergy extends utils.Adapter {
29
43
  /**
30
44
  * @param {Partial<utils.AdapterOptions>} [options] - Adapter options
@@ -842,6 +856,14 @@ class Sigenergy extends utils.Adapter {
842
856
  }
843
857
  await this._createStateFromRegister(reg);
844
858
  }
859
+ await this._createChannel('acCharger.control', 'AC Charger Control');
860
+ for (const reg of AC_CHARGER_WRITE_REGISTERS) {
861
+ if (this._stopped) {
862
+ return;
863
+ }
864
+ await this._createWriteStateFromRegister(reg);
865
+ }
866
+ this.subscribeStates('acCharger.control.*');
845
867
  }
846
868
 
847
869
  if (this.config.hasDcCharger) {
@@ -882,17 +904,32 @@ class Sigenergy extends utils.Adapter {
882
904
  }
883
905
  await this._createStateFromRegister(reg);
884
906
  }
907
+ for (const reg of PSS_WRITE_REGISTERS) {
908
+ if (this._stopped) {
909
+ return;
910
+ }
911
+ await this._createWriteStateFromRegister(reg);
912
+ }
913
+ this.subscribeStates('pss.control.*');
885
914
  }
886
915
 
887
916
  if (this.config.enablePid) {
888
917
  this.log.debug('Creating PID objects');
889
918
  await this._createChannel('pid', 'PV Insulation Detection');
919
+ await this._createChannel('pid.control', 'PID Control');
890
920
  for (const reg of PID_READ_REGISTERS) {
891
921
  if (this._stopped) {
892
922
  return;
893
923
  }
894
924
  await this._createStateFromRegister(reg);
895
925
  }
926
+ for (const reg of PID_WRITE_REGISTERS) {
927
+ if (this._stopped) {
928
+ return;
929
+ }
930
+ await this._createWriteStateFromRegister(reg);
931
+ }
932
+ this.subscribeStates('pid.control.*');
896
933
  }
897
934
 
898
935
  if (this.config.enableEssPreheating) {
@@ -960,16 +997,22 @@ class Sigenergy extends utils.Adapter {
960
997
  type = 'number';
961
998
  }
962
999
 
1000
+ const common = {
1001
+ name: reg.desc,
1002
+ type,
1003
+ role,
1004
+ unit: reg.unit || '',
1005
+ read: true,
1006
+ write: false,
1007
+ };
1008
+ const states = ENUM_STATES_MAP[reg.name];
1009
+ if (states) {
1010
+ common.states = states;
1011
+ }
1012
+
963
1013
  await this.setObjectNotExistsAsync(reg.name, {
964
1014
  type: 'state',
965
- common: {
966
- name: reg.desc,
967
- type,
968
- role,
969
- unit: reg.unit || '',
970
- read: true,
971
- write: false,
972
- },
1015
+ common,
973
1016
  native: {
974
1017
  addr: reg.addr,
975
1018
  qty: reg.qty,
@@ -981,16 +1024,21 @@ class Sigenergy extends utils.Adapter {
981
1024
 
982
1025
  async _createWriteStateFromRegister(reg) {
983
1026
  const type = reg.type === 'STRING' ? 'string' : 'number';
1027
+ const common = {
1028
+ name: reg.desc,
1029
+ type,
1030
+ role: 'value',
1031
+ unit: reg.unit || '',
1032
+ read: reg.perm === 'RW',
1033
+ write: true,
1034
+ };
1035
+ const states = ENUM_STATES_MAP[reg.name];
1036
+ if (states) {
1037
+ common.states = states;
1038
+ }
984
1039
  await this.setObjectNotExistsAsync(reg.name, {
985
1040
  type: 'state',
986
- common: {
987
- name: reg.desc,
988
- type,
989
- role: 'value',
990
- unit: reg.unit || '',
991
- read: reg.perm === 'RW',
992
- write: true,
993
- },
1041
+ common,
994
1042
  native: {
995
1043
  addr: reg.addr,
996
1044
  qty: reg.qty,
@@ -1162,6 +1210,18 @@ class Sigenergy extends utils.Adapter {
1162
1210
  reg = DC_CHARGER_WRITE_REGISTERS.find(r => r.name === localId);
1163
1211
  slaveId = this.config.inverterId || 1;
1164
1212
  category = 'dcCharger';
1213
+ } else if (localId.startsWith('pss.control.')) {
1214
+ reg = PSS_WRITE_REGISTERS.find(r => r.name === localId);
1215
+ slaveId = this.config.pssSlaveId || 5;
1216
+ category = 'pss';
1217
+ } else if (localId.startsWith('pid.control.')) {
1218
+ reg = PID_WRITE_REGISTERS.find(r => r.name === localId);
1219
+ slaveId = this.config.pidSlaveId || 6;
1220
+ category = 'pid';
1221
+ } else if (localId.startsWith('acCharger.control.')) {
1222
+ reg = AC_CHARGER_WRITE_REGISTERS.find(r => r.name === localId);
1223
+ slaveId = this.config.acChargerId || 2;
1224
+ category = 'acCharger';
1165
1225
  }
1166
1226
 
1167
1227
  if (!reg) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.sigenergy",
3
- "version": "2.2.6",
3
+ "version": "2.3.0",
4
4
  "description": "ioBroker adapter for Sigenergy solar energy systems via Modbus TCP/RTU",
5
5
  "author": {
6
6
  "name": "ssbingo",