Intégration Solar Optimizer - Optimisation de sa consommation Solaire

J’ai commencé par me créer une entrée qui compte le temps durant lequel mon switch Chaffe-eau est ‹ ON › durant le jour:

- platform: history_stats
  type: time
  name: "duree_on_CE_jour"
  entity_id: switch.ce
  state: "on"
  start: "{{ now().replace(hour=7, minute=0, second=0) }}"
  end: "{{ now().replace(hour=21, minute=0, second=0) }}"

Ce compteur sera remis à 0 tous les matins à 7h

Dans la partie SO, j’ai utilisé la variable check_usable_template
check_usable_template: "{{ state('sensor.import_export_power') | | float(0) - state('sensor.conso_ce') | float(0) < -2500 and states('sensor.duree_on_ce_jour') | float(0) < 1.5 }}"
La première condition me permet de savoir si la production dispo pour le CE est d’au moins 2500W, la seconde me permet de limiter le temps de chauffe à 1h30, en général mon chauffe eau est bon au bout de 50mn mais je laisse un peu de marge au cas où il y ai eu plus de douche et de vaisselle :slight_smile:

et enfin avec le module scheduler-card, je me suis ajouté une prog du CE en heure creuse:
image

image

Comme tu peux le voir sur l’image ci dessus, j’ai mis une condition indiquant que si la variable Duree On CE est supérieure à 1h30mn, le programme ne se lance pas

La prochaine étape de ma prog va être de détecter lorsque l’interrupteur est allumé, le changement de conso de 3KW à 0. Ca m’indiquera que l’eau est à la température voulu et que je n’ai plus besoin de l’allumé pour la journée. Je serai au plus proche des besoin réel de conso et ma prod solaire sera dispo pour autre chose.

Bonne journée

Alors,
J’ai encore modifié le fonctionnement avec ce que je décris dans mon précédent post.

J’ai créer une entrée bool ‹ CE temp OK › :
image

Puis une automatisation sur mon chauffe-eau qui va détecter quand la puissance consommée descend en dessous de 100W pendant 5mn si l’interrupteur CE est sur ‹ on ›:


quand ces conditions sont rencontrées, il bascule alors le booléen ‹ CE temp OK › à on:

J’ai du coup modifier dans SO la valeur du paramètre ‹ check_usable_template ›
check_usable_template: "{{ state('sensor.import_export_power') | | float(0) - state('sensor.conso_ce') | float(0) < -2500 and is_state('binary_sensor.bool_ce', 'off') }}"

J’ai modifier mon automatisation HP/HC pour qu’il vérifie ce même bool le soir, si il est désactivé, le chauffe eau s’enclenche en HC:

Et enfin, j’ai ajouter une autre automatisation pour rebasculer tous les matin à 7h le booléen à désactivé:

Voilà, j’espère que cela vous aidera
Bonne journée

1 « J'aime »

Bien joué @ritonls merci pour toutes ces infos précieuses ca me semble très clair

Hello @ritonls ,

Merci pour ces beaux exemples et cette belle intégration dans le reste de l’écosystème HA. Ravi de voir que ça fonctionne comme prévu !

1 « J'aime »

Bonjour à tous et à toutes,
Tout d’abord merci @Jean-Marc_Collin pour tout le boulot sur cette intégration et sur le partage !

Je débute sur ce forum et sur Home Assistant. J’ai opté pour HA pour gérer l’installation photovoltaïque d’un petit hôtel en Alsace. J’ai 19kWc de panneaux, et 7 chauffe eau branchés sur des prises contrôlées dans plusieurs bâtiments, et une voiture électrique à recharger.

A la suite de la lecture de ce fil, je vois que le Solar Optimizer serait une bonne solution pour gérer mon autoconsommation, mais je revient sur une question qui a été posée : est-il possible de prioriser certains équipements par rapport à d’autres ?

