Valeur max et min sur une année

J’ai essayé cette commande :

maxBetween(#[Cellier][Raspberry-PI-2_Model-B][15_dht22]#, 2019-01-01,now)

Mais cela me retourne toujours 12,7 !!!

Pourtant, il a fait plus de 12,7°C cet été :hot_face:

Si j’utilise ma température d’une sonde EnOcean au lieu d’une sonde DTH22 via Jeedouino, cela fonctionne parfaitement :

maxBetween(#[Salon][Trio2Sys][Température]#, -12 months ,today)

Pourtant, mes deux sondes sont historisées

j’ai intégré un choix liste

2 « J'aime »

C’est super classe comme taf !! Féliciations ! Comment puis je intégrer ça ?
Cela dit, je ne comprends pas pourquoi ma formule retourne toujours 12,7… et j’aimerai comprendre !

Bonjour ajja17, j’essaie d’utiliser ce morceau de code mais j’ai un souci que je n’arrive pas à régler, la date retournée pour la minimale est toujours « 06h30 »… Je n’arrive pas à isoler le problème…

bonjour
mets un @devant mon nom pseudo sinon je vois pas

voici le code que j’utilise maintenant
certainement j’ai fait des modif mais je doute que se soit sur cette partie

<!-- source
https://codepen.io/pavelvaravko/pen/qjojOr/
-->

<body>
    <div class="wrap">
      
<!--Select with pure css-->
      <div class="select">
					<select class="select-text" required>
						<option value="elem_24h" selected>24 heures</option>
						<option value="elem_1ans">1 ans</option>
						<option value="elem_2ans">2 ans</option>
                      <option value="elem_3ans">3 ans</option>
					</select>
					<span class="select-highlight"></span>
					<span class="select-bar"></span>
					<label class="select-label">Mini/Maxi Temp. Ext. </label>
  	</div>
      
<div class="result">Pour cette periode <br/>
  le minimal est de <span class="mini">--</span><br/>(<span class="minidate">--</span>) <br/>
  le maximal est de <span class="max">--</span><br/>(<span class="maxdate">--</span>) <br/>
  et il faisait <span class="lastyear">--</span><br/>
  à <span class="lastyeardate">--</span>

      </div>
	<script>
      var stateTemp=825; // Id à définir     825 
   var date = new Date();
   var d = date.getDate();
   var m = date.getMonth() + 1; //Month from 0 to 11
    var y = date.getFullYear();
      var hh = date.getHours();
      var mn = date.getMinutes();
      var ss = date.getSeconds();
	var d_1 = (date.getDate()-1);
    var y_1 = (date.getFullYear()-1);
    var y_2 = (date.getFullYear()-2);
	var y_3 = (date.getFullYear()-3);   
  
      var hh_1 = (date.getHours()-1); 
var now = (y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d)+' '+(hh<=9 ? '0' + hh : hh)+':'+(mn<=9 ? '0' + mn : mn)+':'+(ss<=9 ? '0' + ss : ss));
var oneyear = (y_1 + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d)+' '+(hh_1<=9 ? '0' + hh_1 : hh_1)+':'+(mn<=9 ? '0' + mn : mn)+':'+(ss<=9 ? '0' + ss : ss));
var lastday = (y + '-' + (m<=9 ? '0' + m : m) + '-' + (d_1 <= 9 ? '0' + d_1 : d_1)+' '+(hh<=9 ? '0' + hh : hh)+':'+(mn<=9 ? '0' + mn : mn)+':'+(ss<=9 ? '0' + ss : ss));
var twoyear = (y_2 + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d)+' '+(hh_1<=9 ? '0' + hh_1 : hh_1)+':'+(mn<=9 ? '0' + mn : mn)+':'+(ss<=9 ? '0' + ss : ss));
var treesyear = (y_3 + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d)+' '+(hh_1<=9 ? '0' + hh_1 : hh_1)+':'+(mn<=9 ? '0' + mn : mn)+':'+(ss<=9 ? '0' + ss : ss));

var options = {timeZone: "UTC",hour:"2-digit", minute:"2-digit"};        

