Statistique : Déterminer la date d'une valeur mini

Bonjour,
Mon besoin est simple :
Je cherche à trouver la date en jj/mm/aa de la valeur mini (dont je connais la valeur) pendant le mois en cours d’une variable historisée.
Je n’ai pas trouvé de fonctions qui permettent de faire cela, ou de combinaisons…
Quelqu’un voit-il une solution par la combinaison de fonctions, sans faire appel à un scénario ?

Merci.

Je pensais que ce serait très compliqué, mais avec la fonction lastChangeStateDuration on doit pouvoir s’en sortir pas trop difficilement.

Après test, cela devrait marcher dans une commande de type Autre dans un virtuel en remplaçant 5 par le minimum recherché :

date(« Y-m-d H:i:s »,#timestamp# - lastChangeStateDuration(#[Tests][Essai][valeur]#,5))

lastChangeStateDuration donne le nombre de secondes depuis le changement d’état à la valeur fournie (5 ici)
La soustraction avec #timestamp# permet de récupérer l’heure.
La fonction date fait la mise en forme.

Edit : ne semble pas fonctionner, voir message plus bas

Merci bcp pour ce rapide retour ! Je vais donc essayer cela…

Bonjour,

Je reviens sur ce sujet car ça ne fonctionne pas comme je le souhaiterais…

Cela → date(« Y-m-d H:i:s »,#timestamp# - lastChangeStateDuration(#[Tests][Essai][valeur]#,5))
Fonctionne bien !

Par contre je souhaitais avoir un calcul « dynamique » en paramétrant la valeur suivant une variable … ou la valeur d’une commande et là ça ne marche plus :frowning_face:

Exemple avec variable(toto) :
date(« Y-m-d H:i:s »,#timestamp# - lastChangeStateDuration(#[Tests][Essai][valeur]#,variable(toto)))

Si vous avez une idée pour contourner cela , je suis preneur !

Merci

Oui, j’avais remarqué cela et je n’ai pas réussi à solutionner. Je pense que c’est une histoire d’ordre d’exécution ou d’interprétation parce que dans le testeur d’expressions, ça fonctionne.

Je corrige, ça ne fonctionne pas non plus. On voit juste que les commandes entre les # sont remplacées par leurs valeurs, et du coup la commande lastChangeStateDuration ne fonctionne pas. C’est un peu au delà de mes compétences là.

Merci pour ces dernières informations. Je vais donc passer par l’intermédiaire d’un scénario pour réaliser la fonction souhaitée.

Bonjour
Effectivement le résultat n’est pas top : Résultat de la commande : lastChangeStateDuration(20.5,(1.8))
Comment peut on faire ? sans passer par un scénario ?
Je cherche comme vous la date d’une valeur mini
Par avance merci
Lemats

Pourquoi tu ne veux pas passer par un scénario? J’avais le même besoin pour les maxi / mini de températures. Je l’ai fait en bloc code dans un scénario.

//ID de l'objet Temperature Exterieure et des virtuels a renseigner
$CmdId = 1694;
$MiniExtToday = "#[Météo][Températures][Temperature Ext Mini Today]#";
$HeureMiniExtToday ="#[Météo][Températures][Time Temperature Ext Mini Today]#";
$MaxiExtToday = "#[Météo][Températures][Temperature Ext Maxi Today]#";
$HeureMaxiExtToday ="#[Météo][Températures][Time Temperature Ext Maxi Today]#";
$Today = date ("Y-m-d");
  
// Stat du jour
//$sqlMax = "select datetime, value from history where  cmd_id = $CmdId order by cast(value as decimal(10,2)) desc, datetime desc limit 1;";
$sqlMax = "select datetime, value from historyArch where datetime > '" . $Today . "' and cmd_id = $CmdId union select datetime, value from history where datetime > '" . $Today . "' and cmd_id = $CmdId order by cast(value as decimal(10,2)) desc, datetime desc limit 1;";
	$resultMax = DB::Prepare($sqlMax, NULL, DB::FETCH_TYPE_ROW);
	$scenario->setLog("Maxi du jour en cours: " . $resultMax['value'] . "°C à " . date("H:i", strtotime ($resultMax['datetime'])));
	cmd::byString($MaxiExtToday)->event($resultMax['value']);
	cmd::byString($HeureMaxiExtToday)->event(date("H:i", strtotime ($resultMax['datetime'])));
$sqlMin = "select datetime, value from historyArch where datetime > '" . $Today . "' and cmd_id = $CmdId union select datetime, value from history where datetime > '" . $Today . "' and cmd_id = $CmdId order by cast(value as decimal(10,2)) asc, datetime desc limit 1;";
	$resultMin = DB::Prepare($sqlMin, NULL, DB::FETCH_TYPE_ROW);
	$scenario->setLog("Mini du jour en cours: " . $resultMin['value'] . "°C à " . date("H:i", strtotime ($resultMin['datetime'])));
	cmd::byString($MiniExtToday)->event($resultMin['value']);
	cmd::byString($HeureMiniExtToday)->event(date("H:i", strtotime ($resultMin['datetime'])));

A adapter a ton besoin.

il faut faire :
734 étant de le n° ID de le commande
date(« Y-m-d H:i:s »,strtotime(‹ now ›)-lastChangeStateDuration(734,statisticsBetween(#[COMMANDE]#,min,now)))
merci

Bonjour,

Merci a Lemars pour son message qui m’a permit de trouver la bonne commande !

Perso j’avais besoin de la valeur max pour une conso électrique :

J’ai fait un virtuel avec les commandes info suivante :

Pour la date (en autre) :
1597 étant l’id de la commande P APP du compteur

date(« Y-m-d H:i:s »,strtotime(‹ now ›)-lastChangeStateDuration(1597,statisticsBetween(#[Garage][Compteur EDF][P APP]#,max,first day of January 2020,now)))

Pour la valeur (en numerique) :
statisticsBetween(#[Garage][Compteur EDF][P APP]#,max,first day of January 2020,now)