> For the complete documentation index, see [llms.txt](https://docs.voltmasters.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.voltmasters.io/device-integrations/battery-systems/huawei-smartlogger-hybrid.md).

# Huawei SmartLogger Hybrid

Our EMS supports Huawei battery installations behind a **Huawei SmartLogger** gateway. The SmartLogger acts as a **central gateway**: it aggregates the inverters, batteries and a grid meter behind one Modbus TCP endpoint. Because everything is reached through the SmartLogger, our EMS exposes the installation as several logical devices (battery, PV, grid meter) that are all served by the same integration.

The integration supports **two physical topologies**, selected by the model you pick when adding the device:

| Model                                       | Topology       | Layout                                                                                                 |
| ------------------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------ |
| **SmartLogger Hybrid (residential)**        | `per-inverter` | Each SUN2000 hybrid inverter hosts its own LUNA2000 battery (DC-coupled).                              |
| **SmartLogger Commercial (AC-coupled ESS)** | `plant-level`  | Separate PV inverters and ESS power-conversion systems that the SmartLogger aggregates at array level. |

The model determines the controller battery topology automatically — you do not configure it separately.

{% hint style="info" %}
This integration requires **controller version 0.0.277 or later**. For a standalone Huawei SmartLogger 3000 or SUN2000 inverters without battery storage, see the [Huawei PV inverter documentation](/device-integrations/pv-inverters/huawei/huawei-smartlogger-3000.md).
{% endhint %}

### Supported devices

| Component          | Role                                                      |
| ------------------ | --------------------------------------------------------- |
| Huawei SmartLogger | Gateway (slave 0) — Modbus TCP entry point                |
| SUN2000 inverters  | PV inverters, each with their own Modbus slave ID         |
| Battery storage    | LUNA2000 (residential) or separate ESS units (commercial) |
| Grid meter         | The SmartLogger's connected grid meter (own slave ID)     |

The integration communicates over **Modbus TCP**. The SmartLogger itself is addressed as slave `0`; each SUN2000 inverter and the grid meter have their own slave IDs behind the gateway.

## How the integration works

The SmartLogger is modelled in our EMS as one parent **PCS** device with three child devices (BMS, PV, grid meter), all driven from the same Modbus TCP connection. The child devices are created automatically from the parent — there is no separate wiring or extra Modbus device to add.

* **PCS (battery inverter)** — the parent device. Receives the charge/discharge setpoints.
* **BMS** — reports the aggregated battery state: state of charge (SOC), power, and chargeable/dischargeable energy.
* **PV** — reports the combined PV production and yield.
* **Grid meter** — exposed as a grid energy meter.

### Adding the device (auto-discovery)

When you add a SmartLogger device, you select the model and enter the connection details (IP/port). The controller then **scans the gateway** and reports back so the wizard can pre-fill:

* The **inverter slave IDs** and the **grid-meter slave ID** (no need to look these up by hand).
* The **nameplate**: rated power, battery capacity, PV rated power, and the min/max SOC limits.

The discovered values pre-fill the form fields and can still be edited before saving.

### Control approach

#### Residential (`per-inverter`) — LUNA2000 forcible dispatch

The battery sits behind each SUN2000 inverter. Battery control uses the LUNA2000 **forcible charge/discharge interface**, written each control cycle (≈1 s) to every inverter slave:

1. Target charge or discharge power, split evenly across all configured inverters.
2. Forcible period: a 5-minute window that acts as a **dead-man switch** — if the EMS stops refreshing the command, the LUNA2000 automatically reverts to its working mode. A keep-alive is written every 60 seconds.
3. Setting mode: time-based forcible control.
4. Command register: `FORCIBLE_CHARGE`, `FORCIBLE_DISCHARGE` or `FORCIBLE_STOP`.

Outside active dispatch the LUNA2000 is left in **MAXIMISE\_SELF\_CONSUMPTION** working mode (mode 2). PV curtailment is applied at the **SmartLogger array level** via register `40420` (clamped to the ceiling read from `40697`), which subtracts the battery setpoint so the PV portion lands on the requested limit.

#### Commercial (`plant-level`) — global ESS setpoint

The batteries are separate ESS units that the SmartLogger only aggregates at array level. The EMS therefore steers the whole battery **globally** through a single register, `40381` (active ESS power adjustment, 0.1 kW, i32, slave 0). Huawei's plant-level power sign is the opposite of the EMS convention (Huawei: negative = charge), so the setpoint is sign-inverted and clamped to the battery rating before writing. This requires **Northbound Scheduling** to be enabled on the SmartLogger.

In this topology PV is read but not curtailed by the adapter, and there is no per-inverter forcible dispatch or LUNA self-consumption mode.

#### Self-consumption mode

In the residential topology, when **Allow self-consumption mode** is `automatic` or `yes` and no PV curtailment is active, the EMS hands local balancing to the LUNA2000's own self-consumption logic. This is not available in the commercial topology (it always dispatches the explicit setpoint).

### What is read back

| Quantity                        | Residential (`per-inverter`)                                           | Commercial (`plant-level`)                              |
| ------------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------------- |
| **PV power / reactive / yield** | Summed per SUN2000 inverter                                            | SmartLogger array aggregate (slave 0)                   |
| **Battery power / SOC**         | Aggregated per LUNA2000 unit                                           | SmartLogger array aggregate (slave 0)                   |
| **Chargeable / dischargeable**  | Derived from SOC × configured capacity                                 | Read from the gateway's real remaining-energy registers |
| **Battery energy totals**       | Per-unit charge/discharge totals                                       | Array charge/discharge totals (slave 0)                 |
| **Grid meter**                  | Per-phase voltage/current, active/reactive power, import/export energy | Same                                                    |
| **Faults**                      | SUN2000 alarm registers (Alarm 1 & 2) per inverter → incidents         | Same (per-inverter alarms are read in both topologies)  |

Battery power follows the EMS convention (**positive = charge, negative = discharge**); grid-meter active power follows **positive = import, negative = export**.

### Grid meter trust

The SmartLogger reports a meter connection status register. The EMS only publishes grid measurements when the status is explicitly **connected** (`0xB001`). A disconnected status raises a critical `gridMeterDisconnected` incident and the meter channels are zeroed.

### Grid frequency

Grid frequency is a property of the grid connection, so it is reported by the **grid/energy meter** rather than read from the PV inverters.

## Configuration parameters

Beyond the standard battery parameters, the SmartLogger PCS exposes:

| Parameter                       | Description                                                                         |
| ------------------------------- | ----------------------------------------------------------------------------------- |
| **Rated power (kVA)**           | Nominal AC power of the battery/PCS system.                                         |
| **Battery rated power (kW)**    | Rated charge/discharge power. Used to clamp dispatch setpoints.                     |
| **Battery capacity (kWh)**      | Total battery capacity.                                                             |
| **PV capacity (kWp)**           | Total installed PV capacity across all inverters.                                   |
| **Inverter slave IDs**          | Modbus slave IDs of the SUN2000 inverters behind the SmartLogger (auto-discovered). |
| **Grid meter slave ID**         | Modbus slave ID of the grid meter (auto-discovered).                                |
| **Allow self-consumption mode** | Residential only: `automatic` (default), `yes`, or `no`.                            |

The battery topology (`per-inverter` vs `plant-level`) is set by the chosen model and is not a separate field.

## Validation status

The residential (`per-inverter`) topology is implemented against the Huawei SmartLogger Modbus interface and the LUNA2000 storage-control register specification and validated on hardware. The commercial (`plant-level`) topology is implemented against the SmartLogger array-aggregate and northbound-scheduling registers; its readouts are validated on hardware and the global dispatch register is implemented per specification. Additional functionality may be added over time as integration capabilities evolve.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.voltmasters.io/device-integrations/battery-systems/huawei-smartlogger-hybrid.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
