Battery optimization
Tensor Cloud dispatches battery energy storage systems (BESS) fully automatically and in the way that is economically best for their owners. It covers everything from market price and solar generation forecasts to the physical control of the BESS.
Batteries are optimized across the day-ahead and balancing markets, with intraday market support planned. The optimization takes economic and technical constraints into account, including the FIP premium, cycle cost settings, state of charge limits, and grid losses, so each kWh available to the BESS is used where it earns the system owner the most.
Supported battery configurations
We support stand-alone batteries and batteries co-located with solar PV. Tensor Cloud's automatic dispatch optimizes co-located BESS in both AC-link and DC-link configurations. On-site loads are netted against the site's solar generation only: the plan does not use the battery to cover demand that exceeds the solar output.
On the Japanese balancing markets, Tensor Cloud optimizes stand-alone batteries, co-located batteries, and aggregated virtual power plant (VPP) resources that can contain thousands of individual batteries.
Supported markets
In each of the 48 daily 30-minute slots, a battery's capacity can be sold as energy on the wholesale markets or offered on the balancing markets. The optimization currently supports:
- JEPX day-ahead market
- EPRX primary reserve (FCR), offline
Within one slot, the optimization can split a battery between energy sales and an FCR offer, as long as the battery keeps enough power headroom and state of charge to deliver both. Resources with solar generation are offered for FCR only in slots without forecast solar generation.
We plan to release JEPX intraday as a third market.
Optimization inputs
The optimization plans all assets enabled for balancing and trading within each grid area of a workspace, except FIT assets. It is a mixed-integer linear optimization model, solved with the HiGHS solver, with these inputs:
- Current state of each battery (e.g., state of charge, error/maintenance state) and its settings, such as capacity, efficiency, state of charge limits, cycle cost and whether it can charge from the grid
- Planned maintenance and outage events, which take the affected equipment out of the plan
- Electricity price forecasts for the grid area, which also stand in for imbalance prices
- EPRX ideal offer prices for primary reserve (see Offer price)
- FCR awards and the baselines already submitted for them
- Solar generation and demand forecasts for each asset
- FIP premium for each asset
- The imbalance value set for the workspace
- Battery self-consumption, estimated from the battery's own telemetry and the outside temperature
- Grid loss rates, which raise the volume to buy for grid charging
- For DC-coupled assets, the site inverter efficiency
- Day-ahead volumes already contracted on JEPX. After the 10:00 gate close, a slot without a bid counts as a plan of zero, so any exchange in it becomes imbalance.
Battery constraints
- State of charge: The minimum state of charge and the charge kept in reserve for FCR awards are soft limits with high penalties, so the plan breaks them only when there is no feasible alternative. The FCR reserve covers worst-case activation over the three slots it takes to cancel an award (up to 0.31 kWh per kW awarded), plus a margin of 0.05 kWh per kW. When a battery is already above its maximum state of charge, that level becomes the upper limit.
- Cycle cost: The cycle cost is charged on every kWh charged, and the energy left in the battery at the end of the horizon is credited at the same rate. For batteries set up with automatic cycle cost by the Tensor Energy technical team, a weekly calculation replaces the entered value with a cost derived from the battery's state of health.
- FIP: The FIP premium counts only in slots where the spot price is above the 0.01 JPY/kWh floor. Grid charging is costed at the FIP premium, since energy bought from the grid earns no premium when it is discharged. The premium is read at the start of the planning horizon.
For due diligence, contact us for more detail on the mathematical and logical foundation of the battery optimization.
Operational flow
Daily battery and aggregation operations are almost entirely automated. They fall into three phases: before the wholesale auction, before the balancing auction, and intraday.
Phase 1: Before wholesale auction
For a slot at time n, this phase starts when the slot first enters the plan and ends at 10:00 of n-1 day. A daily run at 07:20 plans 14 days ahead, so slots enter the plan up to 14 days in advance. All other runs cover the rest of the current day plus the next 3 days.
Planning runs every 30 minutes and re-plans each grid area whose inputs changed since its last plan: JEPX price forecasts, EPRX ideal offer prices, solar generation forecasts, FCR awards, JEPX trading results, asset settings, site outage data (e.g., upcoming planned maintenance, unplanned outages), or a battery state of charge that has drifted away from the plan. Every grid area is also re-planned at least every 6 hours, whenever its plan reaches less than 48 hours ahead, once after the JEPX day-ahead gate closes, and in the hour before the EPRX offer deadline. Changes to the FIP premium or the imbalance value take effect at the next re-plan.
Every 30 minutes, Tensor Cloud also sends the latest 48-hour wholesale dispatch schedule to the EMS, which stores it locally and controls the battery accordingly. As a fallback, a 1-year schedule is sent three times a week (Monday, Wednesday, and Friday), so the EMS always has at least one dispatch plan, even before wholesale and balancing market results are known.
The optimization plans all assets of the workspace's balancing groups in the same grid area together, as one imbalance pool. Batteries therefore also improve the economic outcome of solar-only assets in that grid area, even when those belong to a different balancing group of the same workspace.
The day-ahead balancing market offer window opens only at 11:30 on n-1 day, but the dispatch plans already account for expected balancing market awards when wholesale bids are generated.
At 08:01 on n-1 day, for grid areas with JEPX Autopilot enabled, Tensor Cloud places sell bids and, for batteries that charge from the grid, buy bids for the next-day slots on the JEPX day-ahead market. Volumes come from the latest available BESS dispatch plan and the generation plans for non-battery assets in the same grid area, and the bids use limit prices that clear at the market price. The 10:00 day-ahead auction deadline concludes phase 1.
Phase 2: Before balancing auction
Phase 2 begins when the day-ahead wholesale auction closes and its prices and results are published, at around 10:15 on n-1 day. The first optimization run after JEPX publishes the results reallocates battery capacity to FCR offers based on the wholesale volume sold in each slot. If less energy was sold than expected, more capacity is available for FCR offers.
The FCR offer window opens at 11:30 on n-1 day. One minute later, Tensor Cloud places offers for all EPRX resources, based on resource constraints (e.g., resource capacity across each balancing market product) and the capacity available in the dispatch plan. Until 13:58, every optimization run cancels the existing offer and places a new one; after that, offers are no longer changed. The offer window closes at 14:00.
Offers are placed only for workspaces with EPRX auto-offering switched on. Slots that overlap planned maintenance are left out, and when a new plan no longer contains an offer for a resource, the live offer is withdrawn. While auto-offering is off, Tensor Cloud neither places nor withdraws offers.
Dispatch plans are updated with the same logic as in phase 1, except that any deviation from the day-ahead trading results now causes imbalance, and the optimization accounts for its cost. The imbalance value in the workspace settings controls how the plan treats imbalance.
Phase 2 ends when the EPRX offer window closes at 14:00 on n-1 day.
Phase 3: Intraday
EPRX publishes FCR auction results between 14:00 and 15:00 each day. As soon as award information is available, Tensor Cloud creates dispatch schedules for all physical batteries of each awarded resource and sends them to each EMS.
When the OCCTO intraday plan window opens at 17:00 on n-1 day, Tensor Cloud starts updating the generation plans of affected balancing groups from 17:01, and again whenever an FCR award is received or cancelled. It takes the latest accepted generation plan, raises the generation upper limit on the awarded slots, and re-submits it to OCCTO as an intraday plan. Sales plans and demand plans are not changed. Depending on the resource type, Tensor Cloud also creates the baseline plans EPRX requires and submits them via the EPRX API with every plan update, up to 1 hour before the first awarded slot of the delivery day.
During the intraday phase, the optimization keeps updating dispatch plans. FCR awards are hard constraints; only baselines and charging and discharging outside awarded slots change, based on the imbalance value and cycle cost settings.
FCR award cancellations
For the next awarded slot that can still be cancelled before the 1-hour gate close, about 65 minutes ahead, Tensor Cloud checks whether the resource is at risk of failing its FCR obligations:
- Every minute, it checks incoming telemetry. If a battery's telemetry stops arriving, the award is at risk.
- Twice an hour, it checks for upward awards whether the batteries' state of charge, including charging planned before the slot, covers the expected FCR activation.
If the obligations likely cannot be met, Tensor Cloud cancels the awards automatically, following the TSO's standard procedure for a resource that cannot deliver (form 23 notification):
- Send a resource switch request to the EPRX API for the time slots in question
- After the TSO confirms the switch, send a notification email to the TSO (form 23 email)
- In the Kyushu area, also place an automated phone call to the operational hotline of the TSO, informing them of the switch
- Update OCCTO generation plans
- Update any baseline plans or other plan types as required by the type of resource
- Send a schedule with zero FCR capacity for the cancelled slots to the EMS
For a state of charge shortfall, how much is cancelled depends on whether the battery can charge from the grid:
- Batteries that can charge from the grid cancel slot by slot in a rolling window.
- Batteries that cannot charge from the grid cancel every award from the slot at risk until 90 minutes after the next sunrise, when solar generation can recharge them.
Missing telemetry cancels all remaining awards of the resource. Cancellations are grouped into one batch per delivery day, so a cancellation window that crosses midnight leads to two separate batches, and the TSO is notified once for each day.
Integration with site devices
Tensor Cloud relies on an EMS installed on site to collect telemetry from the batteries and other site components, such as solar systems and electrical loads, and to send control signals to the battery storage system. Tensor Cloud has worked with several integration partners, but it is vendor agnostic and works with any EMS that can provide the necessary data and receive control signals. Contact us to discuss your integration.
Battery optimization FAQ
Q: Which markets do you support?
A: The JEPX day-ahead (spot) market and, on the balancing market, offline primary reserve (FCR). Intraday market support is planned.
Q: Do you support stand-alone battery systems?
A: Yes, we support stand-alone battery systems.
Q: How much revenue improvement will we get from co-located storage?
A: It depends on several factors, including the FIP premium available for your asset, your battery CAPEX, and your solar generation profile. Based on our analyses of real customer use cases, you can expect more than 40% additional annual revenue in favourable cases.
Start with our FIP calculator for a rough estimate of the FIP premium you can expect. You can then create a workspace on Tensor Cloud and run detailed techno-economic simulations of your project for due diligence.
Q: How long does it take from initial conversation to go-live?
A: It depends on the maturity of your battery storage project; 3-6 months from initial conversation to go-live is typical. The usual bottlenecks are lead times for battery storage systems, permitting, and the grid connection process, not the integration with Tensor Cloud.
Further reading
- Battery aggregation service: See how optimized batteries participate in electricity markets.
- Research on optimized battery control: Read about the control strategy behind dispatch decisions.
- Research on nega and posi FCR from batteries: Explore the operating considerations for primary frequency response.