Intégration Solar Optimizer - Optimisation de sa consommation Solaire

Bonjour,

Tout d’abord, merci d’avoir pris le temps de me répondre, on a tous une vie en dehors d’home assistant…

Il y a un truc que je ne comprends pas. Lors de la configuration de Solar optimizer, je dois mettre un sensor pour ma « consommation/production », qui sera en positif si 'j’importe de l’électricité du réseau, et en négatif si j’injecte tout ou partie de ma production sur le réseau, c’est bien ça ?

Dans ton exemple, tu crées plusieurs sensors, du coup quel serait celui qui correspondrait à mon besoin ?

Désolé pour les questions probablement « bêtes » pour quelqu’un d’expérimenté…

C’est configuré comme ça chez moi :

Tu va retrouver les template sensors donnés au dessus.

Merci pour la réponse.

Je viens de paramétrer. J’ai bien ma valeur négative maintenant. J’ai fait en sorte, pour le moment que la batterie de stockage ne soit pas prise en compte dans le calcul. J’adapterai plus tard pour que le surplus aille dans la batterie de stockage, puis dans la Tesla une fois la batterie pleine.

En tout cas, beau boulot.

1 « J'aime »

Tu peux commander ce qui va dans la batterie et ce qui va dans la Tesla ?

Alors oui et non.

Mon onduleur, gère, via un scénario que j’ai défini, les charges et décharges de la batterie de stockage.

Il est programmé pour la recharger la nuit en heures creuses, de 22h00 à 6h00. Après 6h00, il pioche dans la batterie l’énergie pour la maison. Au fur et à mesure que l’énergie fournit par les panneaux augmente, ils prennent le relais, la batterie fournit ce qui manque pour alimenter la maison en complément du solaire. Le surplus et utilisé pour recharger la batterie sur le solaire, hors heures creuses.

Je pourrais, je pense, paramétrer le template que j’ai créé grâce à tes exemples, pour prendre en compte la recharge de la batterie, puisque j’ai un sensor qui m’indique la puissance qui lui est délivrée en instantané.

1 « J'aime »

Je reviens vers toi car j’ai un souci et je ne trouve pas la provenance.

Tout semble bien paramètré, et pourtant l’optimizer ne module pas la puissance envoyée dans la Tesla…

J’ai bien la puissance exportée vers le réseau en négatif dans la configuration.

Du coup j’ai repris tes templates que j’ai adapté à mes sensors, j’attends de voir ce que ça donne…

Depuis le réseau ? On m’a expliqué que c’est interdit. On n’aurait pas le droit de charger sa batterie la nuit à partir du réseau (en HC) pour utilisation en HP. On m’aurait menti ? Ou alors c’est que des rèlges EDF.

Je n’ai jamais entendu parler de cette règle. Je ne vois pas très bien comment ils pourraient vérifier ou l’interdire…

De quels inputs parles-tu exactement ?

Les sensors que tu mets en entrée de Solar Optimizer dans la configuration:
Capture d’écran 2024-03-19 à 18.50.13

Mais je t’ai dis une bétise (c’est marqué dans le texte), le consommé net doit être négatif si tu exportes.
La production doit être positive ou nulle.

Ça c’est bon, j’ai repris tes templates avec mes capteurs.
Vraiment je ne vois pas ce qui peut clocher.

C’est que sur la charge de Tesla le soucis ? Tout le reste fonctionne ?
Fais moi voir ta conf complète ici stp (en marquant le json avec le formattage - bouton </>)

Pour le moment je ne veux commander que la Tesla, et c’est un peu un échec… :sweat_smile:

Donen moi ta conf on va regarder.

j’essaie de comprendre ce que tu veux que je t’envoie en fait, je suis un peu un newbie…

Avant de trouver le json que tu veux, voici une copie d’écran de mon Dashboard.

J’ai 370 watts qui partent dans la batterie de stockage, alors qu’ils pourraient être rootés vers la voiture.

1 « J'aime »

Le fichier de configuration de Solar Optimizer. Là ou tu as configuré le chargement de la Tesla.
Ca doit ressembler à ça:

algorithm:
  initial_temp: 1000
  min_temp: 0.1
  cooling_factor: 0.95
  max_iteration_number: 1000
devices:
  - name: "Recharge Tesla"
    entity_id: "switch.cloucloute_charger"
    power_min: 660
    power_max: 3960
    power_step: 660
    check_usable_template: "{{ is_state('input_select.charge_mode', 'Solaire') and is_state('binary_sensor.tesla_wall_connector_vehicle_connected', 'on') and is_state('binary_sensor.titine_charger', 'on') and states('sensor.titine_battery') | float(100) < states('number.titine_charge_limit') | float(90) }}"
    # 2 heures
    duration_min: 120
    # 15 min stop
    duration_stop_min: 15
    # Power management
    power_entity_id: "number.titine_charging_amps"
    # 5 min
    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

Ma config :

algorithm:
  initial_temp: 1000
  min_temp: 0.1
  cooling_factor: 0.95
  max_iteration_number: 1000
devices:
- name: "Recharge Tesla"
  entity_id: "switch.titine_charger"
    # La puissance minimale de charge est 660 W (soit 1 Amp car convert_power_divide_factor=660 aussi)
  power_min: 232
    # La puissance minimale de charge est 3960 W (soit 5 Amp (= 3960/600) )
  power_max: 3712
    # le step de 660 soit 1 Amp après division par convert_power_divide_factor
  power_step: 232
    # Utilisable si la voiture est branchée sur le chargeur et elle est chargée à moins de 100 %
  check_usable_template: "{{ is_state('binary_sensor.titine_charger', 'on') and states('sensor.titine_battery') | float(100) < 100 }}"
    # 1 h de charge minimum
  duration_min: 60
    # 15 min de stop charge minimum
  duration_stop_min: 15
    # L'entité qui pilote l'ampérage de charge
  power_entity_id: "number.titine_charging_amps"
    # 5 min minimum entre 2 changements de puissance
  duration_power_min: 5
    # l'activation se fait par un appel de service
  action_mode: "service_call"
  activation_service: "switch/turn_on"
  deactivation_service: "switch/turn_off"
    # le changement de puissance se fait par un appel de service
  change_power_service: "number/set_value"
    # le facteur permettant de convertir la puissance consigne en Ampères (number.tesla_charging_amps prend des Ampères)
  convert_power_divide_factor: 232

Les templates créés à partir de ce que tu m’as envoyé :

- sensor:
    - name: "Total puissance consommée instantanée (W)"
      unique_id: total_power_consommee_w
      device_class: power
      unit_of_measurement: "W"
      state_class: measurement
      state: >
        {% set power = states('sensor.solarman_activepower_load_sys') | 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.solarman_pv1_power') | 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.solarman_activepower_load_sys') | float(default=0) %}
        {% set production = states('sensor.solarman_activepower_output_total') | 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.solarman_activepower_load_sys') | float(default=0) %}
        {% set production = states('sensor.solarman_activepower_output_total') | 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 %}

Le configuration yaml… au cas où…

solar_optimizer: !include solar_optimizer.yaml

Tous les seniors créés :

J’ai bien une valeur négative

Si tu as besoin d’autre chose…

Ca m’a l’air pas mal.
Tu peux regarder si les flag « usable » sont bien « on » ? Ca se fait dans Outils de dev / Etats.
Tu filtres sur « solar_optimizer ».
Tu devrais avoir qqe-chose comme ça :

Si tu peux me mettre la copie d’écran.