[TUTO] dashboard energy avec lixee et coût par device

Bonjour,

je ne peux pas créer des tutos, mais je voulais quand même partager ma solution pour avoir le coût par device en plus du lixee ou autre moniteur de linky.

Note: c’est actuellement en test, pour le moment j’ai ajouter la remonter du lixee dans mon dashboard energy pour m’assurée que la conso total corresponds bien a 2x ma conso réel (a une vache près ^^)

alors voila le tuto:

Etape 1: creer les entity qui nous seront utils
pour cela allez dans paramètre/Appareils et services/entrées

A) On va creer une entité de type texte pour sauvegarder la consommation total de nos devices
je lui donne le nom de « Consommation électrique par devices »

cela donnera l’entity id suivant : input_text.consommation_electrique_par_devices (cela sera utiles plu tard)
Note: j’ai utilisé un input text car je n’ai pas vraiment a me soucier de la longueur du nombre max

B) On va creer une entité de type texte pour sauvegarder la différence entre notre consommation total du lixee et notre consommation total par device (point A)
je lui donne le nom de « Consommation électrique autre value »


cela donnera l’entity id suivant : input_text.consommation_electrique_autre_value (cela sera utiles plu tard)
Note: j’ai utilisé un input text car je n’ai pas vraiment a me soucier de la longueur du nombre max

C) On va creer une entité de type template pour creer une entity energy pour le dashboard energy qui reposera sur l’input text du point B
je lui donne le nom de « Consommation électrique autre energy » (qui pourra etre renommé plu tard)

il faut ensuite choisir : Modéliser un capteur

image

Nom : Consommation électrique autre energy
Modèle d’état : {{ states('input_text.consommation_electrique_autre_value') | float }}
Unité de mesure : kWh
Classe d’appareil: Energie
classe d’état: Total en augmentation

cela donnera l’entity id suivant : sensor.consommation_electrique_autre_energy (cela sera utiles plu tard)

Etape 2: l’automatisation

alias: 0000-Compteur-Energy-Calculator
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.compteur_electrique_base
condition: []
action:
  - variables:
      listkwh: >-
        {{ states.sensor | selectattr('attributes.unit_of_measurement',
        'equalto', 'kWh') | rejectattr('entity_id', 'eq',
        'sensor.consommation_electrique_autre_energy') | rejectattr('entity_id',
        'search', 'sensor.compteur_electrique*') | rejectattr('entity_id',
        'search', 'sensor.compteur_gaz*') | rejectattr('entity_id', 'search',
        'sensor.compteur_eau*') | map(attribute="entity_id") | list }}
      oldconso: "{{ states('input_text.consommation_electrique_autre_value') | float }}"
  - service: input_text.set_value
    data:
      value: "0"
    target:
      entity_id: input_text.consommation_electrique_par_devices
  - repeat:
      sequence:
        - if:
            - condition: not
              conditions:
                - condition: template
                  value_template: "{{ states(repeat.item) == 'unavailable' }}"
                  enabled: true
                - condition: template
                  value_template: "{{ states(repeat.item) == 'unknown' }}"
                  enabled: true
                - condition: template
                  value_template: "{{ states(repeat.item) == 'none' }}"
                  enabled: true
            - condition: not
              conditions:
                - condition: template
                  value_template: >-
                    {{ states('input_text.consommation_electrique_par_devices')
                    == 'unavailable' }}
                - condition: template
                  value_template: >-
                    {{ states('input_text.consommation_electrique_par_devices')
                    == 'unknown' }}
                - condition: template
                  value_template: >-
                    {{ states('input_text.consommation_electrique_par_devices')
                    == 'none' }}
              enabled: true
          then:
            - service: input_text.set_value
              data:
                value: >-
                  {{ states(repeat.item) | float +
                  states('input_text.consommation_electrique_par_devices') |
                  float | round(3) }}
              target:
                entity_id: input_text.consommation_electrique_par_devices
          else:
            - stop: calcule faussé, car un appareil est indisponible
              error: true
      for_each: "{{ listkwh }}"
  - condition: template
    value_template: |-
      {{ oldconso < (states('sensor.compteur_electrique_base') | float -
          states('input_text.consommation_electrique_par_devices') | float) | round(3) | abs }}
  - service: input_text.set_value
    data:
      value: >-
        {{ (states('sensor.compteur_electrique_base') | float -
        states('input_text.consommation_electrique_par_devices') | float) |
        round(3) | abs }}
    target:
      entity_id: input_text.consommation_electrique_autre_value
mode: single


sensor.compteur_electrique_base => c’est le sensor de la consommation total remonté par votre lixee a vous de mettre votre sensor

si vous avez respecté les mêmes nom que moi alors c’est tout sinon ajuster a coup de replace les entity id

Note : la variable listkwh contient la liste de tout vos devices qui on l’attribute unit_of_measurement sur la valeur kWh, a l’exception des sensors commençant par sensor.compteur_electrique, sensor.compteur_gaz, sensor.compteur_eau et du sensor créer qui contient la soustraction entre le lixee et vos devices (consommation_electrique_autre_energy)

une fois bien tout remplacer avez les entity dans l’automatisation, vous n’avez plus qu’a retirer le tota lixee du dashboard energy, mettre tout vos devices dans consommation et d’ajouter le sensor créér dans ce tuto.

ainsi vous aurez votre consommation total de tout vos appareils et la différence de consommation se trouvera dans le sensor consommation_electrique_autre_energy, et biensur le prix pour chacun

