Vu que j'ai passé ma journée à faire les manips ci-dessous sans trouver de tutos dédiés (et en galérant pas mal), je vous mets un petit tuto pour downsampler (remplacer les données instantanées par leur valeur à la journée) votre base influxdb.
Le but visé est de réduire l'utilisation du Rpi et sa température (influxdb tourne depuis 4 ans sur mon Rpi et la BDD Inluxdb est devenue gigantesque. J'utilise influxdb 1.8).
1- Sauvegarder sa base influxdb (pas indispensable, mais on ne sait jamais)
> Arrêter le service influxdb
> Recopier le répertoire influxdb (par défaut /var/lib/influxdb) là où bon vous semble
> Relancer le service influxdb
2- Entrer dans influxdb
> sur Putty : influx
3- Créer une RETENTION POLICY longue durée (durée infinie dans mon exemple)
> CREATE RETENTION POLICY <retention_policy_name : Infiny> ON <database_name : domoticz> DURATION <duration : INF> REPLICATION 1
- Voir la doc influxdb pour plus de détails
4- Calculer la valeur journalière de chaque champ de la base de données
Principe :
Domoticz envoie ses données à Influxdb par type, avec un Tag qui correspond au capteur concerné.
Par exemple, toutes les données température sont envoyées dans un même champ ("Measurement"; par exemple Temperature) avec un "Tag" qui indique le capteur concerné (Température salon, Température salle de bain, ...). La donnée stockée dans influxDB est sous la forme :
- Measurement (Champ de la BDD) : Température
- Timestamp : heure de stockage de la donnée
- Valeur : Température en degrés
- Tag : Capteur concerné (salon, Salle de bain, ...)
Sur Putty, une fois entré dans influxDB :
> SELECT mean("value") INTO "domoticz"."Infini"."Temperature_DS" FROM "domoticz"."autogen"."Temperature" GROUP BY time(1d),*
Cette commande
- calcule, pour toutes les données existantes dans la BDD, la température moyenne à la journée du champ "Température" de la BDD "domoticz" à laquelle s'applique la Retention Policy par défaut (autogen).
le ",*" à la fin de la ligne est important : il permet de faire ce calcul par tag et de conserver l'information de Tag (sans ça il va moyenner toutes les températures, en mélangeant celle du salon et de la salle de bain, ...)
- envoie le résultat dans un nouveau champ "Temperature_DS " (pour DownSampling, vous mettez ce que vous voulez)
Elle est à réécrire et à adapter pour chaque champs de la base. Pour certaine valeurs (counter, usage, ...), il faudra adapter le SELECT mean("value") en SELECT last("value"), afin de prendre la dernière valeur de la journée (et pas la moyenne sur la journée).
5- Créer une CONTINUOUS QUERY qui va faire le même boulot chaque jour pour les nouvelles données envoyées par domoticz
> CREATE CONTINUOUS QUERY "cq_1D_Temperature" ON "domoticz" BEGIN SELECT mean("value") INTO
domoticz"."Infini"."Temperature_DS" FROM "domoticz"."autogen"."Temperature" GROUP BY time(1d),* END
Entre begin et End, on retrouve la commande lancée pour les données existantes. Comme précédemment, elle est à réécrire et à adapter pour chaque champs de la base.
6- modifier la RETENTION POLICY par défaut (autogen) pour qu'elle ne stocke les données que sur une courte période (30 semaines pour moi)
> ALTER RETENTION POLICY <autogen> ON <database_name : domoticz> DURATION <durée : 30w> REPLICATION 1
- Voir la doc influxdb pour plus de détails
On notera que, de son côté, domoticz gère tout ça tout seul sans manip particulière (et honnêtement, c'est un vrai plus