Monitoring électricité avec la téléinfo + Node Red + influxDB

Salut,

Normalement, j’ai terminé ! Je viens de me relire, je pense qu’il ne manque rien.
La mise en forme est…pas trop mal :stuck_out_tongue:
Très honnêtement c’est un grosse masse de travail (montage d’un second nodered de test, un second influxdb de test, un second HA… pour créer et valider les flows que je n’utilise pas), j’espère que vous saurez apprécier.

Alors ça ressemble fort au topic : Monitoring électricité avec la téléinfo + Node Red + MQTT mais il y a une différence notable !
Nous n’allons plus utiliser MQTT pour transporter les données de la téléinfo vers HA pour stocker dans la database HA, mais nous allons directement exporter les données dans une database influxDB !
Ensuite HA pourra récupérer ces données pour les afficher sur votre dashboard lovelace.

Pourquoi ?

  • Parce que la téléinfo c’est BEAUCOUP de données, parce que ces données vous souhaitez surement les conserver longtemps et que HA n’est pas fait pour…
  • On élimine 2 transits : MQTT et HA donc deux possibles points de fail !

Comment ? On va reprendre les flows de l’autre topic mais remplacer les noeuds MQTT par des noeuds influxDB out. Ce qui engendre un peu de remaniement des données par rapport à MQTT.
On va aussi supprimer les utility_meter de HA parce que c’est de la m**** ! Oui oui, ça bug au restart de HA, ça stocke en base HA et pour de la data longue durée ben…ça le fait pas !

:warning:

Attention :

Oui c’est un gros pavé, mais je préfère détailler. S’il vous plait, lisez avant de vous lancer.
Pensez toujours à adapter les noeuds de configuration (ici celui de influxDB et le noeud serial) à votre setup.

:hammer_and_wrench:

Prérequis obligatoires avant d’aller plus loin :

  • Module téléinfo visible par Nodered (j’utilise un boitier GCE Electronics et le noeud serial est configuré pour.)
  • Nodered avec :
    • module de stockage filesystem => Comment faire
    • noeud node-red-contrib-cron-plus installé dans votre instance nodered
    • noeud node-red-contrib-calc installé dans votre instance nodered
  • une base influxDB (dans ce tuto elle s’apelle « edf »)

Prérequis sympa à avoir mais pas obligatoire

  • Grafana : pour visualiser les datas (bonus je file un dashboard tout fait !)

Je ne peux que vous conseiller si ce n’est pas encore fait la lecture de :

Voilà, les bases sont posées !
Il manque encore un petit disclaimer :
Si vous n’êtes pas certain de ce que vous faites avec votre compteur électrique, ne le faites pas !
J’essaye d’expliquer au mieux et de partager ce que j’ai pu créer/adapter…Il est possible que des erreurs soient présentes et je vous demande la plus grande indulgence. Si vous avez détecté des erreurs, faites le moi savoir je corrigerai le cas échéant.
Je ne saurai être tenu responsable pour toute destruction matérielle ou logicielle survenue durant le suivi de ce tuto !
Think first, do after !

C’est parti pour le concret !
Je ne vais pas reparler de la téléinfo avec nodered j’ai déjà expliqué dans l’autre topic cité tout en haut ici.
Dans un premier temps seul le contrat EDF BASE sera traité ! Les autres viendront mais ils me demandent un peu de travail !

Commencez par importer les flows suivants :

Flow 1 : Créer le flow qui récupère les datas et les envoie dans influxDB

Voilà à quoi il ressemble pour un contrat BASE Monophasé :


Pour un contrat HP/HC monophasé :

Pour un contrat Base triphasé :

Pour un contrat HP/HC triphasé :

Oui je suis un bourrin du débug…

Que fait ce flow :

  • Récupère ce qui sort du port série (le boitier CGE)
  • Valide les trames reçues
  • Mets en forme tout ça
  • Injecte dans la base influxDB
  • et y’a un petit lien qui envoie l’index en WH dans un autre flow !

Flow 2 : Flow des calculs et des compteurs jour/mois/année

