Si j’ai bien compris, c’est la fonction archive() de la class history qui copie les enregistrements de la table history vers la table historyArch en éliminant les enregistrements qui se suivent et qui ont la même valeur.
Elle semble être lancée par la tâche cron :
j’ai lancé cette fonction manuellement dans un bloc code et je vois que les doublons ne sont pas supprimés.
Bonjour,
Je suis peut être un peu naïf mais ce ne sont pas de vrais doublons puisqu’ils ne sont pas enregistrés à la même date/heure?
Sauf en cas de lissage il n’y a pas re raison de les supprimer car ils font bien partie de l’historique…
PS; d’où tiens tu que l’archivage de l’historique supprime les doublons?
Je n’ai pas une connaissance suffisante du PHP et je ne suis pas développeur donc je tâtonne.
Cet extrait de code me laisse penser que l’enregistrement est copié dans la table historyArch si la valeur de l’enregistrement précédent est différente de celle de l’enregistrement en cours que je nomme avec un abus de langage en "doublon".
Le mode de lissage à "Aucun" ne doit donc pas passer dans cette boucle.
Ici, c’est un bon contre exemple.
On ne lisse pas un index de compteur.
L’index est remonté entre 3 et 4 fois par minute dans Jeedom.
Sur des périodes de plusieurs heures, l’index ne change pas.
Quel est l’intérêt de garder toutes ces valeurs intermédiaires, à part encombrer la base de données.
@Jeandhom :
Pour le code ce n’est pas moi qui te jetterai la pierre! Mon âge avançant, apprendre n’est pas vraiment un problème mais se souvenir le devient…
A priori JEEDOM ne sait pas que c’est un index de compteur… On pourrait être intéressé à conserver les dates de remontée de la valeur. D’ailleurs d’après la doc sur une info bininaire JEEDOM n’archive que les dates.
Bon d’accord là je chipote
[2022-01-10 18:28:09][SCENARIO] Nb Enregistrements à effacer 12353970/17159360 existants
[2022-01-10 18:28:09][SCENARIO] Il restera après effacement 4805390 enregistrements
[2022-01-10 18:28:09][SCENARIO] Nb de commandes historisées : 179
Tous les modes :
[2022-01-10 18:31:13][SCENARIO] Nb Enregistrements à effacer 12475906/18045576 existants
[2022-01-10 18:31:13][SCENARIO] Il restera après effacement 5569670 enregistrements
[2022-01-10 18:31:13][SCENARIO] Nb de commandes historisées : 375
on constate que lorsqu’une commande est de type numérique sans lissage, celle-ci rentre dans la 1ère condition, donc aucun traitement des répétions de la valeur.
Il me semble que la bonne pratique aurait été de remplacer le comparateur de cette ligne : if($cmd->getConfiguration('historizeMode', 'avg') == 'none'){
par if($cmd->getConfiguration('historizeMode', 'avg') != 'none'){
Si une personne de l’équipe Jeedom passe par la pour confirmer
Bonne journée
Merci Loïc pour ta réponse,
donc pour résumer si j’ai bien compris :
Si on a une valeur numérique.
Qu’on ne souhaites pas que cette valeur soit modifiée (donc pas avg/max/min) donc forcement « Aucun ».
il n’est pas prévu d’avoir un traitement sur la suppression des valeurs répétitive lors de l’exécution de la fonction history().
Si mon analyse ci-dessus est correct, ne peut-on pas plutôt intégrer dans cette fonction history() une condition qui inclurai la configuration du « repeatEventManagement », comme ca pour les commandes dont la gestion des répétitions sont sur « Oui » on touche pas au doublon, et pour « non » on supprime les doublons ?
Je suis d’accord qu’il n’y a pas une énorme importance, mais c’est toujours des valeurs de moins dans l’historique, a mon sens quand on met la gestion de répétition a « non » je ne voit pas l’intérêt de stocker ces valeurs en bdd.
Arf, effectivement tu as raison lorsque la commande est exécuté par « jeedom.cmd.execute »
la répétition des valeurs est bien prise en compte lors de l’archivage.
J’ai basé tous mes essais sur une commande perso d’un virtuel qui est maj par un event d’un scénario, et dans ce cas, il n’y a plus de gestion de répétition et toutes les infos sont donc envoyées en bdd.