Suivi de batterie virtuel USE

Bonjour a tous, je chercher depuis quelques temps a avoir le suivi de batterie virtuel USE

je me suis donc crée un suivi personnalisé via HA dont je vous partage la configuration ce qui serai top ces de crée une intégration dans ce sens mais ça dépasse mais compétence.

voici donc mes templates et autre capteur pour le suivi de la batterie USE sur home assistant et dans le Dashboard energie.
pour commencer les sensors :

Code a mettre dans votre sensors.yaml en complétant avec vos propre sensor correspondant

- platform: template
 sensors:
   energie_batterie:
     friendly_name: "Énergie prise de la batterie"
     unique_id: "Énergie prise de la batterie"
     unit_of_measurement: "kWh"
     value_template: >
       {% set consommation = states('votre conso journaliere') | float(0) %}
       {% set production = states('votre production du jour') | float(0) %}
       {% set batterie = states('sensor.niveau_de_batterie_annuelle') | float(0) %}
       
       {% if consommation > production and batterie > 0 %}
         {% set energie_utilisee = consommation - production %}
         {% if energie_utilisee > batterie %}
           {{ batterie }}
         {% else %}
           {{ energie_utilisee }}
         {% endif %}
       {% else %}
         {{ 0 }}
       {% endif %}
    energie_mise_batterie:
      friendly_name: "Énergie mise dans la batterie"
      unique_id: "Énergie mise dans la batterie"
      unit_of_measurement: "kWh"
      value_template: >
        {% set consommation = states('votre conso journaliere') | float(0) %}
        {% set production = states('votre retour reseau') | float(0) %}
        {% set batterie = states('sensor.niveau_de_batterie_annuelle') | float(0) %}
        {% set capacite_max_batterie = 10000 %}
        
        {% if production > consommation %}
          {% set energie_ajoutee = production - consommation %}
          {% if (batterie + energie_ajoutee) > capacite_max_batterie %}
            {{ capacite_max_batterie - batterie }}
          {% else %}
            {{ energie_ajoutee }}
          {% endif %}
        {% else %}
          {{ 0 }}
        {% endif %}
 energie_reseau:
      friendly_name: "Énergie tirée du réseau"
      unique_id: "energie_tiree_du_reseau"
      unit_of_measurement: "kWh"
      value_template: >
        {% set consommation = states('votre conso journaliere') | float(0) %}
        {% set production = states('votre production du jour') | float(0) %}
        {% set batterie = states('sensor.niveau_de_batterie_annuelle') | float(0) %}
        
        {% if consommation > production and batterie == 0 %}
          {{ consommation - production }}
        {% else %}
          {{ 0 }}
        {% endif %}
niveau_de_batterie_mensuel:
      friendly_name: "Niveau de batterie mensuel"
      unique_id: "niveau_de_batterie_mensuel"
      unit_of_measurement: "kWh"
      value_template: >
        {% set production = states('votre production mensuel') | float(0) %}
        {% set consommation = states('votre conso mensuel') | float(0) %}
        {% set capacite_max = 2000 %}

        {% set niveau_batterie = production - consommation %}

        {{ niveau_batterie }}
 niveau_de_batterie_annuelle:
      friendly_name: "Niveau de batterie annuelle"
      unique_id: "niveau_de_batterie_annuelle"
      unit_of_measurement: "kWh"
      value_template: >
        {% set capacite_max = 20000 %}
        {% set niveau_batterie_initial = states('input_number.niveau_de_batterie_mois_precedent') | float(0) %}
        
        {% set production = states('votre production mensuel') | float(0) %}
        {% set consommation = states('votre conso mensuel') | float(0) %}
        
        {% set production = max(0, production) %}
        {% set consommation = max(0, consommation) %}
        
        {% set niveau_batterie = niveau_batterie_initial + (production - consommation) %}
        
        {% if niveau_batterie < 0 %}
          {{ 0 }}
        {% elif niveau_batterie > capacite_max %}
          {{ capacite_max }}
        {% else %}
          {{ niveau_batterie }}
        {% endif %}

template a crée via ha :

