D'où vient votre prix
Votre fournisseur facture un prix différent toutes les 15 minutes, et la plupart des compteurs d'énergie valorisent tout à un tarif unique. Chaque montant de coût qu'ils affichent est alors une estimation — non pas fausse de peu, mais bâtie sur un chiffre qui n'a jamais été votre prix. Si votre contrat suit le marché, le seul coût qui vaille la peine d'être lu est celui qui utilise le prix de la période pendant laquelle l'énergie a été mesurée.
C'est l'objet de cette page : d'où le hub tire ce prix, ce qu'il en fait, et comment voir quel prix il a utilisé. Ce que l'écran affiche, et que faire lorsqu'un chiffre semble faux, figure dans Dynamic prices.
⚠️ Le hub valorise l'énergie. Il ne commute rien. Il n'y a ici aucun pilotage de charge : ni relais, ni chargeur, ni onduleur, ni automatisme « heure la moins chère » sur l'appareil. Si vous voulez qu'un appareil fonctionne lorsque l'énergie est bon marché, le hub publie une notification et Home Assistant agit en conséquence — voir Cheap windows and the price notification.
En bref
- Les prix dynamiques sont désactivés par défaut. Désactivés, votre tarif valorise chaque période, exactement comme auparavant.
- Activés, chaque période de 15 minutes reçoit son prix de votre source principale ; si cette source n'a pas de prix pour la période, de votre source de secours ; si aucune des deux n'en a un, de votre tarif.
- Le hub enregistre laquelle des trois a été utilisée, pour chaque période, et conserve cet enregistrement pendant 40 jours.
- Votre tarif garde toute son importance : il sert de solution de repli, il apporte les taxes et la TVA ajoutées à un prix de marché, et sa devise est la devise de facturation.
La chaîne, dans l'ordre
Pour chaque période de 15 minutes, le hub détermine un seul prix :
| source | signification | |
|---|---|---|
| 1 | Primary | le fournisseur que vous avez choisi, pour votre zone |
| 2 | Backup | facultative, et doit être un fournisseur différent ; utilisée seulement pour les périodes que la source principale ne couvre pas |
| 3 | Your plan | le tarif de zone en vigueur pour cette période — voir Tariffs |
Rien ici n'est un mélange : une période, un prix, une source. La source est enregistrée avec la période, de sorte qu'un chiffre que vous lisez la semaine prochaine peut encore être rattaché à l'origine de son prix.
Pourquoi il vaut la peine de définir une source de secours
Un marché day-ahead publie le lendemain une fois par jour. Si cette publication est en retard, ou si la récupération échoue, ou si votre zone manque dans une réponse, la source principale n'a tout simplement pas de prix pour ces périodes. Sans source de secours, le tarif prend le relais — ce qui est correct, mais c'est un prix différent, et vos coûts sur cette tranche ne correspondront pas au marché. Une source de secours issue d'un second fournisseur couvrant la même zone maintient le prix de marché en place.
Toutes les zones n'ont pas de seconde source. Douze zones sont couvertes deux fois ou plus par la liste ci-dessous : SE1-4 et NO1-5 (Nord Pool à côté de la source nationale), DK1-2 et NL (Energy-Charts à côté d'une seconde), SE4 et NO2 étant couvertes trois fois. Pour AT, BE, CH, CZ, DE-LU, EE, FI, FR, HU, IT-North, LT, LV, PL, SI et les régions du Royaume-Uni, il n'y a ici aucun second fournisseur — donc soit un envoi depuis Home Assistant sert de source de secours, soit ces périodes retombent sur le tarif de zone.
Les sources
| Source | Type | Résolution | Zones | Devise |
|---|---|---|---|---|
| Energy-Charts (Fraunhofer ISE) | spot | 15 minutes | AT, BE, CH, CZ, DE-LU, DK1, DK2, FR, HU, IT-North, NL, NO2, PL, SE4, SI | EUR |
| Nord Pool (unofficial data portal) | spot | 15 minutes | SE1–4, NO1–5, DK1–2, FI, EE, LV, LT | the area's: SEK, NOK, DKK or EUR |
| Elpriset just nu (SE) | spot | 15 minutes | SE1–4 | SEK |
| Hva koster strømmen (NO) | spot | 1 hour | NO1–5 | NOK |
| EnergyZero (NL) | all-in | 15 minutes | NL | EUR |
| Octopus Agile (UK) | all-in | 30 minutes | the 14 GSP regions, A–P | GBP |
| Home Assistant | au choix : spot ou tout compris | selon ce qui est envoyé | — | celle de votre tarif |
Aucune source n'exige de jeton ni de compte dans cette version.
La résolution n'est pas l'étape de facturation. Un prix au pas de 30 minutes ou horaire s'applique à chaque période de 15 minutes qu'il contient, donc vos coûts restent calculés par période de 15 minutes — quatre d'entre elles partagent simplement un même prix. L'étape à laquelle vous êtes facturé est un réglage distinct ; voir Bill at the hourly mean.
Spot ou tout compris est le point le plus important à bien régler, et il est expliqué ci-dessous, car le mauvais réglage est la façon la plus courante de voir un coût trop élevé.
⚠️ La devise n'est pas convertie. Le hub ne convertira pas des SEK en EUR. Une zone dont la devise diffère de celle de votre tarif est refusée à l'enregistrement (le champ revient avec une erreur), et une source dans une autre devise est ignorée plutôt qu'approximée. Nord Pool SE3 exige un tarif en SEK ; Energy-Charts DE-LU exige un tarif en EUR. Réglez d'abord la devise de votre tarif, puis choisissez une zone qui lui correspond.
L'attribution est affichée, et c'est voulu
Chaque source porte la mention exigée par sa propre licence — par exemple Bundesnetzagentur | SMARD.de /
Energy-Charts (CC BY 4.0) — et le hub l'affiche sur la page Prices. Ce n'est pas de la décoration : c'est la condition à laquelle les données peuvent être utilisées, et elle vous indique ce que vous regardez. Energy-Charts n'est servi que pour les zones publiées sous CC BY 4.0.
Nord Pool est joint par l'intermédiaire d'un portail de données non officiel, et le hub le dit là où il nomme la source. Aucun contrat de service ne le couvre : il peut changer ou s'arrêter sans préavis. Utilisez-le en connaissance de cause, et donnez-lui une source de secours lorsqu'il en existe une : SE1-4, NO1-5 et DK1-2 sont aussi couvertes par une autre source de cette liste, mais pour FI, EE, LV et LT, Nord Pool est la seule — là, un envoi depuis Home Assistant est la seule source de secours disponible.
Ce que votre contrat fait au prix
Un prix de marché n'est pas ce que vous payez. Les deux types de source diffèrent par la part du reste déjà incluse dans le chiffre.
Une source spot : le prix est le début de la chaîne
buy = ( spot × factor
+ markup
[ + your plan's zone rate, if "zones stack" is on ]
+ your plan's per-kWh energy tax
+ grid fee
+ renewable levy )
× ( 1 + your plan's VAT )
factor et markup sont les conditions de votre contrat : un multiplicateur et un ajout par kWh. Tout le reste provient du tarif que vous avez déjà saisi sur Tariffs, ce qui explique pourquoi le tarif compte toujours lorsque le prix est dynamique.
Plages acceptées ; une valeur hors de celles-ci est refusée plutôt que ramenée dans la plage : factor de 0 à 10, markup de −100 à 100.
Une source tout compris : le prix est la chaîne entière
buy = the provider's price
Rien du tarif n'est ajouté — ni taxe, ni frais de réseau, ni prélèvement, ni TVA.
⚠️ C'est le mécanisme qui évite l'erreur de coût la plus courante. Un prix tout compris contient déjà les taxes et la TVA. S'il passait dans la formule spot, chacune de ces composantes serait ajoutée une seconde fois et vos coûts seraient visiblement trop élevés. EnergyZero et Octopus Agile sont marqués tout compris pour cette raison — c'est le hub qui fixe la classe d'un fournisseur de réseau, pas vous ; vous la voyez dans la liste des fournisseurs sous la forme · all-in et dans la ligne de formule. Le seul endroit où la classe relève de votre choix est Home Assistant, où vous indiquez le type de prix que vous envoyez. Si vos coûts semblent gonflés alors que le prix lui-même paraît juste, c'est la première chose à lire.
Home Assistant comme source
Home Assistant — ou tout autre client — peut envoyer des prix au hub au lieu que le hub les récupère : jusqu'à 200 périodes à la fois, conservées dans le stockage propre du hub. Vous indiquez si ce que vous envoyez est un prix spot ou un prix tout compris, et à partir de là il est traité exactement comme un fournisseur de ce type. C'est la voie à emprunter pour un fournisseur dont le hub n'a aucune source, ou pour un prix que vous calculez vous-même.
Dans la version ESPHome, Home Assistant figure parmi les sources dès le départ ; sur le firmware autonome, il apparaît dans la liste dès qu'un envoi est arrivé. Dans les deux cas, les prix dynamiques restent désactivés tant que vous ne les activez pas, et la source est à votre choix — Home Assistant est une option de la liste, et non celle déjà retenue.
Tout ce qui figure sur cette page est vrai pour les deux versions : le hub ESPHome exécute le même noyau et le même module de récupération, avec les mêmes fournisseurs, le même calendrier et la même chaîne de repli. Seul l'endroit où vous réglez cela diffère : dans la version ESPHome, c'est le panneau RBgrid de Home Assistant plutôt que l'application web.
Le côté vente
L'export est valorisé séparément, et jamais avec le même chiffre que l'import. Trois modes :
| Mode | Le prix de vente est |
|---|---|
| From the provider (default) | le prix d'export propre à la source lorsqu'elle en a un, sinon le tarif de vente de votre zone |
| From the tariff plan | le tarif de vente de votre zone |
| Market price × factor − fee | spot × export factor − export fee |
Le facteur d'export accepte de 0 à 10, les frais d'export de −100 à 100 (k_sell et les frais d'injection dans l'API). Aucune taxe ni TVA n'est appliquée côté vente.
La valeur de l'export n'est toujours jamais soustraite de votre coût. L'énergie importée et son coût, l'énergie exportée et sa valeur, côte à côte — voir Economics. Un prix dynamique change les chiffres, pas cette règle.
Facturer à la moyenne horaire : lorsque votre contrat se règle à l'heure
Certains contrats suivent le marché mais se règlent à l'heure, même lorsque le marché publie toutes les 15 minutes. Si vous activez Bill at the hourly mean, chaque période de 15 minutes d'une heure est facturée à la moyenne des prix de cette heure.
C'est une propriété de votre contrat, et non de votre source. Une source de 15 minutes avec un règlement horaire doit avoir cette option activée ; une source horaire n'en a pas besoin, car ses quatre périodes partagent déjà un même prix. L'activer « parce que mon fournisseur est horaire » ne change rien ; la laisser désactivée alors que votre contrat est horaire fait que chaque période diffère un peu de l'arithmétique de votre fournisseur.
Les périodes facturées ainsi sont marquées hourly_mean dans le journal des prix, pour que vous puissiez les distinguer par la suite.
Prix négatifs et planchers
Lorsque le marché passe en négatif, le hub conserve le prix négatif et enregistre un coût négatif pour cette période. C'est la lecture honnête : pendant ces périodes, consommer de l'énergie vous crédite dans un contrat qui suit le marché.
Si votre contrat ne répercute pas les prix négatifs, fixez un plancher : Lowest buy price et Lowest sell price (de −100 à 100, ou none ; floor_buy et floor_sell dans l'API). Désactivé, chacun affiche « None: negative prices pass through ». Le plancher est appliqué en dernier, après tout le reste.
Avec les prix dynamiques désactivés, les tarifs de zone ne descendent jamais sous zéro, comme auparavant. Les planchers existent parce qu'un prix de marché le peut, et que votre contrat peut ne pas le permettre.
Quand les prix arrivent
- Les prix d'aujourd'hui sont récupérés dès que la journée n'est pas entièrement couverte.
- Les prix de demain sont récupérés à partir de 11:00 UTC, lorsque la publication day-ahead commence ; l'application le présente comme le perçoit le lecteur — « they usually arrive after 13:00 CET ».
- Si une récupération échoue, ou si les prix de demain ne sont pas encore sortis, le hub réessaie toutes les 15 minutes jusqu'à 15:00 UTC, puis toutes les heures. Après 15:00 UTC, la page le dit aussi clairement : l'état devient « Tomorrow's prices not in yet ».
Ainsi, une seconde moitié de graphique vide avant midi est normale, et non un défaut : demain n'existe pas encore.
Les deux issues sont inscrites dans le journal du hub, et vous pouvez les lire dans Events :
price: state A -> B (source …)
FAIL price: <provider> <zone> fetch failed (<reason>), retry in N min
La raison est l'une de fetch_failed, http_status, parse, auth, no_data_for_zone ou rate_limited — et c'est elle qui détermine quoi faire (voir ci-dessous). L'état en direct et l'horizon de connaissance des prix figurent sur la page Prices, et dans l'API sous les noms price_state et valid_until.
L'enregistrement : quel prix a été utilisé, pour chaque période
Le prix appliqué à chaque période de 15 minutes est journalisé avec sa source, et conservé pendant 40 jours — y compris lorsque les prix dynamiques sont désactivés, auquel cas l'entrée indique simplement plan. Téléchargez-le en CSV depuis la page Prices.
prov |
origine du prix |
|---|---|
source |
votre source principale |
backup |
votre source de secours |
ha_push |
envoyé par Home Assistant ou un autre client |
hourly_mean |
la moyenne de cette heure, selon le réglage de votre contrat |
plan |
le tarif de zone de votre tarif |
🔑 C'est ce qui rend un chiffre de coût vérifiable plutôt que simplement digne de confiance. Un compteur qui vous montre un coût vous demande de le croire. Un compteur qui vous montre le prix utilisé, par période, avec l'origine de ce prix, vous remet le calcul entre les mains — et 40 jours suffisent pour trancher un désaccord avec un relevé mensuel sous les yeux.
Les enregistrements d'historique eux-mêmes ne changent pas de format : le montant est calculé avec le prix propre à chaque période, et tout ce qui lit déjà l'historique ou le CSV du hub n'a rien à modifier.
Où le prix apparaît ailleurs
- Dynamic prices — l'écran : prix maintenant, aujourd'hui et demain, votre source et votre formule, fenêtres bon marché, pointes, le journal.
- Why this hour costs what it costs — la chaîne complète de l'énergie à l'argent, désormais avec un prix de marché.
- Cheap windows and the price notification — ce que le hub publie pour qu'un autre système puisse agir sur une tranche bon marché.
- Import peaks — l'import le plus élevé sur 15 minutes et à l'heure d'un cycle de facturation. Mesuré que vous utilisiez ou non les prix dynamiques.
- Home Assistant et MQTT — la télémétrie en direct transporte l'état, la source utilisée, l'horizon de connaissance des prix, et le tarif d'achat et de vente en cours ; voir MQTT broker.
Si vous êtes sur le firmware v1.2.0, mettez à jour
Les notes de version du hub contiennent une recommandation, et elle vaut la peine d'être suivie plutôt que lue en passant : mettez à jour depuis la v1.2.0 si vous utilisez les prix dynamiques.
Sur la v1.2.0, les périodes de prix récupérées étaient conservées dans le petit stockage de réglages du hub — le même qui contient l'heure en cours et les points d'ancrage d'énergie. Avec les prix dynamiques activés, les prix pouvaient le remplir, et un redémarrage pouvait alors faire perdre une partie de l'heure en cours de mesure. Le hub le signale lorsque cela se produit : le journal du hub contient FAIL hour persist …: ESP_ERR_NVS_NOT_ENOUGH_SPACE.
La v1.2.1 déplace les périodes de prix dans le système de fichiers du hub et libère cet espace au premier démarrage, en journalisant price: stores moved from NVS to the file system. Rien de ce que fait un lecteur ne change, et rien sur cette page ne se lit différemment sur l'une ou l'autre version — mais la panne décrite ci-dessus ne peut plus survenir.
Les règles des fenêtres bon marché et les valeurs de pointes d'import sont petites et restent dans le stockage de réglages sur les deux versions : « the price stores moved » ne veut pas dire que tout ce qui concerne les prix a été déplacé.
Ce qu'il ne fait pas
Dit clairement, car chacun de ces points est une chose qu'un lecteur pourrait raisonnablement attendre :
- Ni Tibber, ni Amber. Non implémentés. Si votre fournisseur est l'un d'eux, envoyez le prix depuis Home Assistant.
- Pas de conversion de devise. La devise de votre tarif et celle de votre zone doivent être la même.
- Aucun contrat de service derrière Nord Pool. Le point d'accès est un portail de données non officiel et peut changer sans préavis.
- Pas de pilotage de charge. Le hub mesure et valorise ; il ne commute rien. La notification est le point de passage.
- Pas de facturation de la puissance souscrite. Les pointes sont mesurées, pas valorisées dans vos coûts.
Lorsque le chiffre est faux : que vérifier
Mes coûts sont beaucoup trop élevés, et le prix lui-même semble juste. Votre source est tout compris mais elle est traitée comme spot, si bien que les taxes et la TVA du tarif s'ajoutent à un prix qui les contenait déjà. Pour un fournisseur de réseau, la classe relève du hub, et non de vous : lisez-la dans la liste des fournisseurs, où une source tout compris s'affiche avec · all-in, et dans la ligne de formule. Pour Home Assistant, la classe est la vôtre — vérifiez What Home Assistant sends.
Mes coûts semblent trop bas, ou le prix est plus bas que dans l'application de mon fournisseur.
C'est l'inverse : un prix spot sans les conditions du contrat derrière lui. Vérifiez que factor et markup correspondent à votre contrat, et que le tarif qui les porte comprend votre taxe sur l'énergie, les frais de réseau, le prélèvement et la TVA. Un prix spot nu est un chiffre de gros, pas de détail.
La moitié du graphique est vide.
Si c'est avant le milieu de l'après-midi, les prix de demain ne sont pas encore sortis — le hub commence à les demander à 11:00 UTC et ils arrivent en général après 13:00 CET. Si c'est après, cherchez dans Events une ligne FAIL price: et lisez sa raison.
FAIL price: … no_data_for_zone.
Le fournisseur a répondu, mais pas pour votre zone. Soit la zone ne figure pas dans la liste de cette source, soit la source a cessé de la servir. Changez de zone, ou changez de source.
FAIL price: … parse ou http_status, de façon répétée.
La source a changé ou est en panne. C'est le cas pour lequel une source de secours existe ; réglez-en une provenant d'un autre fournisseur couvrant la même zone — si la liste en a une pour votre zone ; voir Why a backup is worth setting plus haut.
FAIL price: … rate_limited.
Trop de requêtes sont parvenues au fournisseur depuis votre adresse. Le hub recule de lui-même — toutes les 15 minutes jusqu'à 15:00 UTC, puis toutes les heures — donc cela se résorbe seul. Si cela persiste pendant une journée, c'est qu'autre chose sur votre réseau interroge le même point d'accès.
J'ai enregistré une zone et elle a été refusée. La devise de la zone ne correspond pas à celle de votre tarif, et le hub ne convertit pas. Réglez la devise du tarif sur celle dans laquelle votre marché s'échange, puis enregistrez la zone.
Le prix est juste, mais les coûts sont toujours calculés à partir de mon tarif.
Regardez le journal des prix pour ces périodes : une entrée plan signifie que ni la source principale ni la source de secours ne les couvraient. Soit les prix n'étaient pas arrivés pour cette tranche, soit les prix dynamiques étaient désactivés à ce moment-là — le réglage s'applique à partir de l'instant où il est enregistré, et l'énergie déjà mesurée conserve le prix avec lequel elle a été chiffrée.
Mes chiffres diffèrent de ceux de mon fournisseur d'un petit écart stable. Vérifiez hourly mean par rapport à votre contrat : si vous êtes réglé à l'heure et que le hub valorise par période de 15 minutes, chaque heure sera légèrement décalée dans les deux sens. Activez-le, et le hub valorise chaque période de l'heure à la moyenne de cette heure.
Une période a coûté moins que zéro.
Le prix de marché était négatif et votre contrat le répercute, donc le hub a enregistré un coût négatif. Si votre contrat ne le répercute pas, fixez floor_buy au plus bas prix que l'on puisse réellement vous facturer.
J'ai changé de source et les anciens coûts n'ont pas changé. Ils ne changent jamais. Une période est chiffrée une seule fois, avec le prix en vigueur au moment de la mesure, et le chiffre reste — voir Why this hour costs what it costs. Changer de source change ce qui se passe ensuite.
⚠️ Pour toute intervention à l'intérieur d'un tableau électrique, faites appel à un électricien qualifié.