Energy Arbitrage System with OpenEMS - Control Strategy Questions

Energy Arbitrage System with OpenEMS - Control Strategy Questions

We’re developing an energy arbitrage system using openEMS to automatically send charge and discharge commands to a battery storage system based on market conditions.

System Configuration: Our simulated setup includes:

  • Simulator PV-Inverter component connected to a solar generation source
  • Simulator EssSymmetric Reacting components for battery storage
  • Household/building power consumption load
  • Grid connection for energy arbitrage

Primary Question - Transitioning Control: After executing manual arbitrage operations (e.g., discharging batteries to sell energy to the grid at peak prices), how do we seamlessly return control to openEMS for normal operation?

We want openEMS to resume its standard power management hierarchy:

  1. Solar generation → household consumption (priority 1)
  2. Excess solar → battery charging (priority 2)
  3. Remaining excess → grid export (priority 3)
  4. Battery discharge → household consumption when solar is insufficient

Secondary Question - Battery Balancing: For our ESS cluster, we’re aware of the “OPTIMIZE_BY_KEEPING_ALL_EQUAL” strategy for maintaining equal charge levels. However, this strategy assumes batteries start at similar states of charge.

Is there a method or controller in openEMS that can actively balance batteries with significantly different starting SoC levels? We need to bring unequal batteries to the same charge state before implementing the equal distribution strategy.

Specific Technical Challenge: We’re looking for guidance on controller configuration to switch between manual arbitrage mode and automatic openEMS control, plus any built-in or custom solutions for active SoC balancing across multiple batteries.

Hi ntewodros, and welome to the OpenEMS Community.

You are mentioning “we’re developing…”. Can you please elaborate a bit more on who you are (e.g. company or scientific research) and what exactly you are trying to achieve (e.g. actual product or simulation)?

Primary Question - Transitioning Control: After executing manual arbitrage operations (e.g., discharging batteries to sell energy to the grid at peak prices),

How are you currently “executing manual operations”? If you are using one of the APIs like Modbus/TCP or JSON/REST, you can simply stop sending commands and after the configured watchdog time the system will fallback to the next Controller in the Scheduler priority.

Secondary Question - Battery Balancing: For our ESS cluster, we’re aware of the “OPTIMIZE_BY_KEEPING_ALL_EQUAL” strategy for maintaining equal charge levels. However, this strategy assumes batteries start at similar states of charge.

Yes, the Strategy OPTIMIZE_BY_KEEPING_ALL_NEAR_EQUAL balances the SoC of the batteries (openems/io.openems.edge.ess.api/src/io/openems/edge/ess/power/api/SolverStrategy.java at develop · OpenEMS/openems · GitHub)

Regards,
Stefan

Hi Stefan,

Thank you for the thorough response and warm welcome! We are a startup seeking to create a product utilizing solar power production for energy arbitrage, hence the use of OpenEMS and an API. Currently, we’re strictly in the simulation stages.

Instead of having a PV inverter and a separate battery system, can we use OpenEMS to simulate and manage a system of solar panels connected to a single DC-coupled battery (i.e., an ESS cluster)? We don’t have an exact battery in mind right now.

Also, would OpenEMS allow us to recognize when a battery is passively being charged by a solar panel (as opposed to seeing charge/discharge from our commands)? For example, if the battery is already fully charged, would OpenEMS recognize that any further charge should be sold to the grid automatically?

In the event this is infeasible, how would we monitor solar panel charge data?

Thanks for the introduction. Wishing you the best for your project!

Regarding your question: One of the best supported systems in OpenEMS is the “FENECON Home” (FENECON Home Heimspeicher 20 & 30 » FENECON GmbH), which contains of a hybrid battery inverter. This sounds similar to what you are trying to do and is as such well supported by OpenEMS.

In OpenEMS these Components implement the “EssDcCharger” Nature.

OpenEMS is not simulation tool, though. There are simulated Components - e.g. for Energy Storage Systems (ESS) with AC connection, Meters, PV-Inverters, etc. - but not for Hybrid ESS.