Recommandation:
supprimer les entity temporaire de l’historisation, pour cela editer le fichier configuration.yaml et ajouter :

recorder:
  exclude:
    entities:
      - input_text.consommation_electrique_par_devices
      - input_text.consommation_electrique_autre_value

si vous voulez purger les entitées manuellement, vous pouvez jouer cette automatisation ou la planifier si vous ne voulez pas supprimer ces entitées du record

alias: 0000-Purge-Record
description: ""
trigger: []
condition: []
action:
  - service: recorder.purge_entities
    data:
      domains: []
      entity_globs: []
      keep_days: 0
    enabled: true
    target:
      entity_id:
        - input_text.consommation_electrique_autre_value
        - input_text.consommation_electrique_par_devices
mode: single

Edite 12/02/2024 à 12:01 => ajout recommandation pour l’historisation des données temporaire
Edite 12/02/2024 à 18:38 => Version 2 => ajout de round(3) dans le calcule du script + abs pour avoir la valeur absolue (dans le cas ou le compteur a une valeur inferieur au total des devices
Edite 14/02/2024 à 21:00 => ajout d’indication si le lixee est en mode standard
Edite 27/02/2024 à 19:22 => modification des script version 1 afin d’ajouter un contrôle d’état (unavailable et unknown) sur les entités ajouté + une modification dans la liste d’exclusion, tout les sensor commençant par sensor.compteur_electrique, sensor.compteur_gaz, sensor.compteur_eau seront excluent + suppression de la version 2
Edite 29/02/2024: add check none
Edite 02/03/2024: ajout d’un arrêt du script si l’une des entité n’est pas disponible, pour ne pas faussé le calcule

2 « J'aime »

N’hésité pas a me faire des retour et des remarques

Bonjour,
J’ai simplement défini 6 input_number (tarif kwh hp bleu dans l’exemple) pour stocker chaque tarif TEMPO que j’ai renseigné ensuite dans le tableau Energy.

lors de la création du ‹ template › j’ai une erreur:

je vous est deja repondu sur FB, ca n’a rien avoir avec mon tuto ^^

1 « J'aime »

arf je ne sais pourquoi mais l’editeur a remplacer mes ’ par <>

{{ states('input_text.consommation_electrique_autre_value') | float }}
1 « J'aime »

Salut,
c’est normal.

sans texte préformater:
{{ states(‹ input_text.consommation_electrique_autre_value ›) | float }}

avec texte preformater:

{{ states('input_text.consommation_electrique_autre_value') | float }}

ou
{{ states('input_text.consommation_electrique_autre_value') | float }}

oui j’ai vite compris :stuck_out_tongue:

c’est corrigé dans le tuto Merci

petit retour de se matin,
j’obtiens une valeur proche de ce que me remonte le linky, l’imprécision ici de 40w est dû pour mois au arrondi et au faites qu’il faut prendre en compte les multiple delai de remonter d’information, ca sera jamais exacte par rapport a la vrai valeur mais extrêmement proche

Pour info, j’ai fait exactement la même chose depuis quelques temps.
J’ai néanmoins un soucis lié à la représentation. Comme tu as pu le constater, le dashboard energy propose des couleurs assez ternes (c’est un euphémisme :slight_smile: ) qui ne permet pas de distinguer les élements. Par ailleurs, le pas minimum est d’une heure, alors que le linky et les prises remontent l’information beaucoup plus souvent. C’est dommage.
J’ai donc essayé de créer un graph alternatif en utilisant history graph, mais cela ne fonctionne pas comme prèvu ( Comportement étrange de la carte History Explorer Card - Entraide Home Assistant - Home Assistant Communauté Francophone (hacf.fr)).
Pourrais-tu essayer de ton côté de créer une carte comme la mienne pour voir si cela provient de mes compteurs ou de la carte History Explorer Card).
Merci

tu peux changer les couleurs

tu crée un fichier …yaml dans le dossier theme, tu colle le text ci dessous dans le fichier et ensuite tu restart ha, et tu selection le theme

Custom Home Assistant:
  energy-grid-consumption-color-0: "#cccccc"
  energy-grid-consumption-color-1: "#FF406B"
  energy-grid-consumption-color-2: "#6CE193"
  energy-grid-consumption-color-3: "#6C0E28"
  energy-grid-consumption-color-4: "#2F30E1"
  energy-grid-consumption-color-5: "#f5ad92"
  energy-grid-consumption-color-6: "#fe7843"
  energy-grid-consumption-color-7: "#9841F3"
  energy-grid-consumption-color-8: "#56CCF6"
  energy-grid-consumption-color-9: "#15FF06"
  energy-grid-consumption-color-10: "#FF00D0"
  energy-grid-consumption-color-11: "#8B0BF5"
  energy-grid-consumption-color-12: "#f8e837"
  energy-grid-consumption-color-13: "#ff0000"
  energy-grid-consumption-color-14: "#42AD29"
  energy-grid-consumption-color-15: "#d1da27"
  energy-grid-consumption-color-16: "#20E9D5"
  energy-grid-consumption-color-17: "#AF83D2"
  energy-grid-consumption-color-18: "#ff615d"
  energy-grid-consumption-color-19: "#7053FD"
  energy-grid-consumption-color-20: "#7d164e"
  energy-grid-consumption-color-21: "#8FC1DD"
  energy-grid-consumption-color-22: "#11DAC4"

  modes:
    dark:
      secondary-text-color: slategray
1 « J'aime »