[Intégration]Urban Solar BV – Simulez une batterie virtuelle dans Home Assistant

:sun_with_face: ha_urbansolar_bv – Simulez une batterie virtuelle dans Home Assistant

Bonjour la communauté HACF :wave:,

Je vous présente une intégration que j’ai développée pour Home Assistant :
ha_urbansolar_bv, une solution pour simuler le comportement d’une batterie virtuelle, comme celle proposée par Urban Solar.


:dart: Objectif

Cette intégration permet de suivre précisément l’état de stock de votre batterie virtuelle (en kWh), en vous appuyant sur deux entités puissances :

  • :zap: Puissance de Production solaire (en kW)
  • :house: Puissance Consommée totale (en kW)

À partir de ces données, l’intégration :

  • Calcule les flux d’énergie : autoconsommation, surplus injecté, énergie importée,
  • Estime quotidiennement la charge/décharge de la batterie virtuelle,
  • Met à jour automatiquement son état de charge,
  • Permet des ajustements manuels du stock à tout moment,
  • Génère un dashboard Lovelace clé en main pour visualiser tous les flux d’énergie et l’état de la batterie.

:gear: Fonctionnalités

:white_check_mark: Configuration simple via l’UI (config_flow) :

  • Choix des capteurs de puissance (production solaire & consommation)

    Et rien d’autre !

:white_check_mark: Génération automatique :

  • Capteurs template modernes
  • Capteurs integration pour convertir les puissances en énergie
  • utility_meter pour suivre les flux d’énergie (quotidien, mensuel, etc.)
  • input_number pour simuler le niveau de batterie (stock kWh)
  • Automatisations pour calculer et mettre à jour la batterie

:white_check_mark: Dashboard Lovelace avec :

  • Carte energy-flow-card-plus
  • Carte power-flow-card-plus
  • Graphiques apexcharts-card
  • Vertical Stack In Card
  • Contrôle manuel du stock via number-box

:white_check_mark: Compatible avec tout fournisseur proposant des batteries virtuelles ou systèmes de compensation de surplus.


:camera_flash: Aperçu



1 « J'aime »

:hammer_and_wrench: Installation

Prérequis

  • Home Assistant (>=2024.4 recommandé)
  • HACS installé

Étapes :

  1. Ajoutez ce dépôt à HACS :
    https://github.com/chourmovs/ha-urbansolar-bv
  2. Installez l’intégration via HACS > Intégrations
  3. Redémarrez Home Assistant
  4. Allez dans Paramètres > Intégrations > Ajouter et sélectionnez Urban Solar Batterie Virtuelle
  5. Renseignez vos capteurs de puissance en kW(production & consommation)

:wrapped_gift: L’intégration nécessitera l’installation des dépots HACS suivant (Pas d’automatisation) :

  • apexcharts-card
  • number-box
  • energy-flow-card-plus
  • power-flow-card-plus
  • Vertical Stack In Card
  1. Ensuite, ajoutez dans votre configuration.yaml :
#Urban solar
input_number: !include urban_input_numbers.yaml
sensor: !include urban_integrations.yaml
template: !include urban_sensors.yaml
utility_meter: !include urban_utility_meters.yaml
automation: !include urban_automations.yaml

  1. créer un tableau de bord nommé Urban Solar dans la section dédiée avec le code yaml suivant