Flow 2 part 1 : calcul de puissance

Je ne vais pas revenir sur le calcul en lui même, je l’ai détaillé dans l’autre tuto.


Ce flow fait les étapes suivantes:

  • va chercher l’index courant et l’index le plus proche d’il y a 2 minutes.
  • calcule la différence entre ces 2 indexes et le temps en secondes entre ce 2 indexes
  • transforme ces différences en puissance en W
  • envoie la valeur de la puissance en base influxDB

Flow 2 part 2 : Stocker l’index dans une variable

Là c’est tout simple, on stocke l’index courant dans une variable flow.index_wh
image
Pour du tarif BASE


Pour du tarif HP/HC

Flow 2 part 3 : Init des compteurs jour/mois/année

Cette partie est un peu « tricky »… Il s’agit là d’initialiser les compteurs. Quand je dis initialiser c’est mettre l’index actuel dans la variable « start » de chaque période (jour/mois/année) au moment opportun.
Quel est le moment opportun ?

  • Pour le compteur jour : à 0h00 chaque jour
  • Pour le compteur mois : à 0h00 le 1er du mois
  • Pour le compteur année : à 0h00 le 1er janvier

Pour ça on utilise le noeud cronplus.

Mais, vous allez me dire :

Si je mets en route ça maintenant, mon compteur « jour » ne va démarrer que demain, le compteur « mois » le mois prochain et le compteur « année » l’année prochaine ?!

Non, pour ça j’ai prévu le noeud Manual init >> DO NOT PRESS UNTIL REALLY NEEDED >>
Comme son nom l’indique, il fait un init manuel des 3 périodes (il envoie l’index actuel dans les 3 variables start des 3 périodes), donc on appuie dessus quand on a tout bien configuré (pas tout de suite donc !) et ensuite on y touche plus ! Sinon, on reset les 3 périodes…


Pour le tarif BASE

Pour le tarif HP/HC

Flow 2 part 4 : Calcul des consos par période

Chaque minute on va faire la différence entre l’index actuel et l’index « start » de chaque période, ce qui nous donne le nombre de Wh consommés pour chaque période avec échantillonage à la minute ! Et on stocke ça dans influxDB.
En fait, ceci remplace les utility_meter de home assistant. Parce que ces utility_meter c’est f*cking pas fiable ! Trust me :dark_sunglasses:


Pour du tarif BASE

Pour du tarif HP/HC

Adaptez à votre setup

influxDB out

On double click sur un des noeuds influxdb out, puis sur le petit crayon à droite de « EDF »
image
Là vous devez adapter à votre setup :

  • Version : Bien laisser en « 1.X », les différentes requêtes ne sont pas en Flux !
  • Host : l’ip de votre influxdb (si vous utilisez l’addon nodered et l’addon influx mettez : a0d7b954-influxdb)
  • Database : le nom de la database qui recevra vos données
  • User : si y’en a un
  • Password : si y’en a besoin…

Serial

Dans le Flow 1 il y a un noeud serial, adaptez si besoin le chemin et les paramètres du noeud.

Deploy !!!

Ben oui…

Check important des noeuds « set »

Comme je l’ai expliqué plus haut dans les prérequis, vos variables doivent être stockées dans un fichier pour survire à un restart de Nodered.

Si vous avez suivi mon tuto et gardé les 2 méthodes de stockage la bonne est « default » : passez sur TOUS les noeuds « set » pour vérifier qu’ils utilisent bien ce mode de stockage !
image
Si vous n’avez gardé que la méthode file system alors vous êtes tranquille ! :relaxed:

Manual init

C’est le moment de cliquer sur le noeud manual init !

On active les debug

Maintenant activez les noeuds de debug, un par un, vérifiez ce qui en sort, vérifiez que vous n’avez pas d’erreurs…

Si tout va bien c’est cool ! Sinon revenez poser vos questions, j’essayerai de répondre :slight_smile:

5 « J'aime »

Code des différents flows

:information_source: Si quand vous importez un flow vous avez un message qui indique que vous avez des doublons faites « import copy »

