# Welcome

Welcome to the **Voltmasters EMS Documentation**.

This documentation provides a complete overview of the Voltmasters Energy Management System (EMS), including project setup, device integration, dashboards, control logic, and incident handling.

It is intended for installers, integrators, and professional users who work with energy storage systems, PV installations, and grid-connected assets.

Whether you are commissioning your first project or managing large-scale deployments, these docs help you understand how the platform works and how to get the most out of it.

### Who this documentation is for

* Installers commissioning EMS-controlled projects
* System integrators and technical partners
* Advanced customers optimizing energy flows
* Internal operations and support teams

#### <a href="/pages/1xyx6O8sKtnphFi0B0Xv" class="button primary">Lets start</a>

### Product information

Looking for product pages, use cases or a commercial contact? Visit the Voltmasters website at [voltmasters.io](https://voltmasters.io).

### Need help?

{% hint style="info" %}
If you encounter issues or have questions that are not covered in this documentation, contact Voltmasters support at **<help@voltmasters.be>** or your technical point of contact.
{% endhint %}

Use the navigation on the left to explore the documentation and get started.


# EMS Controller: installation

When installing the controller, clip it onto a DIN rail and connect it as shown below.

<figure><img src="/files/X449DmvwMbzuTGxosyLu" alt="" width="273"><figcaption></figcaption></figure>

### Power and network connections

| Color         | Location | Type          |
| ------------- | -------- | ------------- |
| Orange        | Left     | +24V          |
| White         | Middle   | −24V          |
| Green-Yellow  | Right    | Ground ⏚      |
| Network cable | Top      | Network cable |

You can use a 24-volt power supply or look for a compatible power cable.

{% hint style="info" %}
To communicate with the devices, the controller must be connected to the internet. All devices to be paired must also be connected to the same network.
{% endhint %}

<figure><img src="/files/0yP8QdCB66dUYjDidlNY" alt="" width="174"><figcaption></figcaption></figure>

[Hardware datasheet](https://revolutionpi.com/fileadmin/downloads/datasheets/Technical_Datasheet_RevPi-Core-all.pdf)


# Internet and network

The controller manages your installation (battery, inverter, etc.) and communicates with both the Voltmasters platform and your on-site equipment. Most communication is outbound: the controller "calls out" to the cloud and to your devices. You do not need to open any inbound ports from the internet for normal operation. Remote support reaches the controller over outbound connections only (see *Remote support*).

### Requirements

* Wired network connection (Ethernet) at the location where the controller is installed.
* We prefer DHCP configuration. If you need a static IP, you need to configure this in the network configuration.
* Stable internet connection.
* Access to the same local network (LAN) as your energy devices (inverter, battery controller, meter, etc.).
* Functional DNS and the Voltmasters domains must not be blocked by DNS/content filtering (see DNS & content filtering)
* Accurate clock / NTP time sync allowed (outbound UDP 123). Required, otherwise TLS connections fail.
* No TLS-intercepting (man-in-the-middle) proxy on the controller's traffic.

### Outbound ports

Allow the following outbound connections from the controller to the internet:

<table><thead><tr><th width="98.4765625">port</th><th width="117.765625">Protocol</th><th>Destination</th></tr></thead><tbody><tr><td>4505</td><td>TCP</td><td>salt.voltmasters.libaro.io</td></tr><tr><td>4506</td><td>TCP</td><td>salt.voltmasters.libaro.io</td></tr><tr><td>8883</td><td>TCP</td><td>AWS IoT (*-ats.iot.eu-west-1.amazonaws.com)</td></tr><tr><td>2984</td><td>TCP</td><td>tmate.voltmasters.libaro.io</td></tr><tr><td>443</td><td>TCP</td><td>*.voltmasters.be</td></tr><tr><td>8086</td><td>TCP</td><td>*.timestream-influxdb.eu-west-1.on.aws</td></tr><tr><td>80</td><td>TCP</td><td>archive.ubuntu.com, security.ubuntu.com</td></tr><tr><td>53</td><td>UDP/TCP</td><td>any</td></tr><tr><td>123</td><td>UDP</td><td>any (NTP)</td></tr><tr><td>41641</td><td>UDP</td><td>any (Tailscale WireGuard, direct connections)</td></tr><tr><td>3478</td><td>UDP</td><td>any (Tailscale STUN / NAT traversal)</td></tr></tbody></table>

If outbound UDP is fully blocked, remote support via Tailscale falls back to relays over TCP 443, which still works but is slower. For a responsive remote-support connection, allow outbound UDP 41641 and 3478. No inbound rules are needed.

### Domains that must be reachable

If the site uses DNS filtering, a web/URL filter, or a next-gen firewall (FortiGate/FortiGuard, Cisco Umbrella, Palo Alto, Zscaler, …), explicitly allow these domains.

* salt.voltmasters.libaro.io
* platform.voltmasters.be (production) / voltmasters-beta.libaro.io (dev units)
* tmate.voltmasters.libaro.io
* tempo.voltmasters.libaro.io
* \*.amazonaws.com and \*.on.aws (AWS IoT, container registry/ECR, InfluxDB)
* archive.ubuntu.com, security.ubuntu.com
* \*.tailscale.com<br>

### How to verify

Run these checks from a laptop on the same network or VLAN as the controller:

```powershell
# 1. DNS must return our real server IP, not a filtered/sinkhole address

Resolve-DnsName tmate.voltmasters.libaro.io

Resolve-DnsName salt.voltmasters.libaro.io

# -> both should resolve to a Voltmasters/AWS IP (e.g. 52.17.81.98),

# NOT to an IP owned by your firewall vendor (Fortinet, Cisco, etc.)

# 2. The ports must be reachable

Test-NetConnection salt.voltmasters.libaro.io -Port 4505

Test-NetConnection tmate.voltmasters.libaro.io -Port 2984

# -> TcpTestSucceeded : True
```

{% hint style="warning" %}
If `Resolve-DnsName` returns an IP that belongs to your firewall or security vendor, the domain is being sinkholed. Allow-list the domain on the firewall.
{% endhint %}

### Linking to an EMS account

A code is printed on the controller. When creating [**a new project**](https://platform.voltmasters.be/projects), enter this code as the Controller ID.


# Account registration & login

{% stepper %}
{% step %}

### Open the platform

Go to **platform.voltmasters.be**.
{% endstep %}

{% step %}

### Start the registration

Click **Sign up**.
{% endstep %}

{% step %}

### Enter your details

Enter your **first name, last name, email address, and password**, then confirm your password.
{% endstep %}

{% step %}

### Create your account

Click **Get started** to create your account.
{% endstep %}
{% endstepper %}

<figure><img src="/files/iFLRpVMgqHhoHaQqK24U" alt=""><figcaption></figcaption></figure>


# Adding a new project

Follow these steps to create a new project and link a controller to the Voltmasters EMS platform.

{% stepper %}
{% step %}

### Start a new project

On the home screen, click **Add new project**.
{% endstep %}

{% step %}

### Enter project information

Fill in the basic details of the installation site:

* **Project name**: enter a clear and unique name for the project, for example *Company HQ - Battery System*.
* **Street**: street name of the installation address.
* **City**: city where the system is installed.
* **Postal code**: postal or ZIP code of the location.
* **Country**: select the country from the dropdown list.
  {% endstep %}

{% step %}

### Configure grid capacity limits

These values define the technical limits of the grid connection and are critical for EMS operation.

* **Grid import capacity limit (kW)**: enter the maximum power that may be imported from the grid. This value is used for load limiting and peak shaving.
* **Grid export capacity limit (kW)**: enter the maximum power that may be exported to the grid. This is important for export limitation and PV curtailment.

{% hint style="info" %}
These limits should match the contractual or physical grid connection limits. Be sure to verify this in advance.
{% endhint %}
{% endstep %}

{% step %}

### Link the controller

* **Controller ID**: enter the unique Controller ID of the EMS controller installed on-site.
  * Make sure the controller is powered on and connected to the internet.
  * The Controller ID can be found on the device label.
    {% endstep %}
    {% endstepper %}

<figure><img src="/files/aNRdCEjz0uhZVHtr5w9Y" alt=""><figcaption></figcaption></figure>


# Adding and verifying devices

{% stepper %}
{% step %}

### Open the devices overview

* Open your project in **platform.voltmasters.be**.
* In the project menu, go to **Devices overview**.
* This opens the **Devices overview** screen, showing all configured devices and their online status.
* In the top-right corner, click **Add device**.
  {% endstep %}

{% step %} <img src="/files/yk9DnvgKKF4Al8mbosPp" alt="" data-size="original">
{% endstep %}

{% step %}

### Add a new device

In the **Add Device** wizard, start with the device configuration:

* **Device type**: select the type of device you want to add, for example PCS, BMS, Energy Meter, or PV inverter.
* **Brand**: select the manufacturer of the device.
* **Model**: choose the correct model from the list.
* **Device name**: enter a clear and unique name, for example *PCS1*, *BMS Rack 2*, or *Main Meter*.
* **Parent device**: select the parent device in the electrical hierarchy, typically the main meter.
* **Description**: optional notes about the device or installation.

Click **Next** to continue.
{% endstep %}

{% step %} <img src="/files/bjQzi8CGt9vx4FrdRlDK" alt="" data-size="original">
{% endstep %}

{% step %}

### Configure device communication

Define how the EMS communicates with the device:

* **Protocol**: select the communication protocol, for example *Modbus TCP/IP*.
* **IP address**: enter the static IP address of the device.
* **Port**: enter the communication port, commonly `502` for Modbus TCP.
* **Slave ID**: enter the Modbus slave ID. The default is often `1`, unless specified otherwise.

Optional actions:

* **Test**: Click **Test** to verify communication before saving.
* **Previous**: Go back to adjust device details if needed.

Click **Save** to add the device.
{% endstep %}
{% endstepper %}

<figure><img src="/files/ZuzNqgt7CqEr1NnYf9BV" alt=""><figcaption></figcaption></figure>


# RS485 to Modbus TCP adapters

Some devices communicate over **Modbus RTU (RS485)** rather than Ethernet. To make these devices reachable by the controller over the network, an RS485-to-Modbus-TCP adapter (gateway) converts the serial RS485 signal to Modbus TCP.

Use one of the supported adapters below when a device only offers an RS485 interface.

After the adapter is configured, the device can be added on the platform like any other Modbus TCP device. See [Adding and verifying devices](/getting-started/adding-and-verifying-devices).

### Supported adapters

* [EP E300](/getting-started/adding-and-verifying-devices/rs485-to-modbus-tcp-adapters/ep-e300)
* [Sollae](/getting-started/adding-and-verifying-devices/rs485-to-modbus-tcp-adapters/sollae)
* [Waveshare](/getting-started/adding-and-verifying-devices/rs485-to-modbus-tcp-adapters/waveshare)


# EP E300

### Requirements

* EP E300 converter (e.g. RS485 TO ETH)
* 24V power supply
* UTP (Ethernet) cable
* RS485 cabling (twisted pair)

<figure><img src="/files/FjEvpLUDmtQz5L48yhlw" alt="" width="375"><figcaption></figcaption></figure>


# Sollae

### Requirements

* Sollae converter (e.g. RS485 TO ETH (B))
* 5V power supply (if needed)
* UTP (Ethernet) cable
* RS485 cabling (twisted pair)
* Spfinder (software)

<figure><img src="/files/fjtWYt4lPch5gmFxOwRS" alt=""><figcaption></figcaption></figure>


# Waveshare

### Requirements

* Waveshare converter (e.g. RS485 TO ETH (B))
* 24V/12V power supply (if needed)
* UTP (Ethernet) cable
* RS485 cabling (twisted pair)

<figure><img src="/files/Ay5eaggVifaRuPA6KuTL" alt=""><figcaption></figcaption></figure>


# Adding users to a project

Once the system is fully configured and all devices are online, the final step is to grant access to users.

{% stepper %}
{% step %}

### Navigate to user management

* Open your project in **platform.voltmasters.be**.
* Go to **Settings**.
* Select **Users**.

This opens the user management screen for the project.
{% endstep %}

{% step %}

### Add a new user

* Click **Add user**.
* Enter the **email address** of the person you want to give access to.

{% hint style="info" %}
The email address is used to send an invitation to the platform.
{% endhint %}
{% endstep %}

{% step %}

### Select the user role

Choose the appropriate role for the user:

* **Installer**
  * Intended for installers, integrators, or service partners.
  * Has extended rights to configure devices, settings, and system behavior.
* **Client**
  * Intended for the end user or system owner.
  * Has access to dashboards, insights, and monitoring.
  * Limited configuration rights to prevent accidental system changes.
    {% endstep %}

{% step %}

### Send the invitation

* Confirm the role selection.
* Click **Save** or **Invite**.
* The user will receive an email invitation to access the project.

Once accepted, the user appears in the user list and can immediately access the system based on the assigned role.
{% endstep %}

{% step %}

### Complete the project handover

The project setup is complete when:

* All devices are online and reporting data.
* System behavior has been validated.
* The client has been added with the correct access level.

The client can now monitor their energy system via the Voltmasters platform.
{% endstep %}
{% endstepper %}


# Introduction

This documentation explains how to navigate and operate the **Voltmasters** web platform.

The platform is designed for installers and clients to monitor photovoltaic (PV) installations, batteries, consumption, and grid interaction.

It provides dashboards, device management, incident tracking, and configuration tools.

<figure><img src="/files/Xz2L9fm2YYlPn6403ACZ" alt="Voltmasters EMS: project dashboard"><figcaption><p>The Voltmasters EMS project dashboard</p></figcaption></figure>


# Navigating the Platform


# Logging in

{% stepper %}
{% step %}

### Open the platform

Go to [platform.voltmasters.be](https://platform.voltmasters.be).
{% endstep %}

{% step %}

### Sign in

Enter your credentials on the login page and select **Log in**.
{% endstep %}

{% step %}

### Open your project list

After successful authentication, you are redirected to the **Projects** section.

If you have multiple projects, they are listed here. If you have one project, it opens directly.
{% endstep %}
{% endstepper %}

<figure><img src="/files/m2dz0HbiKJcK6GcUEV1c" alt=""><figcaption><p>Voltmasters EMS login screen</p></figcaption></figure>


# Main navigation

The vertical navigation bar on the left gives access to the main sections:

* **Projects**: lists all projects and sites you are authorised to see. From here, you can open the project dashboard or create a new project. Each project row shows its status, battery level, solar production, and firmware version.
* **Dashboard**: aggregated overview across all projects. It summarises total consumption, injection, and production, and shows how many sites are healthy or in error.
* **Incidents**: shows open incidents across projects, with filters and search. Columns include project name, device, incident type, and description.
* **Support**: opens the Voltmasters support portal, where you can find documentation and contact information.

{% hint style="info" %}
Use the dropdown in the top-left corner of the sidebar to switch between projects. Once you open a project, extra sections appear under **Dashboards**.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/eDjZO1cdUCSWjVixmyAm" alt="Voltmasters EMS: project overview page"><figcaption><p>Voltmasters EMS: project overview page</p></figcaption></figure></div>


# Project Dashboard (EMS)

When you open a project, the default page is the **EMS dashboard**. It gives a real-time, at-a-glance view of the whole installation: how power is flowing right now, how the batteries and PV are being controlled, and the key performance figures for the site.

<figure><img src="/files/Xz2L9fm2YYlPn6403ACZ" alt="Voltmasters EMS: project specific dashboard"><figcaption><p>Voltmasters EMS: project specific dashboard</p></figcaption></figure>

{% hint style="info" icon="lightbulb" %}
Use the **Show details** toggle at the top right to reveal extra information on the dashboard. The page header shows the project name, and the energy-flow diagram shows its last-update time.
{% endhint %}

## Energy flow diagram

At the top, a live diagram shows how power moves through the installation, with the current power (in kW) on each link. It is updated continuously, so you can see at a glance whether the site is importing or injecting, and whether the batteries are charging or discharging. Typical nodes are:

* **Main grid connection**: power exchanged with the grid (import / injection) at the connection point.
* **PV**: current solar production.
* **Wind turbine**: current wind production, when the site has a [wind turbine](/device-integrations/wind-turbines).
* **Batteries**: aggregate battery power (charging or discharging).
* **Residual consumption**: the remaining site consumption not covered locally.

## Key metric cards

A row of cards summarises the live state of the site:

* **Control mode**: the active control strategy (for example *local optimization* / self-supply, or cost optimization) with a short description of what it does. See [Control algorithms](/control-algorithms/cost-optimization) for the underlying logic.
* **Battery power**: the current aggregate battery power, with a recent history chart.
* **Energy prices**: injection and consumption prices (€/MWh) over time. These drive cost-optimized control.
* **Self-sufficiency & self-consumption**: two percentages, namely how much of your consumption is covered by your own generation (self-sufficiency), and how much of your generation you use yourself instead of injecting (self-consumption).
* **Weather forecast**: today's and tomorrow's outlook, to anticipate solar generation. When the site has a wind turbine, the card also shows the expected wind speed.
* **Site status**: whether there are open incidents on the site (green = none). See [Incident Management](/voltmasters-platform/9.-incident-management).
* **Battery SOC**: a gauge with the aggregate state of charge of the batteries (%).

## Latest control decisions

At the bottom, the dashboard lists the most recent decisions the EMS made, grouped per asset, so you can verify the controller is doing what you expect and troubleshoot when it is not:

* **Batteries**: per battery / ESS, the commanded power and its status.
* **PV inverters**: per inverter, the applied setpoint or limit and its status (for example *no limitations* or *target reached*).

Expand a row to see the detail and the reason behind that decision.

{% hint style="info" icon="lightbulb" %}
The EMS dashboard is the project-wide overview. For a deeper look at a single energy stream, use the dedicated dashboards: [Battery (ESS)](/voltmasters-platform/3.-battery-ess-dashboard), [PV](/voltmasters-platform/4.-pv-dashboard), [Consumption](/voltmasters-platform/5.-consumption-dashboard) and [Energy Meter](/voltmasters-platform/6.-energy-meter-dashboard).
{% endhint %}


# Battery (ESS) Dashboard

The **Battery** dashboard displays the state and performance of the energy storage system.

{% hint style="info" %}
In the top-right corner, you can choose your preferred view: each battery separately or all batteries combined.
{% endhint %}

### What this dashboard shows

* **State of charge (SOC)** gauge and bars indicating charge and discharge energy, daily cycles, and available energy.
* **Battery traffic**: stacked bar chart showing charging and discharging power, with a line representing SOC.
* **Component details**: each battery module, such as CBMS1 and CBMS2, with SOC, status, dischargeable energy, current, voltage, and temperature. The DC converter section shows inverter power, voltage, and current.

<div data-with-frame="true"><figure><img src="/files/Cw8MRLNECWirNTuOpZ4N" alt="Voltmasters EMS: ESS dashboard"><figcaption><p>Voltmasters EMS: ESS dashboard</p></figcaption></figure></div>

### Battery details

When you click the battery details, you can view module-specific data such as temperature, voltage, and current.

<div data-with-frame="true"><figure><img src="/files/5Ol4QEmyCVfnkJnr7GKg" alt="Voltmasters EMS: battery rack detail"><figcaption><p>Voltmasters EMS: battery rack detail</p></figcaption></figure></div>

### Frequently asked questions

<details>

<summary><strong>Where can I find how much energy is left in my battery?</strong></summary>

The battery dashboard shows the current **state of charge (SOC)** as a percentage and, where available, the amount of energy still available for discharge in kWh, both as an overall figure and per individual battery unit. The EMS dashboard also displays a summary of the current SOC.

To understand what the algorithm is currently deciding for a specific device, open the **EMS dashboard**. It shows the algorithm's active decision per device, for example whether a battery is being charged, discharged, or held in standby, and why.

</details>

<details>

<summary><strong>Why is my battery still charging or discharging when it should not be?</strong></summary>

Several factors can cause small unexpected power flows:

* A configured **grey zone** around zero kW within which the system does not actively correct.
* Measurement tolerances and a small delay between measuring and adjusting.
* Other active strategies, such as imbalance trading signals or a manual override.
* Loads behind your main meter that are not controlled by the EMS.

If the behaviour is persistent and significant, check the active strategy settings and any manual overrides under **Devices**.

</details>

<details>

<summary><strong>Does the battery still work when the controller is offline?</strong></summary>

When the EMS controller is offline, the battery is no longer under active smart control by Voltmasters. Some devices have a built-in fallback mode, for example a fixed charge power for an EV charger, but price optimisation, grid protection, and strategy-based control are not available while the controller is disconnected. Smart control resumes automatically once the controller comes back online.

</details>


# PV Dashboard

The **PV** dashboard focuses on solar production and market pricing.

### What this dashboard shows

* **Solar production and prediction**: chart compares measured PV output with the forecasted production for the selected period.
* **Injection and consumption prices (EPEX day-ahead)**: chart displays day-ahead market prices for energy injection and consumption. This helps determine when selling to or buying from the grid is profitable.

{% hint style="info" %}
Use the date-range picker to analyse historical PV performance and price trends.
{% endhint %}

<div data-with-frame="true"><figure><img src="/files/AAKND1LpCJU7s16rP0o6" alt="Voltmasters EMS: PV Dashboard"><figcaption><p>Voltmasters EMS: PV Dashboard</p></figcaption></figure></div>

### Frequently asked questions

<details>

<summary><strong>Where can I find how much energy my PV installation has produced?</strong></summary>

Open the **PV dashboard** to see the measured solar production for the selected day, week or month. For a summary of total production over a period, use the **consumption report**, which includes PV production alongside other key energy indicators.

</details>

<details>

<summary><strong>Where can I see how much of my PV production was curtailed?</strong></summary>

Curtailed production is visible directly on the **PV dashboard**. The **Pro dashboard → Algorithm** screen additionally shows the relationship between energy prices and production decisions in detail.

</details>

<details>

<summary><strong>Where can I find the energy prices?</strong></summary>

The PV dashboard shows the EPEX day-ahead injection and consumption prices in a dedicated chart, provided your energy contract supports price-based optimisation. You can select any historical date range to review past prices.

</details>

<details>

<summary><strong>How do I adjust the time period shown in a chart?</strong></summary>

Use the date-range picker or period selector (day, week, month, year) above the chart to change the time period. On Pro dashboard screens, you can also zoom into a specific part of the chart by selecting a region directly on the graph.

</details>


# Consumption Dashboard

The **Consumption** dashboard shows total energy consumption and self-consumption.

### What this dashboard shows

* **Consumption vs. time**: chart of measured and predicted energy usage across the selected period.
* **Summary metrics**: total consumption and the portion of solar energy consumed on-site.

This dashboard is useful for evaluating consumption patterns and the benefits of self-consumption.

<figure><img src="/files/jbHqYyK07gECsqaMXDsP" alt="Voltmasters EMS: consumption dashboard"><figcaption><p>Voltmasters EMS: consumption dashboard</p></figcaption></figure>


# Energy Meter Dashboard

Under **Energy meters**, you can view each meter's import and export behaviour.

### What this dashboard shows

* Each meter has its own panel with import and export graphs and metrics. For example, the **head meter** shows energy drawn from the grid, energy fed back to the grid, and peak power.
* Additional meters are listed in the same way, with their own graphs.

{% hint style="info" %}
Use the dropdown at the top to switch between daily, weekly, or monthly views.
{% endhint %}

<figure><img src="/files/f9eSwIJdhLhCm354Sdse" alt="Voltmasters EMS: energy meter dashboard"><figcaption><p>Voltmasters EMS: energy meter dashboard</p></figcaption></figure>

### Frequently asked questions

<details>

<summary><strong>Where can I find how much energy I have drawn from or injected into the grid?</strong></summary>

Open the **Energy Meter dashboard** and look at the **grid meter** panel. The graph for the grid meter shows both directions: energy drawn from the grid (import) and energy fed back to the grid (export/injection), along with peak power figures. Select daily, weekly or monthly views using the dropdown at the top.

</details>

<details>

<summary><strong>Where can I find data for wind energy production?</strong></summary>

Wind energy is measured via the inverter or meter connected to your wind turbine. Open the **energy meter dashboard** or the device panel for the meter or inverter that your installer has linked to the wind turbine. There is no dedicated "wind turbine" menu item. The correct panel depends on how your installation has been configured.

</details>


# Pro Dashboard

The **Pro** section provides advanced, in-depth dashboards for analysing how your installation is controlled.

Which dashboards appear depends on the project:

* **Algorithm** — always available; shows how the energy management algorithm dispatches resources over time (see [Algorithm dashboard](/voltmasters-platform/7.-pro-dashboard/7.1-algorithm-dashboard)).
* **External control** — shown when the project uses external control / imbalance trading (see [Imbalance trading dashboard](/voltmasters-platform/7.-pro-dashboard/7.2-imbalance-trading-dashboard)).
* **EV charging** — shown when the project has EV chargers connected (see [EV charging dashboard](/voltmasters-platform/7.-pro-dashboard/7.3-ev-charging-dashboard)).

{% hint style="info" %}
These dashboards are rich, interactive views embedded directly in the platform. You stay logged in to Voltmasters — there is no separate login — and you only ever see the dashboards for your own project.
{% endhint %}


# Algorithm dashboard

The **Algorithm** dashboard visualises how the energy management algorithm dispatches resources over time.

The charts plot consumption, PV production, battery power, and the algorithm's charging and discharging decisions, alongside grid power flows and other internal signals.

These views help evaluate algorithm performance and identify areas for improvement.

<figure><img src="/files/3C4rscWWHPfyRFaRqbnm" alt="Voltmasters EMS: pro dashboard - algorithm"><figcaption><p>Voltmasters EMS: pro dashboard - algorithm</p></figcaption></figure>

<figure><img src="/files/geOb7rKQ9EPkrnQgwWq4" alt="Voltmasters EMS: pro dashboard - decision feedback"><figcaption><p>Voltmasters EMS: pro dashboard - decision feedback</p></figcaption></figure>

### Navigating the Pro Dashboard

<details>

<summary><strong>How do I change the time period?</strong></summary>

Use the period selector at the top of the screen to choose a specific day, week, or custom range.

</details>

<details>

<summary><strong>How do I zoom in on a specific part of the graph?</strong></summary>

Click and drag across a section of the graph to zoom in on that time range. Use the reset or zoom-out control to return to the full view.

</details>

<details>

<summary><strong>What can I see on the different charts?</strong></summary>

The charts shown depend on which Pro dashboard you have open:

| Dashboard          | Content                                                                                                                |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------- |
| **Algorithm**      | Consumption, PV production, battery charge/discharge power, algorithm decisions, grid power and other internal signals |
| **Energy trading** | Imbalance prices, battery control set-points and actual vs. requested power (see 7.2)                                  |
| **EV Charging**    | EV charger load curves and session data (if EV chargers are connected)                                                 |

</details>

### Frequently asked questions

<details>

<summary><strong>Where can I find out why my battery charged or discharged at a specific time?</strong></summary>

Open the **Algorithm dashboard** and select the relevant time period. The charts show the relationship between energy prices, PV production, consumption and the algorithm's resulting battery decisions. The **decision feedback** chart shows the active control mode (e.g., self-supply, cost optimisation, max import/export) at each point in time.

</details>


# Imbalance trading dashboard

The **Imbalance Trading** dashboard is available when the imbalance trading module is active for this project.

### What this dashboard shows

* **Battery control set-points** for each battery, alongside actual power and requested power.
* **Control signal chart** showing the active control modes over time (e.g., self-consumption, max import, max export, standby).
* **Grid power** showing measured power exported to or imported from the grid.

Imbalance trading interacts with the EMS algorithm: when the module is enabled, trading signals from the service provider take priority over standard strategy decisions.

<div data-with-frame="true"><figure><img src="/files/VODoudJ9d7p6TXoyRjIn" alt="Voltmasters EMS: imbalance trading dashboard"><figcaption><p>Voltmasters EMS: imbalance trading dashboard</p></figcaption></figure></div>

### Frequently asked questions

<details>

<summary><strong>Where can I find the imbalance prices?</strong></summary>

Imbalance prices are shown in the **Pro dashboard → Energy Trading** screen, but only when imbalance trading is active for your project. You can also view historical imbalance prices on the **Settings → Imbalance Trading** settings page, where a chart displays the prices retrieved from the market.

</details>


# EV charging dashboard

The **EV charging** dashboard visualises the behaviour of the EV chargers connected to the project.

The charts plot the charger load curves and charging-session data over time, so you can see how much power the chargers drew and how charging fits into the wider energy picture (PV production, consumption and the algorithm's decisions).

{% hint style="info" %}
This dashboard is only available when the project has one or more EV chargers connected.
{% endhint %}

### Navigating the dashboard

The EV charging dashboard uses the same controls as the other Pro dashboards:

* Use the **period selector** at the top to choose a specific day, week, or custom range.
* **Click and drag** across a section of a chart to zoom in on that time range; use the reset control to return to the full view.


# Device Management


# Device overview

{% hint style="warning" %}
All device management functionality on this page (adding, removing, and configuring devices) is only available to users with the **Installer** role. Users with the **Customer** role can view the device list but cannot make changes.
{% endhint %}

Select **My devices** to manage devices connected to the project. This page lists each device with its online status and provides options to open settings or remove the device. A search bar helps filter devices by name.

<figure><img src="/files/1tZeYN0kDhy5r4TIZElV" alt="Voltmasters EMS: My devices"><figcaption><p>Voltmasters EMS: My devices</p></figcaption></figure>

### Adding a device

Click **Add devices** to open the device wizard. You will be guided through selecting the device type, manufacturer and model, and configuring the communication settings.

{% hint style="info" %}
To add a device, you must have the **Installer** role on this project.
{% endhint %}

#### Adding a PV inverter

1. Click **Add devices** and select **PV Inverter** as the device type.
2. Select the manufacturer and model.
3. Configure the communication settings (IP address, port, slave ID) according to the inverter's network configuration.
4. Complete the wizard and save.

{% hint style="info" %}
For Growatt inverters: if the inverter communicates via **Modbus TCP**, a ShineMaster data logger is present, so add the device using the ShineMaster adapter. If the inverter uses **RS485**, use an RS485-to-TCP converter such as the EP E300 before adding it.
{% endhint %}

#### Adding a battery system

Battery systems typically consist of two components:

1. First, add the **battery inverter (PCS)**, the power conversion system.
2. Then add the **battery management system (BMS)**, which monitors and protects the battery cells.

Follow the wizard for the specific brand and model. Your installer can provide the exact communication parameters.

#### Adding an energy meter

1. Click **Add devices** and select **Energy meter**.
2. Select the manufacturer and model.
3. Configure the communication settings.
4. If the meter is a sub-meter, link it to the appropriate parent device.

{% hint style="info" %}
To add a **virtual meter**, which is a calculated meter with no physical hardware, select **Virtual** as the manufacturer and follow the wizard. The measurement logic is configured based on your installation.
{% endhint %}

#### Adding an EV charger

1. Click **Add devices** and select **EV charging station**.
2. Select the model and configure the communication settings.
3. After adding, configure the connectors and energy management settings for the station as described in the charger's documentation.

### Supported devices

During the **Add devices** wizard, you can browse all supported manufacturers and models by device type. Supported devices are listed per category (PV inverter, battery, energy meter, EV charger, etc.).

### Important configuration tips

Before finalising your EMS configuration, verify the following:

* The correct **head meter** is selected under project settings.
* The **grid connection type** (single-phase or three-phase) matches the actual installation.
* **Import and export limits** and the corresponding safety margins are set in line with your grid connection contract.
* The **strategy** (cost optimisation or self-supply) matches your energy contract type.
* All key meters and devices have the correct **communication settings** and are responding with live data.


# Device settings

Opening a device reveals several configuration tabs:

* **Settings**: edit basic properties such as name, description, location, and measurement type.
* **Communication**: configure the protocol, for example Modbus TCP/IP, plus the IP address, port, and slave ID used by the device to communicate with the platform.
* **Data**: view a table of real-time parameters and their current values, such as power, consumption, voltage, and currents. Each row shows the parameter name, current value, and timestamp.
* **Load Management**: enable automatic load management for the device. Define a maximum power and hysteresis. The platform will switch off lower-priority devices when the total power exceeds this limit. A table lets you assign priority and choose which sub-devices can be shed.
* **Manual Override**: create manual overrides for controllable modules. Specify the module, override value in kW, and time period. Current and previous overrides are listed below.

These features allow fine-grained control over each meter, PV string, battery, or inverter.

<figure><img src="/files/yaEh3sY4zwunL03xBMfr" alt=""><figcaption><p>Voltmasters EMS: device settings</p></figcaption></figure>

### Manual override

This manual describes how to manually charge or discharge the battery using a manual override in the EMS system.

{% hint style="warning" %}
During a manual override, the algorithm no longer controls the battery automatically. The system only follows the configured setpoint.
{% endhint %}

{% stepper %}
{% step %}

### Navigate to **My Devices**

1. Log in to the EMS portal.
2. Click **My Devices** in the left navigation menu.
   {% endstep %}

{% step %}

### Open the device settings

1. You will see an overview of all devices.
2. Find the desired device in the list.
3. Click the gear icon to the right of the device to open the device settings.
   {% endstep %}

{% step %}

### Open **Manual Override**

1. You are now on the **Device Settings** page.
2. Click the **Manual Override** tab at the top of the page.
   {% endstep %}

{% step %}

### Configure the override

Fill in the following fields:

* **Controllable module**: select the module you want to control, for example charge or discharge power.
* **Override value (kW)**: enter the desired power level:
  * Use a negative value, for example `-20 kW`, to discharge the battery.
  * Use a positive value, for example `+20 kW`, to charge the battery.
* **Period**: select the period for which the override should be active.

Click **Create Override** to save and activate the setting.
{% endstep %}

{% step %}

### Monitor and stop the override

1. Under **Current Overrides**, you can see the active override with its date, module, type, value, and period.
2. To end the override early, click **Stop** next to the relevant override.
3. Previous overrides appear in the **Previous Overrides** section at the bottom of the page.
   {% endstep %}
   {% endstepper %}

{% hint style="warning" %}
When setting the override value, always take into account the applicable import and export limits of your connection. Never set a value that exceeds the permitted import or export limit, to avoid grid overload or violations of your network operator's requirements.
{% endhint %}

{% hint style="info" %}
Once the configured period has elapsed, the algorithm automatically resumes control of the battery.
{% endhint %}


# Incident Management

### Incident overview

The **Incidents** page lists all active and historical incidents for the project. Each entry shows the project, device, incident type and a description. Use the filters to focus on unresolved issues or to search the incident history.

Project-specific incidents can also be accessed via the **Incidents** tab within a project.

### Severity

Each incident has a severity: **Info**, **Warning** or **Critical**. Email notifications are bundled for *Warning* and *Critical* incidents (see the FAQ below). Some controller- and grid-level incidents are treated as **emergency notifications** and are surfaced immediately.

### Frequently asked questions

<details>

<summary><strong>Which incidents trigger a notification?</strong></summary>

Almost all incidents appear in your incident list, including faults, warnings and informational alerts for devices, the EMS controller and grid limits.

**Email notifications** are bundled and delivered for incidents of type *Warning* or *Critical*:

* A first email is sent once the incident has been open for **at least five minutes** (not yet resolved and not previously included in a bundle).
* A follow-up email may be sent approximately **twelve hours** after the incident began, if it is still open at that time.

</details>

<details>

<summary><strong>How long before a notification is sent?</strong></summary>

| Notification channel                  | Timing                                                                      |
| ------------------------------------- | --------------------------------------------------------------------------- |
| Email (Warning or Critical incidents) | After the incident has been open for at least 5 minutes                     |
| Email follow-up                       | Approximately 12 hours after the start of the incident, if still unresolved |

</details>

<details>

<summary><strong>How do I configure notification recipients?</strong></summary>

Under **Settings → Incident Rules**, you can control which users receive notifications for this project.

1. Navigate to **Settings → Incident Rules**.
2. You will see a list of users associated with the project.
3. Toggle the switch next to a user's name to **on** to enable email and portal notifications for that user.
4. Toggle it **off** to stop sending notifications to that user.

This configuration is per project; changes here only affect notifications for the current project.

</details>

<figure><img src="/files/ysTHBZ6HK7AOUeUHINKa" alt="Voltmasters EMS: Incident rules"><figcaption><p>Voltmasters EMS: incident management</p></figcaption></figure>


# Project Settings


# Users

Under **Settings → Users**, you can view and manage all users who have access to the current project. Each user in the list shows their name, email address and assigned role.

### User roles

Every user on a project is assigned one of two roles: **Customer** or **Installer**. The role determines which actions and settings that user can access within the project.

#### Customer

The Customer role is designed for the site owner or end user of the installation. Users with this role can view the key dashboards and data relevant to their project.

Customers can typically:

* View the EMS dashboard, battery dashboard, PV dashboard, consumption dashboard and energy meter data.
* Monitor live energy flows and historical performance.
* View active incidents and alerts.

Customers cannot change configuration settings or add new devices.

#### Installer

The Installer role is intended for the technical manager who configures and maintains the EMS and connected equipment on behalf of the customer. Users with this role have full access to all technical settings and configuration options on the project.

Installers can:

* Open and modify all sections under **Settings**, including general project settings, the EMS controller, API keys and consumption planning.
* Use the **Devices** menu to view the device list, add new devices and open configuration, communication and (where applicable) load management or manual override options for each device.
* Modify grid settings and strategy settings, and configure and monitor imbalance trading where applicable for the project.
* Invite users to the project, manage their roles and disconnect users from the project where the screen permits it.
* Access the subscription or billing screen for the project where permitted (for example to activate a plan or view invoice details).

### Adding a user

1. Navigate to **Settings → Users**.
2. Click **Add users** in the top-right corner.
3. Enter the email address of the person you want to invite.
4. Select a role: **Installer** or **Customer**.
5. Click **Send Invites**.

The invited person receives an email with an activation link. After clicking the link, they can set a password and access the Voltmasters EMS platform and this project.

### Removing a user

To disconnect a user from a project:

1. Navigate to **Settings → Users**.
2. Find the user you want to remove.
3. Click **Disconnect** next to their name.

The user will no longer have access to this specific project. Their account remains active on the platform and they retain access to any other projects they are linked to.

<div data-with-frame="true"><figure><img src="/files/Ct29u7bEzH10ut9nvVTT" alt="Voltmasters EMS: user management"><figcaption><p>Voltmasters EMS: user management</p></figcaption></figure></div>


# Energy trading module

The **Imbalance Trading** module allows your EMS controller to receive control signals from an energy trading party and respond by charging or discharging the battery in line with current market conditions. Supported service providers include Yuso, Trevi and Bee.

### Configuring imbalance trading

{% stepper %}
{% step %}

### Open the settings

Navigate to **Settings → Imbalance Trading**.
{% endstep %}

{% step %}

### Select your provider

Select your service provider from the dropdown list, for example Yuso, Trevi, or Bee.
{% endstep %}

{% step %}

### Enter the provider details

Fill in the fields specific to your provider:

* **Yuso**: Thing Name and Client ID
* **Trevi**: Site ID
* **Bee**: API Key and Customer ID
  {% endstep %}

{% step %}

### Upload certificates if required

Some providers require you to upload certificate files: a client certificate, a private key, and optionally a root certificate.
{% endstep %}

{% step %}

### Save the settings

Save your settings.
{% endstep %}
{% endstepper %}

Once connected, your trading party can send signals to the EMS controller instructing it to charge or discharge the battery based on market conditions.

### What are certificates?

Digital certificate files, typically a client certificate and its associated private key, establish a secure, encrypted connection between your EMS controller and your imbalance trading party. They confirm the identity of your system to the trading platform and protect the data exchange from interception.

{% hint style="info" %}
These are technical connection certificates used for authentication purposes. They have no relation to renewable energy certificates, Guarantees of Origin (GoO), or green power certificates.
{% endhint %}

### Where can I find the certificates?

Your certificates are issued by the energy supplier or trading party for whom you perform imbalance services. Contact your trading party or Voltmasters Support if you have not yet received these files.

### Module overview

All controllable batteries and PV inverters automatically participate in imbalance trading; no per-device selection is needed.

<figure><img src="/files/Cef890xCcNyQyQGUgYca" alt="Voltmasters EMS: Energy trading module"><figcaption><p>Voltmasters EMS: energy trading module</p></figcaption></figure>


# Curtailment

### What is curtailment?

Curtailment is the deliberate reduction of the output power of one or more PV inverters. The Voltmasters EMS applies curtailment when injecting surplus solar energy into the grid would result in a financial loss, for example during periods of negative energy prices on the EPEX spot market.

### How the curtailment algorithm works

Every hour, the EMS evaluates whether PV production should be limited, based on the EPEX spot price and your configured energy contract (consumption cost and injection price).

{% hint style="info" %}
Curtailment decisions are driven by the **net injection price**, not the raw EPEX spot price. The net injection price already includes your injection costs, so the EMS curtails as soon as it turns negative — there is no separate threshold to set. For the exact formulas and a worked example, see [Energy price calculation](/voltmasters-platform/10.-project-settings/10.8-energy-price-calculation).
{% endhint %}

Three situations typically occur:

1. **Injection price is positive**: production can run at full capacity; injecting into the grid is financially beneficial.
2. **Injection price is negative, consumption price is still positive**: production is reduced to cover only local consumption. This prevents injecting energy at a negative price while still avoiding unnecessary grid import.
3. **Both injection and consumption prices are negative**: PV inverters are turned off where possible. The system attempts to import energy from the grid at a favourable price and charge the battery.

When imbalance trading is active, the orders from the trading party take priority. Curtailment is applied on top of those orders where necessary.

### How to enable curtailment for a PV inverter

A PV inverter must be set to **controllable** before the EMS can apply curtailment to it.

1. Navigate to **Devices** and open the settings for the relevant PV inverter.
2. Under the device settings, set the inverter to **Controllable**.

Once set to controllable, the EMS will automatically curtail that inverter when market conditions require it.

### Green power certificates

If your installation generates green power certificates, enter the certificate value under each PV inverter's settings in the field **Green power certificate price per MWh**. The EMS takes this value into account when deciding whether to curtail: if the combined value of the certificate and injection compensation is lower than the relevant threshold, the inverter may be curtailed sooner.

The algorithm uses this value as long as the field is filled in on the inverter's settings.

### Curtailment settings overview

The curtailment settings page shows:

* **Contract parameters**: a summary of your configured consumption and injection scaling factors and costs.
* **Strategy explanation**: a description of how the EMS decides between full production and curtailment for each price scenario.
* **Logging**: a 15-minute table showing the EPEX spot price and the resulting injection and consumption prices for each time slot, allowing you to review past curtailment decisions in detail.

<figure><img src="/files/t2bTw67UQuVVRoIxWH2k" alt="Voltmasters EMS: curtailment dashboard"><figcaption><p>Voltmasters EMS: curtailment dashboard</p></figcaption></figure>

<figure><img src="/files/XhVCDrBIRZV4nHQjdRRL" alt=""><figcaption></figcaption></figure>


# Change log

The **Change log** is found under **Settings → Changelog** and provides a complete audit trail of all configuration changes made to this project and its devices.

### What is recorded?

Each entry in the change log shows:

| Field         | Description                                                                                   |
| ------------- | --------------------------------------------------------------------------------------------- |
| **User**      | The name or account of the person who made the change                                         |
| **Component** | The setting or object that was changed (e.g., a device, a strategy parameter, a grid setting) |
| **Old value** | The value before the change                                                                   |
| **New value** | The value after the change                                                                    |
| **Timestamp** | The date and time the change was made                                                         |

This gives you a full overview of every adjustment made over time, making it easy to trace back when a specific setting was changed and by whom.

### Filtering the log

Use the **date selector** and **search field** at the top of the page to filter entries by time period or keyword.

<div data-with-frame="true"><figure><img src="/files/1mLd2Uo8LOiA6bg0n3Zn" alt="Voltmasters EMS: change log"><figcaption><p>Voltmasters EMS: change log</p></figcaption></figure></div>


# Project settings

Under **Settings → Project Settings → General Settings**, you configure the core parameters that govern how the EMS manages energy for this project. These settings affect grid protection, battery strategy and energy contract optimisation.

Save changes using the **Save** button at the bottom of the page.

### Project details

| Field            | Description                                                              |
| ---------------- | ------------------------------------------------------------------------ |
| **Project name** | The name of the customer or site, as it appears throughout the platform. |
| **Address**      | The physical address where the EMS controller is installed.              |

<figure><img src="/files/Ar6nTiO85Ty0AjWi3aso" alt="Voltmasters EMS: project details"><figcaption><p>Voltmasters EMS: project details</p></figcaption></figure>

### Grid settings

#### Main meter

Select the energy meter that acts as the **main meter** (head meter) for this installation. This is the meter that measures the total exchange with the electricity grid. Reports, dashboard figures and many screens that display grid data use this meter as their primary source.

#### Grid connection type

Configure whether the installation is **single-phase** or **three-phase** to match the actual grid connection at the site. This should correspond to what is stated on your connection document from the grid operator. If in doubt, check your connection document or ask your installer.

#### Import limit

The maximum power the site is permitted or desired to draw from the grid, expressed in kW. The EMS uses this value when deciding how and when to charge the battery or manage other controllable loads.

{% hint style="warning" %}
This value must never exceed your contracted **access capacity** with the grid operator. If the site draws more than the import limit continuously for longer than 15 minutes, a peak tariff surcharge from Fluvius may apply.
{% endhint %}

**Where to find your access capacity**: On [mijnfluvius.be](https://mijnfluvius.be) or in your grid connection contract.

**How to determine the right value**: The import limit is the maximum monthly peak you want to draw from the grid. How low you can set this depends on how much local energy (solar, battery) is available. The lower the import limit, the more the EMS will rely on local generation and storage to avoid exceeding it. There is no fixed formula. This value is site-specific and typically determined in consultation with your installer.

#### Export limit

The maximum power that may be injected into the grid from this installation, expressed in kW.

**Where to find it**: In your connection contract with the distribution network operator (DNO). The export limit is often set to the sum of the capacities of local generation sources or to the grid connection capacity. Always verify this against your current connection contract.

#### Import safety margin

A buffer subtracted from the import limit. The EMS uses the resulting value as its effective target when optimising battery charging and other controllable loads:

**Effective import target = Import limit − Safety margin**

**Example**: If your access capacity is 100 kVA and you want to target a monthly peak of 30 kVA, set the import limit to 100 kVA and the safety margin to 70 kVA. The EMS will then aim to keep grid import below 30 kVA when charging the battery or managing loads.

#### Export safety margin

A buffer subtracted from the export limit. This reduces the risk of accidentally exceeding your export capacity. Works in the same way as the import safety margin, but applies to injection.

<figure><img src="/files/4gdcmDd3FNMsKFvhMffz" alt="Voltmasters EMS: grid settings"><figcaption><p>Voltmasters EMS: grid settings</p></figcaption></figure>

#### Reactive power import and export limits

In addition to the active-power limits above, you can cap the **reactive power** the installation is allowed to exchange with the grid. Both fields are optional and are expressed as a **percentage (0–100%)**. The value is passed straight through to the EMS controller, which keeps the installation inside the configured reactive-power band.

{% hint style="info" %}
These limits follow the **Fluvius telecontrole (Netflex)** convention, so the values you enter here line up with what a grid operator would request over the telecontrole interface. See [How DSO RTU works](/dso-rtu/how-telecontrole-works) for the telecontrole side of reactive-power control.
{% endhint %}

**What reactive power is**

Active power (kW) does the actual work; **reactive power** (kVAr) is the power that continuously flows back and forth to magnetise transformers, motors and cables. It performs no net work, but it loads the grid and shifts the voltage at your connection point. Grid operators therefore limit how much reactive power an installation may draw or inject.

**What the percentage means**

Both fields are a **percentage of the installation's reference power** — the combined rated power of the flexible assets that can deliver reactive power (the battery inverters and PV inverters). A value of `0` means no reactive-power exchange is allowed in that direction; `100` allows the full reference power to be used for reactive power.

| Field                           | Direction                         | Physical meaning                                                                                                                                       |
| ------------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Reactive power import limit** | Grid → installation (consumption) | The maximum **inductive** reactive power the site may draw. Inductive reactive power is *underexcited* and **lowers** the connection-point voltage.    |
| **Reactive power export limit** | Installation → grid (injection)   | The maximum **capacitive** reactive power the site may inject. Capacitive reactive power is *overexcited* and **raises** the connection-point voltage. |

Together the two values define the **allowed reactive-power band** at the connection point: from the export limit on the capacitive side to the import limit on the inductive side. The EMS distributes the required reactive power across the batteries and PV inverters, within each device's apparent-power headroom, and never exceeds these limits.

**Sign convention (Fluvius Netflex)**

Fluvius uses the **consumer reference frame** for both measurements and setpoints:

* **Positive** reactive power flows from the grid into the installation → **inductive** (underexcited) → **lowers** the grid voltage. This is the **import** direction.
* **Negative** reactive power flows from the installation into the grid → **capacitive** (overexcited) → **raises** the grid voltage. This is the **export** direction.

**Example**

Suppose the flexible assets add up to a reference power of 100 kVA, the **import limit** is set to `33` and the **export limit** to `33`:

* The installation may draw at most **33 kVAr inductive** from the grid.
* The installation may inject at most **33 kVAr capacitive** into the grid.
* The EMS keeps the net reactive power at the connection point inside the band **−33% … +33%** at all times.

{% hint style="info" %}
Fluvius recommends keeping reactive-power setpoints around **33%** and not higher, because flexible assets are typically only required to deliver ±33% reactive power (Synergrid C10/11). Consult your installer or grid operator for the correct values for your connection.
{% endhint %}

For the authoritative definition, see the *Q-regeling / Reactief vermogen* section of the [Fluvius Netflex DER technical specification](https://www.fluvius.be/sites/fluvius/files/2026-04/netflex-der-technische-specificatie-klant.pdf).

### Strategy

#### Choosing a strategy

The strategy determines the primary objective of the battery and controllable devices.

| Strategy                          | Description                                                                                                                                                                |
| --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Voltmasters Cost Optimisation** | The EMS buys and sells energy at the most financially favourable times, based on EPEX day-ahead prices and your energy contract. Best suited for dynamic energy contracts. |
| **Self-supply**                   | The battery is used primarily to maximise self-consumption of locally generated energy (PV). Grid interaction is minimised.                                                |
| **No control**                    | The EMS does not actively control the battery or other devices.                                                                                                            |

Consult your installer if you are unsure which strategy best suits your installation and energy contract.

#### Minimum price difference

The minimum margin between the buy and sell price, in €/MWh, that must exist before the EMS will trade energy via the battery. A common starting value is **€20/MWh**. You can adjust this threshold to make the system more or less active in price-based trading.

#### Grey zone

A small power band around zero within which the EMS does not make control adjustments. This prevents constant small corrections and unnecessary wear on controllable equipment. A common value is **0.5 kW**.

#### Peak shaving reserve

A percentage of the battery's state of charge (SOC) that is reserved to keep the grid import below its limit. As long as the SOC is above this reserve, the battery is used freely by the active strategy. Below it, discharging for other purposes is blocked and the reserve is refilled with priority — but the battery may still discharge to hold the grid at its import limit, for any load (general consumption as well as DC fast charging).

Set this value if the installation must never exceed its grid import limit (for example a limited transformer or connection capacity), or if part of the battery capacity must always remain available for DC fast charging. See [peak shaving reserve](/control-algorithms/peak-shaving-reserve) for how it works, and consult your installer for the appropriate value for your specific installation.

#### Battery load balancing strategy

Determines how power is distributed across multiple battery inverters when more than one is present.

| Mode         | Description                                                                                                                                                                                                 |
| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Cascade**  | Battery inverters are activated one by one as more power is needed. The activation order rotates regularly to spread wear evenly across all units.                                                          |
| **Pro Rata** | All batteries operate simultaneously. The required power is distributed proportionally based on each battery's remaining usable capacity (kWh), within the maximum charge and discharge rates of each unit. |

#### Selling via battery injection

When this option is enabled, the EMS is permitted to discharge the battery and inject the stored energy into the grid when the injection price is sufficiently favourable.

Enable this when using the **Cost Optimisation** strategy with a dynamic energy contract, if you want the system to generate revenue by selling stored energy. When disabled, the EMS will not plan or execute injection sales via the battery based on energy prices.

#### Grid charging for injection

When this option is enabled (in addition to *Selling via battery injection*), the EMS may also **buy energy from the grid during cheap periods purely to sell it back** at moments with a high injection price. Purchases are only planned when the injection price beats the purchase price after round-trip losses plus the minimum price difference, so every buy/sell pair is profitable on its own.

Enable this when the spread between cheap hours and injection peaks in your contract is large enough to make pure price arbitrage worthwhile. When disabled, the EMS only sells energy that is already in (or naturally flows into) the battery. See [Selling energy to the grid](/control-algorithms/cost-optimization/selling-energy-to-the-grid) for how the two options work together.

<figure><img src="/files/CD4czVwJ8j4NenvbT05o" alt="Voltmasters EMS: strategy settings"><figcaption><p>Voltmasters EMS: strategy settings</p></figcaption></figure>

### Energy contract

#### Contract type

| Type                            | Description                                                                                                                                                                        |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Dynamic contract**            | Energy prices are settled on the basis of quarter-hour or hourly market prices (EPEX spot). The price moves with the actual market, enabling the EMS to optimise more effectively. |
| **Flexible contract**           | Rates are adjusted periodically (for example monthly or quarterly) but remain fixed within that period.                                                                            |
| **Fixed contract**              | The price is agreed in advance for the entire duration of the contract and does not change with the market.                                                                        |
| **Fixed (Spain — time-of-use)** | A Spanish access tariff (3.0 TD / 6.1 TD / 6.2 TD) with a fixed price per tariff period (P1–P6). Only shown for projects located in Spain.                                         |

{% hint style="info" %}
For a full explanation of each contract type — including the Spanish time-of-use periods and which parameters each type needs — see [Energy contracts](/voltmasters-platform/10.-project-settings/10.11-energy-contracts).
{% endhint %}

#### Consumption scaling factor

A multiplier applied to the measured consumption to better approximate your actual billing by your energy supplier. A value of **1** means no correction is applied. If your supplier uses separate day and night tariffs, use the average of both. A common value is **1** or **1.05**.

#### Consumption cost

The cost you pay for energy drawn from the grid, expressed in €/MWh. Find this value in your energy contract or ask your energy supplier.

If you do not know this value, leave the field blank. The EMS will fall back to default values, but this will reduce the accuracy of the cost optimisation calculations.

#### Distribution cost

The total of all grid costs charged per MWh on your electricity bill, expressed in €/MWh. Find this in your energy contract or on your electricity bill.

{% hint style="info" %}
Add up all per-MWh charges on your bill: transport, distribution, taxes, and levies. Do **not** include the monthly or yearly access capacity charge, as this is a fixed charge not calculated per MWh.
{% endhint %}

If unavailable, leave the field blank and the EMS will use default values.

#### Injection scaling factor

A multiplier applied to the measured injection, equivalent in purpose to the consumption scaling factor but for energy injected into the grid. Find this in your energy contract or ask your supplier. Defaults apply if left blank.

#### Injection cost

The net compensation or cost associated with injecting energy into the grid, expressed in €/MWh. This value can be negative during periods of negative market prices. Find this in your energy contract. Defaults apply if left blank.

<figure><img src="/files/1Mrc0aprL6aBQW7uwJgs" alt="Voltmasters EMS: energy contract settings"><figcaption><p>Voltmasters EMS: energy contract settings</p></figcaption></figure>

### Grid connection references

Your **EAN number** is the unique identifier for your grid connection point. You can find it on your grid connection contract or on your electricity bill.

If you do not know your EAN number, leave this field blank. It has no effect on EMS operation or optimisation and is used for administrative reference only.

<figure><img src="/files/xTG8psWBImQAjmAKdJuf" alt="Voltmasters EMS: grid connection references"><figcaption><p>Voltmasters EMS: grid connection references</p></figcaption></figure>

### Deleting a project

To permanently delete this project, use the **Delete project** option at the bottom of the project settings page.

{% hint style="warning" %}
Deleting a project is permanent and cannot be undone. All associated data, devices, and settings will be removed.
{% endhint %}

<figure><img src="/files/ZtuJUVeJ79Zwz7ysKk5H" alt="Voltmasters EMS: delete project"><figcaption><p>Voltmasters EMS: delete project</p></figcaption></figure>


# Consumption planning

Under **Settings → Project Settings → Consumption Planning**, you can inform the EMS about periods when your expected energy consumption will differ from the automatically predicted value. When the EMS knows in advance that consumption will be higher than usual, it can adjust the battery planning accordingly, for example by building up a larger energy buffer during cheap periods, so that more of the stored energy is available when it is actually needed and less needs to be purchased at higher prices.

{% hint style="info" %}
**kW vs kWh**: Values in this screen are entered in **kW**, which is a measure of **power**, the rate at which energy is used at any given moment. This is different from **kWh**, which measures the total **energy** consumed over a period of time.

**Example**: A process that runs at 50 kW for 2 hours consumes 100 kWh of energy. In this screen, you enter **50 kW** (the power demand during that period) and not the total energy figure.
{% endhint %}

### Entry types

Each entry is either **one-off** or **recurring**:

* **One-off**: applies once, over a fixed start and end date-and-time. Use this for a specific event, such as a production run on a particular afternoon.
* **Recurring**: repeats **every week** on a fixed **day of the week**, between a start and end time. Use this for a regular weekly pattern, such as a shift that runs every Tuesday.

{% hint style="info" %}
When a one-off entry and a recurring entry overlap the same moment, the **one-off entry takes priority**.
{% endhint %}

### How to fill in the consumption planning

Add one entry per planned period. Depending on the entry type, specify:

| Field                | Description                                                                                  |
| -------------------- | -------------------------------------------------------------------------------------------- |
| **Type**             | One-off or recurring                                                                         |
| **Day of the week**  | *(Recurring)* The weekday the entry repeats on                                               |
| **Start / end date** | *(One-off)* The date-and-time the period starts and ends                                     |
| **Start / end time** | The beginning and end of the period                                                          |
| **Amount (kW)**      | The average power demand during this period                                                  |
| **Total (kWh)**      | Calculated automatically from the amount and the duration — shown for reference, not entered |

**Example**: A production run that draws 50 kW on a specific afternoon. Add a **one-off** entry for that date, from 13:00 to 17:00, with an amount of 50 kW. The **Total (kWh)** column then shows 200 kWh (50 kW × 4 h).

### How consumption planning works

During the planned period, the EMS **replaces its standard consumption prediction** with the value you have entered. The battery and other controllable components are prepared in advance to meet the demand, reducing the risk of exceeding the import limit or drawing unnecessary power from the grid at an unfavourable price.

{% hint style="info" %}
Changes to consumption planning entries are recorded in the project [change log](/voltmasters-platform/10.-project-settings/10.4-change-log).
{% endhint %}

### How to delete a consumption planning entry

To remove an entry, delete the corresponding row on the consumption planning screen and save. The EMS will revert to its standard consumption forecast for that time period.


# EMS controller

Under **Settings → Project Settings → EMS Controller**, you can view and manage the operational controls for the physical EMS controller installed at the site.

### Advanced logging

Advanced logging stores additional technical data on the controller for diagnostic purposes. This data is used by Voltmasters Support during troubleshooting or investigations.

There is no download button available for end users. If you require an export of this data, contact Voltmasters Support directly.

### Restarting the controller

You can restart the EMS controller from within Voltmasters when a short interruption of control and device communication is acceptable.

<details>

<summary><strong>Will any data be lost?</strong></summary>

Your historical energy data in Voltmasters is normally preserved during a restart. Live control of devices is temporarily interrupted until the controller comes back online.

</details>

<details>

<summary><strong>How long does a restart take?</strong></summary>

Typically one to a few minutes, depending on your hardware and network connection.

</details>

<details>

<summary><strong>How do I know the restart is complete?</strong></summary>

Live values return to normal behaviour, any "controller offline" alert disappears, and the project dashboard status is correct again.

</details>

### Updating the controller

Software updates load new firmware onto the EMS controller. Where possible, plan updates outside of peak usage times.

<details>

<summary><strong>Will any data be lost?</strong></summary>

Like a restart, your energy history in Voltmasters is generally preserved. Expect a short interruption of control during the update process.

</details>

<details>

<summary><strong>How long does an update take?</strong></summary>

This depends on the download speed and installation time. Voltmasters Support can provide an estimate for your specific situation.

</details>

<details>

<summary><strong>How do I know the update is complete?</strong></summary>

Compare the firmware version number shown in the controller section of the project settings before and after the update. When the version number has changed, the update has been applied.

</details>

<details>

<summary><strong>Can I install a previous software version?</strong></summary>

The controller settings include a field to specify a target version. Leave this blank to use the standard version distributed by Voltmasters. Manually specifying an older version is best left to a specialist.

</details>

<details>

<summary><strong>Are automatic updates available?</strong></summary>

There is no automatic update toggle available for end users. Voltmasters controls which updates are distributed and when. Contact Voltmasters Support with any questions about update schedules.

</details>

### Troubleshooting: controller frequently offline

If your EMS controller regularly shows as offline in the platform, this typically indicates a network connectivity problem on your local network.

{% hint style="info" %}
Steps you can try yourself:
{% endhint %}

1. **Restart the router**: power it off, wait 30 seconds and power it back on.
2. **Check all cable connections**: verify that the network cables on the router and the controller are firmly seated.
3. **Check whether neighbours have the same problem at the same times**. If yes, the issue is likely with your internet provider rather than your local network.

If none of the above helps, have your network cabling and routers checked by a qualified network technician.

For detailed network requirements, including ports, domains, and DNS configuration, see [Internet and network](/getting-started/ems-controller-installation/internet-and-network).


# Energy price calculation

The EMS never bases its decisions on the raw EPEX spot price directly. It first converts EPEX into the **net injection price** and the **net consumption price** using the contract parameters you configured. These net prices drive every price-based decision in the system, including [curtailment](/voltmasters-platform/10.-project-settings/10.3-curtailment) and [cost optimization](/control-algorithms/cost-optimization).

{% hint style="info" %}
The formulas below apply to a **dynamic** contract. Fixed, flexible and Spanish time-of-use contracts set the net prices differently — see [Energy contracts](/voltmasters-platform/10.-project-settings/10.11-energy-contracts) for how each contract type is priced.
{% endhint %}

### Supported countries and price source

Day-ahead spot prices are sourced from the **ENTSO-E Transparency Platform** for the project's **bidding zone**. The zone is derived automatically from the project's country. The following countries are supported:

| Country       | Bidding zone | Local time       |
| ------------- | ------------ | ---------------- |
| Belgium       | BE           | Europe/Brussels  |
| Netherlands   | NL           | Europe/Amsterdam |
| Luxembourg    | LU           | Europe/Brussels  |
| France        | FR           | Europe/Paris     |
| Germany       | DE           | Europe/Berlin    |
| Austria       | AT           | Europe/Vienna    |
| Switzerland   | CH           | Europe/Zurich    |
| Great Britain | GB           | Europe/London    |
| Poland        | PL           | Europe/Warsaw    |
| Spain         | ES           | Europe/Madrid    |
| Italy         | IT           | Europe/Rome      |

{% hint style="info" %}
Prices are retrieved in 15-minute resolution. If a project's country is not in this list, the EMS falls back to the Belgian bidding zone for its day-ahead prices.
{% endhint %}

### The formulas

Both prices are expressed in €/MWh:

```
Injection price   = (B × EPEX) − injection cost − injection distribution cost
Consumption price = (A × EPEX) + consumption cost + consumption distribution cost
```

Where:

* **A** = consumption scaling factor
* **B** = injection scaling factor
* The costs are your fixed per-MWh contract components.

The **injection price** is what you actually earn (or pay) per MWh when you inject: it is the EPEX price *minus* the costs that come with injecting. Because those costs are subtracted, the injection price turns negative before EPEX itself does. The **consumption price** is what you actually pay per MWh imported: the EPEX price *plus* your consumption costs.

### Contract parameters

You configure the following parameters for your project. They correspond one-to-one with the terms in the formulas above:

| Parameter                     | Symbol | Effect                                   |
| ----------------------------- | ------ | ---------------------------------------- |
| Consumption scaling factor    | A      | Multiplies EPEX in the consumption price |
| Consumption cost              | —      | Added to the consumption price           |
| Consumption distribution cost | —      | Added to the consumption price           |
| Injection scaling factor      | B      | Multiplies EPEX in the injection price   |
| Injection cost                | —      | Subtracted from the injection price      |
| Injection distribution cost   | —      | Subtracted from the injection price      |

### The break-even point

{% hint style="warning" %}
The injection and consumption costs are **already included** in the net prices — you do not set a separate threshold anywhere. The break-even EPEX price for injection is simply the sum of your injection costs:

```
Break-even EPEX = injection cost + injection distribution cost
```

Above that EPEX price the net injection price is positive (injecting pays); below it the net injection price is negative.
{% endhint %}

### Worked example

With an injection scaling factor **B = 1**, injection cost **€5/MWh** and injection distribution cost **€1/MWh**:

```
Injection price = (1 × EPEX) − 5 − 1 = EPEX − 6
```

* The break-even EPEX price is **6 €/MWh** (5 + 1). At exactly EPEX 6 the net injection price is 0.
* At an EPEX price of **4.01 €/MWh**, the net injection price is `4.01 − 6 = −1.99 €/MWh`. This is negative — injecting would cost you €1.99 per MWh.
* The injection price only becomes positive once EPEX rises **above 6 €/MWh**.

The `−1.99` in this example is not a setting or a threshold — it is the net injection price *at that moment's EPEX*. The value that price-based decisions compare against is the injection price crossing **zero**, which for this contract corresponds exactly to EPEX crossing **6 €/MWh**.

### Where these prices are used

* [**Curtailment**](/voltmasters-platform/10.-project-settings/10.3-curtailment): PV production is limited when the net injection price is negative.
* [**Cost optimization**](/control-algorithms/cost-optimization): the battery is charged and discharged based on the net consumption and injection prices across the forecast.


# API keys

Under **Settings → Project Settings → API Keys**, you can create and manage API keys that allow external software to communicate with the Voltmasters API for this project.

### What is an API key?

An API key is a secure access token that lets your own software, scripts or third-party tools, such as home automation systems, reporting tools or custom integrations, interact with the Voltmasters API for this specific project. Each key is scoped to this project and grants the permissions needed to read or write data via the API.

### Creating an API key

1. Navigate to **Settings → Project Settings → API Keys**.
2. Click **Create API key**.
3. Enter a recognisable name for the key, for example `home-automation` or `reporting-script`.
4. The secret portion of the key is displayed **only once**, at the moment of creation. Copy it immediately and store it in a secure location. It cannot be retrieved again.

{% hint style="warning" %}
If you lose the secret, you will need to create a new API key and update any integrations that use the old one.
{% endhint %}

### API documentation

Click the **API Documentation** button to open the full reference for all available API endpoints, parameters and usage examples. This documentation is hosted on the Voltmasters documentation portal.


# Telecontrole

Under **Settings → Project Settings → Telecontrole**, you configure the grid operator or aggregator that sends remote control signals to your installation via the telecontrole protocol.

When **Fluvius** is selected as provider, the form also offers the **Fall-Back Flex** option for connections in congestion areas. See [Fall-Back Flex (Fluvius)](/dso-rtu/fall-back-flex).

### Frequently asked questions

<details>

<summary><strong>How do I know who my telecontrole provider is?</strong></summary>

Your telecontrole provider is stated in your contract with your grid operator or aggregator. Your installer sets the correct provider name in the list during commissioning.

</details>

<details>

<summary><strong>My provider is not in the list, what should I do?</strong></summary>

If your provider does not appear in the dropdown, contact Voltmasters Support by email or phone. A missing provider must first be added to the platform before it can be selected.

</details>

For technical background on how telecontrole works and installation instructions for the IO module, see the [Telecontrole](/dso-rtu/telecontrole) section.


# Energy contracts

The energy contract tells the EMS how the market translates into the prices it actually plans against. The EMS never acts on a raw market price directly: your contract determines how each quarter-hour becomes a **net consumption price** (what you pay to import) and a **net injection price** (what you earn or pay to inject). Those two net prices drive every price-based decision, including [curtailment](/voltmasters-platform/10.-project-settings/10.3-curtailment) and [cost optimization](/control-algorithms/cost-optimization).

You configure the contract under **Settings → Project Settings → General Settings → Energy contract** (see [Project settings](/voltmasters-platform/10.-project-settings/10.5-project-settings)).

{% hint style="info" %}
When you save a new contract, the platform recalculates the upcoming energy prices for this project. Prices already in the past keep the values they were calculated with, so a chart can show market-following prices up to the switch and the new contract's prices afterwards.
{% endhint %}

### Contract types

| Type                            | How prices are determined                                                                                                                                                                                                                                                         |
| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Dynamic**                     | Follows the quarter-hourly / hourly day-ahead market (EPEX spot). Net prices are derived from the market price via scaling factors and fixed cost components. Best suited for the [Cost Optimisation](/voltmasters-platform/10.-project-settings/10.5-project-settings) strategy. |
| **Flexible**                    | A fixed price per MWh that your supplier revises periodically (for example monthly or quarterly). Between revisions it behaves like a fixed contract.                                                                                                                             |
| **Fixed**                       | A single price per MWh agreed in advance for the whole contract and independent of the market.                                                                                                                                                                                    |
| **Fixed (Spain — time-of-use)** | A Spanish access tariff (3.0 TD / 6.1 TD / 6.2 TD) with a different fixed price per **tariff period** (P1–P6). Only available for projects located in Spain.                                                                                                                      |

### Dynamic

The net prices are computed from the market price with your scaling factors and per-MWh costs. The exact formulas and a worked example are documented in [Energy price calculation](/voltmasters-platform/10.-project-settings/10.8-energy-price-calculation). If you leave a parameter blank, the EMS falls back to default values.

### Fixed and Flexible

You enter a single **consumption price** and **injection price** in €/MWh. Every quarter-hour uses the same value, so the price line is flat and independent of the market. A *Flexible* contract works identically; re-enter the price whenever your supplier revises it.

### Fixed (Spain — time-of-use)

In Spain, fixed tariffs are not a single price. Under CNMC Circular 3/2020 (Iberian Peninsula), every quarter-hour is classified into one of six **tariff periods**, from **P1** (most expensive) to **P6** (cheapest), and each period has its own price. This contract type lets you enter one fixed price per period; the platform automatically applies the correct period to each quarter-hour based on the date and time.

{% hint style="info" %}
This contract type only appears in the dropdown for projects whose country is set to Spain.
{% endhint %}

You enter **six prices** (€/MWh), one per period P1–P6. The period that applies to a given quarter-hour depends on three factors, evaluated in Spanish local time (Europe/Madrid):

**1. Day type**

* **Weekends and national holidays** → the whole day is **P6**.
* **Working days** → the period depends on the season and the hour (below).

**2. Time block (working days)**

| Block        | Hours                                    | Result                         |
| ------------ | ---------------------------------------- | ------------------------------ |
| **Peak**     | 09:00–14:00 and 18:00–22:00              | Peak period for the season     |
| **Shoulder** | 08:00–09:00, 14:00–18:00 and 22:00–24:00 | Shoulder period for the season |
| **Valley**   | 00:00–08:00                              | Always **P6**                  |

**3. Season (by month)**

| Season      | Months                            | Peak block → | Shoulder block → |
| ----------- | --------------------------------- | ------------ | ---------------- |
| High        | January, February, July, December | **P1**       | **P2**           |
| Medium-high | March, November                   | **P2**       | **P3**           |
| Medium      | June, August, September           | **P3**       | **P4**           |
| Low         | April, May, October               | **P4**       | **P5**           |

In practice this means a working day uses **three** prices — the night/valley (P6) plus the season's peak and shoulder period — while a weekend or national holiday uses a **single** price (P6).

The national holidays that count as all-day P6 are the fixed-date Spanish electrical holidays:

| Date        | Holiday               |
| ----------- | --------------------- |
| 1 January   | New Year's Day        |
| 6 January   | Epiphany              |
| 1 May       | Labour Day            |
| 15 August   | Assumption            |
| 12 October  | National Day          |
| 1 November  | All Saints' Day       |
| 6 December  | Constitution Day      |
| 8 December  | Immaculate Conception |
| 25 December | Christmas Day         |

{% hint style="warning" %}
Movable feasts without a fixed calendar date (Good Friday, Holy Thursday, etc.) and regional/local holidays are **not** treated as P6 — they follow the normal working-day rules, in line with the CNMC fixed-date definition.
{% endhint %}

**Injection.** Under these Spanish contracts, energy is not sold back to the grid, so the **injection price is always 0**.

{% hint style="info" %}
The underlying spot data for Spain is sourced from the ENTSO-E transparency platform (the Spanish bidding zone), which reflects the same day-ahead market outcome as OMIE. For a *fixed time-of-use* contract the spot price is not used for pricing — only the tariff period of each quarter-hour matters.
{% endhint %}

### Where these prices are used

* [**Curtailment**](/voltmasters-platform/10.-project-settings/10.3-curtailment): PV production is limited when the net injection price is negative.
* [**Cost optimization**](/control-algorithms/cost-optimization): the battery is charged and discharged based on the net consumption and injection prices across the forecast.
* [**Energy price calculation**](/voltmasters-platform/10.-project-settings/10.8-energy-price-calculation): the formulas that turn a dynamic contract's market price into net prices.


# Subscription & Billing

Under **Subscription**, accessible via the project menu for accounts with the appropriate permissions, you can manage the Voltmasters subscription for this project and view your invoice history.

<figure><img src="/files/BOK3fIFvazQMI1jBirpX" alt="Voltmasters EMS: subscription &#x26; billing"><figcaption><p>Voltmasters EMS: subscription &#x26; billing</p></figcaption></figure>

### Frequently asked questions

<details>

<summary><strong>No active subscription</strong></summary>

If your project shows a message indicating that there is no active subscription, no Voltmasters subscription has yet been linked to your environment. Follow the steps below to activate one.

If you believe a subscription should already be active, contact Voltmasters Support. It is possible that a subscription exists on the back end but has not yet been linked to your project.

</details>

<details>

<summary><strong>How do I activate a subscription?</strong></summary>

If your account has permission to activate a subscription:

1. Navigate to **Subscription** or **Pricing / Activate** within the project.
2. Follow the on-screen steps to select and activate a plan.

If the option is not visible or you receive an error, your account may not have the required permissions. Contact Voltmasters Support for assistance.

</details>

<details>

<summary><strong>How does billing work?</strong></summary>

Invoices are generated and stored under **Billing history** within the Subscription section. Payment is processed according to the terms agreed in your contract with Voltmasters, either by bank transfer or by direct debit.

</details>

<details>

<summary><strong>What does price per kW mean?</strong></summary>

Some subscription products are priced per installed kilowatt of a specific component (for example, per kW of battery capacity). The on-screen wizard explains what to enter for the chosen product.

</details>

<details>

<summary><strong>Where is the invoice sent?</strong></summary>

Invoices are sent to the email address and postal address stored under **Billing details** in the subscription settings. Make sure these details are up to date to ensure you receive your invoices correctly.

</details>

<details>

<summary><strong>Can I view prices and invoice amounts?</strong></summary>

With access to the subscription and billing screen, you can view your invoices and the amounts stated on them. What is visible depends on the permissions assigned to your account.

</details>

<details>

<summary><strong>Why do I need to enter my bank account number?</strong></summary>

Your bank account number is required for payment by direct debit or, where applicable, for outgoing transfers, in accordance with the payment terms agreed in your contract with Voltmasters.

</details>


# Cost optimization

Voltmasters' price-based control algorithm: plan the battery around dynamic energy prices to minimize cost.

**Cost optimization** is Voltmasters' price-based control algorithm. It minimizes the **energy cost** of the installation by deciding, every control cycle, how to charge and discharge the battery, based on **forecasted energy prices** and **forecasts of PV production and consumption**.

## How it works

Every control cycle the algorithm:

* **Looks ahead** over the forecast horizon at the dynamic (day-ahead) prices, the expected PV production and the expected consumption.
* **Plans the battery** so energy is stored when it is cheap (or from PV surplus) and used, or injected, when it is expensive. This forward plan is the [battery schedule](/control-algorithms/cost-optimization/battery-schedule).
* **Only acts when it pays off:** charging and discharging are planned only when the price difference is large enough to outweigh the battery's round-trip losses (a configurable minimum price difference).
* **Respects the limits:** the battery's minimum/maximum state of charge and the grid connection limits (maximum injection and consumption).

The detailed plan, the event types and a worked example are described on the [Battery schedule](/control-algorithms/cost-optimization/battery-schedule) page. The rest of this page explains **how the algorithm reaches those decisions**.

## Two loops: planning and acting

Cost optimization runs as **two cooperating loops** that share one artefact: the [battery schedule](/control-algorithms/cost-optimization/battery-schedule).

* The **planning loop** looks at the whole forecast horizon and works out the cheapest charge/discharge plan. It is the "brain". The plan is recomputed regularly, at every new 15-minute slot and whenever a fresh forecast arrives, so it always reflects the latest prices, production and the real battery state.
* The **control loop** runs every control cycle (about once per second). It reads the single schedule entry that covers *now*, turns it into concrete battery, PV and EV setpoints, and adapts those to live measurements and limits. It is the "hands".

```mermaid
flowchart LR
    subgraph inputs["Forecasts and live state"]
        P["Day-ahead prices"]
        PV["PV production forecast"]
        C["Consumption forecast"]
        B["Battery state of charge"]
    end

    GEN["Generate battery schedule<br/>planning loop"]
    SCHED[("Battery schedule")]
    READ["Read entry for now<br/>control loop, approx 1s"]
    SET["Translate to battery / PV / EV setpoints"]
    HW["Battery, PV, grid connection"]

    P --> GEN
    PV --> GEN
    C --> GEN
    B --> GEN
    GEN --> SCHED
    SCHED --> READ
    READ --> SET
    SET --> HW
    HW -. "measured actuals" .-> GEN
```

Splitting the work this way means the expensive look-ahead optimization does not have to run every second, while the fast control loop can still react to reality between plans.

## What the algorithm needs

The plan is built from a mix of **forecasts**, **live measurements** and **project configuration**:

| Input                                                          | Where it comes from                          | Role in the algorithm                                                                        |
| -------------------------------------------------------------- | -------------------------------------------- | -------------------------------------------------------------------------------------------- |
| **Day-ahead consumption & injection prices** (per 15-min slot) | Forecast provider (dynamic/day-ahead market) | Tells the plan *when* energy is cheap to buy and *when* it is lucrative to sell              |
| **PV production forecast**                                     | Forecast provider (weather-based)            | Tells the plan when free/cheap solar energy is available to store                            |
| **Consumption forecast**                                       | Forecast provider                            | Tells the plan when the site will need energy: the *deficits* worth covering                 |
| **Battery state of charge**                                    | Live measurement per battery                 | The starting point of the projected SoC trajectory                                           |
| **Battery limits & efficiency**                                | Project configuration                        | Min/max SoC, charge/discharge rate, rated power, round-trip efficiency                       |
| **Grid connection limits**                                     | Project configuration                        | Maximum import (charging headroom) and maximum export (injection cap)                        |
| **Minimum price difference**                                   | Project configuration                        | The spread a charge/discharge pair must beat to be worth the loss and wear                   |
| **Battery injection sales**                                    | Project configuration                        | Whether selling stored energy back to the grid is allowed at all                             |
| **Grid charging for injection**                                | Project configuration                        | Whether the planner may also buy cheap grid energy purely to sell it back at injection peaks |

## The core idea: price arbitrage within the limits

At heart the algorithm does **energy arbitrage**: store energy while it is cheap (from PV surplus or low-priced grid hours) and release it while it is expensive, either by covering the site's own consumption or by injecting it back to the grid for revenue.

Two things keep this honest:

* **Round-trip losses.** Energy lost on the way into and out of the battery means a stored kilowatt-hour delivers less than a full kilowatt-hour. The plan sizes every charge and discharge using the battery's round-trip efficiency.
* **The minimum price difference.** A charge/discharge pair is only planned when the price gap between the cheap slot and the expensive slot clears a configurable threshold. This covers the round-trip loss and battery wear, and stops the battery from cycling for a marginal gain.

Everything the optimizer plans must also fit inside the **state-of-charge bounds** and the **grid connection limits**; those constraints are threaded through every step below.

## Building the schedule, step by step

The planning loop turns the forecast horizon into a battery schedule through a fixed pipeline. Each stage adds or refines plans on top of the previous one:

```mermaid
flowchart TD
    A["Forecast horizon<br/>prices · PV · consumption"] --> S1
    S1["1 · Energy sources per slot<br/>PV overshoot + grid headroom"] --> S2
    S2["2 · Identify deficit slots<br/>consumption exceeds PV"] --> S3
    S3["3 · Plan charging for deficits<br/>cheapest affordable source first"] --> S35
    S35["3.5 · Negative-price charging<br/>charge while price is below zero"] --> S375
    S375["3.75 · Injection discharge<br/>sell at a high injection price"] --> S38
    S38["3.8 · Grid charge for injection<br/>buy cheap to sell at the peaks"] --> S3875
    S3875["3.875 · Non-controllable PV storage<br/>store unavoidable PV surplus"] --> S46
    S46["4–6 · Build entries and project SoC<br/>charge, discharge, idle"] --> OUT[("Battery schedule")]
```

1. **Energy sources per slot.** For every slot the algorithm works out how much energy *could* be stored there and at what price: the **PV overshoot** (solar above the local consumption, energy that would otherwise be exported, priced at the injection price) and the **grid headroom** (how much can still be imported under the grid limit, priced at the consumption price). Both are capped so the combined charging power never exceeds what the batteries can absorb.
2. **Identify deficit slots.** Slots where forecast consumption is higher than forecast PV are **deficits**: the site will need to draw energy. These are the slots worth covering from the battery, and the expensive ones are the prime targets.
3. **Plan charging for deficits.** This is the heart of the optimizer. Walking the deficits from the most expensive down, it searches earlier slots for the **cheapest charging sources whose price is at least the minimum price difference below the deficit's price**, so only pairs that clearly pay off are planned. PV is preferred over grid (it is cheaper); grid sources are taken cheapest-first. Every allocation is checked against the projected SoC so the battery is never planned beyond its capacity, and the matching discharge is booked into the deficit slot. Three guards decide when a deficit gets **stored** energy at all:
   * **Price floor.** A deficit priced below the minimum price difference is never served from the battery — even a free recharge could not leave the required margin — so it simply imports from the grid.
   * **No wasteful round trips.** A discharge the battery would refill right afterwards (cheap charging or solar inflow just after it) is only planned when the deficit's price also clears the **recharge price** plus the margin. This stops the battery from alternating between charging and discharging inside a cheap price window.
   * **Stored energy goes to its most valuable claim.** When storage is contended, a deficit that can be **recharged affordably from a cheap window** before it charges from that window first, but only when the stored energy it releases has a genuinely better use: a later deficit that *cannot* recharge affordably, or a profitable injection sale (one that no cheap window can serve instead). Otherwise the deficit keeps the storage-first order.
4. **Negative-price charging.** When the consumption price drops **below zero**, you are paid to consume, so the algorithm plans extra charging during those slots, while reserving room for PV that cannot be curtailed, to avoid having to *pay* to inject it later.
5. **Injection discharge.** When selling stored energy is enabled, the algorithm finds slots with an attractive **injection price** (positive and above the minimum price difference) and plans discharges there, **highest price first**. It never discharges below the reserve, and never within the **last four hours of the horizon** (too uncertain to commit storage to). An injection can also be added as a *bonus* on top of an existing deficit discharge. Stored energy is matched to the sales that genuinely need it: candidates that a **cheap charging window** can serve instead (typically peaks on a later day) defer to window purchases, so the current peak — which nothing cheaper can reach — sells first and at full power.
6. **Grid charge for injection.** When the **grid charging for injection** option is also enabled, the algorithm buys cheap grid energy purely to sell it back: for every attractive injection slot with unfilled discharge room it plans purchases at earlier slots whose price clears the round-trip break-even, sized to exactly deliver the extra sale (see [Selling energy to the grid](/control-algorithms/cost-optimization/selling-energy-to-the-grid)).
7. **Non-controllable PV storage.** PV that physically cannot be curtailed, and would otherwise be exported cheaply, is captured and re-allocated to the **most valuable injection slots** instead of being spilled.
8. **Build entries and project SoC.** The plans become timed schedule entries (charge, discharge or idle), each with an **action** and a **goal** (see [Battery schedule](/control-algorithms/cost-optimization/battery-schedule)). Remaining slots become idle, or *compensate PV surplus* where free solar still flows into the battery. The state of charge is projected forward across the whole horizon so the complete plan stays inside the min/max bounds, and the entries are sorted by time.

{% hint style="info" %}
When the plan is stored, entries for slots that have already started are **preserved** and merged with the fresh plan, and entries older than 14 days are pruned. This keeps a record of what was actually planned and executed for each slot.
{% endhint %}

## What keeps the plan feasible

Several mechanisms run through the pipeline to keep the schedule physically sound and stable:

* **Projected SoC trajectory.** The algorithm simulates the battery's energy level slot by slot. Charging is never planned above the **maximum SoC**, and discharging never brings the projected SoC below the **effective minimum** (the configured minimum SoC plus any reserve).
* **Recharge segments.** The horizon is split into independent budgets at major PV-charging periods. A deficit *after* a sunny afternoon cannot spend energy that belongs to deficits *before* it. This is what keeps multi-day plans stable instead of shifting around on every regeneration.
* **Grid limits everywhere.** Charging power per slot is capped by the import headroom that is still free under the grid limit; injection and discharge are capped by the export limit. Both PV export and battery injection share the same export budget.
* **Reserves.** Energy set aside by the [peak shaving reserve](/control-algorithms/peak-shaving-reserve) is treated as off-limits for ordinary discharge, so the plan never spends it. It stays available to hold the grid at its import limit, and is refilled with priority when it runs low.

## From plan to setpoint: the control cycle

The schedule expresses **intent**; the control loop turns it into **action**. Every cycle the cost-optimization algorithm looks up the entry for *now*, reads its **action type** and planned power, and converts that into a setpoint, always clamped to the live state and the grid limits.

```mermaid
flowchart TD
    N["This control cycle"] --> LOOK["Look up schedule entry for now"]
    LOOK --> AT{"Action type?"}
    AT -->|charge_at_max_power| CMAX["Charge at max power<br/>capped by grid import + charge rate"]
    AT -->|follow_scheduled_power| CFOL["Follow planned power<br/>capped by limits"]
    AT -->|compensate_pv_surplus| CPV["Charge with live PV surplus only"]
    AT -->|compensate_production_deficit| DDEF["Discharge to cover the live deficit"]
    AT -->|idle| IDLE["No battery action"]
    CMAX --> APPLY
    CFOL --> APPLY
    CPV --> APPLY
    DDEF --> APPLY
    IDLE --> APPLY
    APPLY["Apply setpoints<br/>respect SoC and grid limits"] --> REC["Record actual vs planned energy"]
```

How each action behaves at runtime:

| Action type                     | What the control loop does                                                                     |
| ------------------------------- | ---------------------------------------------------------------------------------------------- |
| `charge_at_max_power`           | Charge at the maximum power the grid import headroom and charge rate allow                     |
| `follow_scheduled_power`        | Follow the exact planned power (grid charging, or discharging to inject), capped by the limits |
| `compensate_pv_surplus`         | Charge with the **live** PV surplus only, no grid charging                                     |
| `compensate_production_deficit` | Discharge just enough to cover the **live** production deficit                                 |
| `idle`                          | Leave the battery alone                                                                        |

In the same cycle the algorithm also sets the **controllable loads**, the **EV-charger allocation**, and the **PV-inverter setpoints** (curtailing only when needed to respect the export limit).

Because the cycle works from live measurements, it **absorbs forecast error automatically**: the `compensate_*` actions size themselves from what is actually happening right now, while `follow_scheduled_power` and `charge_at_max_power` follow the plan within the limits.

### Closing the loop

After each 15-minute slot completes, the controller records how much was actually charged (from PV and from grid) and discharged, and compares it against the plan. If less energy was stored than planned, a **shortfall adjustment** removes the shortfall from the most expensive target slots first. The next regeneration then re-plans from the **true** battery state, so the strategy continuously self-corrects as reality diverges from the forecast.

## Worked example: evening high prices

The chart below shows the **evening high prices** scenario. Electricity is cheap and sunny during the day and becomes much more expensive in the evening peak.

<figure><img src="/files/Qfd20Gj7Fp3XnYpwtiif" alt="Cost optimization, evening high prices scenario"><figcaption><p>The optimizer charges during the cheap, sunny daytime and discharges into the expensive evening peak, buying low and using high.</p></figcaption></figure>

Reading it against the pipeline: step 2 marks the evening as a string of expensive **deficit slots**; step 3 plans the daytime **charging** (mostly stored PV surplus) to cover them, because the day-to-evening price spread clears the minimum price difference; and the control loop then **discharges** through the peak, with the projected SoC climbing to its maximum during the day and falling back overnight. The full event-by-event breakdown of this scenario is on the [Battery schedule](/control-algorithms/cost-optimization/battery-schedule) page.

## Relationship to an external signal

Cost optimization is a **local** strategy. When an [external signal](/external-signal/external-signal) partner is actively steering the installation, that partner takes precedence and cost optimization does not drive the battery. When no external signal is active, or the partner is on standby, the battery follows the cost-optimization schedule.


# Battery schedule

The plan the EMS makes for the battery under the cost-optimization strategy, when no external signal is active.

The **battery schedule** is the forward-looking plan the EMS makes for the battery: when to **charge**, when to **discharge**, and when to stay idle over the coming period.

It is produced when both of the following are true:

* the project's control strategy is set to **Cost optimization**, and
* **no external signal is active**, that is, no [external partner](/external-signal/external-signal) is currently steering the installation.

{% hint style="info" %}
If an external signal partner is actively steering the battery, that signal takes precedence and the battery schedule does not apply. When the partner is on standby, the battery falls back to the cost-optimization schedule.
{% endhint %}

## What it optimizes for

Under the cost-optimization strategy, the schedule aims to **minimize the energy cost** of the installation: energy is stored when it is cheap and used when it is expensive.

To build the plan, the EMS combines:

* **Forecasted energy prices**: the dynamic (day-ahead) electricity prices for the project.
* **Forecasted PV production**: the expected solar output.
* **Forecasted consumption**: the expected load of the installation.

From these it determines the charge/discharge plan with the lowest cost, while respecting:

* the battery's **state-of-charge limits** (minimum and maximum SoC), and
* the **grid connection limits** (maximum injection and consumption).

## How the schedule is built

The schedule is planned **ahead of time** over the forecast horizon and is **recomputed every control cycle** as new price and production forecasts come in.

Each cycle the EMS:

1. **Looks ahead** at the forecasted prices, PV production and consumption.
2. **Identifies the periods worth covering from the battery**, typically the expensive consumption slots (and attractive injection slots).
3. **Plans the charging beforehand** (from PV surplus where available, otherwise from the grid during cheaper periods) so the energy is already stored before it is needed.
4. **Checks that it is worthwhile.** Charging and discharging are only planned when the price difference between the cheap and expensive periods is large enough to outweigh the battery's round-trip losses (a configurable minimum price difference). Cycling the battery for a marginal gain is avoided. Concretely:
   * A consumption period **cheaper than the minimum price difference** is never covered from the battery: even a free recharge could not leave the margin the site demands per cycle, so that period simply imports from the grid.
   * A discharge that the battery would **refill right afterwards** (planned cheap charging or solar inflow just after it) is a full extra charge/discharge cycle. It is only planned when the avoided purchase price also beats the **recharge price** plus the minimum price difference; otherwise the battery stays idle instead of alternating between charging and discharging for a marginal gain.
5. **Respects the limits**: the battery's minimum/maximum state of charge and the grid connection limits (maximum injection and consumption).

Every entry is tracked from **planned** to **in progress** to **done**, so the actual charging/discharging can be compared against what was planned and the remaining plan adjusted if reality differs from the forecast.

## Stored energy goes where it earns most

Stored energy usually has **more candidate uses than the battery can serve**: today's expensive evening, tonight's consumption, tomorrow's peak, and, when [selling energy to the grid](/control-algorithms/cost-optimization/selling-energy-to-the-grid) is enabled, moments with a high injection price. The schedule assigns the stored energy to the use where it earns the most, and it recognizes that a **cheap charging window** between two of those uses changes the picture:

* A future need that can be **refilled from a cheap window in between** (for example tomorrow evening's consumption, with cheap night hours before it) does **not** hold on to today's stored energy. It is covered by charging in that window instead.
* The stored energy that this frees up goes to the uses that **cannot** be refilled cheaply — typically the period **before** the window: today's expensive evening or injection peak.

The practical result: during a high evening peak the battery can discharge at **full power for the whole peak**, selling everything above the site's own consumption, and end the peak near its minimum state of charge. The needs of the next day are met by recharging in the cheap night hours instead of by holding energy back through the peak. Holding back only happens when it genuinely pays: when the later need is worth more than the sale and cannot be refilled affordably in time.

## Scheduled events

The schedule is a sequence of timed entries. Each entry describes a single planned event with two parts: an **action** (what the battery does during that period) and a **goal** (why it does it).

### Actions

| Action                            | What the battery does                                                                                         |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| **Follow scheduled power**        | Follows the exact planned power setpoint, used for grid charging and for discharging to inject into the grid. |
| **Charge at max power**           | Charges at the maximum available power.                                                                       |
| **Compensate PV surplus**         | Charges with the current PV surplus only (no grid charging).                                                  |
| **Compensate production deficit** | Discharges to cover the current production deficit.                                                           |
| **Idle**                          | No activity is planned; the battery may stay idle.                                                            |

### Goals

| Goal                          | Meaning                                                                                                                                                                                         |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Charge for expensive slot** | Charge now, while it is cheap, to cover an upcoming expensive period.                                                                                                                           |
| **Charge (negative price)**   | Charge because the electricity price is negative, so you are paid to consume.                                                                                                                   |
| **Charge for injection**      | Charge cheap grid energy now specifically to sell it back later at a high injection price (see [selling energy to the grid](/control-algorithms/cost-optimization/selling-energy-to-the-grid)). |
| **Discharge expensive slot**  | Discharge during an expensive period to avoid buying from the grid.                                                                                                                             |
| **Discharge before negative** | Discharge ahead of a negative-price period, so there is room to charge during it.                                                                                                               |
| **Discharge for injection**   | Discharge to inject (sell) into the grid when the injection price is attractive.                                                                                                                |
| **No action**                 | Nothing to do for this period.                                                                                                                                                                  |

For example, an event can be **"follow scheduled power"** with the goal **"discharge for injection"**: the battery follows a planned discharge setpoint in order to inject energy into the grid during an attractive injection price.

## Example: evening high prices

The chart below shows the **evening high prices** scenario from the simulator. Electricity is cheap during the day and becomes much more expensive in the evening: the consumption price jumps to roughly 450 €/MWh between about 18:00 and 00:00.

<figure><img src="/files/Qfd20Gj7Fp3XnYpwtiif" alt="Battery schedule, evening high prices scenario"><figcaption><p>The battery charges during the cheap, sunny daytime and discharges during the expensive evening peak.</p></figcaption></figure>

What the schedule does:

* **Daytime (≈ 08:00–16:30): charging.** While prices are low and PV is producing, the battery charges (positive battery power). Most of this is **PV surplus** being stored; the goal is to *charge for the expensive slot* later in the day. The state of charge climbs from near-empty to its maximum (≈ 95%).
* **Evening peak (≈ 18:00–00:00): discharging.** When the consumption price spikes, the battery discharges (negative battery power) to cover the load instead of buying from the grid. This is the *discharge during an expensive slot* goal, and the state of charge drops steeply.
* **Overnight: winding down.** Once prices return to normal, the battery is left to settle back towards its minimum state of charge.

By shifting the stored energy from the cheap daytime into the expensive evening, the installation avoids buying at the peak price, exactly what the cost-optimization schedule is designed to do.

{% hint style="info" %}
With [selling energy to the grid](/control-algorithms/cost-optimization/selling-energy-to-the-grid) enabled, the same scenario goes further: the battery discharges at **full power** through the entire peak, selling everything above the site's own consumption at the high injection price, and recharges in the cheap night hours for the next day.
{% endhint %}


# Selling energy to the grid

Discharging the battery to the grid to sell stored energy when the injection price is high, an optional extension of cost optimization.

Under [cost optimization](/control-algorithms/cost-optimization) the battery normally discharges to cover the **site's own consumption**, using stored energy instead of buying expensive grid energy. **Selling energy to the grid** (also called *battery injection sales* or *discharge to grid*) is an optional extension: when the **injection (feed-in) price** is high enough to be profitable, the EMS discharges stored energy **into the grid** to earn revenue, on top of self-supply.

<figure><img src="/files/KnzHXtLFtSpKwdgUtG5T" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
This is **optional and off by default**. The battery only ever discharges purely to sell when you explicitly enable it (see below). With it disabled, the battery still discharges, but only to cover your own consumption.
{% endhint %}

## Enabling it

Selling energy to the grid is a per-project setting. Enable the **Selling via battery injection** toggle under [Project settings](/voltmasters-platform/10.-project-settings/10.5-project-settings).

* **Disabled (default)**: the battery is never discharged just to feed the grid. Cost optimization only stores cheap/solar energy and releases it to cover the site's own deficits.
* **Enabled**: the cost-optimization planner additionally looks for profitable moments to inject stored energy into the grid, and plans extra discharge for them.

A second toggle, **Grid charging for injection**, additionally allows the planner to **buy** cheap grid energy purely to sell it back at the injection peaks (mode 3 below). It requires battery injection sales to be enabled and is likewise off by default.

Both only have an effect while the project runs **cost optimization** and **no** [**external signal**](/external-signal/external-signal) **partner is steering** the installation.

## Three ways to sell

Energy is always sold at the **most profitable moments**: the planner ranks the candidate slots by injection price and serves the **highest price first**. What differs between the modes is *where the sold energy comes from*.

### 1. Selling surplus energy

Part of what the battery stores is **not needed** for the site's upcoming consumption; that is **surplus** (for example, more solar was stored during the day than the evening will use). The surplus is sold at the moment the **injection price peaks**. This is the baseline behaviour whenever injection sales are enabled.

### 2. Selling beyond the surplus: price arbitrage on stored energy

Energy that the plan would otherwise **keep** to cover a later deficit (so it can avoid buying at the future consumption price) can be sold **too**, in two situations:

* **The sale simply outbids the deficit**: the injection price now is more than the minimum price difference above that later consumption price. The kilowatt-hour earns more sold now than it would save later, so the planner exports it and meets the later need from the grid instead.
* **The deficit can be refilled from a cheap window in between**: even when the later consumption price is *higher* than today's injection price, the sale still wins if cheap charging hours lie between the sale and the deficit. The planner then sells the stored energy at the peak and covers the deficit by recharging in that window — earning the sale on top of the (cheaply refilled) deficit coverage. This is what lets the battery discharge at **full power through an entire evening peak** instead of holding energy back for the next day.

### 3. Buying to sell: grid charging for injection

With the **Grid charging for injection** setting enabled (a separate toggle, alongside battery injection sales), the planner also **buys grid energy at cheap moments purely to sell it back** at the most profitable injection slots. For every attractive injection slot whose discharge capacity is not yet filled by stored or solar energy, it looks for earlier slots whose price clears the round-trip break-even:

> injection price ≥ charge price ÷ round-trip efficiency + minimum price difference

Each purchase is sized to exactly deliver the extra sale, so existing deficit coverage and the rest of the plan are unaffected. Purchases respect the battery capacity along the way (including solar that will flow in anyway) and the grid import limit, and nothing is bought when the sale can already be served by energy that is (or will be) in the battery for free.

Stored energy and purchases are matched to the sales they serve best: peaks **before** a cheap charging window are sold from **storage** (nothing cheaper can reach them), while peaks **after** the window are funded by **buying in the window**, so equally-priced sales on a later day never crowd out today's peak.

### How it looks

<figure><img src="/files/Ju0KWLnE5PLxebuvVvNf" alt="Selling energy to the grid: market price, battery state of charge and energy destinations over a day"><figcaption><p>Over a day the battery charges on cheap/solar energy (<strong>1: store surplus</strong>) and powers the site through the day (<strong>2: self-consumption</strong>). In the highest-price window it injects extra energy to the grid (<strong>3</strong>): the surplus always (Mode 1), and, when the injection price beats the later consumption price by more than the minimum price difference, energy that would otherwise have been kept for later (Mode 2).</p></figcaption></figure>

### When a slot qualifies

The amount available for selling is budgeted **per recharge segment** (roughly per PV cycle/day): each segment can offer the energy it starts with plus its expected PV surplus, minus the deficits it must still cover and any reserve. A segment never sells energy that belongs to another, which keeps **multi-day plans stable**.

Within that budget, a slot is only used to sell when **all** of these hold:

* the **injection price is positive** and **clears the minimum price difference** (so the sale covers round-trip losses and battery wear);
* the **consumption price is not negative** (a negative price means it is cheaper to *charge*);
* the slot is **not already a charging slot** (a battery cannot charge and discharge at once);
* the slot is **not in the last four hours** of the forecast (too uncertain to commit storage to);
* there is **energy above the reserve** (the effective minimum state of charge, including any EV power-boost reserve), and the export stays **within the grid connection's injection limit**.

## Safeguards

Selling to the grid never runs away with your battery or your money:

* **Profit margin**: the minimum price difference guarantees every sale clears the round-trip loss and cycle wear. Arbitrage purchases (mode 3) additionally only happen when the injection price beats the charge price **after round-trip losses** plus that margin.
* **Reserve & minimum SoC**: discharging stops at the effective minimum; reserves (such as an EV power-boost reserve) are off-limits.
* **Consumption comes first**: a sale never strands the site's own needs. Stored energy is only sold away from a later deficit when that deficit is either outbid by the sale or can be refilled from a cheap window in time; otherwise the coverage stays.
* **No pointless cycling**: sales the battery would immediately recharge (from solar surplus right after) are suppressed unless the price clears the recharge cost, and stored energy is never sold toward moments a cheap purchase can serve equally well — so the plan converges instead of repeatedly buying and selling across regenerations.
* **Forecast tail exclusion**: no injection is planned in the final four hours of the horizon.
* **Grid export limit**: battery injection and PV export share one export budget, capped at the connection's injection limit. Purchases respect the grid import limit and the battery capacity.
* **Self-supply first**: energy is only sold when selling beats self-use; covering your own consumption otherwise takes priority.

## See also

* [Cost optimization](/control-algorithms/cost-optimization): the overall price-based strategy this extends.
* [Battery schedule](/control-algorithms/cost-optimization/battery-schedule): the forward plan, its event types and a worked example.


# Self-supply

Maximize self-consumption: store surplus PV and discharge it to cover the load, keeping grid exchange close to zero.

**Self-supply** maximizes the use of your own energy on site. Instead of optimizing for price, it keeps the **net exchange with the grid close to zero**: surplus PV is stored in the battery and discharged again to cover consumption.

## How it works

Every control cycle the algorithm:

* **Balances against the grid.** It measures the power at the grid connection point and steers the battery to bring that net exchange towards zero, charging when there is export (PV surplus), discharging when there is import (consumption the PV cannot cover).
* **Uses a deadband.** Small grid fluctuations within a configurable deadband are ignored, so the battery does not chase every minor change.
* **Runs PV at full power**, except when the **injection price is negative**: then controllable PV inverters are curtailed so that production does not exceed what is consumed and stored locally, avoiding paying to export.
* **Manages EV charging** as part of the same decision. Controllable loads are not actively managed in this mode.

Unlike cost optimization, self-supply does not build a forward price-based plan. It balances the installation in real time against the measured grid power.

When a [peak shaving reserve](/control-algorithms/peak-shaving-reserve) is configured, self-supply keeps that part of the battery in reserve to hold the grid import under its limit, instead of spending it to balance to zero.

{% hint style="info" %}
On-site [wind](/device-integrations/wind-turbines) generation counts toward self-supply just like PV: its measured output helps cover consumption and charge the battery. The EMS does not curtail the turbine — it balances around the wind it measures.
{% endhint %}

## Relationship to an external signal

Like cost optimization, self-supply is a **local** strategy. When an [external signal](/external-signal/external-signal) partner is actively steering the battery, that partner takes precedence; self-supply runs when no external signal is active.


# Peak shaving reserve

Reserve part of the battery to keep grid import under its limit — shave load peaks that would otherwise exceed the connection or transformer capacity.

The **peak shaving reserve** protects a part of the battery so it is always available to keep the **grid import below its limit**. When site load would push the import over the configured limit, the battery discharges just enough to hold the grid at that limit — regardless of what causes the peak.

This is useful when the hard constraint is **power, not price**: a transformer or grid connection that must never be exceeded (for example a site whose cooling load peaks above its connection capacity when the sun is low), or a battery that must keep headroom to support DC fast charging.

## How it works

The reserve is a percentage of the battery's state of charge (SoC). It changes the behaviour of the active control algorithm ([cost optimization](/control-algorithms/cost-optimization) or [self-supply](/control-algorithms/self-supply)) in three ways:

* **Peak shaving discharge (always allowed).** Whenever the load minus PV would exceed the grid import limit, the battery discharges exactly the overage so the grid stays **at** the limit — never below it, so it never exports to shave. This holds regardless of the energy price, because the import limit is a physical constraint on the connection. Any load counts: general site consumption, and EV fast charging as one particular case. This discharge may draw the battery all the way down to its minimum SoC.
* **Reserve floor (protects the reserve).** As long as the SoC is **above** the reserve, the battery is used freely by the normal strategy. Once it drops **to or below** the reserve, discharging for other purposes (self-supply balancing to zero, price arbitrage) is blocked — that energy is kept for shaving the next peak. Only the peak shaving discharge above may still use it.
* **Priority refill.** When the SoC is below the reserve, replenishing it takes priority over other charging strategies. The battery charges from PV surplus and, if needed, from the grid **regardless of price**, staying a small margin below the import limit so the refill itself never causes a peak.

{% hint style="info" %}
The peak shaving discharge only ever pulls the grid **down to** the import limit, never past it, so a site that is not allowed to export is never pushed into export by peak shaving.
{% endhint %}

## Choosing a value

Set the reserve high enough that the reserved energy covers the expected daily peak-shaving need, so the battery is charged in time for the recurring peaks (for example a morning and an evening peak when PV is low). A cost-agnostic site that only wants to protect its connection can set the reserve high, keeping the battery close to full and only tapping it during peaks; the midday PV surplus and the price-independent overnight refill top it back up.

A reserve of **0 (or empty)** disables the behaviour: the algorithm then runs without a protected reserve.

Configure the value under [project settings](/voltmasters-platform/10.-project-settings/10.5-project-settings). Consult your installer for the appropriate value for your specific installation.


# EV charging

How the EMS shares power between your EV chargers, the grid connection and the battery, always giving the cars priority.

The EMS controls your **EV chargers** alongside the battery and solar. Its aim is to give the cars **as much power as they can take** while keeping the whole site within your **grid connection limit**, and to give EV charging **priority over the battery**. The battery is never charged at the expense of the cars, and it will even **discharge to help power the cars** when they want more than the grid alone can supply.

EV charging behaves the same way whether the site runs [cost optimization](/control-algorithms/cost-optimization) or [self-supply](/control-algorithms/self-supply).

## The cars come first

Within the grid connection limit, available power is shared in a fixed order:

```mermaid
flowchart TD
    A["Grid connection limit"] --> B["1 · The site's own consumption"]
    B --> C["2 · EV charging: from the grid"]
    C --> D["3 · EV charging: extra power from the battery"]
    D --> E["4 · Charging the battery: only what is left over"]
```

So the battery and the cars never compete for the grid. The battery charges from whatever the cars leave free, and when the cars need more than the grid can deliver, it **discharges to make up the difference**.

## How much power the cars can get

At every moment the EMS works out how much power is available for EV charging. It is the grid connection limit, **plus** what the battery can add by discharging, **minus** whatever the rest of the site is consuming (solar production reduces that consumption, so sunshine leaves more room for the cars).

That total comes in two parts:

* **What the grid can give**: available **straight away**.
* **What the battery can add** on top: phased in **gradually** (see below).

A few things worth knowing:

* The cars get this power **regardless of what the battery is doing** at that instant. EV priority is built in, not a balancing act.
* As a battery gets close to empty it can deliver less power, so the extra room it adds for the cars shrinks on its own.
* If the rest of the site is already using everything the grid and battery can supply, there is no room left for EV charging.

## Ramping up smoothly

When the cars start needing battery power on top of the grid, the EMS does not jump straight to the maximum. The battery needs a few seconds to ramp its output up, and releasing the extra car power before the battery is ready would briefly push the site over its grid limit. So:

* The part the **grid** can supply is given **immediately**.
* The extra part the **battery** supplies is raised **gradually, in small steps**, so the battery can keep up without overshooting the grid limit.
* If less power becomes available (the battery runs low, or site consumption rises), the cars' limit is lowered **immediately** to stay safe.
* The cars are never limited below what they are already drawing.

## When several cars charge at once

The available power is shared between the **active charging sessions**. You can give connectors a **priority** so higher-priority sessions are served first; sessions of equal priority share the available power between them. Each charger is also limited by its own hardware rating.

{% hint style="info" %}
The power the EMS allows a charger is a **ceiling**: the most the car is *allowed* to draw, not a target. A nearly-full car that only draws a few kilowatts simply keeps its high ceiling; this is harmless, because the battery only ever helps with the power the car is **actually** drawing.
{% endhint %}

## Example: a second car arrives

Grid connection limit 400 kW, a battery that can deliver 400 kW, and no other consumption on site. One car starts charging; a second starts two minutes later at another station; the first stops a few minutes after that. Both cars can take 400 kW.

| Moment                | Car A  | Car B  | From the grid | From the battery |
| --------------------- | ------ | ------ | ------------- | ---------------- |
| Car A starts          | 400 kW | –      | 400 kW        | 0                |
| Car B starts          | 200 kW | 200 kW | 400 kW        | 0                |
| …a short while later… | rising | rising | 400 kW        | rising           |
| Both ramped up        | 400 kW | 400 kW | 400 kW        | 400 kW           |
| Car A stops           | –      | 400 kW | 400 kW        | 0                |

The first car gets its full 400 kW straight from the grid. When the second car arrives, the grid can feed both only at 200 kW each at that instant, so they share, and then the battery ramps up over the next minute or two to lift both back to 400 kW. When the first car leaves, the grid alone covers the second car again and the battery stops discharging, without ever interrupting the second car.

## Staying within the grid limit

The EMS continuously checks the **measured** power at the grid connection and trims the cars' power if reality drifts over the limit, for example because of a brief measurement delay or a charger that is slow to follow. In normal operation the gradual ramp keeps the site at the limit on its own, so this only steps in on short transients.

## Settings that affect EV charging

| Setting                    | What it does                                                                                   |
| -------------------------- | ---------------------------------------------------------------------------------------------- |
| **Grid connection limit**  | The ceiling the whole site — cars, consumption and battery charging together — must stay under |
| **Connector priority**     | Which charging sessions are served first when power is tight                                   |
| **EV power-boost reserve** | Battery energy set aside so it stays available to help power the cars                          |

## Relationship to the control strategies

EV charging works the same way under [cost optimization](/control-algorithms/cost-optimization) and [self-supply](/control-algorithms/self-supply): the cars are always served first, and the battery's own charging takes only what the cars leave free. For the chargers the EMS supports, see [EV chargers](/device-integrations/ev-chargers).


# Overview list

{% hint style="info" %}
Use the sections below to browse supported brands and models by category.
{% endhint %}

<details>

<summary>ABB</summary>

| PV                                             |
| ---------------------------------------------- |
| [PVS50](/device-integrations/pv-inverters/abb) |

| EV Charger                                               |
| -------------------------------------------------------- |
| [Terra AC charger](/device-integrations/ev-chargers/abb) |

</details>

<details>

<summary>Alpitronic</summary>

| DC Charger                                                             |
| ---------------------------------------------------------------------- |
| [HYC 50](/device-integrations/ev-chargers/alpitronic-hyc-dc-charger)   |
| [HYC 150](/device-integrations/ev-chargers/alpitronic-hyc-dc-charger)  |
| [HYC 200](/device-integrations/ev-chargers/alpitronic-hyc-dc-charger)  |
| [HYC 300](/device-integrations/ev-chargers/alpitronic-hyc-dc-charger)  |
| [HYC 400](/device-integrations/ev-chargers/alpitronic-hyc-dc-charger)  |
| [HYC 1000](/device-integrations/ev-chargers/alpitronic-hyc-dc-charger) |

</details>

<details>

<summary>BMR</summary>

| Energy meter                                           |
| ------------------------------------------------------ |
| [PLA33](/device-integrations/energy-meters/bmr/pla-33) |

</details>

<details>

<summary>Carlo Gavazzi</summary>

| Energy meter                                                  |
| ------------------------------------------------------------- |
| [EM24](/device-integrations/energy-meters/carlo-gavazzi/em24) |

</details>

<details>

<summary>C-Battery</summary>

| Battery Systems                                           |
| --------------------------------------------------------- |
| [Cbat-IQ](/device-integrations/battery-systems/c-battery) |

</details>

<details>

<summary>Dyness</summary>

| Battery Systems                                         |
| ------------------------------------------------------- |
| [DH 100 F](/device-integrations/battery-systems/dyness) |
| [DH 200 F](/device-integrations/battery-systems/dyness) |
| [DH 200 Y](/device-integrations/battery-systems/dyness) |

</details>

<details>

<summary>Elecnova</summary>

| PCS                                                                         |
| --------------------------------------------------------------------------- |
| [Elecnova 125kW/261kWh](/device-integrations/battery-systems/elecnova)      |
| [Elecnova ECO-E233LS 233kWh](/device-integrations/battery-systems/elecnova) |

</details>

<details>

<summary>Enjoy Powers</summary>

| PCS                                                                 |
| ------------------------------------------------------------------- |
| [EPCS105/125-AM](/device-integrations/battery-systems/enjoy-powers) |

</details>

<details>

<summary>Eastron</summary>

| Energy meter                                                              |
| ------------------------------------------------------------------------- |
| [Eastron SDM 630 TCP](/device-integrations/energy-meters/eastron-sdm-630) |

</details>

<details>

<summary>EME</summary>

| Energy meter                                    |
| ----------------------------------------------- |
| [eCON+](/device-integrations/energy-meters/eme) |

</details>

<details>

<summary>Etrel</summary>

| EV Charger                                                    |
| ------------------------------------------------------------- |
| [Inch Duo](/device-integrations/ev-chargers/etrel-ac-charger) |
| [Inch Pro](/device-integrations/ev-chargers/etrel-ac-charger) |

</details>

<details>

<summary>EP Energy</summary>

| ESS / PCS                                                 |
| --------------------------------------------------------- |
| [EPES233](/device-integrations/battery-systems/ep-energy) |
| [EPES261](/device-integrations/battery-systems/ep-energy) |

</details>

<details>

<summary>Fluvius</summary>

| Energy meter                                                                                             |
| -------------------------------------------------------------------------------------------------------- |
| [Industrial Energy Meter (A1)](/device-integrations/energy-meters/fluvius/industrial-meter-a1-port-only) |
| [Home Energy Meter (P1)](/device-integrations/energy-meters/fluvius/residential-meter-p1-port-only)      |

</details>

<details>

<summary>GoodWe</summary>

| Hybrid inverter                                         |
| ------------------------------------------------------- |
| [SEC3000C](/device-integrations/battery-systems/goodwe) |

</details>

<details>

<summary>Frax</summary>

| Battery Systems                                       |
| ----------------------------------------------------- |
| [Frax EMS](/device-integrations/battery-systems/frax) |

</details>

<details>

<summary>Growatt</summary>

| PV Inverter                                               |
| --------------------------------------------------------- |
| [Shine Master](/device-integrations/pv-inverters/growatt) |

</details>

<details>

<summary>Hite</summary>

| Battery                                                            |
| ------------------------------------------------------------------ |
| [Hite Single Cabinet](/device-integrations/battery-systems/hite)   |
| [Hite Combiner Cabinet](/device-integrations/battery-systems/hite) |

</details>

<details>

<summary>Huawei</summary>

| Battery / Hybrid                                                                                                                                                         |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [SmartLogger Hybrid (LUNA2000 + SUN2000)](/device-integrations/battery-systems/huawei-smartlogger-hybrid)                                                                |
| [LUNA2000-215-2S10 Smart String ESS](https://github.com/Voltmasters-io/documentation/blob/main/documentation/device-integrations/battery-systems/huawei-luna2000-215.md) |

| PV                                                                                  |
| ----------------------------------------------------------------------------------- |
| [SmartLogger3000](/device-integrations/pv-inverters/huawei/huawei-smartlogger-3000) |
| [Sun2000](/device-integrations/pv-inverters/huawei/huawei-sun-2000)                 |

</details>

<details>

<summary>Iocharger</summary>

| EV Charger                                            |
| ----------------------------------------------------- |
| [IOCAP26](/device-integrations/ev-chargers/iocharger) |

</details>

<details>

<summary>Phoenix Contact</summary>

| Energy meter                                                       |
| ------------------------------------------------------------------ |
| [EEM-MA370(1)](/device-integrations/energy-meters/phoenix-contact) |

</details>

<details>

<summary>Poweroad</summary>

| ESS                                                                            | PMS                                                     |
| ------------------------------------------------------------------------------ | ------------------------------------------------------- |
| [FLEX 126 AIO](/device-integrations/battery-systems/poweroad)                  | [PMS v1](/device-integrations/battery-systems/poweroad) |
| [FLEX 215 (Sinexcel)](/device-integrations/battery-systems/poweroad)           | [PMS v2](/device-integrations/battery-systems/poweroad) |
| [FLEX 215 AIO (Enjoy Powers)](/device-integrations/battery-systems/poweroad)   |                                                         |
| [FLEX 215 AIOS](/device-integrations/battery-systems/poweroad)                 |                                                         |
| [FLEX 233 AIO](/device-integrations/battery-systems/poweroad)                  |                                                         |
| [FLEX 261 AIO (Liquid Cooling)](/device-integrations/battery-systems/poweroad) |                                                         |

</details>

<details>

<summary>Power Vault</summary>

| Battery Systems                                                     |
| ------------------------------------------------------------------- |
| [Power Vault EMS](/device-integrations/battery-systems/power-vault) |

</details>

<details>

<summary>Pylontech</summary>

| Battery Systems                                                              |
| ---------------------------------------------------------------------------- |
| [LEMS (PowerCube-M5A racks)](/device-integrations/battery-systems/pylontech) |

</details>

<details>

<summary>Mennekes</summary>

| AC Charger                                                              |
| ----------------------------------------------------------------------- |
| [Mennekes AMTRON 4 Bussines](/device-integrations/ev-chargers/mennekes) |

</details>

<details>

<summary>Oztek</summary>

| PCS                                                                         |
| --------------------------------------------------------------------------- |
| [OZpcs Power Conversion System](/device-integrations/battery-systems/oztek) |
| [Generic](/device-integrations/battery-systems/oztek)                       |

</details>

<details>

<summary>RCT Power (EcoPowerCell)</summary>

| Battery systems                                                     |
| ------------------------------------------------------------------- |
| [CESS 1044-500-01D](/device-integrations/battery-systems/rct-power) |
| [CESS 783-375-01D](/device-integrations/battery-systems/rct-power)  |

</details>

<details>

<summary>Ecosourcen</summary>

| Battery systems |
| --------------- |
| SU215 kWh       |

</details>

<details>

<summary>Schneider</summary>

| Energy meter                                                           |
| ---------------------------------------------------------------------- |
| [PAS600](/device-integrations/energy-meters/schneider/pas-600)         |
| [iEM3555](/device-integrations/energy-meters/schneider/iem3555)        |
| [iEM3155 (beta)](/device-integrations/energy-meters/schneider/iem3555) |
| [iEM3255 (beta)](/device-integrations/energy-meters/schneider/iem3555) |
| [iEM3355 (beta)](/device-integrations/energy-meters/schneider/iem3555) |
| [iEM3455 (beta)](/device-integrations/energy-meters/schneider/iem3555) |

</details>

<details>

<summary>SAJ</summary>

| Hybrid inverter                                             |
| ----------------------------------------------------------- |
| [CHS2-29.9K-T4-X](/device-integrations/battery-systems/saj) |
| [CHS2-30K-T4-X](/device-integrations/battery-systems/saj)   |
| [CHS2-40K-T5-X](/device-integrations/battery-systems/saj)   |
| [CHS2-49.9K-T6-X](/device-integrations/battery-systems/saj) |
| [CHS2-50K-T6-X](/device-integrations/battery-systems/saj)   |
| [CHS2-63K-T6-X](/device-integrations/battery-systems/saj)   |

</details>

<details>

<summary>SCU</summary>

| ESS                                              |
| ------------------------------------------------ |
| [BRES](/device-integrations/battery-systems/scu) |
| [GRES](/device-integrations/battery-systems/scu) |

</details>

<details>

<summary>Siemens</summary>

| Energy meter                                                      |
| ----------------------------------------------------------------- |
| [PAC2200](/device-integrations/energy-meters/siemens/siemens-pac) |

</details>

<details>

<summary>Sinexcel</summary>

| PCS                                                                                      |
| ---------------------------------------------------------------------------------------- |
| [PWS1-500KTL-EX (M1–M8)](/device-integrations/battery-systems/sinexcel)                  |
| [Isuna 10000T / 12000T / 15000T / 20000T](/device-integrations/battery-systems/sinexcel) |
| [PWS1-1725KTL-H (1,725 kW)](/device-integrations/battery-systems/sinexcel)               |

| DC Charger                                                                     |
| ------------------------------------------------------------------------------ |
| [CE 160 kW](/device-integrations/ev-chargers/sinexcel-dc-charger)              |
| [CE 240 kW](/device-integrations/ev-chargers/sinexcel-dc-charger)              |
| [UL 240 kW](/device-integrations/ev-chargers/sinexcel-dc-charger)              |
| [Integrated DC Charger](/device-integrations/ev-chargers/sinexcel-dc-charger)  |
| [Distributed DC Charger](/device-integrations/ev-chargers/sinexcel-dc-charger) |

</details>

<details>

<summary>SMA</summary>

| PV                                                                                                             |
| -------------------------------------------------------------------------------------------------------------- |
| [Sunny Tripower 3.0 to 10.0](/device-integrations/pv-inverters/sma/sunny-boy-sunny-tripower)                   |
| [Sunny Tripower TL-20 (5000 to 12000)](/device-integrations/pv-inverters/sma/sunny-boy-sunny-tripower)         |
| [Sunny Tripower TL-30 (15000 / 20000 / 25000)](/device-integrations/pv-inverters/sma/sunny-boy-sunny-tripower) |
| [Sunny Tripower TL-10 (10000 / 17000)](/device-integrations/pv-inverters/sma/sunny-boy-sunny-tripower)         |
| [Sunny Tripower CORE1 (STP50)](/device-integrations/pv-inverters/sma/sunny-boy-sunny-tripower)                 |
| [Sunny Tripower CORE2 (STP110-60)](/device-integrations/pv-inverters/sma/sunny-boy-sunny-tripower)             |
| [Sunny Tripower X (12 / 15 / 20 / 25)](/device-integrations/pv-inverters/sma/sunny-boy-sunny-tripower)         |
| [Sunny Boy](/device-integrations/pv-inverters/sma/sunny-boy-sunny-tripower)                                    |
| [Data Manager M / M Lite / L](/device-integrations/pv-inverters/sma/data-manager)                              |

</details>

<details>

<summary>Solar LOG</summary>

| PV                                                            |
| ------------------------------------------------------------- |
| [Solar Log 1200](/device-integrations/pv-inverters/solar-log) |

</details>

<details>

<summary>Solis</summary>

| PV                                                          |
| ----------------------------------------------------------- |
| [Solis Datalogger](/device-integrations/pv-inverters/solis) |

</details>

<details>

<summary>Sungrow</summary>

| PV                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <h4><a href="/pages/LX8qgzXZlu6HsD5vebLg"><strong>RT Series</strong></a></h4><ul><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG3.0RT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG4.0RT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG5.0RT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG6.0RT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG7.0RT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG8.0RT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG10RT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG12RT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG15RT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG17RT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG20RT</a></li></ul>                                                                                                                                                                                                                                                                     |
| <h4><a href="/pages/LX8qgzXZlu6HsD5vebLg">KTL-M Series</a></h4><ul><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG5KTL-MT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG6KTL-MT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG8KTL-M</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG10KTL-M</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG10KTL-MT</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG12KTL-M</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG15KTL-M</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG17KTL-M</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG20KTL-M</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG30KTL-M</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG30KTL-M-V31</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG33KTL-M</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG36KTL-M</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG50KTL-M-20</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG80KTL-M</a></li></ul> |
| <h4><a href="/pages/LX8qgzXZlu6HsD5vebLg">CX Series</a></h4><ul><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG25CX-SA</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG30CX</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG33CX</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG40CX-P2</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG50CX</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG75CX</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG100CX</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG100CX-JP</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG110CX</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG36CX-US</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG60CX-US</a></li></ul>                                                                                                                                                                                                                                                                          |
| <h4><a href="/pages/LX8qgzXZlu6HsD5vebLg">KU / KTL Series</a></h4><ul><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG60KU</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG60KU-M</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG60KTL</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">G80KTL</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG80KTL-20</a></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| <h4><a href="/pages/LX8qgzXZlu6HsD5vebLg">HV / BF Series</a></h4><ul><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG80HV</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG80BF</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG85BF</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG110HV-M</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG111HV</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG125HV</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG125HV-20</a></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| <h4><a href="/pages/LX8qgzXZlu6HsD5vebLg">HX / TX Series</a></h4><ul><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG136TX</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG225HX</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG250HX</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG250HX-IN</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG250HX-US</a></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| <h4><a href="/pages/LX8qgzXZlu6HsD5vebLg">Other Supported Models</a></h4><ul><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG33K3J</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG34KJ</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">SG49K5J</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">LP\_P34KSG</a></li><li><a href="/pages/LX8qgzXZlu6HsD5vebLg">Logger1000B</a></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |

</details>

<details>

<summary>Teplore</summary>

| Battery Systems                                           |
| --------------------------------------------------------- |
| [Version 1](/device-integrations/battery-systems/teplore) |
| [Version 2](/device-integrations/battery-systems/teplore) |

</details>

<details>

<summary>Victron EMS</summary>

| Battery Systems                                                      |
| -------------------------------------------------------------------- |
| [Victron MultiPlus](/device-integrations/battery-systems/victron)    |
| [Victron MultiPlus-II](/device-integrations/battery-systems/victron) |
| [Victron Quattro](/device-integrations/battery-systems/victron)      |
| [Victron Quattro-II](/device-integrations/battery-systems/victron)   |
| [Victron EasySolar-II](/device-integrations/battery-systems/victron) |

</details>

<details>

<summary>Socomec</summary>

| Energy meter                                              |
| --------------------------------------------------------- |
| [Countis E53](/device-integrations/energy-meters/socomec) |
| [Diris A-30](/device-integrations/energy-meters/socomec)  |

</details>

<details>

<summary>SolaX</summary>

| ESS                                                   | PV                                                    |
| ----------------------------------------------------- | ----------------------------------------------------- |
| [EMS1000](/device-integrations/battery-systems/solax) | [X3-MIC G2](/device-integrations/pv-inverters/solax)  |
|                                                       | [X3-PRO G2](/device-integrations/pv-inverters/solax)  |
|                                                       | [X3-MEGA G2](/device-integrations/pv-inverters/solax) |
|                                                       | [X3-FORTH](/device-integrations/pv-inverters/solax)   |

</details>

<details>

<summary>SunSpec (Generic)</summary>

| PV                                                                    |
| --------------------------------------------------------------------- |
| [Generic SunSpec inverter](/device-integrations/pv-inverters/sunspec) |

</details>

<details>

<summary>Soluzione Solare</summary>

| Solar irradiance meter                                                           |
| -------------------------------------------------------------------------------- |
| [LM2-420 PRO](/device-integrations/solar-irradiance-meters/soluzione-solare)     |
| [SM1-485 PRO](/device-integrations/solar-irradiance-meters/soluzione-solare)     |
| [SM2-485 PRO LED](/device-integrations/solar-irradiance-meters/soluzione-solare) |
| [TM3](/device-integrations/solar-irradiance-meters/soluzione-solare)             |
| [TM PRO](/device-integrations/solar-irradiance-meters/soluzione-solare)          |

</details>

<details>

<summary>IMT Technology</summary>

| Solar irradiance meter                                                    |
| ------------------------------------------------------------------------- |
| [Si-RS485TC](/device-integrations/solar-irradiance-meters/imt-technology) |

</details>

<details>

<summary>SunSpec-compatible brands</summary>

The following brands connect through the generic [SunSpec](/device-integrations/pv-inverters/sunspec) PV integration: Afore, Aiswei, Altenergy Power, Canadian Solar, Danfoss Solar, Delta Electronics, Deye, Eltek, GoodWe (PV inverters), Hoymiles, Ideal Power, Kaco, Outback Power, Q Cells, Schneider (PV inverters), Sofar, Solectria, Yaskawa Solectria.

</details>

<details>

<summary>Wind turbine (Generic)</summary>

| Wind turbine                                               |
| ---------------------------------------------------------- |
| [Generic wind turbine](/device-integrations/wind-turbines) |

</details>


# Controllable loads

Switch a simple on/off load (heating element, pump, auxiliary equipment) through a relay output of an IO extension, managed by the EMS control strategy.

<figure><img src="/files/lL75CfU9vdVDn4UE2y3m" alt=""><figcaption><p>Voltmasters EMS: Controllable load via IO module</p></figcaption></figure>

A **controllable load** is a simple **on/off load**, for example a heating element, a pump or other auxiliary equipment, that the Voltmasters EMS can switch on and off. The load is wired to a **relay output** of an [IO extension](/dso-rtu/io-extension), and the EMS decides when to switch it as part of the local control strategy (self-consumption and cost optimization), and switches it off on a DSO RTU **emergency stop consumption**.

{% hint style="info" icon="lightbulb" %}
Use a controllable load to absorb **PV surplus** in your own installation, for example to heat water when there is more solar production than the rest of the site consumes, instead of injecting it into the grid.
{% endhint %}

### Supported models

| Model       | Connection                                                   |
| ----------- | ------------------------------------------------------------ |
| On/off load | Relay output of a Moxa [IO extension](/dso-rtu/io-extension) |

### Requirements

* An [IO extension](/dso-rtu/io-extension) with a **free relay output**, added and reachable on the platform.
* EMS controller version **0.0.277** or higher.

### Adding a controllable load

Add the controllable load like any other device:

* **Device type:** Controllable load
* **Model:** On/off load
* **Connection:** via an IO extension — select the **IO extension device** and the **output port** the load is wired to.

<figure><img src="/files/CavHrXgy7BXUUNwW986M" alt=""><figcaption><p>Selection of the IO extension device and the ouput port for the load</p></figcaption></figure>

The same relay output cannot be shared with another function (for example a telecontrol emergency switch).

### Relay wiring and default state

How a switch command maps to the relay depends on two settings:

* **Relay actuation mode** — how the load is wired to the relay contacts, and what the closed contact means:

| Relay actuation mode    | Load is ON when…       |
| ----------------------- | ---------------------- |
| **NO, ON when closed**  | NO contacts are closed |
| **NO, OFF when closed** | NO contacts are open   |
| **NC, ON when closed**  | NC contacts are closed |
| **NC, OFF when closed** | NC contacts are open   |

* **Default output state** — the state the output falls back to (**On** or **Off**, default **Off**). This is the safe state used when no active command applies.

### Control parameters

The EMS uses the following parameters to decide when to switch the load. They are set when adding the device and can be changed later in the device's general settings.

| Parameter                          | What it does                                                                                                                   |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| **Nominal power**                  | The rated power of the load, in kW.                                                                                            |
| **Activation power**               | Minimum PV surplus required to switch the load on. If unknown, use the same value as the nominal power.                        |
| **Priority**                       | Activation order from 1 (highest) to 10 (lowest). Higher-priority loads are switched on first when available power is limited. |
| **Minimum runtime per activation** | Minimum time the load stays on once switched, to prevent frequent on/off cycling.                                              |
| **Minimum runtime per day**        | Minimum total runtime per day, to ensure the load runs enough for proper operation.                                            |
| **Deadline hour**                  | Latest hour (0–23) by which the load should have completed its daily runtime.                                                  |

{% hint style="info" %}
Setting **Controllable** to off on the device turns it into a monitoring-only device: the EMS reads it but never switches it, and it is excluded from the control strategy.
{% endhint %}

### How the EMS controls the load

* In **self-consumption** and **cost optimization**, the EMS switches the load on when there is enough surplus power (above the **activation power**), respecting **priority** when power is limited, and honours the minimum-runtime and deadline parameters.
* On a DSO RTU **emergency stop consumption**, all controllable loads are switched **off**. See [How DSO RTU works](/dso-rtu/how-telecontrole-works).

<figure><img src="/files/uxsxYn7DTt1f0JkS6a5Y" alt=""><figcaption><p>The power shown here is the nominal power you configured for this controllable load, not a measured value. Because the load has no power metering of its own, this figure (marked with ±) is an estimate of its effective consumption while it is switched on.</p></figcaption></figure>

### Manual override

A controllable load can be **manually overridden** to a fixed **active state** (On or Off), for example for testing or maintenance. The override takes precedence over the automatic control; clear it to return the load to the control strategy.

### See also

* [IO extension](/dso-rtu/io-extension) — the device that provides the relay output.
* [IO module emergency stop](/dso-rtu/io-module-emergency-stop) — the other use of an IO extension's relay outputs.


# Battery Systems

Our EMS integrates with a range of battery energy storage systems, covering both the power conversion system (PCS / battery inverter) and the battery management system (BMS). These integrations allow batteries to be monitored and controlled for use cases such as self-consumption optimization, peak shaving, load balancing, and energy trading.

Select a brand below for the supported devices, or see the [Overview list](/device-integrations/overview-list) for all supported brands and models.


# C-Battery

Supported devices: Cbat-IQ

Our EMS supports battery systems from C-Battery.

C-Battery supplies commercial and industrial battery energy storage systems built around an integrated power conversion system (PCS) and battery management system (BMS).

### Supported devices

* **Cbat-IQ**: integrated commercial/industrial battery system (PCS + BMS)

The C-Battery system connects over a standard **SunSpec Modbus TCP** interface, so no brand-specific adapter is required on the controller. Systems with several battery banks are supported: each bank is detected automatically and its **capacity is entered per battery** during setup.

{% hint style="warning" %}
The C-Battery system must be set to **Remote control** so it accepts the EMS setpoints. In local mode the system ignores the EMS and an incident is raised.
{% endhint %}

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of battery status and performance
* Smart charging and discharging control
* Optimization of self-consumption
* Peak shaving and load balancing

Additional functionality may be added over time as integration capabilities evolve.


# Dyness

Our EMS supports battery systems from Dyness.

Dyness provides lithium-ion energy storage solutions for residential, commercial, and industrial applications.

### Supported devices

We support Dyness battery systems for integration within our EMS platform.

These systems can be connected for centralized monitoring and control as part of a broader energy management setup.

* **DH200F**
* **DH200Y**
* **DH100F**
* **DH100Y**

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of battery status and performance
* Smart charging and discharging control
* Optimization of self-consumption
* Peak shaving and load balancing

<figure><img src="/files/SV7ENfppWXbNNtGlRLEo" alt=""><figcaption></figcaption></figure>


# Elecnova

Supported Devices Liquid cooled 261kWh and 233kWh

Our EMS supports the Elecnova and enables seamless integration for monitoring and control within a centralized energy management system.

### Supported devices

* **Elecnova Eco (ECO-E261LP)**: liquid-cooled 261 kWh battery system for energy storage
* **Elecnova Eco (ECO-E233LS)**: all-in-one liquid-cooled 233 kWh battery system for energy storage

### Configuration

When adding the device to the Voltmasters EMS, configure the communication settings as shown below.

| Parameter       | Value  |
| --------------- | ------ |
| Modbus TCP Port | ✅ 3200 |

### EMS Functionality

With the current integration, our EMS enables:

* Real-time monitoring
* Data acquisition and visualization
* Integration into energy management strategies
* Centralized device communication

Additional functionality may be introduced as support for the device evolves.


# Enjoy Powers

Enjoy Powers integration within our EMS

Our EMS supports power conversion systems from Enjoy Powers.

Enjoy Powers develops bidirectional power conversion systems for battery energy storage in commercial and industrial installations.

The integration allows the PCS to be monitored and controlled directly from our EMS platform as part of a broader battery storage setup.

### Supported devices

We support the following Enjoy Powers system:

* **EPCS105/125-AM**: bidirectional power conversion system for battery energy storage

### EMS functionality

With the current integration, our EMS enables:

* Intelligent charging and discharging of the connected battery
* Peak shaving and load balancing
* Optimization of self-consumption
* Integration in commercial and industrial energy systems

Additional functionality may be added over time as integration capabilities evolve.


# EP Energy

EP Energy Integration within our EMS

Our EMS supports energy storage systems from EP Energy.

These battery systems are designed for reliable and flexible energy storage in both grid-connected and off-grid applications.

The integration allows centralized monitoring, control, and optimization directly within our EMS platform.

### Supported devices

We support the following EP Energy systems:

* **EPES233**
* **EPES261**

### EMS functionality

With the current integration, the following features and use cases are supported:

* Smart battery charging and discharging
* Peak shaving and load balancing
* Self-consumption optimization
* Integration within hybrid and off-grid installations
* Centralized monitoring and energy management through the EMS platform

<figure><img src="/files/vZFfZOOQ1dkFgKf2U5Bl" alt=""><figcaption></figcaption></figure>


# Frax

Our EMS supports battery systems from Frax.

Frax supplies an integrated energy storage system that combines the power conversion system (PCS), battery management system (BMS) and on-board metering in a single managed unit.

### Supported devices

* **Frax EMS**: integrated battery energy storage system

The Frax system connects over **Modbus TCP** and is represented as a battery inverter (PCS) together with its battery management system, on-board PV and an energy meter. The **battery capacity is entered during device setup** — it is not read from the device — so make sure it is configured correctly.

{% hint style="info" %}
The Frax integration does not expose cumulative energy counters, so production and consumption totals are derived from live power measurements.
{% endhint %}

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of battery status and performance
* Smart charging and discharging control
* Optimization of self-consumption
* Peak shaving and load balancing

Additional functionality may be added over time as integration capabilities evolve.


# GoodWe

GoodWe SEC3000C Smart Energy Controller integration within our EMS

Our EMS supports the **GoodWe SEC3000C** Smart Energy Controller for GoodWe's **ESA125K / ESA261 (261 kWh)** commercial storage scenario.

The SEC3000C is not an inverter itself but an **all-in-one EMS gateway**: it aggregates a whole site — battery energy storage, PV and a built-in grid meter — behind a single Modbus TCP endpoint. Because everything is reached through one connection, our EMS exposes the site as several logical devices (battery, PV, grid meter) that are all served by the same integration.

{% hint style="info" %}
Only the **C variant** (SEC3000**C**) is supported. It is the only variant that supports parallel connection and control of GoodWe's on-grid and hybrid inverters. The plain SEC3000 is monitoring-only and is not supported.
{% endhint %}

### Supported devices

| Model    | Role                    | Scenario         |
| -------- | ----------------------- | ---------------- |
| SEC3000C | Smart Energy Controller | ESA125K / ESA261 |

The integration communicates over **Modbus TCP** (default port `502`). The SEC3000C itself is addressed as logical device id `0`; the built-in **GM330** smart meter is addressed on its own RS485 address.

## How the integration works

A single SEC3000C is modelled in our EMS as one parent device with up to three child devices, all driven from the same Modbus connection:

* **PCS (battery inverter)** — the parent device. Receives the charge/discharge commands and reports the energy-storage active/reactive power.
* **BMS** — reports the battery state of charge (SOC), state of health (SOH) and charge/discharge state.
* **PV** — reports the combined PV production, the available PV power and the PV rated power.
* **Grid meter** — the built-in **GM330** smart meter, exposed as a grid energy meter. Optional: only active when the meter's RS485 address is configured.

Battery capacity and the minimum/maximum state of charge are configured on the BMS child device; the rated power is configured on the PCS. The PV rated power and the battery SOC are read back from the device. There is no separate wiring or extra Modbus device to add — the children are created automatically from the parent.

### Control approach

We steer the system through the SEC3000C's **remote control interface**. The controller is held in **Remote Control Mode** (asserted continuously) so it follows EMS setpoints, and every control cycle (≈1 s) we (re)assert the requested commands:

* **Battery (ESS) setpoint** — a direct charge/discharge power setpoint, clamped to the energy-storage rated power and the device's real-time max charge/discharge limits.
* **PV curtailment** — an explicit PV active-power limit, used when production has to be capped.

### What is read back

* Battery: SOC, SOH, active and reactive power, on-/off-grid status, real-time max charge and discharge power.
* PV: actual production, currently available power and rated power.
* System: total PV + storage active power and the min/max controllable power.
* Grid meter (when configured): per-phase voltages and currents, total active/reactive/apparent power, power factor, frequency and cumulative import/export energy.

## What is possible with which setup

The built-in **GM330 grid meter** is optional. Whether it is configured determines whether real grid measurements are available.

| Capability                     | With GM330 meter | Without GM330 meter |
| ------------------------------ | :--------------: | :-----------------: |
| Battery monitoring (SOC / SOH) |         ✅        |          ✅          |
| PV monitoring                  |         ✅        |          ✅          |
| Grid import/export monitoring  |         ✅        |          ❌          |
| Charge / discharge to setpoint |         ✅        |          ✅          |
| PV curtailment                 |         ✅        |          ✅          |
| Grid limit (import/export)     |         ✅        |          ❌          |

> **Key takeaway:** battery and PV control work without the meter. The GM330 is required for grid measurements and grid import/export limiting.

## Configuration parameters

Beyond the standard battery parameters (capacity, min/max state of charge), the SEC3000C PCS exposes:

* **Rated power (kW)** — the energy-storage system's nominal AC power.

The PV rated power is read from the device and pre-fills the PV child's production capacity. The GM330 grid meter, when used, is added as the grid energy-meter child device; its RS485 address is forwarded to the PCS so the meter can be read over the shared connection.

## Validation status

The integration is implemented against the **SEC3000C MODBUS Interface Definition Description (v06)**. Additional functionality may be added over time as integration capabilities evolve.


# Hite

Our EMS supports energy storage solutions from Hite.

Hite delivers modular battery systems and supporting infrastructure for scalable and efficient energy storage in commercial and industrial environments.

### Supported devices

We support the following Hite components:

* **Hite Single Cabinet**: standalone battery cabinet for modular energy storage
* **Hite Combiner Box**: component for aggregating and managing multiple cabinets

These components can be integrated into our EMS for centralized monitoring and control.

### Integration scope

The integration with Hite systems focuses on enabling reliable communication and basic control within our EMS environment. This allows Hite installations to be incorporated into broader energy management strategies alongside other supported systems.

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of battery system status and performance
* Basic charging and discharging control
* Coordination of multiple cabinets via the combiner box
* Peak shaving and load balancing use cases

Additional functionality and extended support may be added over time as integration capabilities evolve.

<figure><img src="/files/WaXnxAPF47dC35R2g1Fi" alt=""><figcaption></figcaption></figure>


# Huawei SmartLogger Hybrid

Huawei SmartLogger Hybrid integration within our EMS

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).
{% 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.


# Oztek

Our EMS supports power conversion systems from Oztek.

Oztek designs power conversion systems (PCS) for commercial and industrial battery energy storage applications.

### Supported devices

* **OZpcs Power Conversion System**: grid-tied battery power conversion system
* **Generic**: generic Oztek power conversion system

The Oztek PCS connects over a standard **SunSpec Modbus TCP** interface, so no brand-specific adapter is required on the controller.

{% hint style="warning" %}
The Oztek PCS must be set to **Remote control** so it accepts the EMS setpoints. In local mode the system ignores the EMS and an incident is raised.
{% endhint %}

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of the power conversion system status and performance
* Smart charging and discharging control
* Optimization of self-consumption
* Peak shaving and load balancing

Additional functionality may be added over time as integration capabilities evolve.


# Poweroad

Our EMS fully supports integration with energy storage solutions from Poweroad. Poweroad is a leading provider of lithium-ion battery systems, power conversion solutions, and modular energy storage pl

Our EMS supports energy storage solutions from Poweroad.

Poweroad provides lithium-ion battery systems, power conversion solutions, and modular energy storage platforms.

### Supported devices

Our EMS works with the following Poweroad devices:

* **Poweroad All in One (Air Cooling)**
* **Poweroad All in One (Liquid Cooling)**
* **Poweroad FLEX 261 AIO (Liquid Cooling)**
* **Poweroad PMS (Old Version 1.7.4)**
* **Poweroad PMS (New Version)**

Through these integrations, our EMS can centrally manage battery operation, optimize energy flows, and ensure high system reliability.

### EMS functionality

By integrating Poweroad systems, our EMS enables:

* Intelligent charging and discharging of batteries
* Peak shaving, load balancing, and demand response
* Optimization of solar self-consumption
* Backup power and off-grid operation
* Scalable management of hybrid and industrial energy systems

This partnership ensures that Poweroad devices perform optimally within our EMS, creating a seamless and future-proof energy management solution.

<figure><img src="/files/byCCvMEdniSOqqjoi32Z" alt=""><figcaption></figcaption></figure>


# Power Vault

Our EMS supports energy storage systems from Power Vault.

Power Vault offers battery solutions for efficient energy storage and optimization in residential and commercial environments.

### Supported devices

We support:

* **Power Vault Battery System**: integrated energy storage solution for daily energy management and backup applications

This system can be connected to our EMS for centralized monitoring and control.

### Integration scope

The integration with Power Vault focuses on enabling stable communication and essential control features within our EMS environment. This allows the system to be included in broader energy management strategies alongside other supported devices.

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of battery status and performance
* Smart charging and discharging control
* Optimization of self-consumption
* Peak shaving and basic load management

Additional functionality may be added over time as integration capabilities evolve.

<figure><img src="/files/lJRj8ssDfPIQSrOXz1H4" alt=""><figcaption></figcaption></figure>


# Pylontech

Pylontech integration within our EMS

Our EMS supports utility-scale battery systems from Pylontech.

Pylontech specializes in lithium battery storage systems for residential, commercial, and utility-scale applications.

The integration connects to the Pylontech LEMS (Local Energy Management System) controller, which presents one or more high-voltage battery racks as a single system. The EMS reads the aggregated state of charge, state of health, voltages, currents, power limits, cell diagnostics, and nominal capacity directly from the LEMS over Modbus TCP.

### Supported devices

We support the following Pylontech systems:

**LEMS**

* **LEMS controller** fronting 1500 V-class battery racks (e.g. **PowerCube-M5A**)

The battery is integrated as a standalone BMS device and pairs with a separate PCS (e.g. the [Sinexcel PWS1-1725KTL-H](/device-integrations/battery-systems/sinexcel)) for charge and discharge control.

### EMS functionality

With the current integration, our EMS enables:

* Live monitoring of state of charge, state of health, voltages, currents, and cell temperatures
* Charge and discharge power envelopes based on the limits reported by the LEMS
* Intelligent charging and discharging of the connected battery through the paired PCS
* Peak shaving, load balancing, and demand response
* Optimization of solar self-consumption

Additional functionality may be added over time as integration capabilities evolve.


# RCT Power

Supported devices: CESS 1044-500-01D, CESS 783-375-01D

Our EMS supports battery energy storage systems from **RCT Power**, distributed in the Benelux by **EcoPowerCell**.

RCT Power develops commercial energy storage systems (CESS) that combine a battery (BMS) and a power conversion system (PCS) for commercial and industrial installations. The integration allows the CESS to be monitored and controlled directly from our EMS platform.

### Supported devices

We support the following RCT Power systems:

* **CESS 1044-500-01D**: commercial energy storage system, 1044 kWh capacity / 500 kW rated power
* **CESS 783-375-01D**: commercial energy storage system, 783 kWh capacity / 375 kW rated power

{% hint style="info" %}
RCT Power support is available from EMS controller version **0.0.268**.
{% endhint %}

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of battery status and performance
* Smart charging and discharging control
* Optimization of self-consumption
* Peak shaving and load balancing

Additional functionality may be added over time as integration capabilities evolve.

### Add an RCT Power CESS to the EMS

Add the system through the device wizard:

* **Brand:** RCT Power
* **Model:** the matching **CESS** model
* **Connection:** over the installation network (Modbus TCP).


# Risen Storage

Our EMS supports energy storage systems from Risen Storage.

Risen develops containerized and cabinet-based battery energy storage solutions for commercial, industrial, and grid-scale applications.

The integration allows the system to be monitored and controlled directly from our EMS platform.

### Supported devices

We support the following Risen Storage system:

* **SU215e105lm**: battery energy storage system (≈215 kWh)

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of battery status and performance
* Smart charging and discharging strategies
* Peak shaving and load balancing
* Integration in commercial, industrial, and grid-scale energy systems

Additional functionality may be added over time as integration capabilities evolve.


# SAJ

SAJ CHS2 series hybrid inverter integration within our EMS

Our EMS supports the **SAJ CHS2 series** of three-phase hybrid inverters.

SAJ is a manufacturer of solar and storage inverters. The CHS2 series is a **hybrid inverter**: a single unit that combines the battery power conversion system (PCS), the PV inverter, and an optional grid metering point in one device. Because everything lives behind one Modbus connection, our EMS exposes the inverter as several logical devices (battery, PV, grid meter) that are all served by the same integration.

### Supported devices

We support the following SAJ CHS2 models:

| Model           | Rated AC power |
| --------------- | -------------- |
| CHS2-29.9K-T4-X | 29.9 kW        |
| CHS2-30K-T4-X   | 30 kW          |
| CHS2-40K-T5-X   | 40 kW          |
| CHS2-49.9K-T6-X | 49.9 kW        |
| CHS2-50K-T6-X   | 50 kW          |
| CHS2-63K-T6-X   | 63 kW          |

All models use the same integration and communicate over **Modbus TCP** (default port `502`, slave id `1`).

## How the integration works

A single CHS2 inverter is modelled in our EMS as one parent device with up to three child devices, all driven from the same Modbus connection:

* **PCS (battery inverter)** — the parent device. Receives the charge/discharge commands and reports battery power.
* **BMS** — reports state of charge, voltage, current and temperature of the connected battery.
* **PV** — reports the combined PV string production.
* **Grid meter** — the inverter's own CT measurement, exposed as a grid energy meter. Only active when a CT is physically installed and configured on the inverter (see below).

Battery capacity and the minimum/maximum state of charge are configured on the BMS child device; the rated power is configured on the PCS. There is no separate wiring or extra Modbus device to add — the children are created automatically from the parent.

### Control approach

We steer the inverter through its **EMS interface**. Every control cycle (≈1 s) we refresh a keep-alive register so the inverter stays under EMS control, and we (re)assert the requested power command. Which command we send depends on whether a grid CT meter is present:

* **With a CT meter → inverter-dispatch mode.** We steer a *net grid target*: the inverter balances PV, battery and grid to hit that target. This enables self-consumption, grid charging and net-export limiting.
* **Without a CT meter → battery-scheduling mode.** We send a *direct battery setpoint* (charge/discharge power), because a grid-referenced target cannot be regulated without a meter to measure against.

The CHS2 protocol has no dedicated PV power-limit register. When PV curtailment is required, we achieve it *indirectly* by lowering the net grid target (inverter-dispatch mode only), so surplus PV is routed into the battery and the inverter curtails PV itself once the battery can no longer absorb it.

## What is possible with which setup

The single most important factor is **whether a grid CT meter is installed and enabled** on the inverter (the inverter's `MeterModeSet` must be set to a grid-metering option in the SAJ installer app). This decides which EMS mode the inverter can run in, and therefore what is possible.

### Setup A — With a grid CT meter (recommended)

This is the full-functionality setup. The inverter runs in **inverter-dispatch mode** and can regulate against the measured grid point.

* Full monitoring, including real grid import/export.
* Battery discharge to a setpoint.
* Battery charging from **both PV and the grid**.
* Solar self-consumption (the inverter balances the grid to zero on its own meter).
* PV curtailment (indirect, via the net grid target).
* Grid import/export limiting.

### Setup B — Without a grid CT meter

Without a CT the inverter runs in **battery-scheduling mode** with direct battery setpoints. This is meter-independent and works out of the box, but with important limits.

* Monitoring of battery and PV. **No grid measurement** (the grid-meter device reads zero, since there is nothing to measure).
* Battery **discharge** to a setpoint — works fully.
* Battery **charging from PV surplus** — works.
* Battery **charging from the grid** — **not possible**. The inverter firmware will not import from the grid to charge the battery without a CT; charge power is effectively capped at the available PV.
* No self-consumption mode and no PV curtailment.

### Capability matrix

| Capability                    | Setup A (with CT) | Setup B (without CT) |
| ----------------------------- | :---------------: | :------------------: |
| Battery / PV monitoring       |         ✅         |           ✅          |
| Grid import/export monitoring |         ✅         |           ❌          |
| Discharge to setpoint         |         ✅         |           ✅          |
| Charge from PV                |         ✅         |           ✅          |
| **Charge from grid**          |         ✅         |         **❌**        |
| Self-consumption (net-zero)   |         ✅         |           ❌          |
| PV curtailment                |         ✅         |           ❌          |
| Grid limit (import/export)    |         ✅         |    Discharge side    |

> **Key takeaway:** to charge the battery from the grid, a CT meter is required. Without one, the inverter only charges from solar. Discharging does not need a meter and works in both setups.

## Configuration parameters

Beyond the standard battery parameters (capacity, min/max state of charge), the SAJ CHS2 PCS exposes:

* **Rated power (kW)** — the inverter's nominal AC power. Pre-filled from the selected model.
* **Allow self-consumption mode** — controls whether the inverter is allowed to use its own self-consumption (net-zero) balancing when the strategy asks for it:

  * `automatic` (default) — use self-consumption when a CT is present and no PV curtailment is active.
  * `yes` — same behaviour; self-consumption is allowed whenever the control mode requests it.
  * `no` — never hand balancing to the inverter; the EMS always steers an explicit grid target.

  This setting only has an effect in Setup A (with a CT). Without a CT the inverter runs in battery-scheduling mode, where this setting does not apply.

## Validation status

Direct battery control in battery-scheduling mode (Setup B) has been validated on hardware: a 5 kW discharge command is followed accurately, and the integration correctly falls back to battery-scheduling mode when no CT is configured. Grid-referenced control (Setup A) requires a CT to be present and is validated as part of a CT-equipped commissioning.

Additional functionality may be added over time as integration capabilities evolve.


# SCU

Our EMS supports energy storage solutions from SCU.

SCU provides battery energy storage systems for commercial, industrial, and grid-related applications.

### Supported devices

We support the following SCU systems:

* **SCU BRES**
* **SCU GRES**

These systems can be integrated into our EMS for centralized control and monitoring.

### Integration scope

The integration with SCU systems enables reliable communication and control within our EMS platform. This allows SCU installations to be incorporated into broader energy management setups and combined with other supported technologies.

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of system status and performance
* Smart charging and discharging strategies
* Peak shaving and load balancing
* Integration in commercial and industrial energy systems

Further enhancements and additional functionality may be introduced as integration capabilities continue to evolve.

<figure><img src="/files/NrvH22iEsSDr4XKreiNl" alt=""><figcaption></figcaption></figure>


# Sinexcel

Sinexcel integration within our EMS

Our EMS supports power conversion systems from Sinexcel.

Sinexcel specializes in bidirectional power conversion systems and power electronics for battery energy storage in commercial, industrial, and grid-scale applications.

The integration allows Sinexcel PCS units to be monitored and controlled directly from our EMS platform.

### Supported devices

We support the following Sinexcel systems:

**PWS1 series**

* **PWS1-500KTL-EX-M1**
* **PWS1-500KTL-EX-M2**
* **PWS1-500KTL-EX-M3**
* **PWS1-500KTL-EX-M4**
* **PWS1-500KTL-EX-M5**
* **PWS1-500KTL-EX-M6**
* **PWS1-500KTL-EX-M7**
* **PWS1-500KTL-EX-M8**

**Isuna series**

* **Isuna 10000T**
* **Isuna 12000T**
* **Isuna 15000T**
* **Isuna 20000T**

**PWS1-1725KTL-H**

* **PWS1-1725KTL-H (1,725 kW utility-scale PCS)**

The PWS1-1725KTL-H is a standalone PCS: the battery is integrated as a separate standalone BMS device (e.g. the [Pylontech LEMS](/device-integrations/battery-systems/pylontech)). It uses a different Modbus protocol than the PWS1-500KTL-EX series, so it is a separate integration.

### EMS functionality

With the current integration, our EMS enables:

* Intelligent charging and discharging of the connected battery
* Peak shaving, load balancing, and demand response
* Optimization of solar self-consumption
* Scalable management of industrial and grid-scale storage systems

Additional functionality may be added over time as integration capabilities evolve.


# SolaX

SolaX integration within our EMS

Our EMS supports energy storage solutions from SolaX.

SolaX develops hybrid inverters and energy storage systems for residential, commercial, and industrial applications.

The integration is established through the SolaX **EMS1000** energy management unit, which exposes the SolaX system to our EMS platform for centralized monitoring and control.

### Supported devices

We support the following SolaX system:

* **EMS1000**: energy management unit that connects the SolaX storage system to our EMS

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of battery status and performance
* Smart charging and discharging control
* Optimization of self-consumption
* Peak shaving and load balancing

Additional functionality may be added over time as integration capabilities evolve.


# Teplore

Our EMS supports battery systems from Teplore.

Teplore develops compact and modular energy storage solutions for residential and small commercial applications.

### Supported devices

We support:

* **Teplore V1 Battery System**: compact battery solution for efficient energy storage and daily cycling
* **Teplore V2 Battery System**: battery inverter for residential and commercial storage

**Network Gateway**: 5002

This system can be integrated into our EMS for centralized monitoring and control.

### Integration scope

The integration with Teplore focuses on enabling reliable communication and core control functionalities within our EMS platform. This allows the Teplore V1 system to be used as part of a broader energy management setup.

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of battery status and performance
* Smart charging and discharging control
* Optimization of self-consumption
* Integration in residential and small-scale energy systems

Additional features and extended support may be introduced as the integration evolves.

<figure><img src="/files/d77wXNgwkgtH45Knaxw9" alt=""><figcaption></figcaption></figure>


# Victron

Our EMS supports battery systems from Victron.

Victron develops compact and modular energy storage solutions for residential and small commercial applications.

### Supported devices

We support all Victron battery/hybrid inverters that expose themselves through the VE.Bus service of a Venus OS GX device (Cerbo GX, CCGX, Venus GX, MultiPlus-II GX, …):

* **Victron MultiPlus**: compact solution for efficient energy storage and daily battery cycling
* **Victron MultiPlus-II**: enhanced hybrid inverter/charger for advanced energy management
* **Victron Quattro**: flexible dual-input power solution for off-grid and backup systems
* **Victron Quattro-II**: next-generation dual-input inverter/charger for demanding energy setups
* **Victron EasySolar-II**: all-in-one inverter/charger with built-in MPPT solar charger

## System topology

The integration communicates over **Modbus TCP with the GX device**, not with the inverters directly. The GX device exposes every connected Victron component as a separate Modbus unit ID:

| Component                                 | Modbus unit ID                                               |
| ----------------------------------------- | ------------------------------------------------------------ |
| System / settings service                 | `100` (fixed)                                                |
| VE.Bus inverter/charger                   | The VE.Bus service unit ID (e.g. `227`, `229`, …)            |
| GX managed battery (BMS)                  | `225`                                                        |
| DC-coupled MPPT solar chargers            | Device instance (VE.Can: `1`+, VE.Direct ports: `223`–`247`) |
| AC-coupled PV inverters (Fronius, ABB, …) | `20`–`29`                                                    |
| Victron grid meters                       | `30`–`34`                                                    |

Check the unit IDs on the GX device under **Settings → Integrations → Modbus TCP server → Available services**. The EMS scans these ranges when the device is added and creates the child devices (BMS, MPPT solar chargers, PV inverters, grid meter) automatically.

The EMS models the system as one parent **PCS** device (the VE.Bus inverter/charger) with child devices:

* **PCS (battery inverter)** — receives the charge/discharge setpoints and reports battery power, voltage, current and the VE.Bus state.
* **BMS (GX managed battery)** — reports state of charge, allowed charge/discharge power and battery health from the battery that is managed by the GX (DVCC).
* **PV (DC-coupled MPPT solar chargers)** — one child device per MPPT, reporting PV power and yield.
* **PV (AC-coupled PV inverters)** — PV inverters that the GX monitors on AC-in or AC-out.
* **Grid meter** — a Victron energy meter configured as grid meter, when present.

## Control approach

### External control with setpoint compensation

The EMS puts the Victron ESS in **external control** (ESS mode 3) and writes per-phase AC power setpoints to the VE.Bus service each control cycle (≈1 s).

An important Victron particularity: the ESS power setpoint steers the power at the **AC input** of the inverter, not the battery power. Two other flows move the battery besides the setpoint:

* **Loads on AC-out** are supplied by the inverter on top of the setpoint. Without correction, a battery setpoint of 0 kW would still discharge the battery into the AC-out loads.
* **DC-coupled MPPT solar chargers** (and other DC sources/loads) charge the battery directly. Without correction, morning PV would charge the battery even when the EMS asks for 0 kW.

The EMS therefore continuously measures the inverter's AC output power (net loads on AC-out, including any AC-coupled PV on the output), the DC-coupled PV power, DC charger power and DC system power on the GX, and compensates the written setpoint so the **battery** ends up at the requested charge/discharge power:

```
AC setpoint = requested battery power
            + AC output power (net AC-out loads)
            − DC-coupled PV − DC charger power
            + DC system power
```

The setpoint is split over the phases that actually exist (the phase count is read from the VE.Bus system), so single-phase and three-phase systems both receive the full requested power.

Battery power follows the EMS convention: **positive = charge, negative = discharge**.

### Self-consumption mode

When a **Victron grid meter** is connected to the GX and the EMS control mode allows it, the EMS can hand local balancing over to Victron's own ESS self-consumption logic (ESS mode 1) instead of writing explicit setpoints. Without a Victron grid meter the inverter cannot measure grid power itself, so the EMS always drives explicit setpoints.

### DC-coupled PV and inverter capacity

DC-coupled MPPT solar chargers feed the same DC bus as the battery, so any solar power the EMS does not want stored has to leave through the inverter's AC connection. The battery therefore follows the EMS setpoint accurately only as long as the inverter can physically deliver it.

When the DC-coupled PV exceeds what the inverter can push out on AC (bounded by its rated AC power, and reduced further by any load it is already serving on AC-out), the surplus cannot leave through AC and charges the battery instead. In that situation the EMS cannot hold the battery at zero or discharge it while that much sun is present, and once the battery is full the MPPTs curtail themselves. For full EMS control of the battery under peak sun, size the inverter's AC rating at or above the DC-coupled PV peak.

### PV curtailment

* **DC-coupled MPPT solar chargers** can be switched fully on or off, but Victron MPPTs expose no variable power limit over Modbus, so partial curtailment is not possible. A DC-coupled PV surplus is instead absorbed by the battery, or curtailed by the MPPTs themselves once the battery is full.
* **AC-coupled PV inverters** are steered through their own PV-inverter integration, not through the Victron GX. Leave them in unmanaged mode when the EMS should only monitor them.

## What is read back

| Quantity                              | Source                                                        |
| ------------------------------------- | ------------------------------------------------------------- |
| **Battery power / voltage / current** | GX system service (battery as managed by DVCC)                |
| **State of charge**                   | GX system service / GX managed battery                        |
| **DC-coupled PV power**               | GX system service + per-MPPT solar charger services           |
| **AC output power (AC-out loads)**    | VE.Bus service                                                |
| **VE.Bus state / errors / alarms**    | VE.Bus service (bulk, absorption, float, external control, …) |
| **Grid frequency**                    | VE.Bus AC input                                               |

Energy counters on the VE.Bus service are volatile (they reset when the GX or the inverter restarts), so the EMS accumulates energy from the power measurements instead.

## Configure Victron within our EMS

{% stepper %}
{% step %}

### Enable Modbus TCP

On the GX device, open **Settings → Integrations → Modbus TCP server** and enable it. Note the unit IDs listed under **Available services**.
{% endstep %}

{% step %}

### Configure ESS

Install the ESS assistant on the inverter and configure ESS on the GX device. The EMS controls the ESS mode itself; no specific ESS mode needs to be pre-selected.
{% endstep %}

{% step %}

### Disable scheduled charging

Disable scheduled charging before connecting the device to the EMS, so the GX does not overrule the EMS setpoints.
{% endstep %}

{% step %}

### Add the device in the platform

Add the Victron PCS with the GX IP address and the **VE.Bus unit ID** as slave ID. The EMS discovers the battery, MPPT solar chargers, PV inverters and grid meter automatically.
{% endstep %}
{% endstepper %}

{% hint style="warning" %}
If these steps are not followed the system will not work!!
{% endhint %}

<figure><img src="/files/G1NRvgzJMtCsrVdawhXi" alt=""><figcaption></figcaption></figure>


# Energy meters

Our EMS integrates with a range of energy meters used for grid and sub-circuit measurement. Meters provide the measurement data that control strategies such as peak shaving and capacity management rely on.

{% hint style="info" %}
Select a brand below for the supported devices, or see the [Overview list](/device-integrations/overview-list) for all supported brands and models.
{% endhint %}


# BMR

Supported devices: PLA33 & PLA33RX

### Configure the meter

We need this software to configure the BMR.

![](/files/3GKbiBy7qhym5IIkb4d1)

{% stepper %}
{% step %}

### Open service mode

In most cases, the device is set to **DHCP**. However, it is still important to verify the **CT ratio of the main measurement**, to avoid incorrect main readings. Open the software and go to service mode.

If necessary, this can be adjusted in the **Communication** tab.
{% endstep %}

{% step %} <img src="/files/szIN8izPj5b4ZD50QW9F" alt="" data-size="original">
{% endstep %}

{% step %}

### Write the configuration

Next, we **click “Write configurations” twice**, search for the configured **IP address**, and enter it.
{% endstep %}

{% step %} <img src="/files/H8yuoRB0IxVc2hlufOck" alt="" data-size="original">
{% endstep %}

{% step %}

### Set the CT ratio

The last step, and the most important one, is to correctly configure the **current transformers (CTs)**.\
In our case, **CTs with a ratio of 250/5** are used. This ratio can be read on the CTs installed on the main measurement, through which the power cable passes.\
After that, we press **“Write config”** once more.
{% endstep %}
{% endstepper %}

<figure><img src="/files/nagSw7DhlxEo9GsVjRzi" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
When checking the **phasor diagram**, all same-color vectors should be close to each other. In this case, they are not, because **solar panels** are installed at the site. It is recommended to **temporarily switch off the PV system** and confirm the measurement again. Otherwise, an installation error may occur.
{% endhint %}

### Configure the meter

We need this software to configure the BMR.

![](/files/3GKbiBy7qhym5IIkb4d1)

{% stepper %}
{% step %}

### Open service mode

In most cases, the device is set to **DHCP**. However, it is still important to verify the **CT ratio of the main measurement**, to avoid incorrect main readings. Open the software and go to service mode.

If necessary, this can be adjusted in the **Communication** tab.
{% endstep %}

{% step %} <img src="/files/szIN8izPj5b4ZD50QW9F" alt="" data-size="original">
{% endstep %}

{% step %}

### Write the configuration

Next, we **click “Write configurations” twice**, search for the configured **IP address**, and enter it.
{% endstep %}

{% step %} <img src="/files/H8yuoRB0IxVc2hlufOck" alt="" data-size="original">
{% endstep %}

{% step %}

### Set the CT ratio

The last step, and the most important one, is to correctly configure the **current transformers (CTs)**.\
In our case, **CTs with a ratio of 250/5** are used. This ratio can be read on the CTs installed on the main measurement, through which the power cable passes.\
After that, we press **“Write config”** once more.
{% endstep %}
{% endstepper %}

<figure><img src="/files/nagSw7DhlxEo9GsVjRzi" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
When checking the **phasor diagram**, all same-color vectors should be close to each other. In this case, they are not, because **solar panels** are installed at the site. It is recommended to **temporarily switch off the PV system** and confirm the measurement again. Otherwise, an installation error may occur.
{% endhint %}

<figure><img src="/files/smWHa727gKmiti08pt3i" alt=""><figcaption></figcaption></figure>


# PLA 33

Supported Devices: BMR PLA33,

### Configure the meter

We need this software to configure the BMR.

![](/files/3GKbiBy7qhym5IIkb4d1)

{% stepper %}
{% step %}

### Open service mode

In most cases, the device is set to **DHCP**. However, it is still important to verify the **CT ratio of the main measurement**, to avoid incorrect main readings. Open the software and go to service mode.

If necessary, this can be adjusted in the **Communication** tab.
{% endstep %}

{% step %} <img src="/files/szIN8izPj5b4ZD50QW9F" alt="" data-size="original">
{% endstep %}

{% step %}

### Write the configuration

Next, we **click “Write configurations” twice**, search for the configured **IP address**, and enter it.
{% endstep %}

{% step %} <img src="/files/H8yuoRB0IxVc2hlufOck" alt="" data-size="original">
{% endstep %}

{% step %}

### Set the CT ratio

The last step, and the most important one, is to correctly configure the **current transformers (CTs)**.\
In our case, **CTs with a ratio of 250/5** are used. This ratio can be read on the CTs installed on the main measurement, through which the power cable passes.\
After that, we press **“Write config”** once more.
{% endstep %}
{% endstepper %}

<figure><img src="/files/nagSw7DhlxEo9GsVjRzi" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
When checking the **phasor diagram**, all same-color vectors should be close to each other. In this case, they are not, because **solar panels** are installed at the site. It is recommended to **temporarily switch off the PV system** and confirm the measurement again. Otherwise, an installation error may occur.
{% endhint %}

<figure><img src="/files/z0POr16VZVAPLQq5Ug8n" alt=""><figcaption></figcaption></figure>


# Carlo Gavazzi

Supported devices: EM24

Our EMS supports energy meters from Carlo Gavazzi.

{% hint style="info" %}
Select a model below for details.
{% endhint %}


# EM24

### Configuration <a href="#configuration" id="configuration"></a>

Check that the Carlo Gavazzi meter is set to read both import and export power. An unsuitable mode may lead to:

* Missing readings of feed-in, or
* Feed-in being counted as offtake (on top of the ‘actual offtake’)

You can set this in the ‘MEASurE’ configuration menu on the energy meter. This should be set to ‘b’.

Warning

**Warning**

This setting may not be present on MID certified models (model numbers ending in PFA and PFB).

![Image 1](/files/ga9KAuzg1OLL01WCx60B)

{% hint style="info" %}
**NOTE: RS485 Device Addresses**

* You MUST give each device on the RS485 bus a unique address. Check the manual of the device on how to do this.
* Use lower addresses first (1, 2, ...)
* For each device, it is generally recommended to stick with the factory default baud rate, parity, and stop bits.

Set the Modbus address through the power meter's “Address” configuration menu.
{% endhint %}

<figure><img src="/files/HGrLY4KlyWd3kTCVAKus" alt="Carlo Gavazzi logo"><figcaption></figcaption></figure>


# Eastron

Supported devices: Eastron SDM630


# Eastron SDM 630

### Configuration TCP <a href="#configuration" id="configuration"></a>

Go true the settings and give the meter a static ip and the right gateway...

### Configuration RS485 <a href="#configuration" id="configuration"></a>

{% hint style="warning" %}
**NOTE: RS485 Device Addresses**

* You MUST give each device on the RS485 bus a unique address. Check the manual of the device on how to do this.
* Use lower addresses first (1, 2, ...)
* For each device, it is generally recommended to stick with the factory default baud rate, parity, and stop bits.
  {% endhint %}


# EME

Supported devices: EME eCON+

Our EMS supports integration with energy meters from EME.

The **eCON+** is a multi-function power measurement and monitoring device that communicates with our EMS over Modbus TCP and provides the measurement data needed for monitoring and control.

### Supported devices

* **eCON+**: multi-point energy meter

The eCON+ is built into the mains-decoupling panel. A single eCON+ can expose several measuring points (PMDs) — for example the grid connection, the production/storage behind the decoupling, and the individual assets. The main measuring point is read directly; the additional measuring points are made available as separate meters within the platform, so each circuit can be monitored individually.

{% hint style="info" %}
The same eCON+ panel can also act as a telecontrole interface. See [EME eCON+](/dso-rtu/grid-operators/eme-econ-plus) in the DSO RTU section.
{% endhint %}

### EMS functionality

With the current integration, our EMS enables:

* Accurate measurement of grid and sub-circuit energy flows
* Real-time monitoring of power and energy data
* Use of the meter as a reference point for control strategies such as peak shaving and capacity management

Additional functionality may be added over time as integration capabilities evolve.

<figure><img src="/files/LZBeizqDVoQnrctikOk2" alt=""><figcaption></figcaption></figure>


# Fluvius

Supported devices: Industrial meter (A1), Residential meter (P1)

Our EMS can read out the Belgian digital meters installed by the grid operator Fluvius. Depending on the installation, the meter is read via the **A1 port** (industrial) or the **P1 port** (residential). Select a model below for details.

{% hint style="danger" %}
**Caution**

Crucial: Activate the P1 Port first! By default, the User Port (P1) on the digital meter is **closed**. The Controller cannot detect the meter if the port is not active.

1. Log in to [mijn.fluvius.be](https://mijn.fluvius.be/).
2. Go to **Producten & Diensten** > **Verbruik** > **Beheer poorten**.
3. **Enable** the P1 port.
4. **Check the display on the meter:** A small triangle arrow (▼) must be visible above the text **"P1"**. If this arrow is missing, the port is dead.
   {% endhint %}

### Connection <a href="#connection" id="connection"></a>

#### 1. Wiring <a href="#id-1-wiring" id="id-1-wiring"></a>

Connect the Digital Meter to the Controller using a **P1 Cable** (USB to RJ12).

1. Locate the yellow rubber cover labeled **P1** on the right side of the meter.
2. Plug the **RJ12 connector** into the P1 port.
3. Plug the **USB connector** into the Controller.

{% hint style="warning" %}
**Warning**

P1 vs S1 Do **not** use the **S1** port (often an RJ45 port on top). This is for the grid operator only. You must use the **P1** user port on the side.
{% endhint %}


# Industrial meter (A1 Port Only)

### Industrial meter (A1) installation guide

This guide applies **only to installations using an industrial meter connected via the A1 port**, typically found in medium- or high-voltage systems.

***

### Step 1: Physical connection

Connect the industrial meter to the Controller using the designated **A1 interface** as specified by the meter manufacturer.

* Verify that the A1 wiring is correctly terminated
* Ensure polarity and phase order are respected
* Confirm the Controller is powered on before configuration

***

### Step 2: Add the A1 meter to the system

When registering a new A1 meter in the system, you will be prompted to configure **scaling factors**. These parameters are critical for accurate measurements and must match the transformer ratios used in the installation.

***

### Step 3: Configure scaling factors

Industrial meters measure secondary values from transformers. The system converts these into real-world values using scaling factors.

**Voltage Scaling Factor**

* Represents the ratio of the **voltage transformer (TP)**
* Default value: **110.0 V**
* Adjust only if a voltage transformer is present
* **Example**\
  If the installation uses a **15400 V / 110 V** Voltage transformer, the correct voltage scaling factor is:

```
15400 ÷ 110 = 140
```

**Current Scaling Factor**

* Represents the ratio of the **current transformer (TI)**
* Default value: **5.0 A**
* **Example**\
  If the installation uses a **100 A / 5 A** current transformer, the correct current scaling factor is:

```
100 ÷ 5 = 20
```

**Total scaling factor**

* Represents the ratio of the current and voltage transformers together.
* **Example**\
  If the installation uses a **140 (TP) x 20 (TI)** transformer, the correct total scaling factor is:

  ```
  140 x 20 = 7000
  ```

***

<figure><img src="/files/XT4A5c4NwKZDs8HMCOjz" alt=""><figcaption></figcaption></figure>

### Step 4: Verification

After configuration, verify correct operation:

* Check that voltage, current, and power values are displayed
* Compare readings against known reference values or utility data
* Confirm phase balance and direction of power flow

***

### Troubleshooting

<table><thead><tr><th width="250.3636474609375">Issue</th><th>Likely Cause &#x26; Resolution</th></tr></thead><tbody><tr><td>No data from meter</td><td>Incorrect A1 wiring or communication settings; verify connections and meter protocol</td></tr><tr><td>Values too high or too low</td><td>Scaling factors do not match TP/TI ratios; recheck transformer specifications</td></tr><tr><td>Negative or reversed power</td><td>Phase order or TI polarity is incorrect; verify installation wiring</td></tr><tr><td>No Voltage displayed</td><td>Some older meters (DSMR 2.2) or specific brands (Landis+Gyr) do not send voltage data. This is a limitation of the meter itself, not the controller.</td></tr><tr><td>Unstable readings</td><td>Loose connections or incorrect grounding; inspect wiring and shielding</td></tr></tbody></table>

***

### Notes for installers

* Always document CT/PT ratios


# Residential meter ( P1 Port Only)

Our EMS can read the Belgian digital meter installed by Fluvius through its **P1 port**. This is the user port available on residential digital meters, exposing real-time consumption and injection data.

A P1 reader connected to this port forwards the meter data to our EMS, where it is used as a measurement reference.

{% hint style="danger" %}
**Caution**

Crucial: Activate the P1 Port first! By default, the User Port (P1) on the digital meter is **closed**. The Controller cannot detect the meter if the port is not active.

1. Log in to [mijn.fluvius.be](https://mijn.fluvius.be/).
2. Go to **Producten & Diensten** > **Verbruik** > **Beheer poorten**.
3. **Enable** the P1 port.
4. **Check the display on the meter:** A small triangle arrow (▼) must be visible above the text **"P1"**. If this arrow is missing, the port is dead.
   {% endhint %}

### Connection <a href="#connection" id="connection"></a>

#### 1. Wiring <a href="#id-1-wiring" id="id-1-wiring"></a>

Connect the Digital Meter to the Controller using a **P1 Cable** (USB to RJ12).

1. Locate the yellow rubber cover labeled **P1** on the right side of the meter.
2. Plug the **RJ12 connector** into the P1 port.
3. Plug the **USB connector** into the Controller.

{% hint style="warning" %}
**Warning**

P1 vs S1 Do **not** use the **S1** port (often an RJ45 port on top). This is for the grid operator only. You must use the **P1** user port on the side.
{% endhint %}

### Troubleshooting <a href="#troubleshooting" id="troubleshooting"></a>

<table><thead><tr><th width="191.27276611328125">Problem</th><th>Possible Cause &#x26; Solution</th></tr></thead><tbody><tr><td><strong>Meter not found</strong></td><td><strong>P1 Port inactive:</strong> Check the Fluvius portal. Is the arrow (▼) visible above "P1" on the LCD display?</td></tr><tr><td><strong>Meter not found</strong></td><td><strong>Wrong Port:</strong> Ensure the cable is in the P1 port (RJ12), not the S1 port.</td></tr><tr><td><strong>Meter not found</strong></td><td><strong>Cable issue:</strong> Use a verified P1 cable. Standard telephone cables often do not work because the signal lines are inverted.</td></tr></tbody></table>

### EMS functionality

With the current integration, our EMS enables:

* Real-time monitoring of grid consumption and injection
* Use of the meter as a reference point for control strategies such as self-consumption optimization and capacity management

For larger installations measured on the **A1 port**, see [Industrial meter (A1 Port Only)](/device-integrations/energy-meters/fluvius/industrial-meter-a1-port-only).


# Phoenix Contact

Supported devices: EEM-MA370 / EEM-MA371 series

{% hint style="info" %}
This parameter must be set as shown in the image. If it is not configured this way, you can change it by logging into the web interface using the password **adm1n**.
{% endhint %}

### Configuration <a href="#configuration" id="configuration"></a>

In the interface of the meter, set the Modbus settings as indicated in the screenshot.

* Modbus TCP should be enabled
* Compatibility mode should be disabled

<figure><img src="/files/lQCKJJhCtm1ixXqjcKEd" alt=""><figcaption></figcaption></figure>


# EEM-MA37(0)-1

{% hint style="info" %}
This parameter must be set as shown in the image. If it is not configured this way, you can change it by logging into the web interface using the password **adm1n**.
{% endhint %}

<figure><img src="/files/lQCKJJhCtm1ixXqjcKEd" alt=""><figcaption></figcaption></figure>


# Schneider


# iEM3000 series

Our EMS supports the Schneider Electric **iEM3000 series** of three-phase DIN-rail energy meters with Modbus communication, used for grid and sub-circuit measurement in commercial and industrial installations.

These meters communicate with our EMS over Modbus and share the same Modbus register map, so a single integration covers the supported models.

### Supported devices

* **iEM3555**: three-phase energy meter with Modbus communication
* **iEM3155** *(beta)*: three-phase energy meter with Modbus communication
* **iEM3255** *(beta)*: three-phase energy meter with Modbus communication
* **iEM3355** *(beta)*: three-phase energy meter with Modbus communication
* **iEM3455** *(beta)*: three-phase energy meter with Modbus communication

{% hint style="info" %}
The iEM3155, iEM3255, iEM3355 and iEM3455 integrations are currently available as a beta integration.
{% endhint %}

### EMS functionality

With the current integration, our EMS enables:

* Accurate measurement of grid and sub-circuit energy flows
* Real-time monitoring of power and energy data
* Use of the meter as a reference point for control strategies such as peak shaving and capacity management


# PAS600

Our EMS supports the Schneider Electric **PAS600** energy meter. The PAS600 is a three-phase energy meter used for grid and sub-circuit measurement in commercial and industrial installations.

The meter communicates with our EMS over Modbus and provides the measurement data needed for monitoring and control.

### Supported devices

* **PAS600**: three-phase energy meter with Modbus communication

### EMS functionality

With the current integration, our EMS enables:

* Accurate measurement of grid and sub-circuit energy flows
* Real-time monitoring of power and energy data
* Use of the meter as a reference point for control strategies such as peak shaving and capacity management


# Siemens

Supported devices: Pac


# Siemens PAC energy meter

Supported Devices: Siemens PAC 2200,

{% stepper %}
{% step %}

### Access the menu

To change the settings, navigate using the meter's display.

<figure><img src="/files/QCmaFPV31sInhmzuR2M4" alt=""><figcaption></figcaption></figure>

* Press the bottom button (F4) to open the main menu.
* Navigate to Settings.

<figure><img src="/files/86QPK7y5b623I3nJigh0" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Configure network and communication

Use a stable network connection. A static IP address is recommended.

In the **Settings** menu, go to **Communication**.

<figure><img src="/files/FEXNqhviJ6WohGadLvLx" alt=""><figcaption></figcaption></figure>

* Select Modbus TCP.

<figure><img src="/files/c6qdJ3qRYKkziSGR9ROx" alt=""><figcaption></figcaption></figure>

* Choose Network Settings.
* IP Configuration:
  * Disable DHCP: Turn off DHCP to prevent the IP address from changing after a reboot (which would break the connection).
  * IP Address: Enter a unique, free IP address.
  * Subnet: Enter the correct subnet mask.
  * Gateway: Enter the correct gateway.

<figure><img src="/files/wj0Gi6bO2SIMXBFktjRt" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Set current transformers

Configure the correct CT ratio. This is essential for accurate measurements and correct control.

* Return to the Settings menu.
* Select Basic Parameters.

<figure><img src="/files/CP4H8u1P1j26N0AEl93x" alt=""><figcaption></figcaption></figure>

* Choose Current Inputs.

<figure><img src="/files/c7x9fFsOEBz5BZ60NHTn" alt=""><figcaption></figcaption></figure>

* Configure Values:

  * Set the CT Primary and CT Secondary values.
  * These values must match the specifications found on the physical current transformers (e.g., 250A primary / 5A secondary).

  <mark style="color:$warning;">Warning: Incorrect values will lead to wrong measurements, causing the energy management system to malfunction.</mark>

  <figure><img src="/files/GrTyHBjo5DQ8UbHtwNgB" alt=""><figcaption></figcaption></figure>

{% endstep %}

{% step %}

### Complete the setup

Once the network data is saved and the CT ratios have been verified, the Siemens PAC 2200 is ready to be integrated into the EMS system.
{% endstep %}
{% endstepper %}


# Socomec

Supported devices: Countis & Diris A30

Our EMS supports integration with energy meters from Socomec.

Socomec designs power monitoring and energy metering equipment for commercial and industrial installations.

The meter communicates with our EMS over Modbus TCP and provides the measurement data needed for monitoring and control.

{% hint style="info" %}
**Default slave ID**

Socomec meters use **slave ID 5** by default. Make sure this matches the slave ID configured in our EMS, or adjust it on the meter if needed.
{% endhint %}

### Supported devices

We support the following Socomec meters:

* **Countis E53**: three-phase energy meter with Modbus communication
* **Diris A-30**: energy meter for accurate consumption measurement

### EMS functionality

With the current integration, our EMS enables:

* Accurate measurement of grid and sub-circuit energy flows
* Real-time monitoring of power, energy, and power quality data
* Use of the meter as a reference point for control strategies such as peak shaving and capacity management

Additional functionality may be added over time as integration capabilities evolve.


# EV chargers

Our EMS integrates with a range of AC and DC electric vehicle chargers. These integrations allow charging sessions to be monitored and managed for use cases such as smart charging and load balancing.

{% hint style="info" %}
Select a brand below for the supported devices, or see the [Overview list](/device-integrations/overview-list) for all supported brands and models.
{% endhint %}


# ABB

Supported devices: Terra AC charger

Our EMS supports integration with EV chargers from ABB. ABB provides a broad range of AC and DC charging solutions for residential, commercial, and public charging.

The charger communicates with our EMS for monitoring and smart charging control.

### Configuration <a href="#configuration" id="configuration"></a>

After the electrical installation of a charger is complete, follow these steps to configure the charger:

1. Download the configuration app from ABB
2. On the dashboard, select "Configure a charger."
3. Enable Bluetooth on your phone, as this is necessary for the app to communicate with the charger during the commissioning process.
4. Choose a charger from the available list.

<figure><img src="/files/3DlJKaPLRaJrYup30FbI" alt="" width="375"><figcaption></figcaption></figure>

5. You can also select a charger by scanning the SN barcode with the app.
6. Be sure to scan the charger's SN bar code, which usually begins with "TAC" (although this may vary depending on the product variant).

<img src="/files/iuwSvfo2TblE2eJSGJ6B" alt="" width="375">

7. After selecting a charger to connect to, enter the PIN.
8. Select below the option "EDIT CURRENT CONFIGURATION" - or if the charging station has not yet been configured, then select "Start from scratch."
9. Make sure your phone or mobile app is connected to the Internet for PIN validation.
10. Throughout the process, the app will display a pop-up confirming that all settings will be applied to the charger simultaneously once you get to the last step.

<img src="/files/RFiiqZwS1uWBsTYlo9xx" alt="" width="375">

11. Click on the "Energy management" submenu.

<img src="/files/5ayLBWzJ3MFKGHQZCWRn" alt="Image 1" width="375">

12. Toggle "Modbus" on.

<img src="/files/rOeCDhMIu061nsd6w7ry" alt="Image 1" width="375">

13. Select "Local controller" and then "Modbus TCP/IP"
14. You must set a fixed IP address in the charging station within the same network range as the controller.
15. Important: Always choose 502 as the server port.
16. For home and small business networks, a typical setup is with e.g. fixed IP address 192.168.1.50:
    * IP address: 192.168.1.50
    * Mask address: 255.255.255.0
    * Gateway address (the address of your router): 192.168.1.1
    * Server Port: 502


# Alfen

Alfen Charging Station Configuration for Voltmasters Controller Integration

This manual serves as a guide for adjusting the settings of the Alfen charging station so that communication with, and control by, the Voltmasters Controller is possible. For more in-depth information, please refer to the Alfen Smart Charging Implementation Guide.

**Configuration**

1. Install the charging station.
2. Update the Alfen charging station to firmware version 4.2.0 (or higher).
3. Connect the Alfen charging station to a network that meets the following requirements:\
   a. The charging station is located on the same local network as the Voltmasters Controller.\
   b. Ensure that communication between the charging station and the Voltmasters Controller is open.
4. Install the ACE Service Installer tool, or search online for the latest version of the ACE Service Installer if the link no longer works. [Install link](https://legacy.knowledge.alfen.com/space/IN/1627488257/Download+the+ACE+Service+Installer)
5. Before the charging station can be managed, the smart charging functionality must first be purchased and deployed.
6. Unlock the functionality via the ACE Service Installer using the following login credentials:\
   **Username**: *RadomskiR*\
   **Password**: *fazUv6*

If the site has a weak internet connection, the following procedure can be used instead to unlock the desired functionality:

1. Open the ACE Service Installer.
2. Go to **Device** in the menu.
3. Select **Install feature(s)**.
4. Enter the license key and click **OK**. The charging station will restart after the license key has been updated.

<figure><img src="/files/jUyGLnXOBpuC8je7Z8hE" alt=""><figcaption></figcaption></figure>

**Configuring Active Load Balancing via the ACE Service Installer**

1. Select the charging station.
2. Select the **Smart Charging** tab.

<figure><img src="/files/jIYI57Kb5jipvyA6R3bR" alt=""><figcaption></figcaption></figure>

3. Check the box next to **Active Load Balancing**. The following parameters will be displayed.
4. **Data type**: select **Energy Management System** as the data source. The Voltmasters EMS will pass the dynamic minimum and maximum values to the charging station, and the charging station will increase or decrease the power of the socket accordingly. Before continuing, make sure the following requirements are met:
   * The ALB feature on the charging station must be unlocked.
   * The communication cable must be a CAT5e or CAT6 UTP/Ethernet RJ45 cable with a maximum length of 100 m.
   * The Voltmasters EMS must support Modbus; the Voltmasters EMS will assume the role of Modbus "master" in this configuration, while the charging station must act as a "slave".
   * The charging station must be located in the same local area network (LAN) as the Voltmasters EMS:
     * There must be no power over Ethernet.
     * The Voltmasters EMS must be able to find the IP address of the charging station via the mDNS protocol, or the charging station must be set to a fixed IP address.
     * The IP address must meet the requirements of the IPv4 protocol. IPv6 addresses are not supported by the charging station.
     * Access must be available to the LAN settings for configuring the energy meter and the charging station (IPv4 address, subnet mask, default gateway).
   * An open internet connection must be available; the Alfen server must be accessible for receiving updates and license keys.
   * Modbus messages:
     * The Modbus master must connect to the IP of the Modbus slave's wired Ethernet connection on port 502.
     * Requests with certain slave addresses must be accepted: charging-station-related Modbus registers require slave address 200, and socket-related Modbus registers require slave address 1 or 2, depending on the socket.
   * A validity time of 60 seconds (configurable) applies before the charging station is set back to the safe current. The Voltmasters EMS must update the socket current / SCN total current setpoint within the validity time, otherwise the charging station(s) will fall back to the configured safe current.
   * The Voltmasters EMS must integrate the charging station. Use the *Implementation of Modbus Slave TCP/IP for Alfen NG9xx platform* document for the applicable registers.
5. An additional page is shown once **Energy Management System** is selected as the data source. Double-click to open it, and select **TCP/IP EMS** in the menu.
6. Fill in the **Mode**. Select whether the Voltmasters EMS manages every single socket or a complete Smart Charging Network.
7. Fill in the **validity time** (default 60s). If the charging station does not receive any updates from the Voltmasters EMS within the configured validity time, it will interpret this as a disconnect and fall back to the configured safe current.

**Verifying Active Load Balancing Using the Voltmasters EMS**

8. Select the **Live monitoring** tab, select **States**, and observe the status of the *Modbus Connection State*.\
   If this state shows *Not in use (communication idle)*, there is a communication loss. Check your installation, or refer to the Troubleshooting section for more information.
9. Connect a vehicle and start a charging session.
10. Use the Voltmasters EMS to change the maximum available power. Refer to the Voltmasters manual for how to do this.
11. Select the **Live monitoring** tab, select **Currents**, and observe the drawn currents.

*Note: The steps above describe configuration via the ACE Service Installer. The MyEve app offers the same options under Advanced > Smart Charging > Active Load Balancing, where Energy Management System can be selected as the Data source and the Mode and validity time configured in the same way.*


# Alpitronic HYC DC Charger

Supported devices: HYC50, HYC150, HYC200, HYC300, HYC400 and HYC1000

{% hint style="info" %}
This manual assumes the charger has already been physically installed and commissioned. After these steps, the charger is ready for connection to our EMS.
{% endhint %}

{% stepper %}
{% step %}

### Log in

* Navigate to the charger’s IP address in your web browser.
* Log in using the default credentials or the previously configured password.

  (default user = admin, default password = admin123).
* Once logged in, the main dashboard appears.
  {% endstep %}

{% step %} <img src="/files/spgulXoniy4ymrDyGlab" alt="" data-size="original">
{% endstep %}

{% step %} <img src="/files/oVkZsJqiq5SCSCNOLxLN" alt="" data-size="original">
{% endstep %}

{% step %}

### Check network settings

* Navigate to the **Network** menu.
* Verify the network details and modify the local IP address if required for the location.
* Once the details are correct, click **Save Configuration** and confirm your changes.
  {% endstep %}

{% step %} <img src="/files/8Y8hzRX03l2ft7tH6EQi" alt="" data-size="original">
{% endstep %}

{% step %}

### Activate Modbus

* Go to the **General** menu and select the **Power** tab.
* Locate **Modbus Enabled** and set it to **True**.
* Click **Save Configuration** to store this setting.
  {% endstep %}

{% step %} <img src="/files/oVkZsJqiq5SCSCNOLxLN" alt="" data-size="original">
{% endstep %}

{% step %} <img src="/files/XM0nfciq0DjYOsQxfSVG" alt="" data-size="original">
{% endstep %}

{% step %} <img src="/files/5FyyCiU1DDyMeXHxhaTH" alt="" data-size="original">
{% endstep %}

{% step %}

### **Activate the changes by Resetting the charging station**

* Return to the main screen by clicking **Index**.
* Check that no cars are connected to the charging station
* Navigate to **Reset** and select **Soft Reset**.

{% hint style="info" %}
*Note: Performing a soft reset ensures all changes are permanently saved and applied.*
{% endhint %}
{% endstep %}
{% endstepper %}

<figure><img src="/files/oVkZsJqiq5SCSCNOLxLN" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/BZhjbghO38il7j1hEoKx" alt=""><figcaption></figcaption></figure>

The charger is now successfully configured and ready for use with the EMS.


# Amtron

Supported devices: AMTRON 4 Busines

<figure><img src="/files/2a24pMy2sSUBdGLtbubL" alt="" width="375"><figcaption></figcaption></figure>

### Configuration

{% stepper %}
{% step %}

### Log in as an installer

<figure><img src="/files/koPqvl6NcKfMGthwqVMw" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Enable Modbus TCP

1. Go to **Settings → Networking → External energy management**.
2. Enable **Modbus TCP**.
   {% endstep %}
   {% endstepper %}

<figure><img src="/files/2PqYpF8nOuNYbeXFIzwt" alt=""><figcaption></figcaption></figure>


# Etrel AC Charger

Supported devices: Inch Pro, Inch Duo.

{% stepper %}
{% step %}

### Startup and connection

Once all wiring is complete, switch on the charger.

* Wait for Green: The green LED flashes during startup. Wait until it turns solid green; the charger is now ready for use. This LED is located just above the charger display.
* Open Web Interface: Connect your laptop to the same network as the charger. Enter the IP address (found on the sticker inside the maintenance door) into your browser.

{% hint style="info" %}
Tip: Can't find the IP address? Press and hold the small reset button (inside the small door on the top right) until you hear a beep. This accesses the charging station settings. Navigate to the correct sub-menu on the screen to view the current IP address.
{% endhint %}
{% endstep %}

{% step %}

### Settings and Modbus

Log in and go to the configuration page.

<figure><img src="/files/a1YoH0Rjkyi41AWXFYnm" alt=""><figcaption></figcaption></figure>

* Email: <root@etrel.com>
* Password: toor
* IP Configuration: Preferably set a static IP address within the same range as the Voltmaster Controller.

<figure><img src="/files/mq0crsKyIQbcSEWK7bJ0" alt=""><figcaption></figcaption></figure>

* Enable Modbus: Go to the settings menu and activate Modbus TCP.

  * Settings: Unit ID = 1, Port = 502.

  <figure><img src="/files/iwPjDyE5SV3PLTPc0boG" alt=""><figcaption></figcaption></figure>
* Firewall: Ensure Port 502 and Subnet 255.255.255.0 are open.
  {% endstep %}

{% step %}

### Restart the charger

Important: After changing the network or Modbus settings, you must restart the charging station to ensure the new configuration takes effect.

* Action: Reboot the charger via the web interface or by power cycling the unit.

<figure><img src="/files/zI35QSdpABVjYARtQ0sy" alt=""><figcaption></figcaption></figure>

* Wait: Wait until the LED above the display turns solid green again.
  {% endstep %}

{% step %}

### Safety check and completion

* Protection: Verify that the Residual Current Device (RCD) and Miniature Circuit Breaker (MCB) are active.

{% hint style="info" %}
*Note:* For Etrel INCH models without built-in protection, these must be installed externally in the main distribution board.
{% endhint %}

* LED Status Check (above Display):
  * Green: Available.
  * Flashing Blue: Charging in progress.
  * Red: Error (inspection required).
    {% endstep %}
    {% endstepper %}


# Iocharger

Supported devices: IOCAP26

Our EMS supports integration with EV chargers from IoCharger. IoCharger provides AC charging solutions for commercial and workplace charging.

The charger communicates with our EMS for monitoring and smart charging control.

### Supported devices

We support the following IoCharger device:

* **IOCAP26**: AC charger

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of charging sessions and status
* Smart charging and load balancing
* Integration of EV charging into broader energy management strategies

Additional functionality may be added over time as integration capabilities evolve.


# Siemens Sicharge D

Supported devices: Siemens SiCharge D

Our EMS supports integration with the Siemens SiCharge D DC fast charger. The SiCharge D is a high-power DC charging system designed for public and commercial fast-charging locations.

The charger communicates with our EMS for monitoring and smart charging control.

### Supported devices

We support the following Siemens charger:

* **SiCharge D**: high-power DC fast charger

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of charging sessions and status
* Smart charging and dynamic power management
* Integration of EV charging into broader energy management strategies

<figure><img src="/files/y6CoEAcXYQAnZ60RilpC" alt="Siemens logo"><figcaption></figcaption></figure>


# Sinexcel DC Charger

Supported devices: Sinexcel CE 160kW, CE 240kW, UL 240kW and the integrated and distributed DC chargers

Our EMS integrates with the Sinexcel DC charger range over Modbus-TCP. The integration allows charging sessions to be monitored and the charging power to be managed for use cases such as smart charging and load balancing.

{% hint style="info" %}
This manual assumes the charger has already been physically installed and commissioned. After these steps, the charger is ready for connection to our EMS.
{% endhint %}

### Supported devices

We support the Sinexcel DC charger range, addressed through a single Modbus-TCP integration:

* **CE 160 kW**
* **CE 240 kW**
* **UL 240 kW**
* **Integrated DC Charger** (compatible firmware)
* **Distributed DC Charger** (compatible firmware)

In the platform you can either select a specific model or select the series as a whole. The connection and control are identical; the charger reports its own model over Modbus.

### EMS functionality

With the current integration, our EMS enables:

* Monitoring of charging state, output power, voltage, current and metered energy per connector
* Per-connector power limiting (connector 1 and connector 2)
* Load balancing within the limit of the grid connection, together with the battery and PV
* Charging at the cheapest moments, including during negative prices

Additional functionality may be added over time as integration capabilities evolve.

{% hint style="warning" %}
Monitoring and per-connector power limiting are documented for **connector 1 and connector 2** only. Whole-charger power limiting requires a CCU version higher than `00.102.76`. Distributed chargers additionally require an M2 board firmware higher than `104.38` (boards without LAN port) or `200.36` (boards with LAN port).
{% endhint %}

## Configuring the charger

{% stepper %}
{% step %}

### Enable Modbus on the MCU

* On the charger screen, enter the password (default `080808`).
* Go to **Debug** → **Previous** → **Debug**.
* Select **Debug address 5** and enter the value **416**.
* The message **open modbus** appears on the screen.
* **Reboot the MCU** to apply the change.

{% hint style="info" %}
*Entering `416` again at the same place toggles Modbus off (**close modbus**). A reboot of the MCU is always required after enabling or disabling Modbus.*
{% endhint %}
{% endstep %}

{% step %}

### Note the IP address

* Enter the password (default `080808`) and go to **Setting** → **MCU**.
* Note the charger's IP address shown on the screen. Use a fixed IP address for the location.
* The Modbus-TCP port is **502**.
  {% endstep %}

{% step %}

### Set the model and serial number (optional)

* Go to **Setting** → **MCU** → **Feature** → **model** to set the charger model (for example `1160` for CE 160 kW, `1240` for CE 240 kW, `2240` for UL 240 kW).
* Go to **Setting** → **MCU** → **Feature** → **SN** to set the charger number.
  {% endstep %}

{% step %}

### Connect to the EMS

* Connect the charger to the same wired network (LAN) as the Voltmaster Controller, on the same subnet.
* Verify that the controller can reach the charger's IP address.
* Add the charger in the platform, selecting brand **Sinexcel** and the matching DC charger model.
  {% endstep %}
  {% endstepper %}

The charger is now successfully configured and ready for use with the EMS.

{% hint style="warning" %}
If a power limit was set over Modbus and Modbus is later disabled, the last configured power limit stays active. Before disabling Modbus, set the power limit back to the charger's nominal power to restore full power.
{% endhint %}


# PV inverters

Our EMS integrates with a range of PV (solar) inverters and data loggers. These integrations allow PV production to be monitored and, where supported, controlled (for example active power curtailment) as part of broader energy management strategies.

{% hint style="info" %}
Select a brand below for the supported devices, or see the [Overview list](/device-integrations/overview-list) for all supported brands and models.
{% endhint %}




---

[Next Page](/llms-full.txt/1)