views:
- title: Urban
  sections:
  - type: grid
    cards:
    - type: custom:energy-flow-card-plus
      entities:
        battery:
          entity:
            production: sensor.urban_batterie_virtuelle_entree_horaire
            consumption: sensor.urban_batterie_virtuelle_sortie_horaire
          state_of_charge: input_number.urban_batterie_virtuelle_stock
          state_of_charge_unit: kwh
          use_metadata: false
        grid:
          entity:
            consumption: sensor.urban_energie_importee_enedis
          use_metadata: false
        home:
          entity: sensor.urban_energie_consommee_totale
          subtract_individual: false
          use_metadata: false
          override_state: true
        solar:
          entity: sensor.urban_energie_solaire_produite
      clickable_entities: true
      display_zero_lines: true
      use_new_flow_rate_model: true
      energy_date_selection: false
      wh_decimals: 1
      kwh_decimals: 0
      min_flow_rate: 1
      max_flow_rate: 6
      max_expected_energy: 2000
      min_expected_energy: 10
      wh_kwh_threshold: 1000
      title: Energy Flow Card
    - type: custom:apexcharts-card
      graph_span: 3d
      span:
        end: minute
      header:
        show: true
        title: Batterie Virtuelle
        show_states: true
        colorize_states: true
      series:
      - entity: input_number.urban_batterie_virtuelle_stock
        yaxis_id: first
        name: Stock batterie
        type: line
        group_by:
          duration: 0.5h
          func: last
        stroke_width: 3
      - entity: input_number.urban_batterie_virtuelle_pointage
        yaxis_id: first
        name: Pointage manuel
        type: line
        stroke_width: 3
        color: "#995000"
        show:
          in_chart: false
      yaxis:
      - id: first
        decimals: 1
        apex_config:
          tickAmount: 4

    - type: custom:power-flow-card-plus
      entities:
        battery:
          entity:
            consumption: sensor.urban_puissance_batterie_virtuelle_out
            production: sensor.urban_puissance_batterie_virtuelle_in
          state_of_charge: input_number.urban_batterie_virtuelle_stock
          display_state: one_way_no_zero
          state_of_charge_unit: kwh
          show_state_of_charge: true
          use_metadata: true
          color_circle: true
        grid:
          entity: sensor.urban_puissance_import_enedis
          display_state: one_way
          secondary_info: {}
        solar:
          entity: sensor.urban_puissance_solaire_instant
          display_zero_state: true
          secondary_info: {}
        home:
          secondary_info: {}
          entity: sensor.urban_conso_totale_instant
          override_state: true
      clickable_entities: true
      display_zero_lines: true
      use_new_flow_rate_model: true
      w_decimals: 0
      kw_decimals: 1
      min_flow_rate: 0.75
      max_flow_rate: 6
      max_expected_power: 2000
      min_expected_power: 0.01
      watt_threshold: 1000
      transparency_zero_lines: 0
      sort_individual_devices: false
      title: Power Flow Card

    - type: custom:apexcharts-card
      graph_span: 3d
      span:
        end: minute
      header:
        show: true
        title: Bilan energie réseau
        show_states: true
        colorize_states: true
      apex_config:
        chart:
          type: line
      series:
      - entity: sensor.urban_energie_restituee_au_reseau
        yaxis_id: first
        type: line
        color: green
        group_by:
          duration: 0.5d
          func: diff
        name: Variation quotidienne
      yaxis:
      - id: first
        decimals: 0
        apex_config:
          tickAmount: 4
    - type: custom:apexcharts-card
      graph_span: 3day
      span:
        end: minute
      header:
        show: true
        title: Batterie Virtuelle - Flux Horaire
        show_states: true
        colorize_states: true
      apex_config:
        chart:
          type: area
        stroke:
          curve: smooth
      series:
      - entity: input_number.urban_energie_battery_in_hourly
        yaxis_id: first
        name: Entrée Batterie (IN)
        type: line
        color: "#00C853"
        stroke_width: 3
        group_by:
          duration: 1h
          func: avg
      - entity: input_number.urban_energie_battery_out_hourly
        name: Sortie Batterie (OUT)
        yaxis_id: first
        type: line
        color: "#D50000"
        stroke_width: 3
        group_by:
          duration: 1h
          func: avg
      - entity: sensor.urban_energie_restituee_au_reseau_hourly
        name: Bilan energie
        yaxis_id: second
        type: line
        color: yellow
        stroke_width: 1
        group_by:
          duration: 1h
          func: avg
      yaxis:
      - id: first
        decimals: 1
        apex_config:
          tickAmount: 4
      - id: second
        opposite: true
        decimals: 1
        apex_config:
          tickAmount: 4
    - type: custom:vertical-stack-in-card
      cards:
      - type: entities
        entities:
        - entity: sensor.urban_energie_restituee_au_reseau_hourly
          name: Variation horaire
        - entity: sensor.urban_batterie_virtuelle_entree_horaire
          secondary_info: none
          name: "Batt in pour dashboard energy "
        - entity: sensor.urban_batterie_virtuelle_sortie_horaire
          name: Batt out pour dashboard energy
        title: Index horaire et sensor horaire
        grid_options:
          columns: 12
          rows: 6
        state_color: true
      - type: custom:vertical-stack-in-card
        title: Batterie Virtuelle (kWh)
        cards:
        - type: custom:numberbox-card
          entity: input_number.urban_batterie_virtuelle_pointage
          name: "Pointage manuel "
          icon: mdi:target
          min: 0
          max: 100
          step: 0.1
          unit: kWh
          style: |
            ha-card {
              margin-bottom: 8px;
            }
          secondary_info: à date de facture
          border: true
        - type: custom:numberbox-card
          entity: input_number.urban_batterie_virtuelle_stock
          name: Stock calculé
          icon: mdi:battery
          min: -100
          max: 200
          step: 0.1
          unit: kWh
          border: false
    column_span: 3
  - type: grid
    cards:
    - type: heading
      heading_style: title
    column_span: 2
  cards: []
  type: sections
  max_columns: 3
  dense_section_placement: false
 
  1. Et redemarrer HA pour bénéficier d’un nouveau dashboard Urban Solar