Pour des raisons pratiques de suivi des erreurs ou éventuelles évolutions, j’ai hébergé le code des flows sur github :

Si vous découvrez des erreurs vous pouvez créer des issues sur ce repo, ou me prévenir ici sur ce topic (pas en MP !)

Réservé pour « on sait jamais »…

Config HA

Côté HA, pour récupérer les valeurs qui sont dans la database influxdb.

Pour du contrat BASE Monophasé.

platform: influxdb
host:
username:
password:
queries:
  - name: edf_pinst
    unit_of_measurement: W
    measurement: '"W"'
    field: value
    group_function: last
    where: '"entity" = ''conso_teleinfo'''
    database: edf
  - name: edf_iinst
    unit_of_measurement: A
    measurement: '"A"'
    field: value
    group_function: last
    where: '"entity" = ''teleinfo'''
    database: edf
  - name: edf_today
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_day'''
    database: edf
  - name: edf_month
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_month'''
    database: edf
  - name: edf_year
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_year'''
    database: edf

Pour du BASE triphasé :

platform: influxdb
host:
username:
password:
queries:
  - name: edf_pinst
    unit_of_measurement: W
    measurement: '"W"'
    field: value
    group_function: last
    where: '"entity" = ''conso_teleinfo'''
    database: edf
  - name: edf_iinst1
    unit_of_measurement: A
    measurement: '"A"'
    field: value
    group_function: last
    where: '"entity" = ''teleinfo_i1'''
    database: edf
  - name: edf_iinst2
    unit_of_measurement: A
    measurement: '"A"'
    field: value
    group_function: last
    where: '"entity" = ''teleinfo_i2'''
    database: edf
  - name: edf_iinst3
    unit_of_measurement: A
    measurement: '"A"'
    field: value
    group_function: last
    where: '"entity" = ''teleinfo_i3'''
    database: edf
  - name: edf_today
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_day'''
    database: edf
  - name: edf_month
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_month'''
    database: edf
  - name: edf_year
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_year'''
    database: edf

Pour du HP/HC monophasé :

platform: influxdb
host:
username:
password:
queries:
  - name: edf_pinst
    unit_of_measurement: W
    measurement: '"W"'
    field: value
    group_function: last
    where: '"entity" = ''conso_teleinfo'''
    database: edf
  - name: edf_iinst
    unit_of_measurement: A
    measurement: '"A"'
    field: value
    group_function: last
    where: '"entity" = ''teleinfo'''
    database: edf
  - name: edf_total_day
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_total_day'''
    database: edf
  - name: edf_total_month
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_total_month'''
    database: edf
  - name: edf_total_year
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_total_year'''
    database: edf
  - name: edf_hp_day
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_hp_day'''
    database: edf
  - name: edf_hp_month
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_hp_month'''
    database: edf
  - name: edf_hp_year
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_hp_year'''
    database: edf
  - name: edf_hc_day
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_hc_day'''
    database: edf
  - name: edf_hc_month
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_hc_month'''
    database: edf
  - name: edf_hc_year
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_hc_year'''
    database: edf

Pour du HP/HC Triphasé :

platform: influxdb
host:
username:
password:
queries:
  - name: edf_pinst
    unit_of_measurement: W
    measurement: '"W"'
    field: value
    group_function: last
    where: '"entity" = ''conso_teleinfo'''
    database: edf
  - name: edf_iinst1
    unit_of_measurement: A
    measurement: '"A"'
    field: value
    group_function: last
    where: '"entity" = ''teleinfo_i1'''
    database: edf
  - name: edf_iinst2
    unit_of_measurement: A
    measurement: '"A"'
    field: value
    group_function: last
    where: '"entity" = ''teleinfo_i2'''
    database: edf
  - name: edf_iinst3
    unit_of_measurement: A
    measurement: '"A"'
    field: value
    group_function: last
    where: '"entity" = ''teleinfo_i3'''
    database: edf
  - name: edf_total_day
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_total_day'''
    database: edf
  - name: edf_total_month
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_total_month'''
    database: edf
  - name: edf_total_year
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_total_year'''
    database: edf
  - name: edf_hp_day
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_hp_day'''
    database: edf
  - name: edf_hp_month
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_hp_month'''
    database: edf
  - name: edf_hp_year
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_hp_year'''
    database: edf
  - name: edf_hc_day
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_hc_day'''
    database: edf
  - name: edf_hc_month
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_hc_month'''
    database: edf
  - name: edf_hc_year
    unit_of_measurement: kWh
    measurement: '"Wh"'
    field: value
    value_template: '{{ value | float / 1000 }}'
    group_function: last
    where: '"entity" = ''conso_hc_year'''
    database: edf

