Intégration Solar Optimizer - Optimisation de sa consommation Solaire

Hello je tourne autour de cette intégration depuis un moment que je trouve vraiment excellente :wink: Merci
Par contre sur mon installation photovoltaique Huawei le sensor de consommation nette est inversé par rapport à ce que tu demandes, chez moi il est negatif quand ma conso est superieure a ma production.


image
Que penses-tu le plus judicieux pour pallier cela ?
Pour ma part les appareils permettant de délester seront la tesla (que je pilote via du node red pour l’instant) un thermodynamique Atlantic qui a une entrée pour un contact sec indiquant le solaire et un autre ballon classique Atlantic aussi (qui dispose également de cette même entrée). À creuser encore pour le lancement du lave linge connecté Samsung.
Merci

Bonjour !
Si je ne me trompe pas le contact sec est juste un interrupteur.
Il faut juste le relier le contact sec du groupe électrogène a un interrupteur on off.

J me gourre complètement ou ça a du sens ?

Après est ce que les paramètres que j ai décrit ( heure, ensoleillement et niveau des batteries) peuvent être utilisés comme informations pour commander le Switch… Ça c était ma question :wink:

Le mieux est de se faire des sensor template si l’info est pas nativement disponible.
J’ai fait ça pour ma part, si ça peut aider:

