Un outil pour simuler les différents tarifs de fournisseurs d'électricité depuis un export Linky de la consommation.
Version en ligne: https://comparateur-abonnements-electricite.fr
- Import Enedis simplifié : récupérez votre consommation directement depuis votre navigateur, sans extension ni service tiers
- Questionnaire initial repensé
- Assistant pas-à-pas plus ergonomique
- Retour en arrière possible à chaque étape
- Champs de saisie plus lisibles
- Comparateur de prix
- Répartition de la consommation par type de prix (heures pleines, heures creuses, etc.) en kWh ou en euros
- Performances nettement améliorées et consommation mémoire fortement réduite
- Indicateur signalant les mois pour lesquels il manque des jours de consommation
- Abonnements
- Mise à jour automatique des prix de la plupart des abonnements (depuis les grilles tarifaires officielles)
- Récupération automatique des jours Tempo, EJP et ZenFlex
- Prise en charge des tarifs spot (notamment les offres Sobry)
- À venir : estimation du potentiel solaire
Vos données seront traitées en local, aucune donnée ne sera envoyée vers un serveur. Vous pouvez accéder à l'outil depuis cette url : https://comparateur-abonnements-electricite.fr
Ou vous pouvez le télécharger pour une utilisation hors ligne :
- Téléchargez ce projet en cliquant sur le bouton code puis "Download zip"