Pensez toujours à adapter à votre setup !

Avec ce code vous obtenez les sensors suivants :
Dans tous les cas :

  • sensor.edf_pinst : en W la puissance instantanée
    En monophasé :
  • sensor.edf_iinst : en A l’intensité instantanée
    En triphasé :
  • sensor.edf_iinst1 : en A l’intensité instantanée phase 1
  • sensor.edf_iinst2 : en A l’intensité instantanée phase 2
  • sensor.edf_iinst3 : en A l’intensité instantanée phase 3
    En Base :
  • sensor.edf_day : en kWh la conso aujourd’hui
  • sensor.edf_month : en kWh la conso du mois en cours
  • sensor.edf_year : en kWh la conso de l’année en cours
    En HP/HC :
  • sensor.edf_total_day : en kWh la conso aujourd’hui HP + HC
  • sensor.edf_total_month : en kWh la conso du mois en cours HP + HC
  • sensor.edf_total_year : en kWh la conso de l’année en cours HP + HC
  • sensor.edf_hp_day : en kWh la conso aujourd’hui HP
  • sensor.edf_hp_month : en kWh la conso du mois en cours HP
  • sensor.edf_hp_year : en kWh la conso de l’année en cours HP
  • sensor.edf_hc_day : en kWh la conso aujourd’hui HC
  • sensor.edf_hc_month : en kWh la conso du mois en cours HC
  • sensor.edf_hc_year : en kWh la conso de l’année en cours HC

Bonus : Grafana

Pour la visualisation de datas je ne peux que conseiller Grafana, la référence gratuite et open source !
Voici un dashboard que j’ai créé et que je vous partage : (OK pour BASE Monophasé uniquement…)


Oui il y a le coût en € mais il n’est pas bon et je vous conseille de le virer