Par exemple, j’ai trois ballons en série dans un bâtiment : il faudrait pouvoir les allumer « dans l’ordre » : d’abord celui le plus proche de la sortie, puis celui du milieu et enfin le premier de la chaîne.
Serait-ce possible en l’état ?

Merci pour vos réponses !

Si vous avez besoin de plus de détails sur l’installation je peux vous en fournir ! :slight_smile:

Bonjour toujours pas. C’est une evol intéressante mais pas implémentée par manque de temps.
Y a moyen d’implémenter ses propres règles avec le template ‹ check_usable › mais faut dev un peu

Bonjour a tous
J’en profite pour te remercier @Jean-Marc_Collin pour cette fabuleuse intégration, je te suis depuis quelques années avec thermostat Versatile qui est génial, je savais que je n’allais pas être déçu

Aussi j’ai besoin de votre aide,
je galère vraiment sur l’installation de la carte SO, j’ai beau lire le forum de long en large, je ne comprends pas mon erreur!

  • J’ai bien installé decluttering-card depuis HACS:

  • Copier le code dans l’éditeur de configuration tout en haut du Dashboard que je veux utiliser:

  • J’ai cru comprendre grâce @FuReT qu’il fallait installer également « lovelace-expander-card » mais je n’y ai vu aucune différence!

Mais voici mon erreur, je n‘ai plus aucune idée !!
La carte ne veut pas chez moi:

Voici le code copié de l’exemple de @Jean-Marc_Collin au début de ce forum adapté à ma carte chauffe-eau:


type: vertical-stack
cards:
  - type: custom:decluttering-card
    template: managed_device
    variables:
      - device: switch.solar_optimizer_chauffe_eau
      - secondary_infos: '{{ states(''sensor.shelly_chauffe_eau_power'') }} W'
      - icon: mdi:power-socket-fr
      - enable_entity: >-
          switch.enable_solar_optimizer_chauffe_eau

Faut il modifier le code du Dashboard? c’est la seule chose que je n’ai pas touché?

Merci a tous ceux qui prendrons le temps de m’aider si vous avez des exemples de code de vos cartes avec switch, je suis preneur
Merci d’avance

1 « J'aime »

Est-ce que il ne te manquerait pas Mushroom ?
Capture d’écran 2024-09-10 à 16.19.21

Oh purée je me sent tellement nul
Merci bcp @Jean-Marc_Collin
Ça fait plaisir

Aussi j’aimerais en profiter pour te poser quelques questions si tu es d’accord j’ai cru comprendre que tu étais bien occupé ? (Je comprendrais auquel cas)
J’ai comme toi l’intégration Emphase et je me demandais pourquoi tu as crée tous ces templates pour ta configuration alors que les entités sont dispo directement depuis l’intégration emphase?