:speech_balloon: Pourquoi cette intégration ?

Home Assistant permet de suivre les flux d’énergie, mais il manquait un outil pour simuler une batterie virtuelle personnalisée.
Cette intégration permet :

  • de mieux comprendre votre autoconsommation réelle vs simulée,
  • de valoriser vos surplus de production,
  • d’avoir un suivi réaliste de votre batterie virtuelle, même sans batterie physique.

:link: Liens


:folded_hands: Remerciements & contributions

Vos retours sont les bienvenus !
Si vous testez l’intégration, n’hésitez pas à signaler bugs, suggestions ou à proposer des PR.


Merci à la communauté HACF pour son travail et son inspiration ! :battery::high_voltage:
@chourmovschourmovs

Je testerai et ferai un retour à l’occasion,

Vous pouvez peut être regarder sur mes template et mon sujet là partie, calcul et achat réseau quand la batterie est vide, en place dans la partie énergie c’est top.

1 « J'aime »

Normalement j’ai déjà la logique qui tient compte du niveau de batterie pour tirer sur le réseau ou non, mais je regarderai avec plaisir

Hello,

Fraîchement équipé de panneaux solaires en attendant l’activation de ma batterie virtuelle je recherche le meilleur système pour arriver à ce que je cherche :blush:

Votre intégration me paraît tout indiqué mais je n’arrive malheureusement pas à l’installer, la partie HACS fonctionne bien mais une fois dans la

partie intégration rien de disponible. J’ai bien redémarré même désinstallé dans HACS et réinstaller mais toujours rien.

Merci d’avance pour votre aide.


Salut,

J’avis raté le sujet, et je me pose une question.
Quitte à simuler la batterie, on peut aussi ajouter une simulation de panneaux GitHub - rany2/ha-open-meteo-solar-forecast: Home Assistant Open-Meteo Solar Forecast Integration ?
ça ferai une belle maquette avant de se lancer

Oui ça fonctionne je l’ai fait :wink:
Maintenant me reste plus qu’à trouver a comment bien faire fonctionner la batterie virtuelle :blush:

1 « J'aime »

Pas si compliqué, mais il y a un peu plus de corrections à faire sur les noms


Pour info, passer par un package ça permet d’ajouter plus facilement que les include quand il existent déjà

Je ne sais pas trop c’est sensé marcher, et ça marche chez moi

Bien lire les 2 OT et installer les dependances🙏
‘‘‘
#Urban solar
input_number: !include urban_input_numbers.yaml
sensor: !include urban_integrations.yaml
template: !include urban_sensors.yaml
utility_meter: !include urban_utility_meters.yaml
automation: !include urban_automations.yaml