history(lastday,now);    
      
      $("select.select-text").on('change', function () {
var data =($(this).val());
     
      if (data == "elem_24h") {
options = {timeZone: "UTC",hour:"2-digit", minute:"2-digit"};        
history(lastday,now);    
   }
 else if (data == "elem_1ans") {
 options = {timeZone: "UTC",month: "long", day: "numeric"};
history(oneyear,now);   
   }
  else if (data == "elem_2ans") {
 options = {timeZone: "UTC",year:"numeric",month: "long", day: "numeric"};
history(twoyear,oneyear);   
   }       
  else if (data == "elem_3ans") {
 options = {timeZone: "UTC",year:"numeric",month: "long", day: "numeric"};
history(treesyear,twoyear);   
   }       
     });  
      function history(start, end) {
jeedom.history.get ({ 

            cmd_id: stateTemp,
         //       dateStart:this.lastday,
		//		dateEnd:this.now,
dateStart:start,
dateEnd:end,  
   success:  function(resulat) { 

      $('.mini').empty().text(resulat.minValue+" °C");
     $('.max').empty().text(resulat.maxValue+" °C");
      $('.lastyear').empty().text(resulat.data[0][1]+" °C");
     var lastyeardate = new Date(resulat.data[0][0]);
     lastyeardate=lastyeardate.toLocaleString('fr-FR',{timeZone: "UTC",hour:"2-digit"});
         $('.lastyeardate').empty().text(lastyeardate);

     $( resulat.data ).each(function( index ) {
        var num = resulat.data[index][1];
       
if (num == resulat.maxValue) {
// console.log( $( this ).text(resulat.data[index][1]));
var maxdate = new Date(resulat.data[index][0]);
      maxdate=maxdate.toLocaleString('fr-FR',options);      
  $('.maxdate').empty().text(maxdate);                                
        }
     if (num == resulat.minValue) {
    //        console.log( $( this ).text(resulat.data[index][1]));
var minidate = new Date(resulat.data[index][0]);
      minidate=minidate.toLocaleString('fr-FR',options);
       $('.minidate').empty().text(minidate);                                
        }     
       
     });

      }
   
})
   }
	</script>
      <style>
        .result {
        font-weight: 400;font-size: 12.5px;text-align: center;
       }    
.mini,.minidate,.max,.maxdate,.lastyear,.lastyeardate {
  font-weight: 600;font-size: 15.5px;
  }
.wrap {
  font-size: 15.5px;
  font-family:'Roboto','Helvetica','Arial',sans-serif;
  font-weight: 400;
  position: absolute;
  right: 0;
  top: 0%;
  width: 100%;
  left: 0;
  margin: 0 auto;
}

/* select starting stylings ------------------------------*/
.select {
	position: relative;
	width: 100%;
}

.select-text {
	position: relative;
	font-family: inherit;
	background-color: transparent;
	width: 100%;
	padding: 2px 2px 2px 0;
	font-size: 15px;
	border-radius: 0;
	border: none;
	border-bottom: 1px solid rgba(0,0,0, 0.12);
}

/* Remove focus */
.select-text:focus {
	outline: none;
	border-bottom: 1px solid rgba(0,0,0, 0);
}

	/* Use custom arrow */
.select .select-text {
	appearance: none;
	-webkit-appearance:none
}

.select:after {
	position: absolute;
	top: 8px;
	right: 10px;
	/* Styling the down arrow */
	width: 0;
	height: 0;
	padding: 0;
	content: '';
	border-left: 6px solid transparent;
	border-right: 6px solid transparent;
	border-top: 6px solid rgba(0, 0, 0, 0.12);
	pointer-events: none;
}
/* LABEL ======================================= */
.select-label {
	color: rgba(0,0,0, 0.26);
	font-size: 18px;
	font-weight: normal;
	position: absolute;
	pointer-events: none;
	left: 0;
	top: 10px;
	transition: 0.2s ease all;
}


/* active state */
.select-text:focus ~ .select-label, .select-text:valid ~ .select-label {
	color: #2F80ED;
	top: -20px;
	transition: 0.2s ease all;
	font-size: 14px;
}

/* BOTTOM BARS ================================= */
.select-bar {
	position: relative;
	display: block;
	width: 100%;
}

.select-bar:before, .select-bar:after {
	content: '';
	height: 2px;
	width: 0;
	bottom: 1px;
	position: absolute;
	background: #2F80ED;
	transition: 0.2s ease all;
}

