Dess day ahead prediction

Found a 168h prediction of the dutch day ahead price.

Would this something to implement in DESS to make better buy and selling decisions?

1 Like

Today the day ahead energy price is low from 0:00 until 18:00.
But DESS decides only to buy energy from 14:00 until 17:00 where the kWh price is the lowest.
Logical if you only look at the known day ahead price, but not logical if you look at the next week predicted kWh prices.

Is it an idea to introduce some way of prediction of energy prices based on weather forecast?
Maybe DESS could as an option automatic adjust the minimum SOC to this way interact on weather forecast for users how want to take the risk?
Now I have to manual disable DESS to top up (at slow charge rate to avoid losses) mine battery.
Think an automatic system to do this in DESS would be nice to have.

Please vote if you are interested in this feature.

I’ve discussed this very issue of forecast expansion with Victron several times. According to Victron, after some simulations, they lowered its priority list, explaining that it would only offer a minor economic benefit. Personally, I don’t quite understand this, but I have to accept it for now. My small, improvised solution is to raise the minimum state of charge (SoC) and, if necessary, lower it again during periods of higher energy costs. Currently, however, this isn’t necessary for me due to excess solar power. It gives me some hope that others see this problem the same way.

You would need 1 or a half day prediction in advance.
I often see the strategy changing around 14:00 where the new day ahead prices are published.
With some smart forecast strategies (based on weather and day) you could avoid this.

I now do often manual change minimum SOC, or today I disabled DESS to top up the battery.
DESS would only charge 30%, I did 100% (did discharge yesterday) because day ahead price was under zero half of the day.
Now and tomorrow I will discharge at a profit 16-18 cents/ kWh will make 16-18 euro (100kWh) profit instead 3-4 euro with DESS strategy!
There are days like today that you need a day ahead prediction!

Good find! Maybe we need to look into VRM-API (again) to see if we can feed DESS with these prices beyond the current day-ahead price window. That would solve quite a bit of hassle.

Would be an option, but how big is the buffer?

Technically there should not be any kind of buffer limitation, the production and consumption forecasts already run for much longer ahead than the day-ahead prices. The real question is whether Victron allows feeding your own custom prices into the DESS algorithm via VRM-API replacing those they calculate themselves based on general market prices and personal (VRM settings) price formulas. Only if that is possible to begin with, will the question arise for how many hours ahead of the current ~10 to ~36 hour rolling window. I never got round to investigating this, I give it 50-50 chance Victron allows / disallows doing that.

See also: DESS price forecast

TL;DR It’s a business/marketing decision, not a technical issue.

The deGb and deGs array is 109 long * 15 minutes would be a buffer of 27h, so not big enough for buffering 2 days!

We can only manipulate the minimum target SOC.

The one that VRM DESS calculates are short by nature of adhering to the ‘published’ prices only. If you look at the consumption and solar arrays I expect you will find larger arrays.

Well, no. If you look at the Node-RED DESS implementation you’ll find b_goal_hour and b_goal_SoC. And then there are other more subtle ways to “manipulate’ DESS as well. My stance is that we should not need to manipulate anything at all but that will require Victron provide better fitting controls, such as those present in Node-RED DESS but not in VRM DESS. I’m afraid that topic is a whole other can if worms altogether, I gave up on convincing Victron of the architectural issues plaguing the current VRM DESS (Trade foremost) scheduler implementation and use my own workarounds.

The solution, and I’ve discussed this several times in various threads, would be a price forecast. Prices are the limiting factor on the timescale; we already have solar and consumption forecasts, and in my view, they’re reasonably reliable. The accuracy of this price forecast is a secondary consideration. If the forecast could simply recognize that there will be additional demand in the coming days, that would be a significant improvement. The fact that today’s and tomorrow’s prices make buying advisable is self-evident; any algorithm doesn’t need to be particularly accurate for that. Victron has stated that they performed relatively well in price forecast testing. Whether it’s useful to look six hours or three days further into the future is a tedious discussion. But it’s something we can gradually work towards. A transition across the magic 1-2 PM mark would, in my experience, be useful, but a transition from the weekend to the following weekdays is almost always predictable, as are major changes in weather patterns. As mentioned before, I’ve been observing these issues for quite some time and I’m glad that others are also recognizing this weakness. Time will tell what comes of it. Personally, I have the time to modify the minimum SoC and can live with it, but for the future, I think Victron still has an area for improvement here that’s worth addressing.

