Graphiques - Afficher cumul valeur par Jours / Semaine / Mois / Année

Hello :slight_smile:

Je viens proposer une fonctionnalité pour les graphiques.

Le cas le plus concret que j’ai en tête concerne la consommation d’électricité ou eau.

Actuellement un capteur récupère toutes les valeurs en temps réel et les transmet à Gladys qui les stocks en base pour générer le graphique.

Sauf qu’actuellement si on affiche le graphique en jours, semaines, mois…, on a une moyenne de ce qui est envoyé en temps réel à chaque fois.

Le but de ma demande serait que quand on configure un graphique, on puisse avoir une option (activable ou pas) pour choisir d’afficher la somme des valeurs sur une période configurée (jours/semaine/mois/année)

Ce qui permettrait pour un graphique configuré en « somme par semaine » d’avoir la consommation totale par semaine d’affiché dans le graphique et non plus la moyenne des valeurs temps réel.

Je sais pas si c’est très clair ^^

Merci d’avance si ça peut se faire :wink:

Pour moi ta demande est très claire :slight_smile: car je rencontre le même cas de figure que toi avec ma consommation / production d’électricité.
Par contre je n’ai aucune idée de la manière dont ça peut être fait, car cela me parait complexe : il faudrait j’imagine récupérer les données de consommation à des fréquences assez élevées (toutes les minutes? ) pour ensuite faire le calcul et les cummuler sur 24h, puis semaine, puis mois… si c’est faisable c’est top, mais j’ai peur que ce soit une usine à données !

Toujours est-il que j’aimerai beaucoup avoir cette fonctionnalité, je vote pour ! :wink:

En fait ça dépend, car dans mon cas, la consommation que je mesure est déjà en kWh.

J’ai juste à faire une mesure toutes les 30Min par exemple et je récupère les kWh consommé sur les 30 dernières minutes puis je reset mon meter et rebelote.

Ce principe fonctionnera donc de la même façon qui si tu fais une mesure toutes les minutes ou toutes les 24H

PS: j’ai déjà une idée de comment monter ça avec du MQTT / Node-Red, je testerais ça et je te dit

1 « J'aime »

Avec plaisir !

@guim31 j’ai réussi à faire exactement ce que je voulais !

Dès que j’ai du temps je t’explique tout ça :smiley:

Super ça ! Je suis bien interessé ! :wink:

Comme ça j’aurai dans Gladys un peu le même genre de choses que j’ai depuis mon appli Solaredge (panneaux solaires) mais que je ne peux pas récupérer via l’API !! :slight_smile:

1 « J'aime »

@guim31

Alors pour commencer il faut que tu puisse récupérer la valeur mesuré en kWh directement dans Node-Red

Une fois que tu as cette valeur nous allons l’enregistrer dans une base de donnée Node-red via une fonction JS
1

Il faut ensuite que tu puisse actualiser la valeur le plus souvent possible. (Dans mon cas c’est update tous les 0.01kWh)

Pour la partie récupération des données de ton équipement de mesure c’est fini.

On passe sur Gladys, il faut créer 1 équipement MQTT (Dans mon cas “onduleur”)

Dans mon équipement j’ai créer 2 Fonctionnalitées:

Type: Inconnu
Nom: Update 10 Min
Min: 0
Max: 1
Est-ce un capteur ?: Désactivé
(Cette fonctionnalité va permettre à Gladys de dire à Node-Red d’activer une fonction que l’on va créer plus tard)


Type: Energie consommée
Nom: Energie Consommée (10 Min)
Min:0
Max: 100000
Est-ce un capteur ?: Activé
(Cette fonctionnalité va permettre de recevoir les valeurs de Node-Red vers Gladys)




Maintenant qu’on a nos 2 fonctionnalités MQTT on va créer notre fonction dans Node-Red

A gauche c’est la fonctionnalité “Update 10 Min” avec le topic Gladys “MQTT à écouter”
A droite c’est la fonctionnalité “Energie Consommée (10 Min)” avec le topic Gladys “MQTT pour publier”

Nous avons une fonction JS au milieu

//On vérifie si la variable globale existe ou pas
if(global.get("Energie10Min") === undefined)
{
    //Si elle existe pas on la créé avec la dernière valeur mesuré (pour initialiser notre première mesure)
    global.set("Energie10Min", global.get("NewEnergie"));
}

//On calcule la différence entre la dernière valeur mesuré et la nouvelle et on arrondie à 2 chiffres après la virgule
msg.payload = (global.get("NewEnergie") - global.get("Energie10Min")).toFixed(2);

//On enregistre la nouvelle valeur en tant qu'ancienne valeur mesuré
global.set("Energie10Min", global.get("NewEnergie"));

return msg;

Maintenant il ne reste que la scène de déclanchement à faire dans Gladys

Si tu souhaite avoir plusieurs intervalles il te suffit de créer de nouveau 2 fonctionnalités MQTT dans ton module et de dupliquer cette partie Node-Red


En changeant toutes les informations sauf le nom de la variable “NewEnergie” dans la fonction JS car ça correspond à ta valeur actualisé automatiquement dans la première fonction JS créé plus haut

Tu peux maintenant afficher tes valeurs dans les graphiques Gladys
/!\ La première valeur reçus dans Gladys sera à 0, il faudra attendre le 2ieme relevé pour avoir les mesures

J’ai créé de mon côté les relevés suivant:
10 Min
30 Min
1 Heure
1 Jour
1 semaine
1 Mois
1 An

Et voila les résultats pour
10 Min
4

30 Min
5

1 Heure
6

Tu me dis si c’est pas tout clair :wink:

2 « J'aime »

ça fait un affichage sympa sur 24h si tu affiche tout en même temps ^^
10

1 « J'aime »

La demande pour Gladys sans passer par NodeRed me semble aussi très pertinante, j’ai le même besoin :blush: