Calcul de tendances de consommations, comparaison de périodes

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

« @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 »

Impeccable ça fonctionne @ajja17orange. Merci

si tu veux mettre des dates au format « expression php »

$dateDebut = 'first day of January';
$dateDebutSTR = date("Y-m-d H:i:s", strtotime($dateDebut)); 	

la 1er ligne peut être remplacé par aussi

$cmdId= cmd::byString("#[Teleinfo][EDF][BASE]#")->getId();
1 « J'aime »

grâce à vos différents commentaires, j’ai réussi à faire ce que je voulais, comparer une conso sur deux périodes.
J’y suis arrivé grâce à un bloc code dans un scénario

//Semaine en cours

$Max_dateDebut = 'yesterday';
$Max_dateDebutSTR = date("Y-m-d H:i:s", strtotime($Max_dateDebut));
$Max_dateFin = 'now';
$Max_dateFinSTR = date("Y-m-d H:i:s", strtotime($Max_dateFin)); 
$Min_dateDebut = 'monday this week';
$Min_dateDebutSTR = date("Y-m-d H:i:s", strtotime($Min_dateDebut));
$Min_dateFin = 'tuesday this week0:00';
$Min_dateFinSTR = date("Y-m-d H:i:s", strtotime($Min_dateFin)); 

$cmdId = "#[Energies][Ecodevice_EDF][Index (base)]#";

$value_max = scenarioExpression::maxBetween($cmdId,$Max_dateDebutSTR,$Max_dateFinSTR);
$value_min = scenarioExpression::minBetween($cmdId,$Min_dateDebutSTR,$Min_dateFinSTR);
$conso_sem_en_cours = round(($value_max - $value_min)/1000,1);

$scenario->setLog('Conso semaine en cours = '.$value_max.' - '.$value_min.' = '.$conso_sem_en_cours.'KWh');

//Semaine précédente

$Max_dateDebut = 'now - 8 days';
$Max_dateDebutSTR = date("Y-m-d H:i:s", strtotime($Max_dateDebut));
$Max_dateFin = 'now -7 days';
$Max_dateFinSTR = date("Y-m-d H:i:s", strtotime($Max_dateFin)); 
$Min_dateDebut = 'tuesday last week';
$Min_dateDebutSTR = date("Y-m-d H:i:s", strtotime($Min_dateDebut));
$Min_dateFin = 'wednesday last week0:00';
$Min_dateFinSTR = date("Y-m-d H:i:s", strtotime($Min_dateFin)); 

$cmdId = "#[Energies][Ecodevice_EDF][Index (base)]#";

$value_max2 = scenarioExpression::maxBetween($cmdId,$Max_dateDebutSTR,$Max_dateFinSTR);
$value_min2 = scenarioExpression::minBetween($cmdId,$Min_dateDebutSTR,$Min_dateFinSTR);
$conso_sem_precedente = round(($value_max2 - $value_min2)/1000,1);

$scenario->setLog('Conso semaine précedente = '.$value_max2.' - '.$value_min2.' = '.$conso_sem_precedente.'KWh');

//Comparaison des deux conso
$ecart = round($conso_sem_en_cours - $conso_sem_precedente,1);
$ecart_pourcentage = round((($conso_sem_en_cours - $conso_sem_precedente)/$conso_sem_precedente)*100,0);
if ($ecart > 0) {
		$scenario->setLog('Ecart de +'.$ecart.'KWh');
		$scenario->setLog('Ecart de +'.$ecart_pourcentage.'%');
} else {
		$scenario->setLog('Ecart de '.$ecart.'KWh');
		$scenario->setLog('Ecart de -'.$ecart_pourcentage.'%');
}

$scenario->setData('Ecart_Conso_Semaine',$ecart);
$scenario->setData('Ecart_Conso_Semaine%',$ecart_pourcentage);

Merci de votre aide

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.