- sensor:
      - name: "Production mensuelle"
        unit_of_measurement: "kWh"
        state_class: "total_increasing"
        device_class: "energy"
        state: >
          {{ state_attr('votre sensor production mensuel') | default(0) | float }}
 - sensor:
      - name: "Retour réseau"
        unit_of_measurement: "kWh"
        state: >
          {% set consommation = states('votre conso maison total production + reseau ') | float %}
          {% set production = states('votre production journalière') | float %}
          {% if production > consommation %}
            {{ production - consommation }}  # Retour positif
          {% elif production < consommation %}
            {{ -(consommation - production) }}  # Retour négatif
          {% else %}
            0  # Aucun retour
          {% endif %}
 - sensor:
      - name: "Recharge batterie mensuel"
        unit_of_measurement: "kWh"
        device_class: "energy"
        state_class: "measurement"
        state: >
          {% set production = states('votre production mensuel') %}
          {% set consommation = states('votre consomation mensuel') %}
          {% set production_value = production if production != 'unknown' else 0 %}
          {% set consommation_value = consommation if consommation != 'unknown' else 0 %}
          {% set energie_dispo = production_value | float - consommation_value | float %}
          {{ energie_dispo }}

le plus important pour le suivi mensuel
crée un imput number reprenant le niveau de batterie du mois précédent

crée une automatisation pour la mise a jour mensuel de cette imput:

alias: Mise à jour du niveau de batterie mensuel
description: ""
triggers:
  - at: "00:00:00"
    trigger: time
conditions:
  - condition: template
    value_template: "{{ now().day == 1 }}"
actions:
  - data:
      entity_id: input_number.niveau_de_batterie_mois_precedent
      value: "{{ states('sensor.niveau_de_batterie_annuelle') | float }}"
    action: input_number.set_value
mode: single

ensuite crée des « compteur de service public » pour intégrer dans le dashboard énergie

a savoir un compteur pour :

« Energie pris dans le reseau » a mettre dans consommation réseau
« Energie pris dans la batterie " et " un retour réseau » a mettre dans la partie batterie de stockage

pour le lovelace je me sert de la carte vertical-stack

capture d’ecran:


Si besoin j’essaierai d’apporter plus de précision au cas ou

Merci, super cette intégration!
Est il possible d’initialiser le compteur de la batterie au travers de cette intégration (je ne pas un spécialiste de home assistant!)
Merci

C’est a dire ? lui donner la valeur de la batterie actuel oui via l’input number

mais attention c’est pas une intégration, ce sont juste des sensors et des calcul fait pas les outils natifs de HA

Oui lui donner la valeur actuelle de la batterie comme valeur de départ

ok c’est donc avec l’input number, ce qui permet même de le corrigé chaque début de mois au cas il y 'est une erreur.
Je n’ai pas préciser mais pour les sensors de consommation ou production journalier et mensuel , je me sert de l’intégration Myelectricaldata et je recupere les valeurs des sensors crée, ce qui permet d’avoir les mêmes valeurs que USE et au plus juste

ok merci, je vais regarder cela.
Serait il possible de récupérer votre fichier sens svp car je ne comprends pas ce qui ne va pas dans le mien?

Il est dans mon premier message mais je le remet si dessous