.select-bar:before {
	left: 50%;
}

.select-bar:after {
	right: 50%;
}

/* active state */
.select-text:focus ~ .select-bar:before, .select-text:focus ~ .select-bar:after {
	width: 50%;
}

/* HIGHLIGHTER ================================== */
.select-highlight {
	position: absolute;
	height: 60%;
	width: 100px;
	top: 25%;
	left: 0;
	pointer-events: none;
	opacity: 0.5;
}
</style>

</div>
      </body>

joue avec le retour console de ton navigateur pour voir se qu’il en retourne
un mini tuto
en suivant les liens tu trouveras 2 méthodes pour recherche date

tu peux voir via scénario code aussi

@ajja17orange merci beaucoup pour ton retour, je vais regarder ça.

J’ai un peu creusé mon problème et j’ai trouvé un truc étrange, en fait la valeur minimale sur un an a été relevée le 05/12/19 à 06h30, c’était -1.8°C mais quand je regarde la courbe de température en historique, je n’ai pas de relevé à 06h30, juste à 06h puis à 07h. De plus la température relevée à 06h était de -1.65°C…

Donc la température de -1.8°C a été relevée et doit être stockée dans jeedom, mais elle n’apparait pas dans les courbes, le problème vient peut être de là…

test via scenario code (api php)
pour commencer
si ok avec l’html

ça peut être l’historique via highchart (courbe) si tu as paramètre moyen,min,max ou aucun des fois que

si non
cherche via console en déterminant le jour start et end

tu peux aussi avoir un soucis bdd
genre des , et des . ou des valeurs vides, voir des caractères bizarre
(sur 4 ans j’avais des erreurs)
des vieilles date dans la table history en double avec history.arch

si aussi ok
c’est mon html « script » qui cherche le mini mais la vu qu’il reprend la bdd ??
mais je ne suis pas sûr à 100% mais chez moi mini/max ok

je pourrais pas t’aider plus
a la suite de se html j’ai optimisé ma bdd pour accès plus rapide de cette valeur :

  • grand ménage via duplication avant différent test
  • demi-degrė est un changement de temperature, et une unité après virgule.
  • moyenne toutes les 20mn lors de l’archivage j-1 que je fais via scénario

avec la v4 il y a eu une optimisation archivage j-1 mais ça touche pas tes vieilles valeurs. bien qu’il y a une fonction nettoyage dans configuration jeedom

si l’historique bdd t’intéresse regarde les sujets sur l’installation d’admirer ou copie d’historique

Merci pour ton aide, ça dépasse largement mes compétences et comme c’est quelque chose de superflu je vais me contenter de simplicité !

j’ai appris avec jeedom


ça c’est facile à reproduire

dans la valeur une unité
un calcul en valeur
et jamais repeter