You would also need wind prediction.
Yes think minimum SOC would be a simple fix.
I do manipulate this by hand now and that seems to work.

A wind forecast should always take price predictions into account, as wind is the biggest factor influencing prices. This is logical when considering the installed capacity. The minimum state of charge (SOC) and its adjustments are always just temporary measures, regardless of whether they are calculated manually or otherwise. The forecast must influence the hourly target SOC and thus the future schedule. That must be the goal; everything else is merely a temporary fix.

Agree, minimum SOC is only a quick fix !

1 Like

I find the whole topic interesting, but we shouldn’t forget where we’ve come from and how far we’ve come as Victron DESS customers. We’re discussing price forecasts here! Or forecasts extending 24 hours into the future. Yesterday, I had a small discussion with friends who all have other providers. Compared to DESS, they’re all pathetic beginnings. Forecast-based buying and selling of energy is still in its infancy there. I often get incredulous and envious looks in such discussions. That doesn’t mean Victron should rest on its laurels, but we should also be patient and be happy with what we’ve achieved. I’m optimistic that things will change in this area, but it’s not the only challenge.

I have been, and still are to some extend, also using MinimumSoC to force our system to buy, such as right now when the prices are low from 10:00 but DESS won’t buy this hour because it plans to reach a low SoC at upcoming midnight. So I set MinimumSoC higher, above the current battery SoC to force the system to charge. I coined the term SocMonkey for myself doing so a while ago, it’s not a solution in my eyes and there are hidden risks involved as well. The biggest risk being that the DESS execution process/system (on VenusOS) will not protect against over current on the mains fuse when minimumSoc > battery SoC, I just saw 50A peak on our 35A ‘smeltzekering’ because of the electric boiler turning on and the MP-II refusing to switch from charge mode to invert mode, it just went idle instead. Admittedly this is an edge case risk because the bulk of the charge current is delivered by a parallel (high efficiency) boost charger and therefore my responsibility to mitigate that risk, but still it emphasizes that manipulating a system by manually changing MinimumSoC is in principle a bad process.

Approximation:

