Frank Energie smart home integration, free and open source

Dynamic electricity and gas prices of Frank Energie (Netherlands), today and tomorrow.
The dynamic electricity and gas prices of Frank Energie, the Dutch supplier, 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 Frank Energie. It reads the public prices of Frank Energie, tested against the live API, but it was developed without a Frank Energie contract: feedback welcome.
Overview
Frank Energie 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 a Frank Energie customer pays per kWh (market price, purchasing markup and energy tax), with or without VAT;
- the gas price of the gas day, valid from 06:00 to 06:00, the same way.
Tomorrow's prices are published between 13:00 and 15:00. The all-in price is the price per unit: the fixed monthly costs and the yearly tax credit of your contract are not in it.
Your Frank Energie account (personal prices, consumption, costs, smart charging) is not used: this version reads the public prices only.
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
graphql.frankenergie.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-frank-energie. - Open the integration, check the configuration, save.
- Open the Discovery tab and add the Frank Energie device.
- On a dashboard, add the Electricity prices widget.
Configuration
| Field | Default | What it does |
|---|---|---|
| Electricity price | All-in | All-in price per unit, or the EPEX day-ahead market price alone |
| Include VAT | Yes | Prices with the Dutch VAT (21 %) |
| Gas price | Yes | Also show 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 Frank Energie at once and shows what it publishes for today and tomorrow: use it to check the connection.
The Frank Energie device
One device, read-only, refreshed by the integration itself every minute (the prices are read from Frank Energie 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. Until tomorrow's prices are published, it says that they are not published yet.
Scene triggers
Two triggers, in the scene editor under Frank Energie. 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.
- Negative price: when Current price (market price) goes below 0 → turn on the boiler and send a message "Electricity is free right now".
Refresh and API usage
Frank Energie publishes no quota for this public API. The integration keeps its use low:
- two requests an hour, one for today and one for tomorrow, each answering the electricity and the gas prices of the day;
- from 13:00, both again 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
- "Frank Energie cannot be reached" in the Configuration screen: Gladys has no internet access, or Frank Energie is down. The last known prices stay in use; press Refresh the prices now to try again.
- "publishes no electricity price for today": Frank Energie answered with no price for the day: it happens on a publication incident. The integration tries again every 15 minutes.
- 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. The Dutch day-ahead market trades quarter hours since October 2025, and Frank Energie can publish them: this version shows the hourly prices (the average of the four quarters).
- The public prices only: no login, so no personal prices, consumption, costs or smart charging.
- The all-in price without VAT is computed from the parts Frank Energie publishes, with the Dutch VAT of 21 %.
- 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 EnergyZero
This integration follows the EnergyZero integration of the same author: same device, widget and triggers, so scenes can move from one to the other. Both read the same Dutch day-ahead market; the all-in prices differ by the markup of each supplier. Pick the one of your supplier.
Configuration settings
These are the settings Frank Energie asks for in its configuration screen in Gladys.
| Setting | Type | Required | Description |
|---|---|---|---|
| Dutch energy prices | section | No | Frank Energie publishes the hourly electricity prices of the Dutch day-ahead market and its gas prices, readable without an account. Tomorrow's prices arrive between 13:00 and 15:00. Add the Frank Energie device from the Discovery tab, and the price widget from the dashboard. Your own account (personal prices, consumption) is not used. Not affiliated with Frank Energie. |
| Electricity price | select | No | All-in: what a Frank Energie customer pays per unit (market price, purchasing markup and energy tax). 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 Frank Energie in Gladys
- In Gladys, open Integrations: Frank Energie appears in the catalog, next to the native integrations, with a community badge.
- Click Install. Gladys pulls the Docker image (
ghcr.io/guim31/gladys-frank-energie:1.0.0), 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-frank-energie.
Frank Energie 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
Frank Energie 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