Le calcul de la consommation d'énergie est-il erroné ? Incohérent?

Bonjour à tous,

J’aurais besoin d’un peu d’aide pour la surveillance de la consommation d’énergie.

Actuellement, je relève directement sur le compteur électrique de la maison la consommation prélevée sur le réseau en kW et je transmets cette valeur à Gladys avec quatre décimales. J’y ai créé un appareil virtuel correspondant, doté de fonctions de surveillance de l’énergie, j’ai défini le tarif d’électricité et j’ai tout synchronisé.

Donc : Node-RED fournit, via une requête, la consommation actuelle en kW (par exemple 0,345 kW) et transmet cette valeur toutes les 15 minutes à Gladys. Or, là-bas, le calcul semble complètement erroné. Hier, par exemple, j’ai eu une consommation d’environ 3,75 kW. Gladys affirme qu’elle s’élevait à 15,69 kW… Comment expliquer ces différences flagrantes ?

Bonjour @ruegerth,

Merci pour ce retour détaillé, ça va nous permettre d’y voir clair :slightly_smiling_face:

Je pense que le calcul n’est pas faux, mais que la donnée envoyée n’est pas celle
que Gladys attend. Il y a deux notions à bien distinguer :

  • kW = une puissance instantanée (ce que tu consommes à l’instant T)
  • kWh = une énergie (une puissance pendant une durée)

Ton compteur affiche 0,345 kW : c’est une puissance, pas une consommation.

Comment Gladys calcule la consommation

Le suivi énergétique de Gladys se base uniquement sur des fonctionnalités de type
« Index »
(l’index cumulé de ton compteur, en kWh, celui qui ne fait qu’augmenter).
Toutes les 30 minutes, Gladys fait la différence entre les relevés successifs de
l’index
pour en déduire la consommation de la tranche, puis applique ton tarif.

Les fonctionnalités de type « Puissance » ne sont jamais utilisées pour ce calcul,
elles servent uniquement à afficher une courbe.

Du coup, si la puissance instantanée est envoyée dans une fonctionnalité de type
« Index » (ou « Énergie »), Gladys fait la différence entre deux puissances et
additionne toutes les variations positives. Exemple sur une journée :

0,3 → 1,2 → 0,4 → 2,1 → 0,5 …

Gladys compte +0,9, +1,7, etc. (les baisses sont ignorées, elles sont interprétées
comme une remise à zéro du compteur). On obtient très vite un total 3 à 5 fois trop
grand — ce qui colle bien avec ton 15,69 au lieu de 3,75.

Deuxième détail : l’unité kW n’est pas une unité d’énergie pour Gladys (seules Wh,
kWh et MWh sont converties). Une fonctionnalité déclarée en kW est donc prise telle
quelle comme des kWh au moment du calcul du coût, ce qui fausse aussi le tarif.

Peux-tu confirmer ?

Dans ton appareil, quel est le type exact de la fonctionnalité alimentée par
Node-RED (« Index », « Énergie » ou « Puissance ») et quelle unité est
sélectionnée ? Une capture de l’appareil dans Gladys aiderait à valider mon
hypothèse.

Comment corriger

Solution idéale : envoyer à Gladys l’index cumulé de ton compteur en kWh (le
total qui ne fait qu’augmenter, pas la puissance), dans une fonctionnalité de type
« Index » avec l’unité kWh. Là, un envoi toutes les 15 minutes est
parfaitement suffisant, et le calcul sera exact.

Si ton relevé ne te donne que la puissance instantanée : il faut construire l’index
toi-même dans Node-RED en intégrant la puissance dans le temps. Un nœud function
avant l’envoi vers Gladys :

const now = Date.now();
const powerKw = Number(msg.payload);              // puissance instantanée en kW
const last = context.get('last');

if (!last) {
  context.set('last', { t: now, power: powerKw, index: 0 });
  return null;                                     // on attend le 2e relevé
}

const deltaHours = (now - last.t) / 3600000;
const index = last.index + last.power * deltaHours; // kWh cumulés

context.set('last', { t: now, power: powerKw, index });
msg.payload = Number(index.toFixed(4));
return msg;

Deux précautions :

  • utilise un contexte persistant (stockage file dans Node-RED), sinon l’index
    repart à zéro à chaque redémarrage ;
  • avec un relevé toutes les 15 minutes, on suppose que la puissance est restée
    constante pendant tout l’intervalle : c’est très approximatif. Si tu passes par
    cette méthode, échantillonne plutôt toutes les minutes (voire 10-30 s), la
    précision sera bien meilleure. C’est aussi pour ça que l’index du compteur reste
    la meilleure source.

Une fois la correction faite

  1. Supprime l’historique erroné de la fonctionnalité concernée (ou recrée une
    fonctionnalité propre) ;
  2. Va dans Suivi de l’énergie → Paramètres et lance « Recalculer la
    consommation »
    , puis « Calculer le coût depuis le début ». Tu peux suivre
    l’avancement dans les tâches en arrière-plan.

Dis-moi ce que donnent le type et l’unité de ta fonctionnalité, on affinera si besoin !

Un grand merci pour votre aide rapide.
Si seulement j’avais mieux écouté en cours de physique.
Je peux toujours recommencer à zéro, j’ai pour l’instant tout supprimé.
Sur mon compteur électrique (en Allemagne, le point de livraison du fournisseur d’énergie), je peux consulter le relevé à la seconde près.
Dans Node-RED, j’interroge désormais ce compteur toutes les 15 minutes et j’envoie les données à Gladys via MQTT. Voici à quoi cela ressemble :

Traduit avec DeepL.com (version gratuite)

J’ai configuré un appareil virtuel dans Gladys, je récupère le sujet MQTT et j’ai mis en place la surveillance de la consommation d’énergie à partir de là. Voyons voir… J’espère (pour moi et pour vous) avoir bien compris la différence entre l’énergie et la puissance. Salutations, Thomas

Désolé, j’ai oublié… Voici comment les données s’affichent dans Gladys. Pour l’instant, c’est comme ça, puis toutes les 15 minutes :

Génial, tout fonctionne du coup ? :slight_smile:

Oui, encore merci (P.S. : Deep L est plus performant et plus précis pour la traduction :wink: )

Pour information, je ne sais pas si tu parles anglais, mais le forum traduit automatiquement les messages en cette langue.

Si jamais un jour nous avons beaucoup d’utilisateurs allemands, je pourrais activer la traduction en allemand ! (Mais bon, je paie les requêtes d’IA de traductions, donc il faut une masse critique d’utilisateurs :smiley: )