{"__inputs":[{"name":"DS_EDF","label":"EDF","description":"","type":"datasource","pluginId":"influxdb","pluginName":"InfluxDB"}],"__requires":[{"type":"panel","id":"gauge","name":"Gauge","version":""},{"type":"grafana","id":"grafana","name":"Grafana","version":"7.5.4"},{"type":"panel","id":"graph","name":"Graph","version":""},{"type":"datasource","id":"influxdb","name":"InfluxDB","version":"1.0.0"},{"type":"panel","id":"stat","name":"Stat","version":""},{"type":"panel","id":"table","name":"Table","version":""}],"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations & Alerts","type":"dashboard"}]},"description":"","editable":true,"gnetId":null,"graphTooltip":0,"id":null,"links":[],"panels":[{"datasource":"${DS_EDF}","description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"max":8000,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"#EAB839","value":3000},{"color":"red","value":6000}]},"unit":"watt"},"overrides":[]},"gridPos":{"h":6,"w":3,"x":0,"y":0},"id":13,"options":{"orientation":"vertical","reduceOptions":{"calcs":["last"],"fields":"/^W\\.last$/","values":false},"showThresholdLabels":false,"showThresholdMarkers":true,"text":{}},"pluginVersion":"7.5.4","targets":[{"groupBy":[{"params":["$__interval"],"type":"time"},{"params":["none"],"type":"fill"}],"measurement":"W","orderByTime":"ASC","policy":"default","refId":"A","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"last"}]],"tags":[{"key":"entity","operator":"=","value":"conso_teleinfo"}]}],"timeFrom":null,"timeShift":null,"title":"Puissance instantanée","type":"gauge"},{"datasource":"${DS_EDF}","description":"","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"max":45,"thresholds":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"#EAB839","value":20},{"color":"red","value":35}]},"unit":"amp"},"overrides":[]},"gridPos":{"h":6,"w":3,"x":3,"y":0},"id":14,"options":{"reduceOptions":{"calcs":["lastNotNull"],"fields":"/^A\\.last$/","values":false},"showThresholdLabels":false,"showThresholdMarkers":true,"text":{}},"pluginVersion":"7.5.4","targets":[{"groupBy":[{"params":["$__interval"],"type":"time"},{"params":["none"],"type":"fill"}],"measurement":"A","orderByTime":"ASC","policy":"default","refId":"A","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"last"}]],"tags":[{"key":"entity","operator":"=","value":"teleinfo"}]}],"timeFrom":null,"timeShift":null,"title":"Intensité instantanée","type":"gauge"},{"datasource":"${DS_EDF}","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":2,"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"rgb(255, 255, 255)","value":null}]},"unit":"watth"},"overrides":[{"matcher":{"id":"byName","options":"cout"},"properties":[{"id":"unit","value":"€"}]}]},"gridPos":{"h":3,"w":6,"x":6,"y":0},"id":8,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"7.5.4","targets":[{"groupBy":[{"params":["$__interval"],"type":"time"},{"params":["null"],"type":"fill"}],"measurement":"Wh","orderByTime":"ASC","policy":"default","refId":"A","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"max"}]],"tags":[{"key":"entity","operator":"=","value":"conso_day"}]},{"alias":"cout","groupBy":[{"params":["$__interval"],"type":"time"},{"params":["null"],"type":"fill"}],"measurement":"€","orderByTime":"ASC","policy":"default","refId":"B","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"max"}]],"tags":[{"key":"entity","operator":"=","value":"cout_conso_day"}]}],"timeFrom":null,"timeShift":null,"title":"Jour","type":"stat"},{"datasource":"${DS_EDF}","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"rgb(255, 255, 255)","value":null}]},"unit":"watth"},"overrides":[{"matcher":{"id":"byName","options":"cout"},"properties":[{"id":"unit","value":"€"}]}]},"gridPos":{"h":3,"w":6,"x":12,"y":0},"id":9,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"7.5.4","targets":[{"groupBy":[{"params":["$__interval"],"type":"time"},{"params":["null"],"type":"fill"}],"measurement":"Wh","orderByTime":"ASC","policy":"default","refId":"A","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"max"}]],"tags":[{"key":"entity","operator":"=","value":"conso_month"}]},{"alias":"cout","groupBy":[{"params":["$__interval"],"type":"time"},{"params":["null"],"type":"fill"}],"measurement":"€","orderByTime":"ASC","policy":"default","refId":"B","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"max"}]],"tags":[{"key":"entity","operator":"=","value":"cout_conso_month"}]}],"timeFrom":null,"timeShift":null,"title":"Mois","type":"stat"},{"datasource":"${DS_EDF}","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"rgb(255, 255, 255)","value":null}]},"unit":"watth"},"overrides":[{"matcher":{"id":"byName","options":"cout"},"properties":[{"id":"unit","value":"€"}]}]},"gridPos":{"h":3,"w":6,"x":18,"y":0},"id":10,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"7.5.4","targets":[{"groupBy":[{"params":["$__interval"],"type":"time"},{"params":["null"],"type":"fill"}],"measurement":"Wh","orderByTime":"ASC","policy":"default","refId":"A","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"max"}]],"tags":[{"key":"entity","operator":"=","value":"conso_year"}]},{"alias":"cout","groupBy":[{"params":["$__interval"],"type":"time"},{"params":["null"],"type":"fill"}],"measurement":"€","orderByTime":"ASC","policy":"default","refId":"B","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"max"}]],"tags":[{"key":"entity","operator":"=","value":"cout_conso_year"}]}],"timeFrom":null,"timeShift":null,"title":"Année","type":"stat"},{"datasource":"${DS_EDF}","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":2,"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"rgb(173, 173, 173)","value":null}]},"unit":"watth"},"overrides":[{"matcher":{"id":"byName","options":"cout"},"properties":[{"id":"unit","value":"€"}]}]},"gridPos":{"h":3,"w":6,"x":6,"y":3},"hideTimeOverride":true,"id":11,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"7.5.4","targets":[{"groupBy":[{"params":["$__interval"],"type":"time"},{"params":["none"],"type":"fill"}],"measurement":"Wh","orderByTime":"ASC","policy":"default","refId":"A","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"max"}]],"tags":[{"key":"entity","operator":"=","value":"conso_day"}]},{"alias":"cout","groupBy":[{"params":["$__interval"],"type":"time"},{"params":["none"],"type":"fill"}],"hide":false,"measurement":"€","orderByTime":"ASC","policy":"default","refId":"B","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"max"}]],"tags":[{"key":"entity","operator":"=","value":"cout_conso_day"}]}],"timeFrom":"now/d","timeShift":"1d/d","title":"Hier","transformations":[],"type":"stat"},{"datasource":"${DS_EDF}","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"decimals":2,"mappings":[],"thresholds":{"mode":"absolute","steps":[{"color":"rgb(173, 173, 173)","value":null}]},"unit":"watth"},"overrides":[{"matcher":{"id":"byName","options":"€.max"},"properties":[{"id":"unit","value":"€"},{"id":"displayName"}]}]},"gridPos":{"h":3,"w":6,"x":12,"y":3},"hideTimeOverride":true,"id":15,"options":{"colorMode":"value","graphMode":"none","justifyMode":"auto","orientation":"auto","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false},"text":{},"textMode":"value"},"pluginVersion":"7.5.4","targets":[{"groupBy":[{"params":["$__interval"],"type":"time"},{"params":["null"],"type":"fill"}],"measurement":"Wh","orderByTime":"ASC","policy":"default","refId":"A","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"max"}]],"tags":[{"key":"entity","operator":"=","value":"conso_month"}]},{"groupBy":[{"params":["$__interval"],"type":"time"},{"params":["null"],"type":"fill"}],"measurement":"€","orderByTime":"ASC","policy":"default","refId":"B","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"max"}]],"tags":[{"key":"entity","operator":"=","value":"cout_conso_month"}]}],"timeFrom":"now/M","timeShift":"1M/M","title":"Mois dernier","type":"stat"},{"datasource":"${DS_EDF}","fieldConfig":{"defaults":{"color":{"mode":"thresholds"},"custom":{"align":"left","filterable":false},"decimals":1,"mappings":[],"noValue":"- ","thresholds":{"mode":"absolute","steps":[{"color":"green","value":null}]},"unit":"watth"},"overrides":[{"matcher":{"id":"byType","options":"number"},"properties":[{"id":"custom.displayMode","value":"gradient-gauge"},{"id":"displayName","value":"Conso"},{"id":"min","value":0},{"id":"max","value":50000},{"id":"thresholds","value":{"mode":"absolute","steps":[{"color":"green","value":null},{"color":"#EAB839","value":25000},{"color":"red","value":30000}]}}]},{"matcher":{"id":"byName","options":"Time"},"properties":[{"id":"unit","value":"time:DD-MM"},{"id":"custom.width","value":20}]}]},"gridPos":{"h":22,"w":6,"x":18,"y":3},"hideTimeOverride":true,"id":17,"options":{"showHeader":true,"sortBy":[{"desc":true,"displayName":"Time"}]},"pluginVersion":"7.5.4","targets":[{"groupBy":[{"params":["1d"],"type":"time"},{"params":["null"],"type":"fill"}],"measurement":"Wh","orderByTime":"ASC","policy":"default","refId":"A","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"max"}]],"tags":[{"key":"entity","operator":"=","value":"conso_day"}],"tz":"Europe/Paris"}],"timeFrom":"now/M","timeShift":null,"title":"Conso mensuelle","type":"table"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"${DS_EDF}","fieldConfig":{"defaults":{"links":[]},"overrides":[]},"fill":1,"fillGradient":3,"gridPos":{"h":19,"w":18,"x":0,"y":6},"hiddenSeries":false,"id":2,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":true,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"nullPointMode":"null","options":{"alertThreshold":true},"percentage":false,"pluginVersion":"7.5.4","pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[{"$$hashKey":"object:148","alias":"Intensité instantanée","fill":3,"fillGradient":0,"lines":true,"linewidth":0,"yaxis":2,"zindex":-1},{"$$hashKey":"object:351","alias":"Puissance instantanée","color":"#FA6400","fill":0,"fillGradient":0}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"alias":"Puissance instantanée","groupBy":[{"params":["$__interval"],"type":"time"},{"params":["linear"],"type":"fill"}],"measurement":"W","orderByTime":"ASC","policy":"default","refId":"A","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"mean"}]],"tags":[{"key":"entity","operator":"=","value":"conso_teleinfo"}],"tz":""},{"alias":"Intensité instantanée","groupBy":[{"params":["$__interval"],"type":"time"},{"params":["previous"],"type":"fill"}],"hide":false,"measurement":"A","orderByTime":"ASC","policy":"default","query":"SELECT mean(\"value\") FROM \"A\" WHERE (\"entity_id\" = 'iinst_edf') AND $timeFilter GROUP BY time($__interval) fill(linear)","rawQuery":false,"refId":"B","resultFormat":"time_series","select":[[{"params":["value"],"type":"field"},{"params":[],"type":"mean"}]],"tags":[{"key":"entity","operator":"=","value":"teleinfo"}]}],"thresholds":[{"$$hashKey":"object:686","colorMode":"critical","fill":true,"line":true,"op":"gt","value":45,"yaxis":"right"}],"timeFrom":null,"timeRegions":[{"$$hashKey":"object:202","colorMode":"background6","fill":true,"fillColor":"rgba(234, 112, 112, 0.12)","line":false,"lineColor":"rgba(237, 46, 24, 0.60)","op":"time"}],"timeShift":null,"title":"EDF Courbes Puissance et Intensité","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:155","format":"watt","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:156","format":"amp","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"30s","schemaVersion":27,"style":"dark","tags":["iot","edf"],"templating":{"list":[]},"time":{"from":"now-24h","to":"now"},"timepicker":{"refresh_intervals":["10s","30s","1m","5m","15m","30m","1h","2h","1d"]},"timezone":"browser","title":"EDF New","uid":"GdezYS5Gk","version":39}
2 « J'aime »

La vache, t’avais dit que tu ferais un truc le jour où t’as moins la flemme, je pensais pas que ça serait de suite :flushed:.

La classe, j’ai lu ça vite fait,faudra que je me pose… et aussi j’attendrai les HC/HP.

En tout cas, la classe !!

1 « J'aime »

J’ai pas terminé… J’espère finir ce soir. Sinon demain au moins pour le contrat base.
Dans la semaine je pense pouvoir faire le HP/HC et le triphasé.

1 « J'aime »

Bonjour,
Tout d’abord, merci beaucoup pour ton tuto sur lequel je vais m’appuyer pour afficher mes consommations elec, gaz et eau jour, semaine, mois et année à partir de compteurs KNX.

Pourquoi échantillonner à la minute ? Si on souhaite stocker les consommations annuelles sur 5 ans le volume de données va être très important ?
Quelle est la règle à mettre dans Grafana pour afficher la consommation par heure, jour, mois ou année (faire la somme des échantillons sur une période donnée) ?

échantillonner à la minute permet de voir un « pic » de conso même assez court.
Ensuite (et j’ajouterai un passage là dessus) influxDB peut ré-échantillonner en fonction de ta retention rule.
Perso j’ai de l’échantillonage à la minute sur 1 an, et une autre retention infinie qui est sur du 5 minutes.
Je fais ça pour EDF et pour HASSIO aussi (garder 1 an au plus fin, et infini sur 5 minutes)
Pour ça avec influxDB v1.x il faut utiliser des continuous queries.
J’essayerai de détailler ça aussi mais séparément ça ferait trop à dire en une seule fois !

image
Ma DB influx avec ses 2 rétentions


La CQ influxdb


Vu de grafana sur les 3 dernières heures

Pour ta question grafana, tu as les compteurs jour/mois/année que j’ai créé direct dans nodered.
Sinon tu peux toujours faire du group by time avec tes requêtes influx. Read the doc :wink:

Je souhaite afficher des graphiques sous la forme de barres verticales (et j’aimerais avoir la possibilité du non glissant ):

  • une barre par heure sur 24 heures (la seule chose que j’ai pu faire avec apexcharts-card)
  • une barre par jour sur 7 jours ;
  • une barre par semaine sur 4 semaines
  • une barre par mois sur 12 mois
  • une barre par an sur 5 ans

Je viens de suivre la partie de ton tuto relative au stockage en utilisant filesystem ; c’est impeccable, on ne peut pas se tromper, merci. (j’ai juste cherché pour redémarrer Node-red car le redémarrage de HA ne suffisait pas, j’ai donc redémarrer ma VM HA de proxmox mais c’est propre à ma configuration).

J’ai importé le flow Part 4 et il me manque le nœud subtract ?

Ha pour le noeud substract je pensais qu’il était de base (j’utilise pas l’addon nodered !)
J’ajoute au tuto de l’installer avant :slight_smile:

Pour relancer Nodered si tu utilises l’addon, alors redémarre l’addon depuis le supervisor !

Pour les graphs en barres verticales il te faut faire la bonne requete influx (je pense a du group by time avec l’intervalle que tu veux et probablement un select avec la fonction difference) le tout sur un panel grafana graph avec les bars activées. Pour le non glissant pas certain que tu puisse le faire direct avec influxdb/grafana

A toi de gérer la valeur de ces « compteurs » directement dans nodered comme je le fais pour jour/mois/année

Mais on dépasse très largement le cadre du tuto là :stuck_out_tongue:

J’ai lu ta « petite digression sur l’addon influxdb » et je suis d’accord ; dans l’absolu je souhaiterais :

  • installer Node-red sur une VM proxmox mais étant presque débutant en HA, Node-Red , et débutant en Influxdb et Grafana , j’ai pensé que j’allais encore me compliquer la tâche et probablement arriver à rien ! Une étape intermédiaire ne me semblait pas inutile.
    Ensuite, lorsqu’on importe un graphique Grafana dans une Webpage du Lovelace, on conserve une certaine interactivité, est-ce toujours le cas sans passer par les addons Influxdb/Grafana ?

  • lire directement avec Node-Red les valeurs courantes (index) de mes compteurs KNX sans passer par HA (j’ai déjà fait quelques flow Node-Red ↔ KNX mais pour l’instant je n’arrive pas à lire un compteur).

  • Hors sujet ici, il y a plein de ressources pour installer nodered, influx, grafana sur un linux genre ubuntu server. Et oui intégrer du grafana venant de l’addon ou d’un grafana ailleurs c’est pareil.

  • Je n’ai pas de KNX, je ne pourrais pas t’aider.

Oui pas de problème et tu as répondu à la question.
Lorsque je vais dans la librairie Node-Red,, je n’ai pas de réponse à « substract » ?

Je viens de vérifier, c’est un noeud calculator qui est dans : node-red-contrib-calc

Dans la copie d’écran que tu as posté, tu as des consommations mensuelles sous forme de barres horizontales ; je suppose que c’est une carte HA ? Si oui, laquelle et quelles sont les entity utilisées ?

C’est du grafana. Le dashboard est dispo dans le tuto

Je ne l’avais pas. Je viens de l’installer et j’ai pu récupérer le flow part 4.

1 « J'aime »

J’ai vu que je pouvais copier le code mais où faut-il le coller ?

image

1 « J'aime »

Dans le calcul de la consommation du jour, il y a des variables index_wh_start_day et index_wh_end_day Comment fait-on pour les créer ?
[Edit] Je me réponds à moi-même pour les futurs lecteurs : le nœud set flow.nom_de_la_variable crée automatiquement la variable.