# Huawei LUNA2000-215 Smart String ESS

> Huawei LUNA2000-215 Smart String ESS integration within our EMS

Source: https://voltmasters.io/en/docs/device-integrations/battery-systems/huawei-luna2000-215/

Our EMS supports the **Huawei LUNA2000-215-2S10 Smart String ESS**: a complete C&I battery cabinet that combines an integrated 108 kW PCS (PCS2000-108K-MB1) with a 215 kWh LFP battery pack behind a single Modbus TCP register map.

Unlike the [SmartLogger Hybrid integration](https://voltmasters.io/en/docs/device-integrations/battery-systems/huawei-smartlogger-hybrid/), this adapter connects directly to the ESS cabinet. There is no SmartLogger aggregating multiple inverters: one device entry in the EMS controls one physical cabinet. The cabinet exposes its battery and PCS state through a single Modbus TCP endpoint.

> **Note**
>
> This integration requires **controller version 0.0.278 or later**. For a Huawei installation that combines LUNA2000 batteries with SUN2000 inverters behind a SmartLogger, see the [SmartLogger Hybrid documentation](https://voltmasters.io/en/docs/device-integrations/battery-systems/huawei-smartlogger-hybrid/).

### Supported devices

| Model | PCS rating | Battery capacity |
| --- | --- | --- |
| LUNA2000-215-2S10 | 108 kW | 215 kWh LFP |

The integration communicates over **Modbus TCP**. The cabinet can be reached directly (ESS as the slave node) or via a SmartLogger acting as a Modbus gateway, in both cases the register map and the adapter configuration are identical. Use `config.ip`/`config.port` for the host and `config.slaveId` for the ESS unit address. When multiple cabinets share one SmartLogger gateway, configure each cabinet as a separate device entry with its own slave ID; they share the same pooled Modbus TCP connection.

## How the integration works

The LUNA2000-215 is modelled in our EMS as one **PCS parent device** with one automatically created **BMS child device**:

-   **PCS**: the parent device. Receives the charge/discharge setpoint from the EMS and manages power-on/off of the cabinet.
-   **BMS**: a proxied child that reports the battery state: state of charge (SOC), bus voltage, bus current and temperature. Created automatically, no separate wiring is needed.

### Control approach

#### Active power dispatch

Each control cycle the EMS writes the active power setpoint to register `42915` (I32, kW, gain 1000). The device's sign convention is **positive = discharge**; the EMS uses **positive = charge**, so the value is negated on write.

Before writing, the setpoint is clamped to the **live per-direction capability** reported by the cabinet (`actualChargingPowerCapability` / `actualDischargePowerCapability`, registers 33215/33217). These values derate with SOC and device state and are the tightest correct bound. Until they have been read, the EMS falls back to ±Pmax (register 32853). The setpoint is not written at all until at least one clamp bound has been read, this prevents an unclamped write at startup.

#### Power-on management

When the cabinet is idle or shut down (work status register 32034 not in a running or launching state), the EMS writes `1` (Run) to register `42000` to bring it online. The Run command is never sent when the work status is unknown or stale, re-asserting Run on a running unit causes a brief power interruption (verified on hardware), so the guard is strict.

#### Reactive power

Reactive power is dispatched via register `42914` (I16, % of apparent power, gain 100). The kVar setpoint is converted to a percentage using the cabinet's rated Pmax as the apparent-power base. The register is only written when a reactive setpoint is pending and Pmax has been read.

### What is read back

-   **Battery (BMS):** SOC, chargeable capacity, dischargeable capacity, rack voltage, rack current, state of health (SOH), highest and lowest pack temperature, BMS state (idle / charging / discharging / fault / offline).
-   **PCS:** Active power, reactive power, grid frequency, DC voltage, DC current, power factor, maximum charge and discharge power capability, accumulated energy charged and discharged.
-   **Alarms:** Battery pack faults, balancing module faults, BMU faults, RPCB faults, BCU faults, DCDC faults, PCS faults, safety/fire alarms, and cooling-system alarms, all mapped to individual incident types keyed by Huawei's stable alarm IDs.

### BMS state

The proxied BMS state is derived from the work status register and the rack current:

| Condition | BMS state |
| --- | --- |
| Critical alarm active | `fault` |
| Work status = offline (0xB000) | `offline` |
| Work status not running | `idle` |
| Running, rack current > 0.1 A | `charging` |
| Running, rack current < −0.1 A | `discharging` |
| Running, rack current near zero | `idle` |

A critical alarm forces the BMS state to `fault` and is surfaced as an incident on the same control cycle it is first read.

## Configuration parameters

The LUNA2000-215 PCS uses the standard battery device configuration. No extra parameters beyond the connection settings are required: the rated power defaults to 108 kW (derived from the model) and the proxied BMS child is created automatically.

| Parameter | Description |
| --- | --- |
| **IP address** | IP address of the ESS cabinet or the SmartLogger gateway. |
| **Port** | Modbus TCP port (default 502). |
| **Slave ID** | Modbus unit address of the ESS cabinet (configured on the device). |

## Validation status

The integration is implemented against the LUNA2000B V200R024C00SPC401 Modbus Port Definitions ("C&I Cabinet Subsystem", section 3) and validated on a LUNA2000-215-2S10 unit on live hardware (June 2026), including sign conventions for active power and rack current under commanded charge and discharge.
