Pour le lissage des commandes de l’historique il y’a un paramètre unique au niveau Jeedom (1h par défaut). Ce paramètre convient bien pour la plupart des commandes mais j’aimerais pouvoir lisser sur une journée certaines des commandes et mettre la valeur à 00:00.
Comment est ce que je peux faire ça ?
J’ai essayé les virtuels et la fonction xxxBetween mais ça recopie la valeur à chaque mise à jour de la commande historisée (même avec un cron fixé).
Faut il passer par des scripts ?
Vous ne devez pas mettre de commande dans la définition du virtuel mais le mettre à jour par une commande Event dans un scénario à 00:00 avec la valeur Max ou Min ou Moyenne.
Ainsi vous n’avez qu’une seule info stockée par jour.
Merci pour la réponse, j’ai en effet réussi à n’avoir qu’une seule valeur.
Par contre, la valeur calculée pour un jour j se retrouve à minuit du jour j+1 (ce qui est logique puisque je la calcule à ce moment).
Une solution serait peut-être de lancer le scénario à 23:59. Je ne louperais pas grand chose et ma moyenne se retrouverait au moins sur la bonne journée.
Ou alors passer par du code mais là ça dépasse mes compétences.
Quoi qu’il arrive, vous avez besoin de finir la journée pour pouvoir faire le calcul sur l’ensemble des mesures de cette journée donc avec ou sans code, le calcul ne pourra être fait que le lendemain à moins d’accepter de perdre quelques secondes de données.
A quelle heure est la dernière donnée de la journée en général ?
Avez-vous souvent des données remontées entre 23:55 et 00:00 ?
C’est pour faire des moyennes ou max selon les données mais je pense que je peux me passer de la dernière minute de données de la journée d’où mon idée de le faire à 23:59. Je dois parfois avoir des données entre 23:55 et 00:00.
Par contre, mon hypothèse de faire du code impliquait bien de le faire une fois la journée passée (à 00:01 j+1 par exemple) mais d’écrire la valeur à minuit le jour j. Mais ça je ne sais pas faire.
Bonjour,
Je peux peut-être vous aider du coup.
J’ai dû concevoir ce bout de code pour décaler l’historique d’une journée pour une info au jour J, mais calculée à J+1.
// ID de la commande Jeedom dont l'historique doit être décalé à J-1 à 23h59
$cmdId = 10310;
// Charge la commande et vérifie si elle existe toujours
$cmd = cmd::byId($cmdId);
if (!is_object($cmd)) {
$scenario->setLog("ID de la commande inexistante - [ ERROR ]");
exit;
}
// Requête SQL pour récupérer le datetime de l'historique qui sera à supprimer
$sql1 = 'SELECT datetime FROM history WHERE cmd_id = :cmd_id ORDER BY datetime DESC LIMIT 1';
$result = DB::Prepare(
$sql1,
array('cmd_id' => $cmdId),
DB::FETCH_TYPE_ROW
);
if (!empty($result)) {
$datetime = $result['datetime']; // Récupération du champ 'datetime'
}
else {
$scenario->setLog("Pas de champ date-heure identifié - [ ERROR ]");
exit;
}
// Création d'une ligne d'historique avec la valeur récupérée datée au jour J-1 à 23h59
$value = $cmd->execCmd();
$yesterday = date('Y-m-d 23:59:00', strtotime('-1 day'));
$cmd->addHistoryValue($value, $_datetime=($yesterday));
$cmd->save();
$scenario->setLog("Enregistrement de l'historique décalé à J-1 - [ OK ]");
// Effacement de l'historique daté du jour J
$values = array('cmd_id' => $cmd->getId(),'datetime' => $datetime,);
$sql2 = 'DELETE FROM history WHERE cmd_id=:cmd_id AND `datetime`=:datetime';
DB::Prepare($sql2, $values, DB::FETCH_TYPE_ROW);
$scenario->setLog("Effacement de l'historique du jour J - [ OK ]");
Où :
$cmdId = 10310; = le numéro d’ID de l’info dont on doit décaler l’historique,
et $yesterday = date('Y-m-d 23:59:00', strtotime('-1 day'));, avec 23:59:00 qui est l’heure à laquelle on veut décaler l’historique.
sur le même type que @DanielJ, j’avais fait ce petit bout de code qui permet de calculer une stat ($typeHistorisation) sur un historique de la commande $cmdSource pour la mettre dans la commande $cmdCible avec une heure d’affectation, la veille à $heureHistorisation
C’est assez simple, juste à lancer le lendemain avant l’archivage qui purge une partie des données, donc entre minuit et 2h
Dans l’exemple ci-dessous, je prends le max d’hier de ma commande PAPP et j’enregistre cette valeur à la date d’hier 00:00 dans la commande Max jour