EnergyZero smart home integration, free and open source

Dynamic electricity and gas prices in the Netherlands from EnergyZero, today and tomorrow.
The dynamic electricity and gas prices of the Netherlands, published by EnergyZero, in Gladys: the price of the current hour, the cheapest hours of the day, a price chart for today and tomorrow, and scene triggers to run your appliances when electricity is cheapest.
This integration is not affiliated with EnergyZero. It was developed without access
to the live API from the development environment, on real answers recorded by the
energyzero library: feedback welcome.
Overview
EnergyZero publishes, without account or key:
- the hourly electricity prices of the Dutch day-ahead market (EPEX, NL zone), as a market price or as the all-in price an EnergyZero customer pays (market price, energy tax and purchasing costs), with or without VAT;
- the daily gas price, valid from 06:00 to 06:00.
Tomorrow's electricity prices are published between 14:00 and 15:00. The prices also apply to the brands that buy their energy through EnergyZero (ANWB Energie, Energie van Ons, Mijndomein Energie, SamSam, ZonderGas...).
Every time is shown in Amsterdam time, and a day runs from midnight to midnight in Amsterdam, whatever the timezone of your Gladys.
Requirements
- Gladys Assistant 5.1.0 or later.
- Internet access from Gladys to
public.api.energyzero.nl. - Nothing else: no account, no API key, no hardware.
Installation
- In Gladys, open Integrations → Install from GitHub and enter
https://github.com/guim31/gladys-energyzero. - Open the integration, check the configuration, save.
- Open the Discovery tab and add the EnergyZero device.
- On a dashboard, add the Electricity prices widget.
Configuration
| Field | Default | What it does |
|---|---|---|
| Electricity price | All-in | All-in consumer price, or the EPEX day-ahead market price alone |
| Include VAT | Yes | Prices with the Dutch VAT (21 %) |
| Gas price | Yes | Also read the gas price of the day; changing it adds or removes a feature (update the device) |
| Language of the feature names | French | Used when the device is added: the names do not change afterwards |
The Refresh the prices now button reads EnergyZero at once and shows what it publishes for today and tomorrow: use it to check the connection.
The EnergyZero device
One device, read-only, refreshed by the integration itself every minute (the prices are read from EnergyZero once an hour).
| Feature | Type | Value |
|---|---|---|
| Current price (€/kWh) | Price | Price of the current hour |
| Next hour price (€/kWh) | Price | Price of the next hour (after 23:00, once tomorrow is known) |
| Average price today (€/kWh) | Price | Average of the hours of the day |
| Lowest price today (€/kWh) | Price | Cheapest hour of the day |
| Highest price today (€/kWh) | Price | Most expensive hour of the day |
| Cheapest hour today | Text | Start of the cheapest hour, HH:MM |
| Most expensive hour today | Text | Start of the most expensive hour, HH:MM |
| Hour rank (1 = cheapest) | Counter | Rank of the current hour in the day, 1 to 24 (23 or 25 on DST days) |
| Gas price today (€/m³) | Price | Gas price of the gas day (06:00 to 06:00), when enabled |
Gladys has no €/kWh unit: the prices show in euros, the name says per what. When a feature is the only one of its kind on the device, the dashboard shows the generic label of the kind ("Counter (integer)") instead of its name.
Dashboard widget
Electricity prices shows the price kind, three tiles (now, next hour, today's average), the chart of today and tomorrow with the cheapest and the most expensive hour of each day marked and a line at the current time, then the cheapest hour of today and tomorrow, tomorrow's average and the gas price. Before 15:00 it says that tomorrow's prices come after 15:00.
Scene triggers
Two triggers, in the scene editor under EnergyZero. Both concern electricity and the hours of the current day (midnight to midnight).
Cheapest hours of the day begin
Fires once a day, at the start of the cheapest run of consecutive hours of the day. Pick the length of the run: 1 to 6 or 8 hours (1 hour is the cheapest hour of the day). Variables: average price of the run, start and end time.
One of the cheapest hours begins
Fires at the start of each of the N cheapest hours of the day, consecutive or not. Pick N: 1 to 6, 8, 10 or 12. Variables: price of the hour, its rank, start and end time.
The triggers fire when the hour begins, at most 10 minutes late (Gladys or the integration restarting): an hour that began longer ago fires nothing. "The price drops below X" is no trigger: use the Current price feature with the threshold condition of the scene editor.
Scene examples
- Dishwasher in the cheapest 3 hours: trigger Cheapest hours of the day begin, 3 hours → turn on the dishwasher plug.
- Hot water boiler on the 4 cheapest hours: trigger One of the cheapest hours begins, 4 → turn on the boiler; a second scene on Hour rank greater than 4 → turn it off.
- Expensive hour warning: when Current price goes above 0.40 → send a message "Electricity is expensive right now, wait before starting the dryer".
Refresh and API usage
EnergyZero publishes no quota for this public API. The integration keeps its use low:
- two requests an hour (electricity, and gas when enabled), each answering three days (yesterday, today, tomorrow);
- from 14:00, one more electricity request every 15 minutes until tomorrow's prices are published, then hourly again;
- after a failure, retries after 5, 10, 20, 40 then 60 minutes; the last known prices stay in use meanwhile (prices are known a day ahead).
The states are published only when they change, plus a reminder every 6 hours.
Troubleshooting
- "EnergyZero cannot be reached" in the Configuration screen: Gladys has no internet access, or EnergyZero is down. The last known prices stay in use; press Refresh the prices now to try again.
- "publishes no electricity price for today": EnergyZero answered with no price for the day: it happens on a publication incident. The integration tries again every hour.
- No value on the device: add the device from the Discovery tab first; its values arrive at once.
- The gas feature is missing or still there: after changing the gas setting, open the Discovery tab and press Update on the device.
- Debug logs: set
LOG_LEVEL=debugon the container to see every refresh.
Limitations
- Hourly prices only. The Dutch day-ahead market trades quarter hours since October 2025: the integration shows EnergyZero's hourly prices.
- The Netherlands only, prices of EnergyZero (and the brands it supplies). Your own contract may have another markup.
- The triggers look at the current day only: a cheapest run never spans midnight.
- Read-only: nothing is controlled by the integration itself.
- The feature names are set when the device is added; changing the language later does not rename them.
Compared with Nord Pool
A Nord Pool integration gives the raw day-ahead market price of a bidding zone, VAT and taxes excluded. EnergyZero brings, for the Netherlands, the consumer price (energy tax, purchasing costs and VAT included, what an EnergyZero customer pays) and the gas price; its market price (EPEX day-ahead, NL zone) is the same market as Nord Pool's NL zone.
Configuration settings
These are the settings EnergyZero asks for in its configuration screen in Gladys.
| Setting | Type | Required | Description |
|---|---|---|---|
| Dutch energy prices | section | No | EnergyZero publishes the hourly electricity prices of the Dutch day-ahead market and the daily gas price, without account or key. Tomorrow's electricity prices arrive between 14:00 and 15:00. Add the EnergyZero device from the Discovery tab, and the price widget from the dashboard. Not affiliated with EnergyZero. |
| Electricity price | select | No | All-in: what an EnergyZero customer pays (market price, energy tax and purchasing costs). Market: the EPEX day-ahead price of the Dutch zone alone. |
| Include VAT | boolean | No | Prices with the Dutch VAT (21 %). |
| Gas price | boolean | No | Also read the gas price of the day (€/m³, from 06:00 to 06:00). Changing it adds or removes a feature: update the device in the Discovery tab. |
| Language of the feature names | select | No | Used when the device is added to Gladys: the names do not change afterwards. |
How to install EnergyZero in Gladys
- In Gladys, open Integrations: EnergyZero appears in the catalog, next to the native integrations, with a community badge.
- Click Install. Gladys pulls the Docker image (
ghcr.io/guim31/gladys-energyzero:1.0.1), starts it in a sandbox isolated from the core, and generates the integration's interface (devices, discovery and configuration). - Open the Configuration screen of the integration, fill in the settings, and save.
- You can also install it directly from its repository URL: https://github.com/guim31/gladys-energyzero.
EnergyZero requires Gladys >=5.1.0. The catalog inside Gladys refreshes every hour, so a new version becomes available at most one hour after its release.
Not running Gladys yet? It is free and open source: follow the installation guide to get started.
About external integrations
EnergyZero is an external integration: a community integration packaged as a Docker container and published on GitHub, that Gladys installs in one click and runs in a sandbox isolated from its core. It is published and maintained by guim31, not by the Gladys core team.
- Browse all integrations, native and community
- Build and publish your own external integration
- Source code on GitHub — source of this documentation