Calcul de tendances de consommations, comparaison de périodes

Bonjour à tous,

après plus d’une semaine de recherches et tests sans succès, je viens chercher de l’aide ici.

Voici mon besoin : j’aimerais comparer ma consommation d’électricité du mois en cours avec celle du mois précédent sur la même période et en déduire une tendance (à la baisse, stable, à la hausse).

Par exemple, si nous sommes le 18 octobre, j’aimerais comparer ma conso du 1er octobre 00:00 au 18 octobre heure actuelle (par ex 17:00) à celle du mois précédent, même période (donc du 1er sept 00:00 au 18 sept 17:00).

J’ai à disposition une info de l’évolution de mon index EDF.

J’ai tenté tout un tas d’essais à base de la fonction Maxbetween(commande, période)-Minbetween(commande, période) mais rien n’aboutit. Je pense que je ne maitrise pas suffisament les fonctions temps PHP.

Pouvez-vous m’aider svp ?

Merci d’avance.

Seb

1 « J'aime »

bonjour,

il faut juste regarder du coté du plugin suivi conso. Avec un peu de bricolage, tu peux, je pense intégrer tes données au siennes

Bonsoir merci pour la réponse. Je viens de regarder ce plug-in suivi conso, il a l’air au top mais trop complet pour mon besoin je pense.

Je préférerai arriver à faire cela sans plug-in si possible

1 « J'aime »

bonjour
via design et graphique pour du visuel
via tableau c’est pas des max/mini
mais la valeur
ex 30 jours glissant
hier - 30 jours

