100 days Free returns on the GridZeno Dongle. Try it on your own system. If it doesn't fit, we take it back and pay the shipping.
The control

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.

01

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.

  1. 1
    InputMeasurements from the system, electricity prices, weather
  2. 2
    ForecastExpected sun and consumption quarter hour by quarter hour
  3. 3
    Hard limitsThe battery's and the inverter's own
  4. 4
    Your requirementsMinimum, maximum and your own rules
  5. 5
    StrategyThe strategy you have chosen: Balanced, Maximise self-consumption, Preserve the battery or Maximise savings
  6. 6
    EconomicsWhat pays off best within all of the above
  7. 7
    DecisionOne choice per quarter hour, with a reason
  8. 8
    To the inverterThe dongle carries out the plan locally
Every quarter hour goes through the same order. Economics comes last and must never break any of the earlier steps.
The dongle carries out the plan at your home
GridZeno never sends a command down to your inverter. The dongle fetches the plan and translates it locally. If the internet goes down, the dongle carries on with the plan it already has, or gives the inverter back its own settings, depending on what you have chosen under Automatic. And a fault in the cloud can't send a command nobody asked for.

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.
02

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.

Machine learning belongs only in the forecasts
We're testing machine learning to make the solar and consumption forecasts more accurate. That part can only give an estimate of what is coming. It can never send a command to your inverter, and the decision is always made by the algorithm, within your limits.
03

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.

  1. 1
    SecurityThe battery's and inverter's own technical limits, BMS restrictions and communication errors.
    Can never be overridden
  2. 2
    Your absolute limitsNever sell, minimum and maximum state of charge. Hard ceilings and floors.
    Beats everything below
  3. 3
    Your own rulesFor example "the battery must be full by 18:00". GridZeno finds the cheapest way there.
    Must not break 1 and 2
  4. 4
    Rules for sellingStop selling at negative prices, the inverter's sale limit and starting the sale again.
  5. 5
    Dynamic limitsCalculated effective limits, if you have turned them on.
  6. 6
    Your strategyThe strategy you have chosen: Balanced, Maximise self-consumption, Preserve the battery or Maximise savings.
  7. 7
    EconomicsBuy cheap, sell dear, but only within all of the above.
    Always loses a conflict
The order is fixed. When two settings point in opposite directions, there's one answer to which wins, and it's the same answer every time.
ExampleWhat the ranking means in practice

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.

04

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.

Illustration: two strategies on the same dayThe electricity price is low at night and in the middle of the day and high in the morning and evening. The Maximise savings strategy charges the battery hard in the cheap hours and empties it in the expensive ones. Preserve the battery moves far less and keeps a higher reserve.0006121824Electricity priceMaximise savingsPreserve the battery
Illustration with made-up figures. It shows how the two strategies think about the same day, not a measured result. All four strategies have run on our own system, but on different days, so they can't be compared directly.
A trade must pay off after everything
GridZeno doesn't sell just because the price is higher than when it charged, and doesn't buy just because power is cheap. The calculation is always net economics: the loss from charging and discharging, and the battery's wear, are deducted first. Consumption expected to be needed later isn't sold off. The exception is "Sell in the evening, buy back at night" (Pro, off by default): then a sale may take power the house needs at night, when it can be bought back more cheaply before the sun comes up, and the whole plan becomes at least DKK 0.25 cheaper. And a sale waits if the same kilowatt hours can be sold at a higher price later, before the sun fills the battery again.
05

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.

See the full price calculation

06

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 %.

07

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.

No action neededCharging from the solar panelsThe sun covers the houseSelling solar surplusSelling stopped by your ruleSelling turned offThe inverter isn't sellingLimited by the inverter's sale limitCurtailing solar: negative priceLimiting selling: negative priceCovering consumption from the batteryHolding the battery for a more expensive hourHolding the battery for your ruleNot using the battery: your ruleHolding your rule's minimumHolding the calculated minimumHolding the battery: buying price below zeroLimiting selling for your ruleSelling from the battery for your ruleBuying from the gridCharging from the grid for your ruleCharging from the grid: negative priceCharging from the grid at a low priceSelling from the battery at a high price

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.

08

How it's tested

Four levels. A strategy only counts as finished once it has been through all four.

  1. 1
    Unit testsEach rule on its own
    Over 2,400 automated tests
  2. 2
    Conflict testsWho wins when two point in different directions
    Settings against each other
  3. 3
    ReplaySame weather, consumption and prices, different choices
    11 constructed days × 4 strategies
  4. 4
    LiveEvery subscription and every possible rule is run through on a real system with real hardware
    At least 48 consecutive hours
A strategy only counts as finished once it has been through all four.

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.

09

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.

It starts with your system

Ready for cheaper
power?

Check whether your inverter fits, and let the plan charge the battery and sell power in the right quarter hours.

Check your system