Intégration Solar Optimizer - Optimisation de sa consommation Solaire

Autre question: tu as fait la partie IHM ? C’est utile pour le debug. Ça montre rapidement dans quel état est chaque bloc de la config.

Capture d’écran 2024-03-20 à 09.40.30

Alors, la partie Lovelace je n’ai pas encore fait… J’ai un peu bloqué, mais je crois avoir compris comment faire.

Finalement sur le trajet du boulot, j’ai remarqué que ce fonctionnait, j’ai vu l’ampérage monté. Au fur et à mesure que le soleil se levait.

En revanche, la pompe à chaleur s’est déclenchée, la production ne suffisait plus. La batterie de stockage a pris le relais. Je ne sais pas si je vais adapter ou garder ce fonctionnement.

Avec le Solar Optimizer, je lance la pompe à chaleur si il y a un moins 1000 w de disponible. Ca restreint les conflits. Mais il faut l’intégrer dans Solar Optimizer aussi. Je ne sais pas si tu peux le faire ?

Je ne peux pas piloter la PAC, ni le thermodynamique. Les deux sont en gestion auto. La PAC est en mode confort tout le temps.

L’électroménager c’est pareil.

J’ai l’avantage d’avoir un véhicule pro, donc pas tesla reste branchée en journée la plupart du temps. La saison allant vers le beau, je vais pouvoir balancer tout le surplus dedans.

En plus je vais avoir la pompe piscine qui va plus tourner avec les beaux jours.

ok. Piloter la pompe de piscine par le Solar Optimizer est un vrai cas d’usage super intéressant (au cas où tu ne l’as pas déjà fait)

Attention au pilotage d’une PAC. Cela (le compresseur) n’aime pas du tout les arrêts relances…

Faudrait que je vois si c’est faisable avec mon installation. Je vais sûrement rajouter des capteurs de conso sur certaines lignes, notamment la pompe de la piscine.

C’est ce que m’a dit l’installateur, du coup je la laisse gérer en auto en permanence.

Sur la mienne (Atlantic), j’ai un contact sec qui quand il est fermé la met en mode « solaire » forcé et donc chauffe à 62 (au lieu de 55 en temps normal je crois). Ca stocke de l’énergie (avec coef x 3) quand y a du solaire dispo. Et en effet, il faut éviter de lui couper le jus, c’était pas l’objet.

1 « J'aime »

Mon thermodynamique est un Atlantic également. Faudrait que je regarde la Doc.

Le calypso connecté a cette fonction. C’est assez discret dans la doc mais ca a été un de mes critères de choix.

Bon, comme pour le reste, je galère à installer la carte dont tu me parlais ce matin…

J’ai bien installé la carte decluttering via hacs.

J’ai bien mis le code sur la dashboard concerné, puis le code pour avoir la carte. Et j’ai ce message qui me dit qu’il ne trouve pas le type de carte…

Concernant la gestion des priorités entre ma batterie de stockage et la batterie de la Tesla, pour le moment :

1 - le système recharge la batterie de stockage, puis lorsqu’elle est pleine, ça part dans la voiture.

2 - lorsque le surplus est envoyé dans la voiture et qu’il y a un appel de puissance suite au déclenchement d’un équipement (ex : PAC), la batterie de stockage fournit la puissance supplémentaire, la puissance qui va dans la Tesla ne baisse pas.

Après y avoir réfléchi, il me semble que le plus judicieux serait :

1 - prioriser la recharge de la batterie de stockage, puis la Tesla.

2 - en cas d’appel de puissance ponctuel, moduler la puissance envoyée dans la Tesla, sans toucher a la batterie de stockage (si la baisse de puissance vers la Tesla permet d’absorber cette demande ponctuel…)

De cette manière, la batterie de stockage peut prendre le relais des panneaux (et du réseau…) lorsque l’ensoleillement diminue, jusqu’aux heures creuses.

Ne reste plus qu’à trouver les templates qui vont bien.

1 « J'aime »

Bonjour,

Voulant optimiser mon surplus solaire j’ai configuré l’intégration (merci pour le job en passant :wink: ).
Je fais appel a vous car je ne comprends pas ce qui cloche chez moi.
Actuellement je test l’usage de solar_optimizer en ayant configuré une entitée « Test », switch déclenchant une prise commandée. Dans la config je l’ai fixé a 50W de conso.
Malheureusement rien ne se passe, ni dans un sens (allumage) ni dans l’autre (extinction), et sans erreur dans les logs. J’ai bien du surplus solaire pourtant (cf power_consumption en négatif)

