Ce problème est vieux et a été résolu dans l’industrie au début de l’automatisation de celle-ci où on avait de grosses quantités de données a stocker et où la mémoire de stockage était faible. La solution du filtrage était 3 filtrages successifs :
Re-echantillonage :
Low-pass
Time-throttle
Les 2 respectant le théorème de Shannon, la fréquence du time throttle devant être au moins le double que la fréquence de coupure du Low-pass
Suppression des valeurs identiques
Throttle
Malheureusement l’équation du Low-pass dans home assistant est fausse, elle ne marche que si le capteur envoi ses données de manière régulière genre exactement une fois toutes les 3 secondes et aucun capteur domotique ne fait cela, ils envoient leurs valeurs quand ils en ont envie
Résultat je me suis retrouvé a faire une usine à gaz avec Node-Red juste pour faire la vraie formule du Low-pass :
tc = time constant comme dans la formule de home assistant
La différence avec la formule de home assistant c’est dt, le delta time entre la mesure que l’on est en train de traiter et la mesure précédente. Évidemment si ce temps est constant on retombe sur la formule de home assistant.
J’ai été incapable sous home assistant de récupérer le temps écoulé entre les 2 dernières mesures d’où usine à gaz sous node red pour traiter tous les cas, valeurs inconnue, home assistant rebootė entre les 2 dernières valeurs etc.
En plus le Throttle de home assistant n’est pas top non plus car il indique son seuil en % de la valeur et pas en % de l’étendue de mesure (enfin de mémoire) genre sur une mesure qui peut aller de 0 à 1000 si le mesure passe bouge sans arrêt de 1 à 2 pour lui c’est une variation de 100% alors que pour moi c’est une variation de 0.1%
Si quelqu’un a une solution plus propre je suis preneur.
tout dépend du capteur de sa fréquence de mise à jour, c’est clair.
En revanche je ne comprends pas ce que tu dis sur le throttle à la fin, le % donné dans la doc n’est pas un seuil, mais juste le % du nombre de valeurs gardées sur une période donnée, dans le cas où les valeurs sont fréquentes et régulières.
Un time-throttle ne marcherait pas dans ton cas?
Et c’est quoi ton exemple de capteur et sa fréquence de mise à jour?
Par exemple des capteurs de puissance, de tension, de courant, de cos phi, j’ai plusieurs dizaines de mesures. La plupart des départs de mon tableau électrique sont contrôlés. Plus le débit d’eau. Plus des trucs comme la vitesse du vent ou l’ensoleillement. Mes capteurs élec envoient des données quant ils en ont envie. Entre chaque mesure il peut y avoir 1s ou 1h (si pas de conso certains n’envoient rien pendant très très longtemps).
Devant un time throttle il faut faire un Low-pass sinon, si on a une mesure qui bouge beaucoup, on prend un point au hasard sur un truc qui bouge dans tous les sens et pas la valeur moyenne. Il y a toute une théorie la dessus (systèmes echantillonés) et un théorème d’un Mr qui s’appelle Shannon.
Alors peut être qu’en plus le Throttle n’est pas prévu pour faire ce que je veux, supprimer les mesures qui sont quasi-identiques. Ne garder que les mesures qui changent significativement par rapport à la dernière valeur historisée.
Je me suis battu avec Home Assistant quelques jours et j’ai fini par le faire sous Node Red.
PS: j’ai commencé ma vie pro en développant entre autre un système d’historisation de mesures pour une usine (haut-fournaux) a cette époque les plus gros disques dur faisaient 10 Mo (oui Mo pas Go ni To) la ram était de 470 Ko bill gates ayant décidé a l’époque que cela suffisait largement pour toute application actuelle ou future …