{
  "forecast": [
    {"time":"2026-04-06T00:00","price":0.105},
    {"time":"2026-04-06T01:00","price":0.095},
    {"time":"2026-04-06T02:00","price":0.1},
    {"time":"2026-04-06T03:00","price":0.115},
    {"time":"2026-04-06T04:00","price":0.135},
    {"time":"2026-04-06T05:00","price":0.148},
    {"time":"2026-04-06T06:00","price":0.148},
    {"time":"2026-04-06T07:00","price":0.15},
    {"time":"2026-04-06T08:00","price":0.14},
    {"time":"2026-04-06T09:00","price":0.07},
    {"time":"2026-04-06T10:00","price":0.005},
    {"time":"2026-04-06T11:00","price":-0.005},
    {"time":"2026-04-06T12:00","price":-0.02},
    {"time":"2026-04-06T13:00","price":-0.04},
    {"time":"2026-04-06T14:00","price":-0.048},
    {"time":"2026-04-06T15:00","price":-0.04},
    {"time":"2026-04-06T16:00","price":-0.035},
    {"time":"2026-04-06T17:00","price":-0.005},
    {"time":"2026-04-06T18:00","price":0.065},
    {"time":"2026-04-06T19:00","price":0.13},
    {"time":"2026-04-06T20:00","price":0.155},
    {"time":"2026-04-06T21:00","price":0.155},
    {"time":"2026-04-06T22:00","price":0.12},
    {"time":"2026-04-06T23:00","price":0.11},
    {"time":"2026-04-07T00:00","price":0.102},
    {"time":"2026-04-07T01:00","price":0.09},
    {"time":"2026-04-07T02:00","price":0.085},
    {"time":"2026-04-07T03:00","price":0.085},
    {"time":"2026-04-07T04:00","price":0.085},
    {"time":"2026-04-07T05:00","price":0.095},
    {"time":"2026-04-07T06:00","price":0.125},
    {"time":"2026-04-07T07:00","price":0.152},
    {"time":"2026-04-07T08:00","price":0.155},
    {"time":"2026-04-07T09:00","price":0.115},
    {"time":"2026-04-07T10:00","price":0.075},
    {"time":"2026-04-07T11:00","price":0.05},
    {"time":"2026-04-07T12:00","price":0.02},
    {"time":"2026-04-07T13:00","price":0.0},
    {"time":"2026-04-07T14:00","price":0.015},
    {"time":"2026-04-07T15:00","price":0.045},
    {"time":"2026-04-07T16:00","price":0.09},
    {"time":"2026-04-07T17:00","price":0.12},
    {"time":"2026-04-07T18:00","price":0.155},
    {"time":"2026-04-07T19:00","price":0.172},
    {"time":"2026-04-07T20:00","price":0.165},
    {"time":"2026-04-07T21:00","price":0.148},
    {"time":"2026-04-07T22:00","price":0.128},
    {"time":"2026-04-07T23:00","price":0.125},
    {"time":"2026-04-08T00:00","price":0.102},
    {"time":"2026-04-08T01:00","price":0.09},
    {"time":"2026-04-08T02:00","price":0.085},
    {"time":"2026-04-08T03:00","price":0.085},
    {"time":"2026-04-08T04:00","price":0.09},
    {"time":"2026-04-08T05:00","price":0.098},
    {"time":"2026-04-08T06:00","price":0.135},
    {"time":"2026-04-08T07:00","price":0.17},
    {"time":"2026-04-08T08:00","price":0.172},
    {"time":"2026-04-08T09:00","price":0.13},
    {"time":"2026-04-08T10:00","price":0.095},
    {"time":"2026-04-08T11:00","price":0.075},
    {"time":"2026-04-08T12:00","price":0.05},
    {"time":"2026-04-08T13:00","price":0.025},
    {"time":"2026-04-08T14:00","price":0.03},
    {"time":"2026-04-08T15:00","price":0.04},
    {"time":"2026-04-08T16:00","price":0.065},
    {"time":"2026-04-08T17:00","price":0.1},
    {"time":"2026-04-08T18:00","price":0.138},
    {"time":"2026-04-08T19:00","price":0.188},
    {"time":"2026-04-08T20:00","price":0.2},
    {"time":"2026-04-08T21:00","price":0.18},
    {"time":"2026-04-08T22:00","price":0.14},
    {"time":"2026-04-08T23:00","price":0.135},
    {"time":"2026-04-09T00:00","price":0.112},
    {"time":"2026-04-09T01:00","price":0.1},
    {"time":"2026-04-09T02:00","price":0.095},
    {"time":"2026-04-09T03:00","price":0.09},
    {"time":"2026-04-09T04:00","price":0.095},
    {"time":"2026-04-09T05:00","price":0.1},
    {"time":"2026-04-09T06:00","price":0.135},
    {"time":"2026-04-09T07:00","price":0.155},
    {"time":"2026-04-09T08:00","price":0.165},
    {"time":"2026-04-09T09:00","price":0.13},
    {"time":"2026-04-09T10:00","price":0.095},
    {"time":"2026-04-09T11:00","price":0.07},
    {"time":"2026-04-09T12:00","price":0.055},
    {"time":"2026-04-09T13:00","price":0.04},
    {"time":"2026-04-09T14:00","price":0.045},
    {"time":"2026-04-09T15:00","price":0.06},
    {"time":"2026-04-09T16:00","price":0.075},
    {"time":"2026-04-09T17:00","price":0.11},
    {"time":"2026-04-09T18:00","price":0.14},
    {"time":"2026-04-09T19:00","price":0.172},
    {"time":"2026-04-09T20:00","price":0.155},
    {"time":"2026-04-09T21:00","price":0.14},
    {"time":"2026-04-09T22:00","price":0.12},
    {"time":"2026-04-09T23:00","price":0.12},
    {"time":"2026-04-10T00:00","price":0.095},
    {"time":"2026-04-10T01:00","price":0.085},
    {"time":"2026-04-10T02:00","price":0.08},
    {"time":"2026-04-10T03:00","price":0.078},
    {"time":"2026-04-10T04:00","price":0.078},
    {"time":"2026-04-10T05:00","price":0.082},
    {"time":"2026-04-10T06:00","price":0.112},
    {"time":"2026-04-10T07:00","price":0.138},
    {"time":"2026-04-10T08:00","price":0.142},
    {"time":"2026-04-10T09:00","price":0.118},
    {"time":"2026-04-10T10:00","price":0.095},
    {"time":"2026-04-10T11:00","price":0.078},
    {"time":"2026-04-10T12:00","price":0.065},
    {"time":"2026-04-10T13:00","price":0.05},
    {"time":"2026-04-10T14:00","price":0.055},
    {"time":"2026-04-10T15:00","price":0.068},
    {"time":"2026-04-10T16:00","price":0.1},
    {"time":"2026-04-10T17:00","price":0.12},
    {"time":"2026-04-10T18:00","price":0.15},
    {"time":"2026-04-10T19:00","price":0.152},
    {"time":"2026-04-10T20:00","price":0.148},
    {"time":"2026-04-10T21:00","price":0.14},
    {"time":"2026-04-10T22:00","price":0.123},
    {"time":"2026-04-10T23:00","price":0.12},
    {"time":"2026-04-11T00:00","price":0.095},
    {"time":"2026-04-11T01:00","price":0.098},
    {"time":"2026-04-11T02:00","price":0.09},
    {"time":"2026-04-11T03:00","price":0.11},
    {"time":"2026-04-11T04:00","price":0.122},
    {"time":"2026-04-11T05:00","price":0.138},
    {"time":"2026-04-11T06:00","price":0.165},
    {"time":"2026-04-11T07:00","price":0.185},
    {"time":"2026-04-11T08:00","price":0.195},
    {"time":"2026-04-11T09:00","price":0.19},
    {"time":"2026-04-11T10:00","price":0.152},
    {"time":"2026-04-11T11:00","price":0.105},
    {"time":"2026-04-11T12:00","price":0.065},
    {"time":"2026-04-11T13:00","price":0.045},
    {"time":"2026-04-11T14:00","price":0.045},
    {"time":"2026-04-11T15:00","price":0.052},
    {"time":"2026-04-11T16:00","price":0.055},
    {"time":"2026-04-11T17:00","price":0.09},
    {"time":"2026-04-11T18:00","price":0.135},
    {"time":"2026-04-11T19:00","price":0.155},
    {"time":"2026-04-11T20:00","price":0.15},
    {"time":"2026-04-11T21:00","price":0.12},
    {"time":"2026-04-11T22:00","price":0.085},
    {"time":"2026-04-11T23:00","price":0.08},
    {"time":"2026-04-12T00:00","price":0.098},
    {"time":"2026-04-12T01:00","price":0.092},
    {"time":"2026-04-12T02:00","price":0.085},
    {"time":"2026-04-12T03:00","price":0.105},
    {"time":"2026-04-12T04:00","price":0.115},
    {"time":"2026-04-12T05:00","price":0.125},
    {"time":"2026-04-12T06:00","price":0.148},
    {"time":"2026-04-12T07:00","price":0.155},
    {"time":"2026-04-12T08:00","price":0.16},
    {"time":"2026-04-12T09:00","price":0.155},
    {"time":"2026-04-12T10:00","price":0.13},
    {"time":"2026-04-12T11:00","price":0.085},
    {"time":"2026-04-12T12:00","price":0.04},
    {"time":"2026-04-12T13:00","price":0.015},
    {"time":"2026-04-12T14:00","price":0.01},
    {"time":"2026-04-12T15:00","price":0.015},
    {"time":"2026-04-12T16:00","price":0.02},
    {"time":"2026-04-12T17:00","price":0.05},
    {"time":"2026-04-12T18:00","price":0.085},
    {"time":"2026-04-12T19:00","price":0.128},
    {"time":"2026-04-12T20:00","price":0.13},
    {"time":"2026-04-12T21:00","price":0.11},
    {"time":"2026-04-12T22:00","price":0.085},
    {"time":"2026-04-12T23:00","price":0.085}
  ]
}