Ma config (assez simple):

$ cat solar_optimizer.yaml
algorithm:
   initial_temp: 1000
   min_temp: 0.1
   cooling_factor: 0.95
   max_iteration_number: 1000
devices:
   - name: "test"
     entity_id: "switch.ac_2515000_4"
     power_max: 50
     check_usable_template: "{{ is_state('switch.enable_solar_optimizer_test', 'on') }}"
     duration_min: 15
     duration_stop_min: 5
     action_mode: "service_call"
     activation_service: "switch/turn_on"
     deactivation_service: "switch/turn_off"

J’ai basculé l’integration en debug pour y voir plus clair mais cela ne m’aide pas bcp…

Les logs sur 4 passages :

2024-03-20 15:28:57.688 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
2024-03-20 15:28:57.689 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 0 for device test cause not active
2024-03-20 15:28:57.689 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Calling recuit_simule with power_consumption=30.90, solar_power_production=196.00 sell_cost=0.00, buy_cost=0.22, tax=0.00% devices=[<custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x5fe72648>]
2024-03-20 15:28:57.690 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.691 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.691 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.692 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.692 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.692 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.693 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.696 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.696 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.697 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.698 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.698 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.698 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.699 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.699 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.700 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.700 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.701 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.702 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.703 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.703 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.704 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.705 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.705 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.706 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.706 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.709 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.709 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2024-03-20 15:28:57.725 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for {'power_max': 50, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 0, 'name': 'test', 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False}
2024-03-20 15:28:57.725 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Calculated data are: {'power_production': 196, 'power_production_brut': 265.0, 'power_consumption': 30.9, 'sell_cost': 0.0, 'buy_cost': 0.22234, 'sell_tax_percent': 0.0, 'best_solution': [{'power_max': 50, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 0, 'name': 'test', 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False}], 'best_objective': 30.9, 'total_power': 0, 'test': <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x5fe72648>}
2024-03-20 15:28:57.726 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Finished fetching Solar Optimizer data in 0.038 seconds (success: True)
2024-03-20 15:28:57.726 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Solar Optimizer test
2024-03-20 15:28:57.728 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] No coordinator found or no data...
2024-03-20 15:33:57.687 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
2024-03-20 15:33:57.687 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 0 for device test cause not active
2024-03-20 15:33:57.687 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Calling recuit_simule with power_consumption=-61.70, solar_power_production=270.00 sell_cost=0.00, buy_cost=0.22, tax=0.00% devices=[<custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x5fe72648>]
2024-03-20 15:33:57.715 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for {'power_max': 50, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 0, 'name': 'test', 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False}
2024-03-20 15:33:57.716 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Calculated data are: {'power_production': 270, 'power_production_brut': 344.0, 'power_consumption': -61.7, 'sell_cost': 0.0, 'buy_cost': 0.22234, 'sell_tax_percent': 0.0, 'best_solution': [{'power_max': 50, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 0, 'name': 'test', 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False}], 'best_objective': 0.0, 'total_power': 0, 'test': <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x5fe72648>}
2024-03-20 15:33:57.716 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Finished fetching Solar Optimizer data in 0.029 seconds (success: True)
2024-03-20 15:33:57.716 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Solar Optimizer test
2024-03-20 15:33:57.717 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] No coordinator found or no data...
2024-03-20 15:33:57.717 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] No coordinator found or no data...
2024-03-20 15:38:57.688 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
2024-03-20 15:38:57.689 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 0 for device test cause not active
2024-03-20 15:38:57.689 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Calling recuit_simule with power_consumption=-144.70, solar_power_production=305.00 sell_cost=0.00, buy_cost=0.22, tax=0.00% devices=[<custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x5fe72648>]
2024-03-20 15:38:57.722 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for {'power_max': 50, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 0, 'name': 'test', 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False}
2024-03-20 15:38:57.725 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Calculated data are: {'power_production': 305, 'power_production_brut': 340.0, 'power_consumption': -144.7, 'sell_cost': 0.0, 'buy_cost': 0.22234, 'sell_tax_percent': 0.0, 'best_solution': [{'power_max': 50, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 0, 'name': 'test', 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False}], 'best_objective': 0.0, 'total_power': 0, 'test': <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x5fe72648>}
2024-03-20 15:38:57.725 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Finished fetching Solar Optimizer data in 0.037 seconds (success: True)
2024-03-20 15:38:57.725 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Solar Optimizer test
2024-03-20 15:38:57.726 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] No coordinator found or no data...
2024-03-20 15:38:57.727 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] No coordinator found or no data...
2024-03-20 15:43:57.686 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
2024-03-20 15:43:57.687 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 0 for device test cause not active
2024-03-20 15:43:57.687 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Calling recuit_simule with power_consumption=-135.90, solar_power_production=315.00 sell_cost=0.00, buy_cost=0.22, tax=0.00% devices=[<custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x5fe72648>]
2024-03-20 15:43:57.715 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for {'power_max': 50, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 0, 'name': 'test', 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False}
2024-03-20 15:43:57.716 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Calculated data are: {'power_production': 315, 'power_production_brut': 325.0, 'power_consumption': -135.9, 'sell_cost': 0.0, 'buy_cost': 0.22234, 'sell_tax_percent': 0.0, 'best_solution': [{'power_max': 50, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 0, 'name': 'test', 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False}], 'best_objective': 0.0, 'total_power': 0, 'test': <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x5fe72648>}
2024-03-20 15:43:57.716 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Finished fetching Solar Optimizer data in 0.030 seconds (success: True)
2024-03-20 15:43:57.716 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Solar Optimizer test
2024-03-20 15:43:57.717 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] No coordinator found or no data...
2024-03-20 15:43:57.717 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] No coordinator found or no data...