- 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 consommee instantanée"
      unique_id: total_power_consommee
      unit_of_measurement: "kW"
      state_class: measurement
      state: >
        {% set power = states('sensor.total_puissance_consommee_instantanee_w') | float(default=-1.0) %}
        {% if power < 0 %}{{none}}{% else %}
          {{ (power / 1000) | 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 exportée instantanée"
      icon: mdi:transmission-tower-import
      unique_id: total_power_exportee
      unit_of_measurement: "kW"
      state_class: measurement
      state: >
        {% set power = states('sensor.total_puissance_exportee_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 %}
    - name: "Total puissance consommée net instantanée"
      unique_id: total_power_consommee_net
      unit_of_measurement: "kW"
      device_class: power
      state_class: measurement
      state: >
        {% set importe = states('sensor.total_puissance_importee_instantanee') | float(default=-1.0) %}
        {% set exporte = states('sensor.total_puissance_exportee_instantanee') | float(default=-1.0) %}
        {% if importe < 0 or exporte < 0  %}{{none}}{% else %}
          {% set delta = (importe - exporte) | round(2) %}
             {{ delta }}
        {% endif %}

J’ai tous les sensors dispos en W en Kw, en instantané, …

Et ça gère proprement les indispos de ces capteurs (la nuit par exemple).

1 « J'aime »

Désolé, j’ai beau relire ton post initial et je ne comprends pas ce que tu veux faire avec un groupe électrogène, un onduleur, des batteries, du solaire, …

Donc aucune garantie que ça va répondre. Le mieux est certainement d’essayer de toutes façons ça ne casse rien : ca vient par dessus une installation existante et ça automatise des bascules de switch.

Hehehe désolé si je suis pas claire et merci pour tes réponses :wink:

Peut etre que l info qu il te manque c est que je suis off grid… Je dépend complètement de mon groupe électrogène pour recharger mes batteries et c est là que le bas blesse… l onduleur (qui a une option de démarrage du groupe électrogène) n est pas assez fiable a mon gout…

Mais en effet je ne perd rien a essayé ! Je te dirais si ça a marché :wink:

Merci encore !

1 « J'aime »

C’est encore un tres beau travail de ta part.

Comme tu l’a dit il faut du matériel pouvant etre piloté en consommation.

Pour le moment le routeur garde l’avantage mais je vais suivre ca de près.

Merci encore

C’est complémentaire à un router. Tu gardes le routeur et ça peut servir pour tout le reste switch, etc.
Si le routeur ne prend pas tout ou si c’est plus intéressant de mettre un peu moins dans le routeur et d’activer des trucs par ailleurs pour optimiser la conso, c’est là que c’est utile.

1 « J'aime »

Oui oui pour ceux qui n’ont qu’une sortie sur le routeur ou une fois que le ballon a chauffé. J’avais pas vu cette option.

Merci encore pour ton travail

Pas de soucis, je le fais pour moi en fait :wink: et je partage si ca peut aider d’autres.

1 « J'aime »

Bonjour, je débute depuis hier dans le photovoltaique avec un APS ECU-C, comment obtenir ce genre d’interface dans le dashboard Energie svp ? A ce jour je n’ai que la conso et la production via le graph en barres, mais pas les compteurs de conso nette / auto conso et autosuffisance

Merci !

Hello, j’ai l’impression que ta question n’a aucun rapport avec l’intégration Solar Optimizer. Donc il vaut créer un thread séparé.

Et si tu cherches un peu je penses que cette question (chercher dashboard energie) a déjà été répondue plein de fois.

1 « J'aime »

Bonjour,

Tout d’abord merci de partager cet excellent travail de même que tes autres articles en particulier tes tutoriels sur le développement d’add-on.
J’ai étudié ton intégration pour mon propre usage et je me heurte à plusieurs obstacles :
1/ la prise en compte d’une tarification variable de l’électricité en l’occurence Tempo
2/ la gestion des cycles de filtration d’une piscine. Pour mon cas il faudrait plusieurs cycles étalés dans la journée dont la durée et le nombre sont fonction de la température de l’eau. Comment entrer des données qui changent d’un jour à l’autre ?
L’idée serait peut être d’injecter dans ton intégration à partir d’une appli séparée une demande de cycle au fur et a mesure de la journée. Le cycle serait alors défini dès le départ avec une puissance et une durée fixe. Reste à savoir comment envoyer ces demandes successives.
3/ j’ai un routeur sur mon chauffe eau. Je peux récupérer en temps réel la puissance délivrée pour la rajouter a la puissance exportée afin d’avoir une évaluation correcte de la puissance disponible. Le routeur s’arrêtera de lui même si ton intégration prend toute la puissance disponible.
Une autre solution serait de piloter directement le routeur au moyen de ton intégration en lui envoyant la puissance qu’il peut délivrer. J’ai les sources du routeur et je peux faire ce type d’adaptation.
Quelle serait la meilleure option ?
Je peux participer aux extensions si tu vois des solutions.
Merci d’avance

Hello @germam,

J’ai le même soucis et j’ai un input_number qui stocke le prix courant. Cet input_number est mis en entrée de l’entité prix courant. Après encore une fois, c’est pas l’info la plus déterminante pour l’algo.

2/ la gestion des cycles de filtration d’une piscine. Pour mon cas il faudrait plusieurs cycles étalés dans la journée dont la durée et le nombre sont fonction de la température de l’eau. Comment entrer des données qui changent d’un jour à l’autre ?

Pour l’instant, tout ce que tu peux faire c’est piloter l’entité qui donne la dispo du switch pour l’algo. Elle s’appelle is_enabled je crois.

Une autre solution serait de piloter directement le routeur au moyen de ton intégration

Ca existe (regarde les exemples sur le pilotage d’une Tesla. C’est le même principe.

Merci pour ta réponse.
Je réfléchis à reprendre tes sources pour faire y les aménagements nécessaires. Bien sûr, je te ferai parvenir les modifications si j aboutis à un résultat.
Je pense que l on pourrait aussi diminuer le seuil de mise en route d un appareil en prenant en compte le rapport prix Hc / prix Hp
Pseuil = Pappareil * (1 - prix HC / prix HP)
L idée étant que si la production solaire est inférieure à la puissance de l appareil,il est toujours rentable de le faire fonctionner en Hp si le coût de revient de la puissance manquante en HP est inférieure au coût total de fonctionnement en HC.

Bonjour,

Merci pour cet excellent travail, suite a la pose d’une installation PV c’est exactement ce que je cherchais pour la recharge de mon ve avec surplus. Mon vehicule est une tesla et je charge avec un wall connector donc j’ai largement copié votre exemple mais debutant sous HA il y a quelques points dont je ne suis pas sur:

name: "Tesla Recharge"
     entity_id: "switch.cloucloute_charger"
     # The minimum load power is 660 W (i.e. 1 Amp because convert_power_divide_factor=660 too)
     power_min: 660
     # The minimum load power is 3960 W (i.e. 5 Amp (= 3960/600) )
     power_max: 3960
     # the step of 660 or 1 Amp after division by convert_power_divide_factor
     power_step: 660

Avec ces commandes ont dit que la charge peut commencer avec 1 ampere de surplus et n’ira pas au dela de 5 Amperes? Car il me semblait que les Tesla debutent peuvent commencer a charger avec 5 ampere mini. Cela veut aussi dire que je ne chargerai jamais a plus de 5 amperes ? Car avec 8 kWc je pense que j’aurais parfois plus de surplus.

Autre question synthaxique :
binary_sensor.tesla_wall_connector_vehicle_connected’, ‹ on ›) and is_state(‹ binary_sensor.tesla_charger ›, ‹ on ›)
HA m’indique l’intitulé en francais: Tesla Wall Connector Véhicule connecté Débranché, je dois mettre en francais ou ca fonctionnera quand meme?

Désolé si mes question paraissent bêtes mais je débute :sweat_smile:

Hello @Ary ,

Y a pas de questions bêtes quand on démarre.

les Tesla debutent peuvent commencer a charger avec 5 ampere mini

Sur l’app oui mais par l’API on peut descendre jusqu’à 1 A. Comme je suis en triphasé, chez moi, ca fait 1A / phase donc 3A en fait.

Cela veut aussi dire que je ne chargerai jamais a plus de 5 amperes ?

J’ai mis 3960 car c’est la puissance max de mes panneaux solaires. Si tu as 8000, ben mets 8000.

Avec mes 3960Wc, je ne chargerais jamais plus que 5A / phase. Libre à toi de mettre plus bien sur.
Si tu as 8kWc en mono-phasé (tu ne me l’as pas dit), ca fait : 8000 W / 220 V = 36 A. Donc tu peux mettre 32A, si ta bornes Tesla va jusque là.
Si tu en en tri-phasé, ca fait 36A/3 → 12 A.

Car avec 8 kWc je pense que j’aurais parfois plus de surplus.

Oui l’été tu devrais charger à fond.

binary_sensor.tesla_wall_connector_vehicle_connected’, ‹ on ›) and is_state(‹ binary_sensor.tesla_charger ›, ‹ on ›)

Sur la forme, quand tu mets du code, utilises la balise </> de l’éditeur autour du code pour le mettre en forme sinon on loupe les erreurs de syntaxes.

Sur le fond, ce bout de code veut dire:
si le connecteur de mon Wall chargeur me dit qu’un vehicule est connecté ET que la Tesla est branchée. (J’ai une deuxième voiture électrique aussi mais dont la puissance de charge n’est pas pilotable).

binary_sensor.tesla_wall_connector_vehicle_connected c’est une entité de mon TWC (Tesla Wall Charger) intégré a HA et binary_sensor.tesla_charger c’est l’entité de la Tesla qui dit qu’elle est connecté. Tu dois avoir l’équivalent de ton coté, il faut que tu regardes dans les entités liées à tes équipements TWC et Tesla.

Merci pour tes explications. Je suis en monophasé effectivement avec un wall connector aussi.
Du coup ca me donne:

algorithm:
  initial_temp: 1000
  min_temp: 0.1
  cooling_factor: 0.95
  max_iteration_number: 1000
devices:
  - name: "Tesla Model Y"
    entity_id: "switch.model_y_charger"
    power_min: 660
    power_max: 7400
    power_step: 660
    check_usable_template: "{{ is_state('binary_sensor.tesla_wall_connector_vehicule_connecte', 'Branché') }}"
    duration_min: 45
    duration_stop_min: 15
    power_entity_id: "number.tesla_charging_amps"
    duration_power_min: 5
    action_mode: "service_call"
    activation_service: "switch/turn_on"
    deactivation_service: "switch/turn_off"
    change_power_service: "number/set_value"
    convert_power_divide_factor: 660
  • Power min: J’ai mis 1 ampere pour tester demain, vu la saison je n’aurais pas beaucoup plus de surplus le matin mais je mettrais 3300 apres (5 amperes)
  • check_usable_template: j’ai le même sensor que toi mais dans HA il est en français donc j’ai recopier betement ce que j’avais. Faut que je verifie apres branchement que c’est bien « Branché » car actuellement il est pas branché et j’ai écrit « Debranché ». Je n’ai pas d’autre VE donc je n’ai pas voulu compliqué le truc.

Petite question : on peut laisser le debut de charge programmé en HC? Dans mon cas 23 heures, me semble que c’est la seule securité (avec celle de la definition des heures creuses dans le wall connector) pour pas que ca lance immediatement quand je branche.

Je test ça demain :pray:

En monophasé 1 A ca donne 220 w. (220 v x 1 A = 220 w)

on peut laisser le debut de charge programmé en HC? Dans mon cas 23 heure

A 23 h tu devrais avoir beaucoup moins de production solaire

Bon l’essai a tourner court car j’avais pas remarquer que l’integration Tesla custom integration ne donne plus acces aux switch et differentes actions. Il faut avoir une autre api de type Tessie Teslafi qui a un acces payant :frowning:

Comment ça ? Je suis avec l’intégration Tesla et j’ai accès à toutes les actions. En tout ça j’ai rien remarqué de spécial