- platform: template
  sensors:
    energie_batterie:
      friendly_name: "Énergie prise de la batterie"
      unique_id: "Énergie prise de la batterie"
      unit_of_measurement: "kWh"
      value_template: >
        {% set consommation = states('sensor.conso_journaliere') | float(0) %}
        {% set production = states('sensor.sma_daily_yield') | float(0) %}
        {% set batterie = states('sensor.niveau_de_batterie_annuelle') | float(0) %}
        
        {% if consommation > production and batterie > 0 %}
          {% set energie_utilisee = consommation - production %}
          {% if energie_utilisee > batterie %}
            {{ batterie }}
          {% else %}
            {{ energie_utilisee }}
          {% endif %}
        {% else %}
          {{ 0 }}
        {% endif %}

    energie_mise_batterie:
      friendly_name: "Énergie mise dans la batterie"
      unique_id: "Énergie mise dans la batterie"
      unit_of_measurement: "kWh"
      value_template: >
        {% set consommation = states('sensor.conso_journaliere') | float(0) %}
        {% set production = states('sensor.surplus_production') | float(0) %}
        {% set batterie = states('sensor.niveau_de_batterie_annuelle') | float(0) %}
        {% set capacite_max_batterie = 10000 %}
        
        {% if production > consommation %}
          {% set energie_ajoutee = production - consommation %}
          {% if (batterie + energie_ajoutee) > capacite_max_batterie %}
            {{ capacite_max_batterie - batterie }}
          {% else %}
            {{ energie_ajoutee }}
          {% endif %}
        {% else %}
          {{ 0 }}
        {% endif %}

    energie_reseau:
      friendly_name: "Énergie tirée du réseau"
      unique_id: "energie_tiree_du_reseau"
      unit_of_measurement: "kWh"
      value_template: >
        {% set consommation = states('sensor.conso_journaliere') | float(0) %}
        {% set production = states('sensor.sma_daily_yield') | float(0) %}
        {% set batterie = states('sensor.niveau_de_batterie_annuelle') | float(0) %}
        
        {% if consommation > production and batterie == 0 %}
          {{ consommation - production }}
        {% else %}
          {{ 0 }}
        {% endif %}

    niveau_de_batterie_mensuel:
      friendly_name: "Niveau de batterie mensuel"
      unique_id: "niveau_de_batterie_mensuel"
      unit_of_measurement: "kWh"
      value_template: >
        {% set production = states('sensor.production_mensuel') | float(0) %}
        {% set consommation = states('sensor.myelectricaldata_current_month') | float(0) %}
        {% set capacite_max = 2000 %}

        {% set niveau_batterie = production - consommation %}

        {{ niveau_batterie }}



    niveau_de_batterie_annuelle:
      friendly_name: "Niveau de batterie annuelle"
      unique_id: "niveau_de_batterie_annuelle"
      unit_of_measurement: "kWh"
      value_template: >
        {% set capacite_max = 20000 %}
        {% set niveau_batterie_initial = states('input_number.niveau_de_batterie_mois_precedent') | float(0) %}
        
        {% set production = states('sensor.production_mensuel') | float(0) %}
        {% set consommation = states('sensor.myelectricaldata_current_month') | float(0) %}
        
        {% set production = max(0, production) %}
        {% set consommation = max(0, consommation) %}
        
        {% set niveau_batterie = niveau_batterie_initial + (production - consommation) %}
        
        {% if niveau_batterie < 0 %}
          {{ 0 }}
        {% elif niveau_batterie > capacite_max %}
          {{ capacite_max }}
        {% else %}
          {{ niveau_batterie }}
        {% endif %}

- platform: template
  sensors:
    puissance_pv_numeric:
      friendly_name: "Puissance PV (numérique)"
      unit_of_measurement: "W"  # Unité de mesure de la puissance
      value_template: >
        {% if states('sensor.puissance_pv_2') | is_number %}
          {{ states('sensor.puissance_pv_2') | float }}
        {% else %}
          0  # Valeur par défaut si la mesure n'est pas numérique
        {% endif %}

- platform: template
  sensors:
    tension_pv_corrigee:
      friendly_name: "Tension PV Corrigée"
      unit_of_measurement: "V"
      value_template: >
        {% set raw_value = states('sensor.tension_pv_2') %}
        {% set numeric_value = raw_value | regex_replace('[^0-9.]', '') | float(default=0) %}
        {% if numeric_value < 0 or numeric_value > 1000 %}
          0  # Valeur par défaut si hors des limites
        {% else %}
          {{ numeric_value }}
        {% endif %}

- platform: filter
  name: "Tension PV Filtrée"
  entity_id: sensor.tension_pv_corrigee  # Utilisation du capteur corrigé
  unique_id: "tension_pv_filtered"
  filters:
    - filter: range
      lower_bound: 0  # Ignore les valeurs négatives
      upper_bound: 1000  # Vous pouvez ajuster selon la plage réaliste

- platform: filter
  name: "Puissance PV Filtrée"
  entity_id: sensor.puissance_pv_numeric  # Utilise le capteur numérique filtré
  unique_id: "puissance_pv_filtered"
  filters:
    - filter: range
      lower_bound: 0  # Ignore les valeurs négatives

Super post, c’est juste ce que je cherchais, je suis aussi chez USE, mais je galère à mettre en place ton fichier (et à changer les sensor correspondants)
Si ce n’est pas trop abusé de te demander de détailler comment as-tu fait pour arriver au résultat

Salut

Qu’elle sensor n’arrive tu pas à modifier ou créer ?

Bonjour Bougnat63,
Je suis nouveau sur le forum et en venant proposer mon intégration, j’ai trouvé ton sujet et ta proposition qui fait la même chose.
Je me permets donc de te remercier pour ton inspiration involontaire, on dira que les grands esprits se rencontrent

Cordialement

Vincent