Bug description
On a GW29.9K-ET (hardware platform ETT 929K9) with two independently connected Lynx Home F battery stacks on BAT1/BMS1 and BAT2/BMS2, the integration creates no BMS2 entities whatsoever.
Confirmed via Developer Tools → States → filter bms2: "No entities".
Consequences:
-
Battery 02 (BMS2) is invisible to Home Assistant — no SoC, voltage, temperature or status sensors
-
All control operations (EMS mode, charge/discharge current limits, SoC upper limit, DoD) affect Battery 01 only — Battery 02 is completely unresponsive to any HA parameter change
-
BMS2 runs permanently on its original SolarGo commissioning values
The HA dashboard does show two battery SoC widgets (via inverter summary registers), but no dedicated BMS2 entities exist.
Importantly: the inverter firmware itself correctly recognizes both BMS units (BAT1 BMS firmware: 07, BAT2 BMS firmware: 07 — confirmed in SolarGo Device Information). This is purely a library-side detection failure.
Hardware
| Component |
Details |
| Inverter model |
GW29.9K-ET |
| Inverter S/N |
929K9ETT233W0460 |
| Hardware platform |
ETT 929K9 |
| ARM firmware |
17.449 |
| DSP firmware |
11.11031 |
| BAT1 BMS firmware |
07 |
| BAT2 BMS firmware |
07 |
| Commissioned |
16/12/2024 |
| Battery stack 1 |
PCU 1 LX F-H, 5 modules, S/N: GLFHKXE0G2240230 → BAT1/BMS1 |
| Battery stack 2 |
PCU 2 LX F-H, 5 modules, S/N: GLFHKXE0G2260259 → BAT2/BMS2 |
Environment
| Item |
Version |
| Home Assistant Core |
2026.5.1 |
| Home Assistant OS |
17.3 |
| HACS GoodWe integration |
v0.9.9.30 (mletenay experimental) |
Steps to reproduce
-
Install GW29.9K-ET with two Lynx Home F PCU stacks on BAT1 and BAT2
-
Install HACS GoodWe experimental integration v0.9.9.30
-
Developer Tools → States → filter bms2 → "No entities"
-
Change any control parameter (EMS mode, DoD, charge current) via HA
-
Observe in SolarGo: Battery 01 updated, Battery 02 unchanged
Root cause hypothesis
is_2_battery() in model.py does not match the ETT 929K9 hardware platform / 929K9ETT... serial number pattern, so the conditional BMS2 sensor block in et.py is never instantiated.
The GW29.9K-ET is an unambiguously dual-bus model — official datasheet specifies 50×2 / 50×2 A max charge/discharge current, one independent 50 A channel per battery port, with separate CAN communication per BMS. The inverter firmware itself enumerates both BMS units correctly (confirmed above).
et.py already defines BMS2 read sensors at registers 47924–47935 and marks bms2_battery_string_rate_v (47935) as RW — the register map exists. The fix should be ensuring is_2_battery() returns True for this model/serial pattern, and subsequently that control writes are mirrored to BMS2 registers.
Expected behaviour
-
is_2_battery() returns True for GW29.9K-ET / ETT 929K9 / S/N prefix 929K9ETT
-
BMS2 sensor entities created (voltage, current, SoC, temperature, status)
-
Control writes mirrored to BMS2 registers symmetrically
Actual behaviour
Related issues
Bug description
On a GW29.9K-ET (hardware platform ETT 929K9) with two independently connected Lynx Home F battery stacks on BAT1/BMS1 and BAT2/BMS2, the integration creates no BMS2 entities whatsoever.
Confirmed via Developer Tools → States → filter bms2: "No entities".
Consequences:
Battery 02 (BMS2) is invisible to Home Assistant — no SoC, voltage, temperature or status sensors
All control operations (EMS mode, charge/discharge current limits, SoC upper limit, DoD) affect Battery 01 only — Battery 02 is completely unresponsive to any HA parameter change
BMS2 runs permanently on its original SolarGo commissioning values
The HA dashboard does show two battery SoC widgets (via inverter summary registers), but no dedicated BMS2 entities exist.
Importantly: the inverter firmware itself correctly recognizes both BMS units (BAT1 BMS firmware: 07, BAT2 BMS firmware: 07 — confirmed in SolarGo Device Information). This is purely a library-side detection failure.
Hardware
Environment
Steps to reproduce
Install GW29.9K-ET with two Lynx Home F PCU stacks on BAT1 and BAT2
Install HACS GoodWe experimental integration v0.9.9.30
Developer Tools → States → filter bms2 → "No entities"
Change any control parameter (EMS mode, DoD, charge current) via HA
Observe in SolarGo: Battery 01 updated, Battery 02 unchanged
Root cause hypothesis
is_2_battery() in model.py does not match the ETT 929K9 hardware platform / 929K9ETT... serial number pattern, so the conditional BMS2 sensor block in et.py is never instantiated.
The GW29.9K-ET is an unambiguously dual-bus model — official datasheet specifies 50×2 / 50×2 A max charge/discharge current, one independent 50 A channel per battery port, with separate CAN communication per BMS. The inverter firmware itself enumerates both BMS units correctly (confirmed above).
et.py already defines BMS2 read sensors at registers 47924–47935 and marks bms2_battery_string_rate_v (47935) as RW — the register map exists. The fix should be ensuring is_2_battery() returns True for this model/serial pattern, and subsequently that control writes are mirrored to BMS2 registers.
Expected behaviour
is_2_battery() returns True for GW29.9K-ET / ETT 929K9 / S/N prefix 929K9ETT
BMS2 sensor entities created (voltage, current, SoC, temperature, status)
Control writes mirrored to BMS2 registers symmetrically
Actual behaviour
Zero BMS2 entities in HA
All control changes applied to BMS1 only
Battery 02 ignores all HA automations
Related issues
GW25K-ET missing voltage & ampere of 2nd battery #69 — GW25K-ET missing BMS2 voltage/ampere (partial BMS2 monitoring fix)
One battery won't discharge from 100% mletenay/home-assistant-goodwe-inverter#291 — GW25K-ET three-stack, identical symptom; workaround: manually equalise battery_discharge_current in both stacks