lovelace:
mode: yaml
resources:
- url: /hacsfiles/apexcharts-card/apexcharts-card.js
type: module
- url: /hacsfiles/vertical-stack-in-card/vertical-stack-in-card.js
type: module
- url: /hacsfiles/numberbox-card/numberbox-card.js
type: module
- url: /hacsfiles/power-flow-card-plus/power-flow-card-plus.js
type: module
- url: /hacsfiles/energy-flow-card-plus/energy-flow-card-plus.js
type: module

dashboards:
urban-dashboard:
title: Urban Solar Dashboard
mode: yaml
filename: urban_dashboard.yaml
‘‘‘

Oui c’est pas ça le souci :wink:

J’ai proposé une amélioration de cette intégration de rany pour info, SunForecast plus, je comprends ton point c’est intéressant

1 « J'aime »

Je veux bien que tu développes dans ce cas s il te plaît

Il me manque la partie conso (pas de linky, mais je vais me bricoler un truc en attendant), du coup pas moyen de finaliser correctement la batterie virtuelle.
Et donc toutes les entités ne sont pas encore créées

Sinon en terme d’intégration, on peut :

  • Passer par hacs pour installer les dépendances
  • Inclure des packages (j’ai viré les fichiers vides). Il faut par contre préfixer les fichiers avec le bon type d’entité
homeassistant:
  packages:
    urbansolar_battery_input_number: !include yaml_entities/packages/urbansolar_battery/input_numbers.yaml
    urbansolar_battery_utility_meter: !include yaml_entities/packages/urbansolar_battery/utility_meters.yaml
    urbansolar_battery_automation: !include yaml_entities/packages/urbansolar_battery/automations.yaml
  • la partie dashboard, copiée/collée dans une carte vierge quand on est pas en mode yaml
1 « J'aime »

Je veux bien te croire :blush: mais chez moi impossible.
Je vais essayer de nouveau. Temps que je ne peux pas installer l’intégration je ne pourrai pas aller plus loin :blush:

La déclaration dans le fichier de configuration peut-elle être réalisée à n’importe quel endroit du fichier ?

J’ai pris le parti de passer par les mesures de puissances généralement disponible avec les installations solaires, j aurai pu faire avec linky aussi mais maintenant ça changerait trop le scope de l 'intégration si je voulais adapter. A voir plus tard

A piori oui, a fortiori ça se tente :wink:

la partie avec le lovelace vous l’intégrez également dans le fichier de config?
Dès que je le fais j’ai des erreurs sur mes vues

Voici ma config a titre d exemple

default_config:

frontend:
themes: !include_dir_merge_named themes
script: !include scripts.yaml
scene: !include scenes.yaml
automation: !include automations.yaml

http:
use_x_forwarded_for: true
trusted_proxies:
- 127.0.0.1
- ::1
- 192.168.1.85
ip_ban_enabled: true
login_attempts_threshold: 5

logger:
default: info
logs:
custom_components.ha_sunforecast_plus: debug
custom_components.ha_sunforecast_plus.data_update_coordinator: debug

Urban Solar

input_number: !include urban_input_numbers.yaml
template: !include urban_sensors.yaml
utility_meter: !include urban_utility_meters.yaml
automation urban: !include urban_automations.yaml
sensor: !include urban_integrations.yaml

lovelace:
mode: yaml
resources:
- url: /hacsfiles/apexcharts-card/apexcharts-card.js
type: module
- url: /hacsfiles/vertical-stack-in-card/vertical-stack-in-card.js
type: module
- url: /hacsfiles/numberbox-card/numberbox-card.js
type: module
- url: /hacsfiles/power-flow-card-plus/power-flow-card-plus.js
type: module
- url: /hacsfiles/energy-flow-card-plus/energy-flow-card-plus.js
type: module
- url: /hacsfiles/weather-radar-card/weather-radar-card.js
type: module
- url: /hacsfiles/energy-period-selector-plus/energy-period-selector-plus.js
type: module

dashboards:
urban-dashboard:
title: Urban Solar Dashboard
mode: yaml
filename: urban_dashboard.yaml

bien rajouter le suffixe urban a automation ou sensor … etc si des automations ou autres sont déjà presentes pour que les deux configs ne rentrent pas en conflit