- Dézippez-le
- Lancez un petit serveur web local dans le répertoire dézippé (l'application utilise des modules JavaScript, que les navigateurs refusent de charger en ouvrant directement le fichier). Par exemple, si Python est installé :
python -m http.server 8000 - Ouvrez http://localhost:8000 dans votre navigateur. Vos données restent sur votre machine.
- Cliquez sur parcourir et sélectionnez votre fichier
- Pour EDF : "mes-puissances-atteintes-30min-XXXXX-YYYYY.csv" (Ne modifiez pas le nom du fichier!)
- Pour Ennedis : "Enedis_Conso_Heure_DATEDEBUT-DATEFIN_XXXXX.csv" (Ne modifiez pas le nom du fichier!)
- A partir de là, vous pouvez choisir les différentes tarifications que vous voulez expérimenter !
- Récupérez sur le site d'EDF votre consommation https://suiviconso.edf.fr/comprendre

- Dézippez ce répertoire
- Suivez les instructions directement dans l'outil (en déroulant le menu "Comment récupérer les données de mon fournisseur ?")
- Depuis le site de TotalEnergies https://www.totalenergies.fr/clients/ma-conso
- Cliquez sur "Électricité"
- Sélectionnez "Heure", par défaut vous serez sur "Echéancier"
- Cliquez sur le bouton Télécharger, cela va télécharger les données depuis la mise en place de votre Linky, dans une limite de 3 ans
- Depuis le site de Strasbourg Electricité Réseaux
- Cliquez sur "Courbe de charge".
- Choisissez, si possible, une période d'au moins 1 an via le bouton "Personnalisé".
- Cliquez sur "Exporter les données"
- Utilisez le fichier (sans le renommer) : "export_courbe_charges.csv"
HomeAssistant est une plateforme de domotique Open-Source. Certains outils permettent un export de la consommation au quart d'heure. Vérifiez que votre export s'appelle bien history.csv.
Toutes les contributions sont les bienvenues, via une Pull Request vers main (fork + branche). Avant d'ouvrir la PR, vérifiez que les tests passent : node --test "tests/**/*.test.mjs" (Node ≥ 22).
- Ajouter un tarif — suivez le guide scripts/tarifs/README.md : les tarifs sont des définitions déclaratives
defineTarif(...)dansscripts/tarifs/<fournisseur>/*.js(aucune fonction à écrire), avec des recettes pour chaque type d'offre (Base, HP/HC, week-end, calendrier type Tempo, saisonnier, prix spot). N'oubliez pas d'ajouter son chemin dansscripts/tarifs-manifest.js(liste des scripts de tarifs, chargés à la demande au lancement du comparatif), puis générez la page de grille du tarif (cd import && npm run gen, voir Pages de grille tarifaire). - Mettre à jour un tarif — modifiez les prix et
lastUpdatedans le fichier concerné, puis suivez la procédure de mise à jour (snapshots de simulation, pages de grille, relecture du diff). - Créer un importateur pour un fournisseur non géré (Engie, Sobry, grilles HTML…) — ajoutez un parser
import/parsers/<fournisseur>.mjsrespectant le contratparse(doc, url) -> { gridDate, offers }(clés =namedesdefineTarif, prix kWh en centimes TTC, abonnements en €/mois TTC). Les outilsimport/tools/(dump-text.mjs,try-parser.mjs,gen-expected.mjs) permettent d'itérer sur des fixtures locales, avec des tests sans réseau — voir import/README.md. - Corriger ou améliorer l'application (parsers d'export de consommation, interface, calculs) — l'architecture est décrite dans la section Développement ci-dessous.
- Signaler un problème ou proposer une offre manquante — ouvrez une issue.
- Ou tout simplement laisser un pourboire qui me permet de financer le domaine et l'abonnement IA
L'application est 100% statique (aucun build, aucune dépendance à installer), en JavaScript vanilla avec des modules ES :
index.html— page unique : les 3 écrans (présentation, import, résultats), les<template>de l'écran de résultats et le chargement de l'application (les scripts de tarifs sont listés dansscripts/tarifs-manifest.jset chargés à la demande).scripts/app.js— point d'entrée (module ES) : orchestration entre les vues et la simulation.scripts/ui/— vues et rendu :importView.js(réglages + import CSV),resultsView.js(période + rafraîchissement),resultsRenderer.js(clonage/hydratation des templates),viewManager.js(navigation),dom.js(helpers).scripts/core/— logique métier :calculator.js(calculs),simulation.js(personnalisation + calcul global),tarifsRegistry.js(accès au registre des tarifs).scripts/parsers/— un parser par format d'export (EDF, Enedis, TotalEnergies, SER, Home Assistant) etindex.jsqui choisit le bon d'après le nom du fichier.scripts/tarifs-registry.jsetscripts/tarifs/— registre globalwindow.abonnementset fichiers de tarifs (scripts classiques, chargés avant l'application).tarifs/— une page HTML statique par tarif (grille tarifaire standardisée), générée à partir descripts/tarifs/: ne pas éditer à la main (voir Pages de grille tarifaire).
Pour développer en local, servez le répertoire via un serveur HTTP (les modules ES ne fonctionnent pas en file://) :
python -m http.server 8000
puis ouvrez http://localhost:8000.
Le dossier import/ contient les outils locaux (Node ≥ 22) de mise à jour des données : grilles tarifaires PDF des fournisseurs (price_url des defineTarif, prix patchés automatiquement dans scripts/tarifs/**), calendriers Tempo/EJP et Zenflex, prix spot EPEX FR. Première utilisation : cd import && npm ci.
Procédure de mise à jour :
- Mettre à jour les données — automatiquement :
qui lance les quatre scripts en parallèle, affiche une synthèse puis régénère les pages du site dérivées des tarifs (étape 2). Pour un tarif sans importateur (grilles HTML d'Alterna/Enercoop, Engie…), modifiez à la main les prix et
node import/update-all.mjslastUpdatedansscripts/tarifs/<fournisseur>/*.js. - Régénérer les pages du site — fait par
update-all.mjsà chaque lancement. Après une modification manuelle seule :cd import && npm run gen - Régénérer les snapshots de simulation (goldens) — ou
node import/update-all.mjs --goldensà l'étape 1 :UPDATE_GOLDEN=1 node --test "tests/**/*.test.mjs" - Relire le diff : il doit correspondre exactement aux changements de prix attendus.
git diff scripts/tarifs scripts/tarifs-lib git diff tests/golden git diff index.html tarifs sitemap.xml - Lancer les tests, puis commiter le tout (données, goldens et pages générées ensemble) :
node --test "tests/**/*.test.mjs" cd import && npm testnpm testéchoue si les pages générées ne sont plus à jour (npm run genoublié).
node import/update-all.mjs --dry-run (ou --check-only) exécute tout sans rien écrire et se contente de signaler les pages à régénérer. Détails et options : import/README.md.
Chaque tarif a sa page statique tarifs/<slug>.html (slug dérivé du nom du tarif, ex. EDF - Tempo → tarifs/edf-tempo.html), au même gabarit pour toutes les offres : date de la grille, lien vers l'offre et vers la grille officielle (PDF), abonnement par puissance, prix du kWh, heures creuses et règle des types de jour. Un avertissement s'affiche dans le navigateur quand la grille a plus de 6 mois. L'accueil (section « Tarifs suivis ») et le tableau de résultats du simulateur (« Détails de l'offre ») renvoient vers ces pages.
Ces pages, la section « Tarifs suivis » d'index.html et les entrées correspondantes de sitemap.xml sont générées par import/tools/gen-tarif-pages.mjs et import/tools/gen-tarifs-section.mjs (lancés ensemble par cd import && npm run gen) et committées telles quelles : ne les éditez pas à la main, modifiez le tarif puis régénérez. Un tarif retiré ou renommé voit son ancienne page supprimée à la génération suivante. Un nouveau fournisseur doit être ajouté à la table PROVIDERS de import/lib/site-gen.mjs.
Les tarifs indexés sur le marché (Sobry SoCap/SoFlex) s'appuient sur les prix
spot EPEX FR Day-Ahead depuis 2023, committés dans scripts/tarifs-lib/spot/
(un fichier par année). Mise à jour : via node import/update-all.mjs (ou
node import/spot-update.mjs seul, incrémental — voir
import/README.md).
Données de prix spot : energy-charts.info (Fraunhofer ISE), source Bundesnetzagentur | SMARD.de, licence CC BY 4.0.
Basé sur une idée de Nicolas 'Automnen' et Malory Bouvier.