sensor:
    - name: "Total puissance consommée instantanée (W)"
      unique_id: total_power_consomme_w
      device_class: power
      unit_of_measurement: "W"
      state_class: measurement
      state: >
        {% set power = states('sensor.envoy_122307065303_current_power_consumption') | float(default=-1.0) %}
        {% if power < 0 %}0{% else %}
          {{ power | round(2) }}
        {% endif %}

   - name: "Total puissance produite instantanée (W)"
      icon: mdi:solar-power-variant
      unique_id: total_power_produite_w
      device_class: power
      unit_of_measurement: "W"
      state_class: measurement
      state: >
        {% set power = states('sensor.envoy_122307065303_current_power_production') | float(default=-1.0) %}
        {% if power < 0 %}0{% else %}
          {{ power | round(2) }}
        {% endif %}

    - name: "Total puissance produite instantanée"
      icon: mdi:solar-power-variant
      unique_id: total_power_produite
      unit_of_measurement: "kW"
      state_class: measurement
      state: >
        {% set power = states('sensor.total_puissance_produite_instantanee_w') | float(default=-1.0) %}
        {% if power < 0 %}{{none}}{% else %}
          {{ (power / 1000) | round(2) }}
        {% endif %}
    - name: "Total puissance importée instantanée (W)"
      icon: mdi:transmission-tower-import
      unique_id: total_power_importee_w
      unit_of_measurement: "W"
      device_class: power
      state_class: measurement
      state: >
        {% set consommation = states('sensor.envoy_122307065303_current_power_consumption') | float(default=0) %}
        {% set production = states('sensor.envoy_122307065303_current_power_production') | float(default=0) %}
        {% if consommation < 0 or production < 0 %}{{none}}{% else %}
          {% set delta = (consommation - production) | round(2) %}
          {% if delta > 0 %}
             {{ delta }}
          {% else %}
             {{ 0.0 }}
          {% endif %}
        {% endif %}
    - name: "Total puissance exportée instantanée (W)"
      icon: mdi:transmission-tower-export
      unique_id: total_power_exportee_w
      unit_of_measurement: "W"
      device_class: power
      state_class: measurement
      state: >
        {% set consommation = states('sensor.envoy_122307065303_current_power_consumption') | float(default=0) %}
        {% set production = states('sensor.envoy_122307065303_current_power_production') | float(default=0) %}
        {% if consommation < 0 or production < 0  %}{{none}}{% else %}
          {% set delta = (consommation - production) | round(2) %}
          {% if delta < 0 %}
             {{ -delta }}
          {% else %}
             {{ 0.0 }}
          {% endif %}
        {% endif %}
    - name: "Total puissance importée instantanée"
      icon: mdi:transmission-tower-import
      unique_id: total_power_importee
      unit_of_measurement: "kW"
      device_class: power
      state_class: measurement
      state: >
        {% set power = states('sensor.total_puissance_importee_instantanee_w') | float(default=-1.0) %}
        {% if power < 0 %}{{none}}{% else %}
          {{ (power / 1000) | round(2) }}
        {% endif %}

    - name: "Total puissance consommée net instantanée (W)"
      unique_id: total_power_consommee_net_w
      unit_of_measurement: "W"
      device_class: power
      state_class: measurement
      state: >
        {% set importe = states('sensor.total_puissance_importee_instantanee_w') | float(default=-1.0) %}
        {% set exporte = states('sensor.total_puissance_exportee_instantanee_w') | float(default=-1.0) %}
        {% if importe < 0 or exporte < 0  %}{{none}}{% else %}
          {% set delta = (importe - exporte) | round(2) %}
             {{ delta }}
        {% endif %}

Dans ma configuration j’ai pris « Envoy Current net Power consumption »
Tu me confirmes que c’est bien l’équivalent chez toi « Total puissance consommée net instantanée »?

2ème question concerne la désactivation des switch géré par SO. Si je comprends bien ça dépend du « best objective »?
Car sur les 1er graphe, on voit bien le switch ce désactivé après une perte de production à 3848w (j’ai aussi la chauffe du spa comptabilisé dans l’algo) à 11:07 pour 39,91e d’objectif


Sur le 2ème graphe, on voit la production descendre petit à petit jusqu’à 458w et seulement a ce niveau la le switch se désactive à 24,79e d’objectif (et ce phénomène apparait tous les soirs, comme si l’algo prenais en compte que la prod baissait doucement, en tout cas ça me semble moins net quand un nuage passe dans la matinée)


Histoire de mieux comprendre comment marche SO,
mon chauffe-eau a une puissance de 2400w, la chauffe du spa de 2200w, l’un comme l’autre je voudrais que ça switch quand je n’ai pas cette puissance de production
Dois-je jouer sur la configuration du prix de vente et le prix de consommation? Mais dans quel sens? Je dois les augmenter ou les diminuer? Ou plus diminuer l’un par rapport a l’autre?

Et du coup a quoi correspondent ces gros chiffre du best objectif c’est cohérent?
c’est vraiment les économies réalisées? je vois du 1500euros tous les jours, ça me parait bizarre?
J’ai mis mon prix de revente à 0,13 (centime kWh) et celui d’achat correspondant à mes heures creuses à 0,27 (centime kWh) mais ce n’est peux être pas ce qu’attend solar optimizer?
Enfin ce que je veux dire ce n’est peut être par des centimes :slight_smile:

