[InfluxDB] Aller encore plus loin!

Hello !
Je vous propose de compléter le très bon tuto disponible ici :

Comme ce sujet vient en complément, je vous suggère donc de commencer par suivre le tuto en question avant de passer ici :slight_smile:

:recycle:
Quelques pré-requis :

  • Suivre le tuto d’install influxdb.
  • Connaître Nodered

:warning:
Je vais faire plusieurs assomptions pour aller au plus simple et généraliste :

  • Vous utilisez influxdb v1.x et non une 2.x !!!
  • Vous avez utilisé l’addon nodered et l’addon influxdb (je ne recommande pas forcément ce choix pour influxdb, j’en parlerai à la fin)
  • Vous utilisez la retention policy autogen (si vous n’avez pas compris, c’est le cas, sinon vous sauriez de quoi je parle)
  • Vous aller utiliser la même database influx pour HA et Nodered

:hammer_and_wrench:
Petit tour de ce que je vais détailler :

  • Envoyer des données dans influxDB depuis Nodered
  • Récupérer des données de influxDB dans Home Assistant
  • Exemple de requête sympa pour des min/max d’entités
  • Petite digression sur l’addon influxdb
  • Vous avez des questions / des suggestions ? Demandez / Proposez !

Envoyer des données de Nodered vers InfluxDB

  • Pourquoi ?
    Parce que tout ne s’intègre pas dans Home Assistant directement. (oui oui !). Soit par choix, soit parce que tout simplement ce n’est pas possible.

  • Comment ?
    Avec le paranormal !
    Non ? OK, avec le noeud influxdb out (wow !)

La pratique

Pour envoyer des informations de Nodered vers influxDB on va donc utiliser le noeud influxdb out il est déjà présent si vous utilisez l’addon nodered de Home Assistant.
image

La configuration de ce noeud est…sommaire :stuck_out_tongue:
image

La première étape, ​configurer un serveur influxdb pour tous vos nœuds influxdb de nodered (à la manière de mqtt par exemple) en insérant un noeud influxdb out et en cliquant sur le petit crayon à côté de la case Server (voir screenshot précédent). Comme ceci :
image
Remplissez les champs username et password avec les valeurs que vous avez définies
dans l’addon influxdb.
On va donc se servir de la même database que HA. Soyez donc malins sur les noms de ce que vous allez y envoyer pour ne pas écraser/mélanger des données !
(Vous pouvez aussi choisir de créer une database influx dédiée à l’envoi des infos via nodered, je vous renvoie pour ça au tuto cité au début de cet article ! Pensez à adapter ce tuto si c’est le cas…)

Une fois tout bien configuré appuyez sur Add ! Et Deploy pour enregister !

Ensuite la configuration du nœud influxdb out…
Donc comme vu avant, pas grand chose au final. La majeure partie est en fait, faite en amont du nœud et les propriétés sont récupérées dans le msg.
Il faut donc, mettre en forme le msg avant de le passer au noeud influxdb out.
Dans le msg il vous faudra au minimum la valeur (nombre ou chaine de caractères) dans le payload (msg.payload).
Si vous ne faites que ça, la valeur msg.payload sera intégrée au field value sur le measurement défini dans la configuration du nœud influxdb out.

