foncier_conso_elec
Annual electricity consumption of French sites (open data, no key).
TWO GRID TIERS, and they are not interchangeable. reseau="distribution"
(default) reads Enedis: consumption per ADDRESS, with the NAF division.
reseau="transport" reads ODRE (RTE): the sites connected to the transmission
grid, which are ABSENT from Enedis entirely — and they are the largest consumers
in the country. Saint-Jean-de-Maurienne (73248) returns zero NAF-24 address on
Enedis and 1,702,616 MWh on ODRE for 2023 — one IRIS (732480104) holding 3
delivery points, so that row comes back marked maille="iris_agrege", not as a
single site. A "heavy electricity user" list built on distribution alone is a
list without the heavy users: use reseau="les_deux" for a real one.
⚠️ THE TRANSPORT TIER IS A YEAR BEHIND. ODRE's newest millésime is older than
Enedis's (2023 against 2024, measured 2026-09-09). Asking ODRE for a year it does
not carry returns ZERO rows for the whole tier — which reads exactly like "no
transmission-connected site here" while it means "that year does not exist yet".
That zero is now NAMED in avertissement_millesime: read it before concluding.
Nothing is invented to fill the hole — an absent year stays absent, it is only
said out loud.
TWO GRAINS, and maille governs BOTH tiers with the same meaning: "site" =
one row is one site. On DISTRIBUTION, Enedis publishes ONE ROW PER ADDRESS AND
PER NAF DIVISION, so maille="ligne" (default) returns rows, and thresholding
them one by one MISSES sites whose divisions are each below the bar but whose
total is above it; maille="site" sums an address's divisions and applies
min_mwh AFTER the sum — the grain almost every caller means. A site then
carries naf2_principal, naf2_detail and multi_naf2. On TRANSPORT, "site"
keeps only the IRIS that hold a single delivery point, and "ligne" also returns
the aggregated ones. Filtering those out is how a query for the largest
consumers returns the small ones — see maille below.
Rows Enedis publishes without an address are real consumption that cannot be
located: they are never returned as sites, and counted in lignes_ignorees /
mwh_ignores instead of being silently dropped.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"annee": "<annee>"
},
"name": "foncier_conso_elec"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| _org | No | Org (id) de CET APPEL. `oto_list_orgs()`. | |
| dept | No | INSEE department code (e.g. "59"). | |
| naf2 | No | NAF divisions, two digits (e.g. ["24", "23", "86"]) — the grain Enedis actually publishes in. Ignored on the transport tier, which carries no NAF. | |
| annee | Yes | reference year (e.g. "2024"). ODRE lags a year behind Enedis, so the year that fits distribution may return nothing at all on transport — `avertissement_millesime` says so rather than letting it pass for empty. | |
| limit | No | max rows per tier (default 200); `limit=-1` means NO ceiling, and `total` is the number of rows RETURNED, not the population — it saturates on `limit`, and says so in `tronque` / `avertissement_troncature` when it does. ⚠️ **`limit` caps the rows READ, upstream of `min_mwh`** — the threshold is applied AFTER reading, so a capped read thresholds only what it happened to read. With `min_mwh` set, `total` is therefore a FLOOR, never a count: measured on one department, `limit=60` answered `total: 2` where `limit=-1` answers 61. **Pass `limit=-1` whenever you pass `min_mwh`**, or read `total` as "at least". | |
| _group | No | Équipe (id) de CET APPEL, sous son org parente. | |
| maille | No | "ligne" (as published, default) or "site" (one row = one site). On DISTRIBUTION, "site" sums an address's NAF divisions. On TRANSPORT, "site" keeps only the IRIS holding a SINGLE delivery point; "ligne" also returns the aggregated IRIS, each marked `maille="iris_agrege"`. Those aggregates carry 59 % of the transmission tier (2023 national: 55.3 TWh over 931 rows, of which 22.9 TWh over the 729 single-site ones), and the biggest consumer in France is one of them — filtering them out is how a "largest consumers" query returns the small ones. | ligne |
| reseau | No | which grid tier(s) to read. | distribution |
| _run_id | No | OBLIGATOIRE à chaque appel dès `run_start` ou `data_claim_next` : sans lui, l'écriture sur une ligne réservée est refusée. Hérité seulement si le serveur tient un run actif — n'y compte pas. | |
| max_mwh | No | ||
| min_mwh | No | ||
| secteur | No | "INDUSTRIE" | "TERTIAIRE" | "AGRICULTURE" — coarse: a hospital and an office tower are both TERTIAIRE. Prefer `naf2`. | |
| _project | No | Projet (id) de CET APPEL — jeton PRIMAIRE. `oto_project(op='list')`. | |
| _instance | No | Instance de connecteur PRÉCISE (un credential exact). `oto_instance(op='list')`. | |
| code_epci | No | ||
| code_commune | No |