drafts:dynamic_ess
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| drafts:dynamic_ess [2024-03-20 16:19] – [Can I use it? | Eligibility Criteria] dfaber | drafts:dynamic_ess [2026-09-04 18:35] (current) – [Step 1: System] dfaber | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Dynamic ESS - manual | + | ====== Dynamic ESS Manual |
| - | ===== What is Dynamic ESS? ===== | + | ===== Smarter energy, bigger savings with Dynamic ESS ===== |
| - | Dynamic ESS is an algorithm that aims to minimise the costs made on the grid and battery: | + | With Dynamic ESS, your Victron system becomes even smarter. It optimizes your battery' |
| - | * By scheduling | + | |
| - | * While taking grid limitations, battery specifications | + | |
| - | * When it can, it also considers the consumption and solar yield forecasts when scheduling. | + | |
| - | Also check these community posts for remarks and further troubleshooting: | + | Whether you're managing a home or a larger installation, |
| - | - [[https:// | + | |
| - | - [[https:// | + | |
| - | - [[https:// | + | |
| - | - [[https:// | + | |
| - | - [[https:// | + | |
| - | ==== Can I use it? | Eligibility Criteria ==== | + | If you have dynamic energy rates or off-peak energy prices, start configuring now to take full advantage of your setup! |
| - | Dynamic ESS is only eligible for the installations which fits the following criteria: | + | {{:drafts: |
| - | * Be an ESS; | + | ==== Two modes: green or trade ==== |
| - | * Not use Generator connection outside of power outages; | + | |
| - | * Run Venus OS v3.30 (or newer) | + | |
| - | For best results: | + | We offer two operating modes to cater to different preferences for managing |
| - | * Have a variable or dynamic | + | |
| - | * Use a supported | + | |
| - | Note: | + | === Green Mode === |
| - | * Only the dynamic energy contracts of the following countries are supported for day ahead prices: //Austria, Belgium, Bulgaria, Croatia, Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Italy, Latvia, Lithuania, Luxembourg, Montenegro, Netherlands, | + | |
| - | * If you have fixed prices (which may differ weekends/ | + | |
| + | Sell surplus solar power back to the grid after covering your consumption and charging the battery. | ||
| + | Reserve battery energy for your own use. | ||
| + | Charge your battery when prices are low to save more. | ||
| - | ===== How can I get started? | Configuration ===== | + | === Trade Mode === |
| + | Always sell surplus solar power back to the grid. | ||
| + | Use the battery energy to take advantage of trading opportunities. | ||
| + | Charge your battery when it’s most beneficial for trading. | ||
| - | {{: | + | Green Mode is ideal for those who prefer a safer, more predictable approach, while Trade Mode is perfect for those looking to maximize their gains through trading. You can always switch between modes to find what works best for you. |
| - | To get started, you need to provide VRM with the necessary configuration Dynamic ESS requires. To do this, you can navigate to //Settings -> Dynamic ESS// and follow the instructions on the page. This should take 15 minutes of your time. | ||
| - | From the page, you can configure the settings | + | ====== Let’s get started ====== |
| + | |||
| + | Setting up Dynamic ESS happens | ||
| - | Also make sure that you have set the location of your device (so we can do the correct solar forecast) and have " | ||
| ==== Step 1: System ==== | ==== Step 1: System ==== | ||
| - | First thing we need to know is whether | + | First, confirm |
| + | details | ||
| + | capacity and what your system | ||
| + | system | ||
| - | Note that this is part is setting | + | Note: This step defines |
| - | ==== Step 2: Battery ==== | + | later. |
| - | Then we need to know information on your battery: | + | **Operating mode:** choose Green mode or Trade mode — the two modes are described above. You can |
| - | | + | always switch between them later. |
| - | * //Maximum charge and discharge power// - This is used for determining the maximum amount we can (dis)charge the battery in an hour | + | |
| - | * //Battery costs// - Battery costs indicate how expensive it is to use it for charging and discharging, | + | |
| - | costs for buying the battery in € / (charging cycles * battery capacity in kWh) | + | {{: |
| - | One battery charge cycle equals full battery charged to 100% and fully used to 0%. If you only use half of the battery power, then recharge it and repeat it the following day — it will also count as one charge cycle instead of two. The number of charging cycles is a number that differs per brand. The battery costs is usually somewhere between € 0.02 and € 0.06 /kWh. | + | |
| - | Some feedback of users is that they don’t care about the battery costs, as they already paid for it, so technically there’s no additional costs to charge it. In that case we still advise to put a small amount in as battery costs. E.g. 0.01 €/kWh. | + | |
| - | In order to make the calculation for you, you can also fill out the invoiced battery cost and the estimated amount of cycles the battery can do. Together with the filled out battery capacity this will calculate the price for you. | + | **New: Disable solar at low buy prices** |
| - | | + | |
| - | If you set the min soc using the slider, then save the form, it will not have been logged to lastLogData yet. Thus the old value will be used in the schedule. Installation will handle this, and the next hour the correct value will be used. | + | Energy prices sometimes drop very low; they can even go negative. At those moments your own solar |
| + | power can actually cost you money: exporting | ||
| + | the grid is cheaper than using your own production. Dynamic ESS can now handle this for you. Open | ||
| + | Advanced Settings and switch on Disable solar at low buy prices, then set your threshold. Whenever the | ||
| + | buy price drops below it, solar production is paused automatically, and it resumes as soon as the price | ||
| + | recovers. No need to keep an eye on the prices yourself. | ||
| - | ==== Step 3 and 4: Buy and sell prices ==== | + | Note: Disabling solar production works with these systems: HS19, Multi RS, MultiPlus, MPPTs, PV inverters that support the SunSpec protocol |
| - | For buying and selling you can either have dynamic (day ahead) prices or fixed prices (which can differ | + | {{ : |
| - | === Dynamic prices === | ||
| - | Each country and provider uses their own formula for pricing. As the system grows, we will have more and more pre-filled out formula' | + | ==== Step 2: Battery information ==== |
| - | Unfortunately getting | + | Next, provide key details about your battery: |
| - | We can give you some general rules and show you what other users have filled out as their formula. With these instructions, you should be able to approximate the actual price you are paying and receiving for your energy. | + | * Battery Capacity – To calculate what 1% of the battery's State of Charge (SOC) represents, we need to know the battery’s total capacity. |
| + | * Maximum Charge and Discharge Power – This determines how much energy | ||
| + | * Battery Costs – These reflect | ||
| - | Generalised over countries | + | To calculate battery costs, you can input the purchase cost of the battery, the estimated number of charge cycles, |
| - | * p - the dynamic price / kWh | + | Battery cost (€) / (Number of charge cycles |
| - | * € 0.02 - energy provider profit share | + | |
| - | * € 0.13 - DSO working price + contributions/levy/ | + | |
| - | | + | |
| - | The sell price formula looks often identical | + | For example, if your battery cost €2,000, has a capacity of 10 kWh, and supports 6,000 charge cycles, |
| - | If the provider takes a 15 % percentage of the day ahead buy price and the taxes are 6%, the formula becomes: //( p * 1.15 ) * 1.06//. | + | 2000 / (6000 * 10) = € 0.03/kWh |
| - | This is a bit weird, because in case of negative buy prices, the provider is going to pay you extra for all of the energy. Knowing providers, this is quite unlikely. So the more plausible formula becomes: | + | |
| - | //(p + abs(p * 0.15)) * 1.06//, which makes sure that the provider takes its share, even when the prices are negative. | + | |
| - | Also note that, if you don't use euro' | + | |
| - | You can also get some ideas from [[https:// | + | * Charge/ |
| - | === Fixed prices === | + | {{: |
| - | If you have a fixed prices contract, you can still have different prices at different moments of the day. In some cases you can have different prices between weekdays | + | ==== Steps 3 & 4: Buying |
| - | Then, you can fill out the price per hour (more granularity is currently not possible). | + | For energy transactions, you can use either **dynamic** |
| - | ==== Step 5: Confirmation ==== | + | |
| - | In the final step you see the filled out values summarised. If you need to make adjustments, | + | For the UK, Spain and France, Dynamic ESS provides an out of the box connection with your energy provider. Refer to the list below to see if that applies |
| - | Now navigate to the installation’s Dashboard and click the button shown below to open the Controls menu. Under the ESS section, you will find Dynamic | + | === Your Dynamic |
| - | {{:drafts: | + | Getting your dynamic pricing formula is important, but it might not be easy to find in your energy contract. Let’s break it down with an example: |
| - | ==== What's next? | After configuration ==== | + | When you sell energy back to the grid, you get the base rate from your energy provider. But when you buy energy, you also pay VAT and an extra charge of 11 cents per kWh. |
| - | As the configuration flow points out, you can navigate to the // | + | |
| - | {{ :drafts:dess-control.png? | + | **Selling Energy**: Your selling formula is just: P |
| - | The //Auto// (green) mode is the usual mode in which Dynamic ESS should operate. If you want to disable Dynamic ESS, toggle the switch to //Off// (red). | + | **Buying Energy**: Your buying formula |
| - | The state of Dynamic ESS will also show on the dashboard, just after the title. As a side note: If you run [[https:// | + | If you’re not sure about your rates, start with a simple P for the price. You can compare |
| - | ====== Operational ====== | + | |
| - | ==== Data Visualisations ==== | + | |
| - | Once operational, | + | {{:drafts: |
| - | {{ :drafts: | + | ==== Step 5: Confirmation ==== |
| - | On the left side of the vertical line, you see the recorded values. On the right side of the line it shows the solar forecast, the consumption forecast and also the target SOC that will be followed (as scheduled during the last calculation for the site). | + | In the final step, review a summary |
| - | By clicking on the legend, you can enable or disable shown data sets in the graph. | + | ===== Tracking your daily energy schedule ===== |
| - | Below you first find a summary on the totals for the day and then there are three tabs which visualise: | + | Once you've configured Dynamic ESS, a new section will appear at the bottom of your VRM dashboard. This section displays a graph showing today' |
| - | * Costs and earnings made as a result of Dynamic ESS usage; | + | |
| - | * Schedule of battery | + | |
| - | * All energy factors which are taken into account | + | |
| - | === Costs and earnings === | ||
| - | This tab begins with a summary that compares the system using Dynamic ESS with the system using regular ESS. | + | ===== Want to know more? ===== |
| - | === Schedule === | + | For more information on Dynamic ESS, check out our frequently asked questions. For some countries, Dynamic ESS provides an out of the box connection with your energy provider. Refer to the list below to see if that applies to you. |
| - | {{ : | ||
| - | The prices graph is available on both this tab and the //Energy// tab. It shows the buy and sell prices per hour. | + | ===== For Victron installers ===== |
| - | {{ : | + | As a Victron device installer, Dynamic ESS allows you to offer enhanced value to your clients while unlocking new sales opportunities. By intelligently optimizing battery charging and discharging based on dynamic electricity prices, Dynamic ESS helps users achieve significant cost savings. |
| - | The usage graph shows the energy | + | These savings can be further amplified with larger battery capacities. As customers see the financial benefits of increased battery storage, they are more likely to invest in expanding their energy |
| - | === Energy === | ||
| - | The prices and graph is the same one as on the // | ||
| - | {{ : | ||
| - | |||
| - | Then there is the energy graph, which summaries everything the system has done and is planning for. | ||
| - | |||
| - | ==== Warm-up period ==== | ||
| - | Dynamic ESS uses consumption and solar yield forecasts to schedule ahead, when the forecasts are available. Depending on the historical data available prior, the accuracy of these forecasts can vary. As it stands now, optimal consumption forecasts need 28 days of past consumption data and optimal solar yield forecasts need 28 days of past solar data. Thus, if there is not enough data the forecasts might be suboptimal which makes the performance of Dynamic ESS suboptimal. However, despite lower accuracy in forecasts, turning Dynamic ESS on in this period is still more cost-efficient and it gets better every day until it reaches its optimal state after 28 days of warm-up period. | ||
| - | |||
| - | ==== Unexpected behaviour? ==== | ||
| - | It is possible that you deem the behavior of Dynamic ESS to be unexpected or suboptimal. Depending on when it happens, there are two possible causes: | ||
| - | * If the suboptimal scheduling is in the future plan, it is probably due to the configurations set by the user. For instance, battery costs being high leads to limited usage of the battery. | ||
| - | * If the suboptimal scheduling is in the past, then it is mostly due to the inaccuracies that come from consumption or solar yield forecasts. It is important to note forecasting will always come with its inaccuracies and even with these inaccuracies at distinct hours, Dynamic ESS minimizes costs compared to Default ESS mode in the longer run. | ||
| - | * Make sure you have the formula' | ||
| - | |||
| - | You might also want to read the chapter on [[# | ||
| - | |||
| - | If you feel like the behavior that you are observing is not explained by above points and you cannot find the answer in the [[# | ||
| - | |||
| - | ====== Implementation ====== | ||
| - | |||
| - | This part of the documentation is about how the system works on a technical level, as it might help troubleshooting for the more advanced users. The system works by taking all of the available data (day ahead pricing/ | ||
| - | |||
| - | The planning is being converted into a target state of charge for the batteries per hour and whether or not the system can feed in to the grid during that hour. If the target SOC is lower than the current SOC, the batteries discharge (either to consumption or the grid; if feed-in is allowed), if the target SOC is higher than the current SOC the batteries get charged (either from solar or from grid). The upcoming four hours schedules are put into the GX device via the two-way VRM communication channel. On the dbus these schedules can be found under `com.victronenergy.settings`, | ||
| - | |||
| - | Every few seconds the GX device will compare the target SOC with the current SOC and determine the power to use to reach that target before reaching the timestamp + duration. So it takes the full hour to reach the target SOC. | ||
| - | |||
| - | In all cases, when the target SOC changes, it will calculate the charge current required to get there, and then distribute that over all the chargers, with the solar chargers getting priority. | ||
| - | If it needs more current to get there than solar provides, it will charge from the grid for the rest, but only if the price of the grid is not too high. | ||
| - | ===== Determining the target SOC ===== | ||
| - | |||
| - | Several people want to know how the algorithm determines the target SOC. This is done by taking 4 steps for each site running Dynamic ESS on each re-calculation of the schedule. This is typically done each hour. | ||
| - | |||
| - | - Obtain data; | ||
| - | - Set boundary conditions (battery, grid and the consumption/ | ||
| - | - Find the most optimal charging cycle according to the data at hand and the battery/ | ||
| - | - Attempt to reach the target SOC for the current hour by the end of this hour | ||
| - | |||
| - | We've ran a lot of simulations to check if we needed to increase the frequency of re-calculation, | ||
| - | |||
| - | We keep the battery stable and not the grid: in our internal testing keeping the battery usage stable (basically the same as the plan) has been a lot more cost-effective than otherwise, because of the battery costs that pile up. | ||
| - | |||
| - | Also keep in mind that, when doing a consumption forecast, the system does not known when during the hour that consumption will be done. If the forecast does not match the reality, Dynamic ESS does keep the planned battery usage stable while punishing the forecast inaccuracies on the grid (selling the excess to grid, buy the additional need from the grid). This can be less ideal, but it is an issue of the forecasts being inaccurate, nothing that the Dynamic ESS decided. | ||
| - | ===== The Node-RED implementation ===== | ||
| - | |||
| - | There exists also a [[https:// | ||
| - | |||
| - | The Node-RED flow uses the VRM API to get the calculation for the site and inserts the hourly schedules into the GX device. If you have specific needs, the Node-RED implementation gives you a lot more options than the current VRM implementation. | ||
| - | |||
| - | You should only be running one implementation at the same time. If you want to run the VRM version, disable the Node-RED flow. You can read on how to do that [[https:// | ||
| - | ====== Country / provider specific ====== | ||
| - | |||
| - | It turns out that some countries have specific pricing rules and regulations. Most of these quirks that affect dynamic ESS have been added below. | ||
| - | |||
| - | ==== Czech Republic ==== | ||
| - | |||
| - | In the Czech Republic there are dynamic transport charges work the same as Denmark, working with peak-tariff and off-peak tariff transport fees. | ||
| - | |||
| - | ==== Denmark ==== | ||
| - | |||
| - | In Denmark there are dynamic transport charges, depending on the time of day. At the moment there is no support for this in our system, but we will plan to add it later on. | ||
| - | |||
| - | ==== Germany ==== | ||
| - | |||
| - | German regulation does not allow feeding in from the battery into the grid (even if the power came from solar). From Venus OS version 3.20~17 it is possible to set certain [[https:// | ||
| - | |||
| - | ==== Portugal ==== | ||
| - | |||
| - | At least one provider in Portugal only allows feeding in solar to the grid during daytime. This looks a lot like the German regulation. For the near future, won't link the battery to grid feed-in to specific times, but disabling battery-to-grid completely will be the first alternative (which is the function that will be implemented soon). | ||
| - | |||
| - | ==== UK ==== | ||
| - | |||
| - | We are aware that the provider Octopus offers day ahead pricing, but as these are not offered via the ENTSO-E API, we are unable to process those. Eventually we will probably support these prices, but will take some time. | ||
| - | |||
| - | Also in the UK, (fixed) prices are known to change at the half hour instead of the whole hour (where our system works with). The work-a-round is to add the average price of in the overlapping hour. So if the price changes from 40 cents to 20 cents at 16.30, fill out a price of 30 cents from 16.00 - 17.00. | ||
| - | |||
| - | Adding better support for this will eventually be done, but as this also affects graphs and the scheduling, it might take a while. | ||
| ====== FAQ ====== | ====== FAQ ====== | ||
| - | Missing a question? Please ask them in [[https://community.victronenergy.com/articles/232720/dynamic-ess-on-beta-vrm.html|the community forum]] with a remark that it should be added to the documentation and/or FAQ. | + | Missing a question? Please ask them in [[https://victron.discourse.group/c/products/dess/21|the community forum]] with a remark that it should be added to the documentation and/or FAQ. |
| ==== Q: Why can't I find dynamic ESS on VRM? ==== | ==== Q: Why can't I find dynamic ESS on VRM? ==== | ||
| - | Right now (early March) | + | There are some pre-conditions a site must fulfill in order to get the “Dynamic ESS” menu option. Make sure that the site's system type is set to ESS or Hub-4. If it is not set to this, you need a different |
| - | For those of you who aren’t familiar with beta VRM, you can log in through [[http:// | ||
| - | |||
| - | ==== Q: Why can't I find dynamic ESS on Beta VRM? ==== | ||
| - | |||
| - | There are some pre-conditions a site must fulfill in order to get the " | ||
| ==== Q: Which energy meters are supported? ==== | ==== Q: Which energy meters are supported? ==== | ||
| Line 237: | Line 136: | ||
| [[https:// | [[https:// | ||
| - | Things like the Dutch P1 meter are not sampling fast enough and not supported right now. | + | ==== Q: What is the default behaviour if the VRM connection is lost longer |
| - | + | ||
| - | ==== Q: What is the default behaviour if the VRM connection is lost longer | + | |
| The system will run out of its schedule after 12 hours and revert to standard ESS operation. Once the connection is reestablished, | The system will run out of its schedule after 12 hours and revert to standard ESS operation. Once the connection is reestablished, | ||
| As the system is partly depending on third-party services (e.g. for retrieving the day ahead price information). If we are somehow unable to fetch new pricing information, | As the system is partly depending on third-party services (e.g. for retrieving the day ahead price information). If we are somehow unable to fetch new pricing information, | ||
| + | |||
| ==== Q: Can the system handle charging my EV or other heavy loads? ==== | ==== Q: Can the system handle charging my EV or other heavy loads? ==== | ||
| - | The short answer is no. The longer answer is that we are working on this, but as it is not that straight forward to come up with a solution that is user friendly and works for everyone, it can take a while before support for this will appear. | + | It will be able to in the future. |
| See [[drafts: | See [[drafts: | ||
| + | |||
| ==== Q: Is there an API available? ==== | ==== Q: Is there an API available? ==== | ||
| Line 295: | Line 194: | ||
| ==== Q: My country is not using the Euro, how do I switch currency? ==== | ==== Q: My country is not using the Euro, how do I switch currency? ==== | ||
| - | At the moment that is not possible yet, but we are working on adding it to the general settings per site. | + | Under the //Settings -> General// part of your site, you can set your currency. |
| - | + | ||
| - | ==== Q: My providers changes price at the half hour instead of the full hour ==== | + | |
| - | + | ||
| - | Some (UK) providers offer fixed prices that change on the half hour instead of at the full hour. | + | |
| - | Unfortunately the 30 minute interval has some more implications than just allowing it to be entered into the fields. | + | |
| - | + | ||
| - | The calculations and forecasts are currently done on the whole hour, so that needs to be accounted for as well. And the same goes for the graphs. All not impossible to solve, but not trivial either and needs a fair bit of testing. | + | |
| - | + | ||
| - | So the 30 minute interval will be added eventually, but it will take some more time. | + | |
| ==== Q: Why does (dis)charging slow down or speed up towards the end of the hour? ==== | ==== Q: Why does (dis)charging slow down or speed up towards the end of the hour? ==== | ||
| Line 320: | Line 210: | ||
| At the moment this is not possible. If we decide to add it, it will first be added to the [[https:// | At the moment this is not possible. If we decide to add it, it will first be added to the [[https:// | ||
| - | ==== Q: Can you give an example with calculations? | ||
| - | {{: | ||
| - | Given a system at 15% SOC that has set the battery costs to 0.06 €/kWh, energy prices right now (11.00) set at € 0.29 and becoming € 0.40 this evening. Why would it feed into the grid already and not wait until the prices are higher? | ||
| - | |||
| - | The battery cost is € 0.06 per kWh. This means that for a cycle of battery usage to be useful (financially beneficial) the price difference should be at least € 0.12 cents per kWh (€ 0.06 for charging, and € 0.06 for discharging). € 0.40 - € 0.29 is € 0.11 which is below that, hence Dynamic ESS does not want to use the battery for this task, instead it is offloading the excess to the grid. | ||
| ==== Q: I am getting the alarm " | ==== Q: I am getting the alarm " | ||
| Line 365: | Line 250: | ||
| Note that the dashboard should show: //Last updated:// **Realtime** | Note that the dashboard should show: //Last updated:// **Realtime** | ||
| + | ==== Q: I get the error message " | ||
| + | |||
| + | This error can happen when the Dynamic ESS system starts before we were able to communicate the battery capacity from VRM to the GX device. It will go away as soon as you restart Dynamic ESS or the GX device. | ||
drafts/dynamic_ess.1710947985.txt.gz · Last modified: by dfaber