Rien capté ? OK exemple !
On a un nœud inject comme ça :
image
relié à un nœud influxdb out comme ça :
image
Soit :
image
(ce flow est énorme, Eminem est jaloux ! #jokeDePapa)

Quand on va appuyer sur le inject, la valeur 12 sera stockée dans un measurement nommé °C dans le field appelé value.
Utiliser le field value, par défaut c’est une bonne idée, car au final on va souvent stocker un truc qui est une valeur. Donc dans la majorité des cas vous utiliserez ce field.
Pour ce qui est du measurement c’est en fait l’unité de mesure de la valeur que vous allez stocker !
Influxdb regroupe les unités, c’est un classement comme un autre :slight_smile:

Bon OK, c’est cool mais si j’ai plein de trucs qui mesurent des °C et que je stocke dans value, tout va se mélanger ???
Oui… :frowning:
C’est là que vous avez besoin des tags d’influx !
Et ces tags, ben faut les définir dans le msg.payload encore une fois !
On y retourne par l’exemple :
On change notre noeud inject comme ça :
image
On injecte donc du json, un array, avec en premier, le field, en second le tag.
On ne touche pas au noeud influxdb out.
Quand on va injecter ce json influxdb va stocker dans le measurement °C la valeur 12 avec un tag qui s’appellera entity et qui aura pour valeur piscine.
En effet, en plus de grouper les valeurs par unité, influxdb donne la possibilité de grouper par tags. Vous pouvez nommer vos tags comme vous le sentez et leur donner la valeur souhaitée aussi. Pour cet exemple je pars du principe que entity c’est pas mal raccord avec ce que fait HA.
Attention tout de même, si vous spécifiez un tag entity avec une valeur d’entité qui existe dans votre HA et qui est envoyée dans influxdb alors vous avez un risque de mélange de données !

Vous pouvez bien sûr spécifier plus d’un seul tag, par exemple :
[{"value":12},{"entity":"piscine","température":"eau"}]
Vous pourrez ainsi filtrer par le tag que vous préférez dans vos graphiques (ou sensors HA !).

Récupérer des données qui sont dans influxDB avec HA

Ben oui, on à la température d’eau de la piscine dans influxDB mais pas dans HA. C’est pas génial…
Du coup on peut créer un sensor, avec les valeurs extraites de influxdb !

Comment ? Ben on suit la documentation

Mais si j’arrêtai là ça ne serait plus un tuto…

Donc, c’est parti !
Pour récupérer cette valeur de température d’eau de piscine dans HA, on ajoute à sa config de sensors :

sensors:
  platform: influxdb
  host: a0d7b954-influxdb
  database: homeassistantDB
  username: !secret influxdb_user
  password: !secret influxdb_password
  queries:
    - name: temperature_piscine
      unit_of_measurement: °C
      measurement: '"°C"'
      where: '"entity" = ''piscine'''
      field: value

Donc on va chercher le field nommé value où le tag entity vaut piscine dans le measurement °C
Tout ça va créer un sensor.temperature_piscine dans votre Home Assistant.
Je vous conseille TRÈS VIOLEMMENT d’exclure cette entité des entités transmises à influxDB. Sinon vous voyez le truc ? On récupère une valeur de influxdb dans HA qui l’envoie dans influxdb…pas super malin :smiley:

Exemple de requête sympa pour du min/max

Admettons que vous envoyez les valeurs de vos entités HA dans influx. Moi je le fais. J’aime bien connaître la température mini et maxi dans les pièces pour la journée en cours.
Avec HA, y’a rien de pratique pour faire ça, on peut le faire mais sur les 24 heures passées par exemple, pas depuis le début de journée (en tout cas j’ai pas trouvé de truc simple). Et bien influxdb peut aider !
Voici une requête que j’utilise :

  - name: min temp bureau
    unit_of_measurement: °C
    measurement: '"°C"'
    group_function: min
    where: '"entity_id" = ''bureau_temperature'' AND time >= {{(as_timestamp(now()) - (now().hour * 3600) - (now().minute * 60) - (now().second)) | round(0)}}s'
    field: value
  - name: max temp bureau
    unit_of_measurement: °C
    measurement: '"°C"'
    group_function: max
    where: '"entity_id" = ''bureau_temperature'' AND time >= {{(as_timestamp(now()) - (now().hour * 3600) - (now().minute * 60) - (now().second)) | round(0)}}s'
    field: value

Ceci va créer 2 sensors. sensor.min_temp_bureau avec la valeur mini durant la journée en cours et max_temp_bureau pour la valeur maxi :slight_smile:
Je vous laisse décortiquer, les parties les plus intéressantes sont group_function et where

Garder ses données longtemps

Oui, le but c’est bien de garder ses données le plus longtemps possible. Ce que HA ne doit pas faire (perso j’ai 3 jours sur HA pas plus).
Mais vous avez sûrement des capteurs qui ont des valeurs très changeantes, ce qui donne une montagne de données… Alors garder 1an de données précises OK mais au delà ? On a vraiment besoin de garder un relevé de température toutes les minutes ? :smiley:
Du coup, vous pouvez mettre en place du downsampling (en français ça doit se dire « échantillonage » revu à la baisse :thinking:)
Pour ça on à 2 étapes :

  • créer une seconde retention policy
  • créer une continuous query
    Pour créer la seconde retention policy direction chronograph (l’interface web de l’addon influxdb) et le menu « InfluxDB Admin » (icone couronne :crown:)
    Trouvez votre database sur laquelle vous voulez faire du downsampling et créez une nouvelle retention policy avec le bouton « add retention policy »

    Donnez lui un nom, et mettez une durée de rétention (optionnel, si pas de durée alors rétention infinie !)
    Personnellement, j’ai pour mes datas hassio opté pour 380 jours par défaut avec la précision maximale et 700 jours avec du downsampling. Au delà de 700 jours les données disparaissent !
    Ensuite, il va falloir créer la continuous query qui va prendre vos données qui ont la précision maxi pour en faire des données « moyennées » sur un laps de temps.

J’explique avant d’aller plus loin. Imaginons un capteur hyper sensible remonte une valeur toutes les 30 secondes, et à chaque fois une valeur différente. Sur 5 minutes vous aurez donc 11 points. Avec le downsampling sur une période de 5 minutes on va prendre ces 11 points, faire la moyenne et créer un seul point avec cette valeur moyenne ! On divise juste par 11 la taille de la base de données quoi…

Donc la continuous query :
Toujours dans chronograf, direction le menu « explore ». Dans le champ ou vous pouvez taper une requête on va créer la continuous query.
Exemple avec une query nomée « hass_down » sur une database nomée « hassio », un downsampling sur 5 minutes dans une retention policy nomée « hassio_downsample » :
CREATE CONTINUOUS QUERY "hass_down" ON "hassio" BEGIN SELECT mean(*) INTO hassio."hassio_downsample" FROM hassio.autogen./.*/ GROUP BY time(5m), * END

Cette continuous query va prendre toutes les valeurs et les moyenner sur 5 minutes et les enregistrer dans la retention hass_downsample.

Attention, le field par défaut qui s’appelle « value » sera renommé en « mean_value », il faudra y penser une fois dans grafana pour afficher des valeurs !
image

Petite digression sur l’addon influxdb

C’est vrai que les addons sont pratiques, mais, ma vision des choses (et c’est absolument personnel !) c’est que domotique ≠ monitoring !
Influxdb, c’est quoi ? => UNE DATABASE ! Pas de la domotique.
Pourquoi mon soft domotique serait responsable de ma banque de données ?
Personnellement, mon influxdb tourne sur une VM dédiée aux datas. Sur cette VM :

  • influxdb
  • chronograf
  • grafana
  • postgresql

De plus, la configuration de ma base de données HA (j’utilise postgresql) est faite de façon à ce que seul les 3 derniers jours sont stockés. Pour les datas à long terme, c’est influxdb qui le fait.

Pourquoi ? Influxdb est FAIT pour ça, postgresql non, sqlite (la base par défaut HA) non plus…

Alors, oui les addons c’est sympa, mais à mon avis, certains ne devraient pas exister. Comme celui d’influxdb.

Enfin, pour enfoncer le clou. Petits retours d’expérience.

  • En ce temps là :older_man: HA était en charge de ma télérelève EDF (via des sensors MQTT) et HA a été victime d’un bug, plus aucune data n’était envoyée à influxdb…Rien…
    Du coup, mes valeurs, sorties de nodered, passées à MQTT, passées à HA et…ben rien, effacées au bout de 3 jours LOL.
    Du coup, j’ai tout changé, mes datas de télérelève sont extraites par nodered, puis envoyées direct dans influxdb. Et HA, récupère quelques unes de ces valeurs pour les afficher sur lovelace. Mais il n’est pas en charge de transmettre quoi que ce soit.

  • Je voulais monitorer mes noeuds proxmox. Et dans proxmox on peut indiquer un serveur influxdb pour aller y stocker les données. MAIS, chez proxmox ils ont décidé que les données sont envoyées en UDP et l’addon influxdb, ben il ne supporte pas l’UDP… J’ai été ouvrir un PR sur l’addon pour ajouter cette possibilité et la réponse à été : « Non merci ! »
    Du coup je fais tourner MON influx A MOI ! Et je fais ce que je veux avec ! NA ! :tongue:

Questions ?

:question:

8 J'aime

Merci pour le partage

1 J'aime

Merci pour le partage.

1 J'aime

Salut, sujet intéressant, je me le note dans un coin, merci.

1 J'aime

J’étais passé à côté de ton post. 100% d’accord avec ce que tu as écrit sur add-on ou pas…
Si tu as installé influx db toi même, tu es resté à la v1 ou tu as attaqué la v2?
Déjà que influx sql n’était pas forcément limpide ni bien documenté, j’ai un mal de chien avec flux :frowning:
Une expérience là-dessus?
Une v2 du tuto :wink:

1 J'aime

Merci pour ton retour !
Je suis toujours sur influx 1 (ça se voit au queries).
On a commencé la migration en v2 / flux au taf. Je vais gagner en expérience là dessus mais doucement, j’ai pas mal d’autres choses en cours. Mais un jour oui, un refresh du tuto avec la v2 !
Je pense que je pourrais potentiellement monter un influxdb v2 en parallèle de mon v1 et faire des essais jusqu’à trouver les bonnes requêtes, les bons réglages…et ensuite tenter de migrer ma database v1 en v2 !
Ça viendra, mais quand ? :tongue:

Salut @SNoof

Bravo et merci pour ce tuto.

Un petit supplément, peut-on gerer la date en plus de
[{"value":12},{"entity":"piscine","température":"eau"}]

Un jour pour x raisons une valeur n’est pas dans la base de données, mais on peut la récupérer d’un autre manière, alors peut-on géré l’ajout à une date donnée…

Merci

Avec influxdd tu peux indiquer un timestamp en effet. Je sais que c’est possible en indiquant un timestamp. Par contre en Line protocol oui mais via nodered je ne sais pas !
https://docs.influxdata.com/influxdb/v1.8/write_protocols/line_protocol_tutorial/

Avec un peu de lecture en plus le noeud influxdb out supporte bien le timestamp :

Bonjour à tous
Juste pour information.
Le passage à InfluxDB 2.0 n’est pas simple mais il se fait sans aucune perte de données.
Et il est heureusement tout à fait possible de continuer à utiliser ses graphiques sous grafana en se connectant à la base InfluxDB 2.0 en influxql. Donc sans utiliser le nouveau protocole Flux.
Bon amusement
Philippe

1 J'aime

Salut @SNoof , merci pour ce post

Je n’utilise pas l’addon HA mais InfluxDB v 2.0.4 sur un Docker et je n’ai pas ces options « retention policy » et « continuous query ».

Ma DB est créer via un « Buckets » et l’accès a cette dernière semble très restreint, j’arrive a faire des requêtes que je récupère pour Grafana sans problème mais c’est tout.

Pas ou peu d’option sur la DB elle même si ce n’est la rétention gloable limité à 1 an max, une idée ?
Merci

Désolé mais là c’est uniquement influxdb v1.x faudrait vraiment que je me penche sur la v2

Ok pas de souci, perso je suis partie sur la V2 directement pour pas avoir à migrer plus tard :wink:

Quand j’ai commencé influx c’était la 1.6 ! Du coup j’ai testé la v2 en bêta mais c’était pas stable et depuis la v2 stable je n’ai pas essayé. Mais c’est certain qu’un jour je vais devoir migrer !

Pour le coup j’ai pas testé la V1 mais il semblerait qu’il y ai eu beaucoup de changements avec la V2 :wink:

Bonjour,

Bonjour
Aurais tu des liens/ conseils pour installer influxdb et grafana sur la VM (Proxmox) d’un NUC ; quel linux faut-il installer ?

J’ai pas de conseil universel. La distribution que tu préfère. Perso Ubuntu server.
Debian ça le fait aussi.
Ensuite je préfère utiliser des containers Docker donc au final la distribution Linux a peu d’importance du moment que Docker est là !
Pour Docker ma préférence va vers compose parce que j’ai l’habitude. Et je me voyais pas monter un cluster k8s à la maison !
Si tu n’as pas les connaissances Docker alors une installation simple via le package manager de ta distro c’est bien aussi. Juste moins facile à transporter si besoin de changer de serveur.

Pas de connaissance Docker et peu en Linux !
J’ai compris qu’avec Docker on utilisait les mêmes ressources de la machine Hôte, dans mon cas pour HA, influxdb, Garfana et node-red.

J’ai installé HA sur une VM promox du NUC dans l’dée d’installer node-red, influxdb et grafana sur une seconde VM afin de disposer d’un lien direct KNX–>Node-red -->Influxdb-
Avec cette solution si HA plante influxdb est toujours alimentée, de même lors des mises à jour et redémarrages de HA.

1 J'aime

Dans ce cas une VM Ubuntu server 20.04.2. installation de influxdb et grafana via la doc de ces 2 produits et roule.

1 J'aime