D’avance merci pour les conseils / remarques !

Hello, je m’incrustre ici car je voudrais utiliser le suplus de ma production solaire avec mon boiler Thermodynamique et cette integration semble faire le taff.

j’ai un Vaillant Arostor avec cette possibilité :

@Jean-Marc_Collin j’ai cru comprendre que tu utilisais des Zbmini-L2 pour faire le taff, tu pourrais m’expliquer ? :slight_smile:

merciiii

Oui c’est un peu compliqué le declutering-template mais bien pratique ensuite.
Y a des post sur ce forum qui m’ont beaucoup aidé à le mettre en place.

Oui j’aurai plutot fait comme ça. On priorise l’utile et la batterie c’est le tampon de secours quand « ça déborde »

Bonjour,

Comme pour les autres qui ont le même genre de soucis, est-ce que tu as installé la partie front ?
Si oui dans quel état est le bouton correspondant ? Est-ce qu’il est bien au vert ?

Si non, regarde dans Outils de Dev/Etats en recherchant sur solar_optimizer voir si c’est « enabled » et « usable ». Exemple:

Si c’est pas « usable » c’est ton template qui n’est pas bon. Si c’est pas « enabled » c’est à toi de commuter la switch switch.enable_solar_optimizer_recharge_tesla (chez moi).
Tu peux le switcher dans les entités directement ou dans l’appareil Solar Optimizer si tu n’as pas installé la partie front.

EDIT: je viens de voir ça dans ta conf:

check_usable_template: "{{ is_state('switch.enable_solar_optimizer_test', 'on') }}"

Si le switch switch.enable_solar_optimizer_test est bien celui qui est créé par Solar Optimizer ca ne sert à rien car le caractère enabled est déjà en compte par l’algo.
Tu peux mettre « {{ True }} » pour tester.

Ne reste pas en mode debug surtout. Ca fait beaucoup, beaucoup de log.

Hello @n3xT ,

C’est pas tout à fait la même carte sur l’Atlantic mais ca ressemble beaucoup.
Donc le principe c’est de mettre un ZBMini qui ferme le contact PV1 (dans ton cas) si il y a 1000 watt de production disponible.
C’est tout simple tu branches les 2 bornes du contact PV1 sur les sorties du ZBmini, tu alimentes le ZBmini, et tu configures Solar Optimizer pour le passer à ‹ On › si il y a 1000 watt de dispo et que la température de l’eau est < à un seuil.

La conf est celle-là chez moi:

  - name: "Chauffe-eau solaire"
    entity_id: "switch.chauffe_eau_solaire"
    # this consume 250 but we don't want to start it under 1000 W available
    power_max: 1000
    # check_usable_template: "{{ True }}"
    # 2 h
    duration_min: 120
    check_usable_template: "{{ states('sensor.chauffe_eau_temperature_eau') | float(50) < states('sensor.chauffe_eau_temperature_cible') | float(0) - 10 }}"
    action_mode: "service_call"
    activation_service: "switch/turn_on"

j’espère que ca aide.

Tu peux juste tester en mettant court-circuitant les 2 poles du contact 1. Ca devrait le mettre en mode solaire. Sur l’Atlantic il faut activer la fonction dans les menus.
deactivation_service: « switch/turn_off »

1 « J'aime »