Skip to content

GW29.9K-ET (ETT platform, dual-battery): BMS2 not detected — no BMS2 entities created, no BMS2 control #135

Description

@b-a-k-u-a-n

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

  1. Install GW29.9K-ET with two Lynx Home F PCU stacks on BAT1 and BAT2

  2. Install HACS GoodWe experimental integration v0.9.9.30

  3. Developer Tools → States → filter bms2 → "No entities"

  4. Change any control parameter (EMS mode, DoD, charge current) via HA

  5. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions