Phasing out the Node-RED Dynamic ESS implementation

We are contemplating on phasing out the Node-RED implementation of Dynamic ESS .

While it was valuable during initial development, the current VRM implementation already offers way more functionality (e.g. Octopus (UK), Tempo (FR) and Vario (CH)) and is better kept up to date.

The VRM-API node seems the better alternative, though that one still requires some changes to be up to date as well. The idea is there to keep the configuration of Dynamic ESS in VRM (and partly in Venus OS), while the scheduled can be retrieved, altered and filled using the VRM-API node and the Dynamic ESS node that comes with node-red-contrib-victron.

Also the 15 minute interval changes haven’t been looked into for the Node-RED implementation, while they are already done for the VRM implementation.

If you are using the current implementation, I’d like to hear your specific use-case for not just using the VRM implementation instead.

1 Like

Initially I was working on something resembling DESS myself but Victron was quicker to release :slight_smile:
Currently I’m on VenusOS v3.55 and running a more or less Hybrid DESS setup, using the VRM-API in Node Red, Dognose’s DESS Hack (scheduled to be included and improved in v3.60 iirc) and some custom Node Red voodoo.

Among the things I’m overriding:

  • forced grid consumption / charging at negative grid prices
  • scheduled charging at low grid prices to anticipate a large load later (charging my 22.5kWh electric motorcycle mostly)
  • manipulating grid target (depending on grid prices, anticipated load & solar forecast etc) to force consumption from grid and all solar to the battery
  • triggering external actions

The VRM API is thus very much appreciated.
Even though I’m currently not using the Node Red DESS implementation, it could be useful for the very special cases where the VRM version is not compatible with certain overrides (in future versions).
Or is simply down, as occurred a few times.
Granted, the Node Red version also needs internet for prices and load/solar forecasting - but that can be worked around.
A use case there would be Privacy, for people who run offline and/or don’t want to send data to a processor on the internet.

In Portugal both solutions are not ideal, since the dynamic energy prices could have different different “fixed values” depending on the time of the day. The NodeRed solution do a better fit but I loose the predicted energy prices, the VRM one doesn’t support this scenarios.

If in VRM we have a mix of the Fixed Price and Dynamic Price solution it would do the job: define custom formulas depending on the time of the day.

1 Like

@BartChampagne could you share some of that node red voodoo?
I’m just starting with node red (see : Dynamic ESS: manual set energy price for each hour - #7 by UpCycleElectric) to automated a boost charger on our trade (test) installation.
Next step concerns the phenomenon that in the morning before new pricing becomes available, prices already tend to be low a few hours earlier but DESS won’t start charging because it does not see any selling opportunity beyond midnight. And once pricing roles in is too late to charge up for it.

2 Likes

I’m reluctant to share my voodoo “as is” , not because I don’t want to share but more because it’s (in my opinion) a bunch of clunky and messy code that I should clean up & rewrite some day when I have spare time.
It all works for my specific setup but I have no idea nor can I guarantee how my code will respond to your setup.
I have some very clean & nifty code as well but that code was paid for by a customer so I can’t just throw it out in the open.
If you can elaborate on what you’re looking for specifically, I can check to clean up that part of my code before sharing it.
If you’re looking for a Node Red example to force charging from the grid, it’s a tricky one these days.
To achieve that on v3.55, my implementation requires The Hack to be installed, then it (ab)uses the “Custom Control” node to write to the com.victronenergy.settings'|/Settings/DynamicESS/AdhocChargeRate entry - just like you would do in GUI v1.
Since the entire DESS mechanism will change in soon-to-be-released v3.60 and The Hack will no longer work on that version, I’ll need to rewrite my code anyways.

And if you’re just starting with Node Red, I suggest you learn it first by making baby steps before importing unknown and complex code.

With regards to Dynamic prices: it’s called ‘Day Ahead’ market, so you should get prices for tomorrow not much later than 14:00 today.
If you only get your prices on the day they’re intended for, you’re either not working on the Day Ahead market or there’s something off with your data source.

Ok, lets start with the day ahead market.

  • The ‘look ahead’ window jumps from about half a day to one and a half day around 13:00 when new prices roll in.
  • On many days the ‘midday low price’ window runs somewhere between 10:00 and 17:00
  • Every morning DESS trade plans to charge the battery midday but only to the level that it knows it can sell back profitably within it’s known look ahead window, which is upto midnight that same day until the new prices roll in.
  • Therefore DESS typically misses the opportunity to charge up much more in the late morning, not aware of the sell opportunity the next day early morning.
  • And by the time to the new prices roll in, it’s too late obviously.

So my question is, how can DESS be made aware that there is a reasonable and quite stable additional sell opportunity within the next 24 hours, in the morning?


Like right now, DESS is missing 2,5 hours of low price charging opportunity

One solution that I think would work reasonably well, is to extend the look ahead window to always be 24 hours ahead at least, and populate the hours for which actual prices are missing, with estimated prices, just a copy of the same hour from the previous day before would already be good enough. And by the time the new actual prices roll in, there is still plenty time for DESS to adjust accordingly.

If possible, at 01:00 in the morning, when the look ahead window is 23 hours, extend it to 35 hours by adding last days pricing to the end of the look ahead window.

The thinking being that history might not repeat, but will usually rime.

Alternatively, the same could be done every hour, always keeping a full 36 hour look ahead window available.
And also instead of copying the hourly price from the day before, simply populating the ‘missing’ actual prices with the ‘last price known’ could also work. Anything, even a ‘bad estimate price’, is better then the current ‘no price known’ situation.
…
Edit: adding 8 hours of the ‘last known price’ at midnight as an intelligent guess looks pretty promising to me. As can be seen in picture below. By the way, these are crazy prices this weekend: minus 28ct to charge the battery, with taxes and costs, wow.