Salut Jean Marc,
Encore un beau projet qui va te prendre beaucoup de temps :smile:.
Je suis justement en train de voir pour équiper mon toit de pv de 3wkc et j’hésite encore entre un OC ou des MO enphase.

Ton plugin a l’air bien par contre avec un cumulus électronique pas sur qu’il aimera les multiples coupure.

Le plugin aura surement bien avancé d’ici que je sois équipé.

Bonjour à tous,
J’essaye en vain d’installer Solar Optimizer mais je bloque… Après avoir entré les entités, l’intégration refuse de charger.
Voici ce que j’obtiens dans les journaux :

Enregistreur: homeassistant.setup
Source: setup.py:416
S'est produit pour la première fois: 22:28:13 (1 occurrences)
Dernier enregistrement: 22:28:13

Error during setup of component solar_optimizer
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/setup.py", line 416, in _async_setup_component
    result = await task
             ^^^^^^^^^^
  File "/config/custom_components/solar_optimizer/__init__.py", line 109, in async_setup
    hass.data[DOMAIN]["coordinator"] = coordinator = SolarOptimizerCoordinator(
                                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/solar_optimizer/coordinator.py", line 64, in __init__
    raise err
  File "/config/custom_components/solar_optimizer/coordinator.py", line 56, in __init__
    for _, device in enumerate(config.get("devices")):
                               ^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'

Merci pour votre aide !

Hello @AndAriel

Je n’ai pas tout ce que je veux (consommée, importée, exportée, consommé net…) avec la gestion du 0, des indispos propres en cas de valeur négatives et/ou absente. Mais ce n’est pas indispensable on est d’accord.

La deuxième raison, c’est que j’aime bien être indépendant des devices. Je fais ça aussi pour les mesures des puissances/énergies des radiateurs. Si je change le device (ça m’arrive assez souvent), je ne perds pas la valeur.

Je ne sais pas si ça fait exactement pareil.

Oui l’algo calcule une fonction de cout et essaye de la minimiser. Le « best_objective » est la valeur de cette fonction de cout. Elle n’a pas de réalité tangible (ce ne sont pas vraiment des euros typiquement mais des kw€). Lorsqu’elle est à 0, il n’y a aucun export ni import d’électricité et c’est l’objectif a atteindre par SO. Plus la valeur est élevée et moins l’algo arrive à optimiser le solaire produit (ca importe ou ca exporte). Après c’est la toutouille interne et tu ne devrais pas la gérer du tout. Elle est donnée mais plus pour info ou diag.

Non, ca doit être fixe et réaliste par rapport à tes couts. Pour éteindre le chauffe-eau ou le SPA quand la production n’est pas suffisante, SO fait ça tout seul si tu spécifies la puissance de ces eqts. Il ne devrait pas y avoir de difficultés.

J’espère que c’est plus clair.

Hello @sebr ,

Oui en cas de carte électronique sur le cumulus, il vaut mieux éviter de lui couper le jus régulièrement. Il parait que ca finit par fatiguer l’électronique. Sur un cumulus un peu plus roots pas de soucis.

J’ai un thermodynamique Atlantic avec une prise solaire. Donc, je commande cette prise solaire en cas de suprlus mais je ne coupe jamais le thermo lui même.

Hello @nicolas_lefranc,

Je pense que ta configuration dans le configuration.yaml est fausse. Tu peux la poster ?

Bonjour @Campashi
Tu as utilisé quoi comme carte pour avoir ton chauffe-eau et ta pompe a chaleur sur ton Dashboard?
J’aimerais également créé une carte conso/prod instantée en voyant l’énergie se déplacer vers mon chauffe eau ou vers mon SPA
Peux tu m’aider ou quelqu’un qui touche en carte Dashboard?

@AndAriel

Qu’est ce que tu veux savoir exactement ?

Comment je fais remonter la consommation dans HA ?