ENTSO-E smart home integration, free and open source

Unofficial connector: ENTSO-E day-ahead electricity prices for Europe, per kWh.
Unofficial connector, not affiliated with ENTSO-E. It reads the day-ahead electricity prices of one European bidding zone on the ENTSO-E Transparency Platform, the public data platform of the European transmission system operators, with a free personal security token.
Never tested with a real token. This first version was built and tested against recorded-shape answers only (no ENTSO-E account was available). Please report what you see in the forum thread or in a GitHub issue.
What you get
One device, ENTSO-E <zone>, with these sensors (prices in EUR/kWh):
| Sensor | Content |
|---|---|
| Current price | the price of the current period (15 or 60 minutes) |
| Next period price | the price of the period that follows |
| Today's lowest / highest / average | over the periods of your local day (the average weighs each period by its length) |
| Today's cheapest period (start) | HH:MM local time of the cheapest period of today |
| Tomorrow's lowest price | once tomorrow is published (usually 12:45–13:30 Brussels time) |
| Tomorrow's cheapest period (start) | HH:MM, or --:-- while tomorrow is not published |
| Rank of the current period | 0 = the cheapest period of the day, 95 the dearest (99 on the autumn DST day) |
The rank is handy in scenes: "if the rank is below 16" means "during the 16 cheapest quarter hours of the day" (four hours). Equal prices share a rank (the rank counts the strictly cheaper periods), so more than 16 periods can be "below 16" on a day with ties.
Tomorrow's lowest price keeps its previous value until tomorrow's prices
are published (a number cannot be "unknown" in Gladys): rely on
"Tomorrow's cheapest period", which shows --:-- meanwhile. In a timezone
west of Brussels (Lisbon, London, Canaries), the last local hour of a day
belongs to the next market day: tomorrow's figures cover the hours already
published.
Prices are wholesale prices. Your supplier adds its margin, the grid fees and the taxes. Two options bring them closer to your bill: fixed fees (EUR/kWh, added to the spot price) and VAT (%, applied to the sum): price = (spot ÷ 1000 + fees) × (1 + VAT ÷ 100). A negative spot price stays negative unless the fees exceed it.
Get a free security token
- Create an account on the Transparency Platform (Login → Register), and confirm your e-mail address.
- Send an e-mail to [email protected] with the subject "Restful API access" and, in the body, the e-mail address of your account. ENTSO-E enables API access by hand, usually within a few working days.
- Once it is enabled, log in, open My Account Settings, and under
Web API Security Token click Generate a new token. Copy the token
(it looks like
1d9cd4bd-f8aa-476c-8cc1-3442dc91506d).
The token is personal and free; ENTSO-E allows 400 requests a minute, this integration makes a few a day.
Installation
- Install the integration, paste the token in ENTSO-E security token, pick your bidding zone (France by default), and save.
- Press Read the prices now: the current price and today's average are shown under the button.
- Open Discovery and add the device ENTSO-E <zone>.
About the token: Gladys keeps it in its database (in clear, masked in
the interface, and in its backups), never shows it again, and the
integration only sends it to ENTSO-E (web-api.tp.entsoe.eu). The platform
wants it in the address of the request, so the integration never logs an
address.
Options
| Option | Default | Use |
|---|---|---|
| Bidding zone | FR | 40 zones (France, Belgium, Germany/Luxembourg, Italy, Nordics, …). Changing it creates a new device; delete the old one. |
| VAT (%) | 0 | 0 to 50 |
| Fixed fees | 0 EUR/kWh | 0 to 1 |
| Gladys timezone | Europe/Paris | the timezone of your Gladys (Settings → System), as an IANA name. It sets where a day starts and the times shown. An unknown name falls back to Europe/Paris. |
When prices are read
- At start: today and tomorrow (one request).
- Tomorrow is asked from 13:00 Brussels time (the auction clears at noon), then again after 10, 20, 30 and every 60 minutes until it is published. The next reading is at 13:00 the day after.
- In between, the sensors move every quarter hour from the prices in memory, without any network call. At midnight, tomorrow becomes today.
- A reconnection to Gladys (the container keeps running) keeps the prices, the 429 pause, a refused token and the waiting time after an error, and does not read again when today and tomorrow are known. A restart of the container starts afresh: it reads once.
- Saving the configuration reads at once, even with the same token after a refusal (one request).
Errors
| Situation | What happens |
|---|---|
| Token refused (401) | readings stop and the status says so; the last prices stay shown. Fix the token (or wait for ENTSO-E to enable your API access), then save the configuration or press Read the prices now. |
| Too many requests (429) | every reading, the button included, waits for the delay ENTSO-E gives (one minute to six hours; ten minutes when none is given). |
| ENTSO-E down (5xx), network error | new attempt after 5, 15, 30, then every 60 minutes; the last prices stay shown. |
| No price for the zone | the status says so; asked again every hour. |
How the data is read
The integration asks the A44 document (day-ahead prices, contract type A01). Since 1 October 2025 the European day-ahead market uses 15-minute periods; older or other answers in 60-minute periods are read as well. In a "variable sized blocks" curve (A03), a period missing in the answer repeats the price before it (the ENTSO-E rule); in other curves a missing period stays without price. The 23- and 25-hour days of the clock changes are handled. The answer is read with a bounded, linear parser and refused beyond 256 KB.
Limits
- One zone per installation of the integration.
- No scene trigger, widget or energy contract in this version.
- Prices in EUR/MWh only: a zone ENTSO-E would price otherwise is reported in the status ("not priced in EUR/MWh") and asked again every six hours.
- Never tested with a real ENTSO-E token (see the top of this page).
The parsing logic is ported from JaccoR/hass-entso-e (Apache-2.0).
Configuration settings
These are the settings ENTSO-E asks for in its configuration screen in Gladys.
| Setting | Type | Required | Description |
|---|---|---|---|
| ENTSO-E day-ahead prices | section | No | Unofficial connector, not affiliated with ENTSO-E. It reads the day-ahead prices of one European bidding zone on the ENTSO-E Transparency Platform with your free security token: one device with the current and next price per kWh, the lowest, highest and average price of the day, the cheapest period of today and tomorrow, and the rank of the current period. Wholesale prices: your supplier adds its margin, the grid fees and the taxes; the VAT and fixed fees below are added for you. |
| ENTSO-E security token | secret | Yes | Kept by Gladys in its database (in clear, masked in the interface), never shown again, and only sent to ENTSO-E. |
| Bidding zone | select | Yes | The day-ahead market zone of your meter. Changing it creates a new device. |
| VAT (%) | number | No | Added to every price: (spot + fixed fees) × (1 + VAT). 0 keeps the wholesale price. |
| Fixed fees (EUR/kWh) | number | No | Added to the spot price of every kWh before VAT (supplier margin, grid fees, taxes). |
| Gladys timezone | string | No | The timezone of your Gladys (Settings → System): it sets the days and the times shown. IANA name, e.g. Europe/Brussels. |
How to install ENTSO-E in Gladys
- In Gladys, open Integrations: ENTSO-E appears in the catalog, next to the native integrations, with a community badge.
- Click Install. Gladys pulls the Docker image (
ghcr.io/lm1lc3n7/gladys-entsoe:0.1.2), 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/LM1LC3N7/gladys-entsoe.
ENTSO-E 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
ENTSO-E 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 LM1LC3N7, 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