(#value#-floor(#value#))<=0.25?floor(#value#):(#value#-floor(#value#))>=0.75?ceil(#value#):floor(#value#)+0.5


tu sais la chose faisable, si un jour …

Ok merci c’est très gentil de prendre le temps d’expliquer. Le temps c’est malheureusement ce qui me manque pour pouvoir étudier ça sérieusement, un jour peut être !

Bonjour,
Il me semble que je rencontre un peu le même problème…
J’ai 4 ans d’eedomus derrière mois et je dois avouer que ça me semblait moins « buggé ».
Je suis probablement coupable car je n’ai que 2 mois d’expérience sous Jeedom mais j’avoue que l’on passe son temps à remettre les choses en place :slight_smile:

Pourriez vous me dire pourquoi la valeur retournée par Jeedom avec la formule : Minbetween est de 291 kWh (qui finalement correspond à la valeur mini du mois, sauf si l’année commence au 1er juin… :thinking:)

alors que mon historique annonce 0,21kWh au plus bas.

Âme charitable : merci d’avance ! :slight_smile:

je me réponds à moi-même, ça pourra aider les autres :slight_smile:
Il faut utiliser « first day of january » et non : « first day of this year »

Bonjour,

Question bête, je cherche à trouver la date d’une valeur de variable retournée par la fonction max()/min().
C’est possible dans jeedom d’avoir à la fois la valeur et l’heure de la mesure ?

Pour faire simple, j’ai un virtuel qui contient des stats de températures (tendances, min, max etc) et je voudrais avoir l’heure de la valeur max retournée…

J’ai cherché avec des tonnes de mots clés mais j’ai l’impression que c’est pas possible hormis passer par du code.

Merci par avance pour votre aide :slight_smile:

Salut

je poste ici car ce que je recherche s’en approche je voudrais affiché dans un virtuel la valeur max parmi plusieurs équipements.
Concrètement je viens de domotiser ma VMC, pas de pb un scénario gère le déclenchement celons le taux d’humidité de plusieurs sonde, mais comment afficher seulement la valeur max parmi mes 10 sondes

bonjour pour info « avec du retard » il existe une possibilité en créant la fonction
dans « user.function.class.php »

"minMaxDate(min,#[Dehors][Sondes Nord][Température]#,yesterday, now, d/m/Y H:i:s )  minBetween(#[Dehors][Sondes Nord][Température]#,yesterday, now)"

Je vais évaluer : «  » 07/11/2021 06:55:12 " -0.5"
Résultat : «  » 07/11/2021 06:55:12 " -0.5"

    public static function minMaxDate($minOrMax, $_cmd_id, $start, $end,$dateFormat)  {
date_default_timezone_set("Europe/Paris");



$startEval = date('Y-m-d H:i', ereg("[0-9]{4} [0-9]{4}", $start) ? DateTime::createFromFormat('md Hi', $start)->getTimestamp() : strtotime($start)); 
$endEval = date('Y-m-d H:i', ereg("[0-9]{4} [0-9]{4}", $end) ? DateTime::createFromFormat('md Hi', $end)->getTimestamp() : strtotime($end)); 
 $cmdId = cmd::byString($_cmd_id)->getId(); 
      $all = history::all($cmdId, $startEval, $endEval);
      $ali = history::getStatistique($cmdId, $startEval, $endEval)[$minOrMax];
      if(count($all) == 0) echo "Pas de valeurs sur la période donnée";

$current = $all[0];
$current = $all[0];
for ($i = 0; $i < count($all); $i++) {
  $v = $all[$i];
  if($minOrMax == "max" && $v->getValue() >= $current->getValue())
  	$current = $v;
  if($minOrMax == "min" && $v->getValue() <= $current->getValue())
  	$current = $v;
} 
 return date ($dateFormat, strtotime($current->getDatetime()));   
      
        }

issu du vieux forum
https://forum.jeedom.com/viewtopic.php?t=41804

bonjour,

mais comment afficher seulement la valeur max parmi mes 10 sondes

passe par le testeur d’expression
en php tu as max
max(0,5,10)

Résultat : 10

a la place de 0,5,10 met les expressions max de tes sondes

max(maxBetween(#[Dehors][Sondes Serres][Température]#,yesterday, now),maxBetween(#[Dehors][Sondes Sud][Température]#,yesterday, now),maxBetween(#[Dehors][Sondes Nord][Température]#,yesterday, now)) 

Résultat : 26

"maxBetween(#[Dehors][Sondes Serres][Température]#,yesterday, now) / maxBetween(#[Dehors][Sondes Sud][Température]#,yesterday, now) / maxBetween(#[Dehors][Sondes Nord][Température]#,yesterday, now)"

Résultat : 26 / 22.5 / 6.5

aprés soit tu crées une info et tu colles l’expression
(sache que chaque modif de tes sondes engendrent une utilisation de ressource)
donc si tu tournes sur une machine puissante ou que cette info est importante.
mais 10 sondes !

sinon un scénario et toutes les heures ou demi heure un event ou une variable, ou dans ton scenario selon comment tu l’as fait.

hs : pour info on peux faire un declencheur de scenario avec plusieurs condition « fonction »

(#time#>0630 and #time#<2030) and (#[Salle de bains][Sondes Salle de bains][Humidité]# > 60)

trés trés vieux scenario.qui t’évite une multitude de SI

aprés il y a via api js mais je te laisse faire :slight_smile:

2 « J'aime »

Pourquoi avoir tague plugins pour ce post ?
@olive tu peux corriger pour plus de clarte ?
Merci

Bonjour,

Impeccable cela fonctionne

2 messages ont été scindés en un nouveau sujet : Information minimale de température