lastBetween(#[Teleinfo][EDF][BASE]#,yesterday,-0day0:00) - lastBetween(#[Teleinfo][EDF][BASE]#,31 days ago, 30 days ago0:00)

je mets ça en variable
40€ = (variable(Teleinfo_30j_glissant)/1000)* 0.18
7,52 = (variable(Teleinfo_30j_glissant) /1000) / 30

pour un % sur 30j
((lastBetween(#[Teleinfo][EDF][BASE]#,yesterday,-0day0:00) - lastBetween(#[Teleinfo][EDF][BASE]#,31 days ago, 30 days ago0:00)) - (lastBetween(#[Teleinfo][EDF][BASE]#,31 days ago, 30 days ago0:00) - lastBetween(#[Teleinfo][EDF][BASE]#,61 days ago, 60 days ago0:00)))*100/(lastBetween(#[Teleinfo][EDF][BASE]#,yesterday,-0day0:00) - lastBetween(#[Teleinfo][EDF][BASE]#,31 days ago, 30 days ago0:00))

la conso à la minute (ex 480w)
un scénario à la minute
(#[Teleinfo][EDF][BASE]# - lastBetween(#[Teleinfo][EDF][BASE]#, -5 min, -1 min)) * 60

si tu regardes le sites « jeedom facile » il en a fait des tableau/graph

3 « J'aime »

Bonjour @ajja17orange,

Merci pour le partage.
Tu fais comment tes cercles avec % intérieur qui semblent changer de couleur suivant valeur intérieure et tes unités dans une autre nuance/taille/police ?
EDIT : Widget dédié ?

yep
un simple cercle css

width:75px;
height:75px;
border-radius:60px;
font-weight: bold;
font-size:30px;
color:#fff;
line-height:75px;
text-align:center;

la valeur > 0 change la couleur du fond. il y a moyen de faire un gradiant aussi.

en plus complexe qu’un simple rond tu peux via svg ou image

voir si avec le constructeur de widget si il y a moyen. les pro te diront mieux que moi.

Merci. Je vais tester.
EDIT : J’ai même retrouvé ton code :rofl: ici : Logo - icone dans un tableau - #12 par ajja17orange

2 « J'aime »

Bonjour @ajja17orange

et merci aussi pour le partage, c’est top de pouvoir compter sur une communauté quand l’on est bloqué.
J’essaye tout ca dans le weekend et je vous fais un retour.

Merci encore, bonne semaine à tous

a savoir
chaque commande dans un virtuel fait qu’à chaque actu cela va engendré un traitement, même pour un % sur 30j
et vu le nombre de changement. pour ne pas mettre à genoux mon raspberry qui gère des choses plus importante (ex : chauffage)
donc 1 fois par jour (00h15) j’ai un scénario qui me calcul tous ça. et un peu plus tard l’eau de la même manière.

c’est grâce au compteur elec que j’ai vu que c’était la meilleur approche (un compteur) pour un suivie conso.
les graph se font en mode design et via le plug click lynk tu peux faire un accès.


J’ai aussi un PI3b. J’ai un scénario comme toi vers minuit pour au départ faire ce que tu dis. Mais ces derniers temps je me suis enflammé avec l’installation de mes panneaux photovoltaïque et j’ai créé plein de virtuels avec pleins de formules.
Tu as raison faut que je rationalise ces calculs.

sinon faut passé par api js (html)
comme font les graph (natif)

jeedom ne consomme rien (si on a rien)
vu l’ensemble d’executable à droite à gauche PHP, mysql, apache,… on pourrait croire que cela consomme.
c’est les démons (certains plus que d’autres). scénario, enregistrement bdd,… qui au fur est a mesure engendre une augmentation de la ressource, conso. chaleur, perte de rapidité et défaillance.
un seul plug (Chromecast) et rien d’autres


sur un petit rasp2 de test

Je commence à faire des tests avec cette fonction LastBetween, j’arrive enfin a trouver une conso sur une période fixe, par exemple celle de la semaine dernière (du lundi matin au dimanche soir). Merci

Ce que j’aimerai maintenant c’est arriver à indexer les bornes de recherche de cette fonction sur le jour actuel, celui de la semaine en cours.
Exemple : nous sommes actuellement mardi, j’aimerai trouver la conso de la semaine dernière de lundi matin à mardi soir.

Vous auriez une idée ?

alors là tous un tas de expression php

dans le testeur d’expression

lastBetween(#[Teleinfo][EDF][BASE]#,31 days ago,Monday last week 2:00)

Résultat : 64819644

image

image

le lien expression php est dans la doc scenario que voici
https://www.php.net/manual/fr/datetime.formats.relative.php

1 « J'aime »

Merci @ajja17orange mais j’ai du mal exprimer ma demande. Voici un schéma, peut être que ce sera plus facile à comprendre :

Ce que je voudrais arriver a faire c’est mettre une variable dans une des bornes de la fonction lastBetween(commande,start,end)

J’ai d’abord besoin de connaitre le nom du jour actuel. J’ai essayé avec #sjour# mais cela me retourne un résultat en français (et non en anglais comme indiqué dans les expressions PHP du lien).
ensuite la fonction Lastbetween ne semble pas fonctionner avec #sjour# ou peut être qu’elle ne fonctionne tout simplement pas avec une variable ?

Voila où je suis bloqué, je ne sais pas si je suis très clair dans mes explications :stuck_out_tongue:

Sous couvert de @ajja17orange, ce ne serait pas un truc du genre :

maxbetween(#[Extérieur][Production solaire][Production]#, now - 7 days, now) - minBetween(#[Extérieur][Production solaire][Production]#, now - 7 days, now)

qu’il te faut ? A tester…

1 « J'aime »

il y a plusieurs façon
genre ton exemple serait
now (ou today) - monday this week

sinon (pour du très complexe)
les tag (ex #jour#) sont des expressions traduite (la 1er commande jeedom non détaillé dans la doc)

@ajja17orange
Si je peux me permettre, saurais-tu comment utiliser le maxBetween avec des variables ?

exemple de ce que je voudrais interpréter :

maxBetween(#[Extérieur][Production solaire][Production]#, variable( Debut_injection), variable( Fin_injection)) - minBetween(#[Extérieur][Production solaire][Production]#, variable( Debut_injection) , variable( Fin_injection))

Dans mes variables j’ai des dates formatées

2020-10-28 15:10:48

1 « J'aime »

là moi ca se complique et vu que la variable s’incremente par scenario « sauf bidouille param optionnel »
donc a partir du scenario et via la fonction code
(sans espace devant le nom de la variable)

$cmdId = "#[Teleinfo][EDF][BASE]#";
$debut = $scenario->getData('Debut_injection');
$fin = $scenario->getData('Fin_injection');
//$value = scenarioExpression::statisticsBetween($cmdId,min,$debut,$fin);

$value_max = scenarioExpression::maxBetween($cmdId,$debut,$fin);
$value_min = scenarioExpression::minBetween($cmdId,$debut,$fin);
$value_result = $value_max - $value_min;

$scenario->setLog($debut.' -> '.$fin);
$scenario->setLog($value_max.' - '.$value_min.' = '.$value_result);

[2020-10-28 21:20:15][SCENARIO] Start : Scenario lance manuellement.
[2020-10-28 21:20:15][SCENARIO] Exécution du sous-élément de type [action] : code
[2020-10-28 21:20:15][SCENARIO] Exécution d’un bloc code
[2020-10-28 21:20:15][SCENARIO] 2020-10-28 15:10:48 → 2020-10-28 20:10:48
[2020-10-28 21:20:15][SCENARIO] 64890541 - 64887728 = 2813
[2020-10-28 21:20:16][SCENARIO] Fin correcte du scénario

https://kiboost.github.io/jeedom_docs/jeedomV4Tips/CodesScenario/fr_FR/

1 « J'aime »

@ajja17orange, j’ai essayé le code dans un scénario mais j’ai un probleme avec les debut et fin d’injection, elles ne remontent pas

$cmdId = "#[Energies][Ecodevice_EDF][Index (base)]#";
$debut = $scenario->getData('Today');
$fin = $scenario->getData('Now');

$value_max = scenarioExpression::maxBetween($cmdId,$debut,$fin);
$value_min = scenarioExpression::minBetween($cmdId,$debut,$fin);
$value_result = $value_max - $value_min;

$scenario->setLog($cmdId);
$scenario->setLog($debut.' -> '.$fin);
$scenario->setLog($value_max.' - '.$value_min.' = '.$value_result);

Le log

------------------------------------
[2020-10-29 07:24:13][SCENARIO] Start : Scenario lance manuellement.
[2020-10-29 07:24:13][SCENARIO] Exécution du sous-élément de type [action] : code
[2020-10-29 07:24:13][SCENARIO] Exécution d'un bloc code
[2020-10-29 07:24:13][SCENARIO] #2570#
[2020-10-29 07:24:13][SCENARIO]  ->
[2020-10-29 07:24:13][SCENARIO]  -  = 0
[2020-10-29 07:24:13][SCENARIO] Fin correcte du scénario
-

les variables today et now sont créé ?
je viens d’essayer en v4 (dés fois que !)
image
image
image