How GridZeno decides.
GridZeno makes a plan for at least the next 24 hours and makes one choice for every quarter hour. Here is how it decides what the battery does, who wins when two things disagree, and how it's tested.
The decision chain
For every quarter hour, GridZeno checks the same things in the same order: first safety and your own limits, and last, what pays off best.
GridZeno divides the day into quarter hours, that is, periods of 15 minutes, and makes a plan for each of them. That's the resolution the Danish electricity market sets prices in. The plan covers the rest of today and up to noon tomorrow, and always at least 24 hours. With Pro and "Plan all of tomorrow", it covers all of tomorrow as soon as tomorrow's prices are out.
The plan is recalculated every hour with Pro, every 3 hours with Smart and once a day with Light. It's also recalculated straight away when tomorrow's electricity prices arrive, when you change a setting, and when the dongle detects a change in the system, for example an extra battery.
You have one layerthat makes the final decision. So two parts of the system can never change the inverter's sale limit or the battery's mode separately and contradict each other.
- 1InputMeasurements from the system, electricity prices, weather
- 2ForecastExpected sun and consumption quarter hour by quarter hour
- 3Hard limitsThe battery's and the inverter's own
- 4Your requirementsMinimum, maximum and your own rules
- 5StrategyThe strategy you have chosen: Balanced, Maximise self-consumption, Preserve the battery or Maximise savings
- 6EconomicsWhat pays off best within all of the above
- 7DecisionOne choice per quarter hour, with a reason
- 8To the inverterThe dongle carries out the plan locally
What the dongle does on the inverter
Every quarter hour in the plan ends up as one of four actions with the battery and a limit on how much may be sold:
- Normal operation
- The inverter runs as usual: the sun covers the house, surplus goes into the battery, and the battery covers consumption when the sun isn't enough.
- Charge from the grid
- The battery charges from the grid up to a set state of charge and then stands idle for the rest of the block while the house buys its power.
- Hold the battery
- The battery stands idle while the house buys cheap power, so the energy is there when power gets expensive later.
- Sell from the battery
- The battery discharges and sends power out to the grid in the best-paid quarter hours.
- Limit the sale
- The inverter's sale limit is set for each quarter hour according to your choices for selling, for example Stop selling at negative prices. Our test shows that we can limit selling from 2.76 kW to 0 in 16 seconds.
An algorithm with fixed rules
Your system is controlled by fixed rules and mathematics that you can follow quarter hour by quarter hour.
GridZeno doesn't use artificial intelligence to control your system. The plan is made by a mathematical algorithm: fixed rules in a fixed order that calculate with prices, forecasts and your limits. The same starting point always gives the same plan, and every decision can be traced back to the rule that made it.
An AI model can come up with something nobody foresaw, and afterwards nobody can say exactly why. When it comes to a battery and an inverter in your home, you must be able to see what happens, and why.
Who wins when two things disagree
All rules are ranked, and the order is fixed. A rule further down can never override one further up.
The ranking makes the control predictable. When you have set two settings that point in opposite directions, there's one answer to which one wins, and that answer is the same every time.
- 1SecurityThe battery's and inverter's own technical limits, BMS restrictions and communication errors.Can never be overridden
- 2Your absolute limitsNever sell, minimum and maximum state of charge. Hard ceilings and floors.Beats everything below
- 3Your own rulesFor example "the battery must be full by 18:00". GridZeno finds the cheapest way there.Must not break 1 and 2
- 4Rules for sellingStop selling at negative prices, the inverter's sale limit and starting the sale again.
- 5Dynamic limitsCalculated effective limits, if you have turned them on.
- 6Your strategyThe strategy you have chosen: Balanced, Maximise self-consumption, Preserve the battery or Maximise savings.
- 7EconomicsBuy cheap, sell dear, but only within all of the above.Always loses a conflict
You have set a rule that the battery must be full by 18:00, and you have set the minimum state of charge to 30 %. In the middle of the day, power becomes very cheap.
GridZeno will happily charge to reach your target at 18:00, but won't break your 30 % minimum along the way to make it cheaper, and will under no circumstances exceed the battery's own technical limits. If the target can't be reached within those limits, the plan says so plainly instead of pretending.
The four strategies
The strategy sets the boundaries the rest of the control works within.
- Balanced
- The default. Uses solar power in the house, stores surplus, sells the rest and uses the battery to avoid expensive import. Can hold the battery for a more expensive hour. With Pro it also charges from the grid when it pays off, and sells from the battery when the selling price is above your threshold.
- Maximise self-consumption
- Uses as much of your own power as possible yourself. Never sells the battery for profit, never holds it back and doesn't charge from the grid to store cheap power. Two exceptions: negative prices, and a rule you've written yourself.
- Preserve the battery
- Fewer cycles and a higher reserve, to spare the battery. No selling from the battery, and it only charges from the grid at negative prices or for a rule you've written yourself. The reserve is 10 percentage points above your own minimum and is written to the inverter, so it also holds if the dongle loses power.
- Maximise savings
- The most economically aggressive. Requires Pro. Like Balanced, and in addition it buys cheap power to sell it at a higher price later, but only when the whole plan becomes at least DKK 0.25 cheaper as a result.
What a strategy may do also depends on the subscription. Automatic control requires Smart or Pro. With Smart, the battery only charges from the grid at negative prices, and nothing is sold from the battery.
What it calculates with
A plan is only as good as what it's built on.
- Pricing
- Real Danish day-ahead prices from Energinet in 15-minute resolution. The buying price is the spot price plus your electricity supplier's markup, the local grid tariff, Energinet's system and transmission tariffs and electricity tax, all including VAT. The selling price is the spot price minus the feed-in tariff, the balance tariff and the trading fee. Each quarter hour is calculated with the tariffs that applied at the time. The formula has been checked hour by hour against an independent calculation.
- Weather
- Several independent weather sources. The system measures which source has matched actual production best and uses it first. If a source doesn't respond, its latest good forecast from the past 6 hours is used.
- Solar production
- Real solar physics per panel string. A system with panels facing both east and west gets the broad double peak it actually produces, not an average angle that doesn't exist.
- Today's own sun
- From the dongle's measurements, GridZeno works out how large a share of the clear-sky sun the panels have delivered in the past hour, and adjusts the rest of the day accordingly, less the further ahead. So the plan charges from the grid when the sun won't manage to fill the battery, instead of waiting for sun that doesn't come. If the battery is full and nothing is being sold, the measurement isn't used, because the inverter will then have turned down the solar production itself.
- Consumption
- The system's own measured consumption, plus what you have entered under Home equipment: the household, electric car, heat pump, electric heating, pool and more. Heating is calculated from the day's temperature.
- The battery
- The capacity comes from the battery's own management system (BMS) and is adjusted to what the battery has actually taken in and given out over the past 14 days. The rated power is read from the inverter. None of it comes from a database someone has typed in.
When something goes wrong
When data is missing, or something fails, GridZeno holds back.
Limits are enforced in two places
Your state of charge limits are written to the inverter's own cut-off registers, and they're checked again before every single command. The register is the real protection: it survives the dongle losing power.
When data is missing, GridZeno doesn't guess
If information is missing, GridZeno goes into safe mode instead of guessing: if the battery reading or the solar forecast is too old, or if real prices are missing for the next 12 hours, the plan doesn't buy or sell power to profit from the price. Before tomorrow's prices are out, the plan uses an estimated price for those quarter hours, based on the latest day with prices. It's only used to judge what the power in the battery is worth. Power is never bought or sold in a quarter hour without a real price. If the connection to the inverter is lost, new commands are stopped. All data carries a timestamp, and outdated data isn't treated as current.
The dongle always finds its way back
Selling from the battery is time-limited in the inverter itself and expires on its own. Charging from the grid and holding use the inverter's own operating modes, which don't expire on their own. That's why the dongle saves the inverter's original setting before it switches the first time, and restores it when the block ends, or when the dongle starts again after a power cut. If the inverter is in a mode you or your installer chose, the dongle leaves it alone.
No writing in a mode we don't know
The sale limit is only written when the inverter's meter setup is one of those we know. If the inverter uses its internal meter, only the limit itself is written, never the setup, and if you switch to manual, the inverter gets its own limit back. If the setup is anything else, the dongle leaves it alone rather than risk overwriting your installer's setup.
The dongle checks that the inverter did it
After grid charging, a hold and a sale, the dongle compares the battery's measured power with what it asked for, three times at 15-second intervals. If the inverter doesn't do as it was asked, we're notified. The inverter's own register for the received command isn't used for this: it only shows what was written, not what the battery is doing.
No back-and-forth
GridZeno doesn't switch mode on small movements in the price. Hysteresis and minimum run times are built in, precisely to stop the system switching back and forth between charging and waiting because the price is hovering around a threshold. On a day built to provoke exactly that, it reduced the number of writes to the inverter by around 80 %.
Every decision can be explained
The question "Why did it charge at 03:00?" can be answered by looking it up in the plan.
Every single decision is stored with everything behind it: time, strategy, state of charge, all limits, current and expected production, current and expected consumption, prices now and ahead, sale limit before and after, which of your rules were active, and a short reason code.
If data is missing, the plan is also marked with what: a state of charge that's too old, a solar forecast that's too old, or too few known prices.
In the app and the web app, you can tap a block in the plan and see why it was chosen, including blocks that have already happened.
The same mechanism does something more: it makes it possible to take a period that has already happened and ask what a different strategy would have done with exactly the same weather, consumption and prices, and compare cost, buying, selling, battery wear and average state of charge directly. You can do this yourself too: under Plan tester in the web app, you take a completed day, up to 31 days back, and see what the plan would have done with other settings.
How it's tested
Four levels. A strategy only counts as finished once it has been through all four.
- 1Unit testsEach rule on its ownOver 2,400 automated tests
- 2Conflict testsWho wins when two point in different directionsSettings against each other
- 3ReplaySame weather, consumption and prices, different choices11 constructed days × 4 strategies
- 4LiveEvery subscription and every possible rule is run through on a real system with real hardwareAt least 48 consecutive hours
The eleven replay days are built to hit what usually goes wrong: an ordinary summer day, a winter day, negative prices, morning and evening peaks, a wrong forecast, unexpectedly high consumption, a full battery with a selling price below zero, a user rule with a deadline, an inverter going offline, a price feed that stops, and a day built to provoke back-and-forth switching.
All eleven are run through all four strategies and measured against fixed acceptance criteria: zero breaches of charge limits, zero selling without permission, zero decisions without a reason.
Before a new version is put into use, a regression gate runs: all eleven days through all four strategies, over 4,000 quarter hours, and it stops at a single breach. Every change is also measured against a theoretical best result, calculated as if the future prices, sun and consumption were known in advance. This shows how much is left to gain, and whether a change actually makes a difference.
There's also a shadow mode, in which GridZeno calculates every decision without passing it on. That way a new algorithm can be measured against a real day that has already happened before it's allowed to control anything. The control is versioned, and every live test stores which version, configuration and forecast were behind it. Otherwise a result can't be reproduced afterwards.
What we're working on
The control keeps getting better. These are the next steps.
Better forecasts
A plan is only as good as what it calculates with, and the forecasts can always get better. We're continuously working on the models for solar production, consumption, buying and selling, measured against what the systems actually do.
A longer view
Today the plan reaches at least a day ahead. We're working on a better assessment of the days after that, so a decision today also takes into account the weather and prices further ahead.
Control from Home Assistant
Home Assistant talks directly to the dongle on your network and, on every subscription, can read the measurements and the plan. If you control the system yourself, it can charge from the grid, hold the battery, sell from the battery and limit export, each for at most 12 hours and within your own limits, through the same safety limits as the control. When GridZeno controls automatically, Home Assistant can only read, so two systems never write to the inverter at the same time. See the Home Assistant guide.
Ready for cheaper
power?
Check whether your inverter fits, and let the plan charge the battery and sell power in the right quarter hours.