Can I configure Dynamic ESS to use in the UK?
I cannot find a setting for the UK.
This site is now in read-only archive mode. Please move all discussion, and create a new account at the new Victron Community site.
Can I configure Dynamic ESS to use in the UK?
I cannot find a setting for the UK.
I am absolutely sure that you can. There may not be a pre programmed setting for the UK but neither was there one for Bolivia where I live. Fill in everything that you can. I advise you to select 'Green' mode rather than 'Trade' mode. I also advise that you don't need put in battery cost and life cycle details unless you really want the system to reduce the use of your batteries to zero. Just select optimise battery life.
I am about to change my Dynamic ESS settings as i am due to start 1 for 1 sales to the local electricity company. I wish I could have done that earlier as, apart from covering power cuts, I do not need batteries as the power company will act as an infine storage for any extra electricity I will generate.
Well, the current problem with not being able to select the UK as a country, is the fact that we haven't got an API key for Octopus. Where, in other countries, the day ahead prices are freely available via Entso-e, Octopus only exposes those to its own customers.
In order to get support for Octopus added, we need to get an API key. So far we've only been referred to general mail addresses at Octopus, which then remain unanswered.
Try emailing their CEO Greg Jackson, he makes his email address public (greg@octopus.energy) I would have thought this sort of thing would be right up their street you just need someone to connect you with their devs.
Octopus already offer tight integration with givenergy inverters on their "intelegent octopus flux" tariff where the user effectively hands control of their system to octopus and is handsomely rewarded for it. It would be amazing to see Victron end up working with the same integration. I know for a fact some people in the UK have selected givenergy hardware because of this integration.
Since Victron have now introduced 1/2 time slots for DESS, I have developed a Node-Red solution to integrating Octopus Agile import tariff prices, it doesnt make sense to export as I'm on the old FIT tariff with deemed export.
Which gives me the following for yesterday and today.
The Node-Red flow looksl like:
The Trigger takes the data from the great work on this link https://community.home-assistant.io/t/octopus-agile-display-tariff-in-graphs-tables-best-import-export-periods-all-done-using-node-red-and-jsonata/518762 and adding an addional Build and Save Tariff array to return it as £ rather than pence ready to send using VRM API. It reads a global array.
This is then split and the times are converted to local time and rejoined and then sorted into time order and then times from 23:00 - 22:59 and sorted by time order or 17:00 - 16:59. Its then converted to a JSON and appended to other data to inject into VRM API for the prices. Note this uses the Fixed price model and changes it twice a day.
My Node Red code for my additional flow if its useful (you will neeed to replace nnnn) with your VRM site id )
[{"id":"ad02a0a637157bf0","type":"vrm-api","z":"45f00bad4d9375ae","vrm":"26857d65984e2624","name":"","api_type":"installations","idUser":"","users":"","idSite":"nnnn","installations":"patch-dynamic-ess-settings","attribute":"","stats_interval":"","show_instance":false,"stats_start":"","stats_end":"","use_utc":false,"widgets":"","instance":"","vrm_id":"","country":"","b_max":"","tb_max":"","fb_max":"","tg_max":"","fg_max":"","b_cycle_cost":"","buy_price_formula":"","sell_price_formula":"","green_mode_on":"","feed_in_possible":"","feed_in_control_on":"","b_goal_hour":"","b_goal_SOC":"","store_in_global_context":false,"verbose":false,"x":1080,"y":560,"wires":[[]]},{"id":"f602efd7caec1239","type":"inject","z":"45f00bad4d9375ae","name":"Trigger 22:55","props":[{"p":"payload"}],"repeat":"","crontab":"55 22 * * *","once":false,"onceDelay":"30","topic":"","payload":"OctAgileTariff1","payloadType":"global","x":120,"y":420,"wires":[["c0facf4b64b747dc"]]},{"id":"5480aa651015fe94","type":"moment","z":"45f00bad4d9375ae","name":"Conv UTC to Local FromTime","topic":"","input":"payload.fullfrom","inputType":"msg","inTz":"ETC/utc","adjAmount":0,"adjType":"days","adjDir":"add","format":"HH:mm","locale":"C","output":"payload.from","outputType":"msg","outTz":"Europe/London","x":550,"y":420,"wires":[["a9a1fe36f995f974"]]},{"id":"6b2b43e5b12afbea","type":"change","z":"45f00bad4d9375ae","name":"Sort into time order","rules":[{"t":"set","p":"payload","pt":"msg","to":"/* look at latest prices, sorted by ascending import cost */\t/* pick the lowest <sample size>, create new object for each */\t/* with {date, from, upto, cost} Sort by date & time */\t\tpayload[[0..95]]^(fullfrom).{\t \"date\": date,\t \"from\": from,\t \"to\": to,\t \"price\": price\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":500,"wires":[["5227185b1e8a081a"]]},{"id":"5227185b1e8a081a","type":"change","z":"45f00bad4d9375ae","name":"take 23:00 to 23:00","rules":[{"t":"set","p":"payload","pt":"msg","to":"/* look at latest prices, sorted by ascending import cost */\t/* pick the lowest <sample size>, create new object for each */\t/* with {date, from, upto, cost} Sort by date & time */\t\tpayload[[48..95]]^(from).{\t \"from\":from,\t \"to\":to,\t \"price\":price\t }","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":500,"wires":[["4fef81d6bda35386"]]},{"id":"c0facf4b64b747dc","type":"split","z":"45f00bad4d9375ae","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","property":"payload","x":330,"y":420,"wires":[["5480aa651015fe94"]]},{"id":"80f3c6b1f247af8b","type":"join","z":"45f00bad4d9375ae","name":"","mode":"auto","build":"merged","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"48","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":1070,"y":420,"wires":[["6b2b43e5b12afbea"]]},{"id":"a9a1fe36f995f974","type":"moment","z":"45f00bad4d9375ae","name":"Conv UTC to Local FromTime","topic":"","input":"payload.fullupto","inputType":"msg","inTz":"ETC/utc","adjAmount":0,"adjType":"days","adjDir":"add","format":"HH:mm","locale":"C","output":"payload.to","outputType":"msg","outTz":"Europe/London","x":850,"y":420,"wires":[["80f3c6b1f247af8b"]]},{"id":"4fef81d6bda35386","type":"json","z":"45f00bad4d9375ae","name":"","property":"payload","action":"str","pretty":false,"x":690,"y":500,"wires":[["b6e543d7a0e1e214"]]},{"id":"b6e543d7a0e1e214","type":"change","z":"45f00bad4d9375ae","name":"Apend input to VRM","rules":[{"t":"set","p":"payload","pt":"msg","to":"'{\t \"buyPriceSchedule\": [\t {\t \"days\":[0,1,2,3,4,5,6],\t \"schedule\":'\t & $.payload & '\t }\t ]\t}'","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":500,"wires":[["ad02a0a637157bf0"]]},{"id":"d2fbcf1a96587afe","type":"inject","z":"45f00bad4d9375ae","name":"Triger 16:65","props":[{"p":"payload"}],"repeat":"","crontab":"55 16 * * *","once":false,"onceDelay":"30","topic":"","payload":"OctAgileTariff1","payloadType":"global","x":130,"y":700,"wires":[["24d8c08abd860a64"]]},{"id":"3f28e85712fab76c","type":"moment","z":"45f00bad4d9375ae","name":"Conv UTC to Local FromTime","topic":"","input":"payload.fullfrom","inputType":"msg","inTz":"ETC/utc","adjAmount":0,"adjType":"days","adjDir":"add","format":"HH:mm","locale":"C","output":"payload.from","outputType":"msg","outTz":"Europe/London","x":570,"y":700,"wires":[["f7db749c63690655"]]},{"id":"24d8c08abd860a64","type":"split","z":"45f00bad4d9375ae","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","property":"payload","x":350,"y":700,"wires":[["3f28e85712fab76c"]]},{"id":"20dc892e06835175","type":"join","z":"45f00bad4d9375ae","name":"","mode":"auto","build":"merged","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"48","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":1090,"y":700,"wires":[["f956d69c8b47142a"]]},{"id":"f7db749c63690655","type":"moment","z":"45f00bad4d9375ae","name":"Conv UTC to Local FromTime","topic":"","input":"payload.fullupto","inputType":"msg","inTz":"ETC/utc","adjAmount":0,"adjType":"days","adjDir":"add","format":"HH:mm","locale":"C","output":"payload.to","outputType":"msg","outTz":"Europe/London","x":870,"y":700,"wires":[["20dc892e06835175"]]},{"id":"f956d69c8b47142a","type":"change","z":"45f00bad4d9375ae","name":"Sort into time order","rules":[{"t":"set","p":"payload","pt":"msg","to":"/* look at latest prices, sorted by ascending import cost */\t/* pick the lowest <sample size>, create new object for each */\t/* with {date, from, upto, cost} Sort by date & time */\t\tpayload[[0..95]]^(fullfrom).{\t \"date\": date,\t \"from\": from,\t \"to\": to,\t \"price\": price\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":600,"wires":[["75cf42b81a268321"]]},{"id":"75cf42b81a268321","type":"change","z":"45f00bad4d9375ae","name":"take 17:00 to 17:00","rules":[{"t":"set","p":"payload","pt":"msg","to":"/* look at latest prices, sorted by ascending import cost */\t/* pick the lowest <sample size>, create new object for each */\t/* with {date, from, upto, cost} Sort by date & time */\t\tpayload[[36..83]]^(from).{\t \"from\":from,\t \"to\":to,\t \"price\":price\t }","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":600,"wires":[["4fef81d6bda35386"]]},{"id":"26857d65984e2624","type":"config-vrm-api","name":"Home Integration"}]
Also my Build and Save node export is:
[{"id":"50216fa86db98793","type":"change","z":"03e5198e519f6178","g":"e42010beae8f7fa5","name":"Build & Save Tariff Array","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.import#$i.{\t \"fullfrom\": valid_from,\t \"fullupto\": valid_to,\t \"date\": $substring(valid_from,0,10),\t \"from\": $substring(valid_from,11,5),\t \"to\": $substring(valid_to,11,5),\t \"price\": value_inc_vat /100\t}^(from)","tot":"jsonata"},{"t":"set","p":"OctAgileTariff1","pt":"global","to":"payload","tot":"msg","dc":true}],"action":"","property":"","from":"","to":"","reg":false,"x":810,"y":160,"wires":[[]]}]
I posted this on another thread but this thread seems more relevent.
Hi nw24. I haven't tried it yet but just what we needed. Well done. It sounds like victron are already working on a similar solution.
Do we need to run the https://community.home-assistant.io/t/octopus-agile-display-tariff-in-graphs-tables-best-import-export-periods-all-done-using-node-red-and-jsonata/518762&nbsp; code and your two pieces all within Home Assistant or just your two pieces published here in HA?
Yes I run an indipentent home assistant and then it talks to my smart home devices, including Victron GX device. I run the Dispaly Octopus Agile display tariffs https://community.home-assistant.io/t/octopus-agile-display-tariff-in-graphs-tables-best-import-export-periods-all-done-using-node-red-and-jsonata/518762 and have added in my additional node to this - to convert prices to £ and create a global variable. Then run my code. I only developed it a couple of days ago and am about to post an update. but its in moderation.
I've modified the flow slightly so that at 16:55 it takes the prices from 12 midday today to 12 midday tomorrow updating the prices from 23:00 today to 12:00 tomorrow. The 22:55 run now takes the period from 22:00 today to 22:00 tomorrow. updating the prices from 12 midday tomorrow to 23:00 tomorrow.
I've also updated some of the infomration notes in the nodes.The new flow looks like this:
The node red export for this is:
[{"id":"ad02a0a637157bf0","type":"vrm-api","z":"45f00bad4d9375ae","vrm":"26857d65984e2624","name":"","api_type":"installations","idUser":"","users":"","idSite":"NNNN","installations":"patch-dynamic-ess-settings","attribute":"","stats_interval":"","show_instance":false,"stats_start":"","stats_end":"","use_utc":false,"widgets":"","instance":"","vrm_id":"","country":"","b_max":"","tb_max":"","fb_max":"","tg_max":"","fg_max":"","b_cycle_cost":"","buy_price_formula":"","sell_price_formula":"","green_mode_on":"","feed_in_possible":"","feed_in_control_on":"","b_goal_hour":"","b_goal_SOC":"","store_in_global_context":false,"verbose":false,"x":1080,"y":560,"wires":[[]]},{"id":"f602efd7caec1239","type":"inject","z":"45f00bad4d9375ae","name":"Trigger 22:55","props":[{"p":"payload"}],"repeat":"","crontab":"55 22 * * *","once":false,"onceDelay":"30","topic":"","payload":"OctAgileTariff1","payloadType":"global","x":120,"y":420,"wires":[["c0facf4b64b747dc"]]},{"id":"5480aa651015fe94","type":"moment","z":"45f00bad4d9375ae","name":"Conv UTC to Local FromTime","topic":"","input":"payload.fullfrom","inputType":"msg","inTz":"ETC/utc","adjAmount":0,"adjType":"days","adjDir":"add","format":"HH:mm","locale":"C","output":"payload.from","outputType":"msg","outTz":"Europe/London","x":550,"y":420,"wires":[["a9a1fe36f995f974"]]},{"id":"6b2b43e5b12afbea","type":"change","z":"45f00bad4d9375ae","name":"Sort into time order","rules":[{"t":"set","p":"payload","pt":"msg","to":"/* look at latest prices, sorted by ascending date */\t\t\tpayload[[0..95]]^(fullfrom).{\t \"date\": date,\t \"from\": from,\t \"to\": to,\t \"price\": price\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":500,"wires":[["5227185b1e8a081a"]]},{"id":"5227185b1e8a081a","type":"change","z":"45f00bad4d9375ae","name":"take 23:00 to 23:00 @ 22:55","rules":[{"t":"set","p":"payload","pt":"msg","to":"/* look at latest prices, sorted by ascending time */\t/* pick the 24hr period 11pm to 11pm */\t\t\tpayload[[48..95]]^(from).{\t \"from\":from,\t \"to\":to,\t \"price\":price\t }","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":500,"wires":[["4fef81d6bda35386"]]},{"id":"c0facf4b64b747dc","type":"split","z":"45f00bad4d9375ae","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","property":"payload","x":330,"y":420,"wires":[["5480aa651015fe94"]]},{"id":"80f3c6b1f247af8b","type":"join","z":"45f00bad4d9375ae","name":"","mode":"auto","build":"merged","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"48","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":1070,"y":420,"wires":[["6b2b43e5b12afbea"]]},{"id":"a9a1fe36f995f974","type":"moment","z":"45f00bad4d9375ae","name":"Conv UTC to Local FromTime","topic":"","input":"payload.fullupto","inputType":"msg","inTz":"ETC/utc","adjAmount":0,"adjType":"days","adjDir":"add","format":"HH:mm","locale":"C","output":"payload.to","outputType":"msg","outTz":"Europe/London","x":850,"y":420,"wires":[["80f3c6b1f247af8b"]]},{"id":"4fef81d6bda35386","type":"json","z":"45f00bad4d9375ae","name":"","property":"payload","action":"str","pretty":false,"x":690,"y":500,"wires":[["b6e543d7a0e1e214"]]},{"id":"b6e543d7a0e1e214","type":"change","z":"45f00bad4d9375ae","name":"Apend input to VRM","rules":[{"t":"set","p":"payload","pt":"msg","to":"'{\t \"buyPriceSchedule\": [\t {\t \"days\":[0,1,2,3,4,5,6],\t \"schedule\":'\t & $.payload & '\t }\t ]\t}'","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":500,"wires":[["ad02a0a637157bf0"]]},{"id":"d2fbcf1a96587afe","type":"inject","z":"45f00bad4d9375ae","name":"Triger 16:65","props":[{"p":"payload"}],"repeat":"","crontab":"55 16 * * *","once":false,"onceDelay":"30","topic":"","payload":"OctAgileTariff1","payloadType":"global","x":130,"y":700,"wires":[["24d8c08abd860a64"]]},{"id":"3f28e85712fab76c","type":"moment","z":"45f00bad4d9375ae","name":"Conv UTC to Local FromTime","topic":"","input":"payload.fullfrom","inputType":"msg","inTz":"ETC/utc","adjAmount":0,"adjType":"days","adjDir":"add","format":"HH:mm","locale":"C","output":"payload.from","outputType":"msg","outTz":"Europe/London","x":570,"y":700,"wires":[["f7db749c63690655"]]},{"id":"24d8c08abd860a64","type":"split","z":"45f00bad4d9375ae","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","property":"payload","x":350,"y":700,"wires":[["3f28e85712fab76c"]]},{"id":"20dc892e06835175","type":"join","z":"45f00bad4d9375ae","name":"","mode":"auto","build":"merged","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"","count":"48","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"num","reduceFixup":"","x":1090,"y":700,"wires":[["f956d69c8b47142a"]]},{"id":"f7db749c63690655","type":"moment","z":"45f00bad4d9375ae","name":"Conv UTC to Local FromTime","topic":"","input":"payload.fullupto","inputType":"msg","inTz":"ETC/utc","adjAmount":0,"adjType":"days","adjDir":"add","format":"HH:mm","locale":"C","output":"payload.to","outputType":"msg","outTz":"Europe/London","x":870,"y":700,"wires":[["20dc892e06835175"]]},{"id":"f956d69c8b47142a","type":"change","z":"45f00bad4d9375ae","name":"Sort into time order","rules":[{"t":"set","p":"payload","pt":"msg","to":"/* look at latest prices, sorted by date */\t\tpayload[[0..95]]^(fullfrom).{\t \"date\": date,\t \"from\": from,\t \"to\": to,\t \"price\": price\t}","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":250,"y":600,"wires":[["75cf42b81a268321"]]},{"id":"75cf42b81a268321","type":"change","z":"45f00bad4d9375ae","name":"take 12:00 to 12:00 @16:55","rules":[{"t":"set","p":"payload","pt":"msg","to":"/* look at latest prices, sorted by ascending time */\t/* pick 24 hours from 12 PM (Midday) */\t\tpayload[[26..73]]^(from).{\t \"from\":from,\t \"to\":to,\t \"price\":price\t }","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":500,"y":600,"wires":[["4fef81d6bda35386"]]},{"id":"26857d65984e2624","type":"config-vrm-api","name":"Home Integration"}]
Hope thius is useful.
I`m getting "invalid accesstoken received" from the installations patch-dynamic-ess-settings node.
Any help would be appreciated.
Hiya,
I had this error at first. double click on the node called "installations - patch dynamic -ess settings"
You need to fill in the details relating to your own VRM site and VRM Token. :)
I have inputed both and "invalid accesstoken received" has gone.
Maybe relabel VRM to VRM token.
I now have Red triangle "invalid input pattern"
I don't have the option in the Installation drop-down "Modify Dynamic ESS config" as show in your screenshot. Could this be the problem?
sorry being a pain:)
53 People are following this question.