Utilisation Solar Optimizer

Je reviens aux nouvelles,
Voici la tete de mes 2 sensors sur mes 2 WE:


Je suppose que le soucis est là, mais quoi changer?

Bonjour @Jean-Marc_Collin ,

J’ai une interrogation sur l’algo utilisé par solar optimizer:

J’ai l’impression qu’il cherche toujours à optimiser pour consommer le plus de puissance par rapport a la puissance des équipements et non, aussi, par rapport au temps minimum d’activation nécessaire.

En ce moment, j’ai configurer 5 équipements dans Solar Optimizer :

  • Ballon d’eau, 1000 watt mais avec un Temps Min par jour important
  • 4 chauffage électrique d’appoint pour utiliser au max mon excédent Solaire (les nuits sont encore fraîche): 800w, 1110w, 1800w et 2100w, mais avec un Temps Min à 0 car si ils s’allument pas du tout, c’est pas grave.

Plusieurs fois, il a préférer ne pas allumer le ballon au profit des chauffages électriques d’appoint (pourtant ils ont un Temps Min à 0)

Bonne journée

Hello @roumano

Oui il cherche à ce qu’il n’y ait ni achat d’électricité ni revente (au bémol près des écarts de prix). Il est à l’optimum lorsque le best_objective est à 0 (ni import, ni export).

Donc en effet, il ne prend en compte que le bilan des puissances à chaque instant, le temps minimum n’influe pas sur le choix de l’algo mais sur le caractère utilisable par l’algo ou non. Et je ne vois pas bien comment je pourrais faire autrement. Qu’est-ce que je devrais privilégier ?

Hello Jean-Marc,
Aurait tu une idée sur mon problème? Que voudrais-tu comme infos supplémentaires pour diagnostiquer?

Hello, j’ai beau relire je ne sais ce que tu cherches à faire ni ce qui ne marche pas (selon toi).

Donc il faut commencer de zéro. Que cherches-tu à commander ?

Ensuite vérifier si tes capteurs suivent les règles expliquées ici : solar_optimizer/README-fr.md at main · jmcollin78/solar_optimizer · GitHub . Donne les courbes de ces capteurs si tu as des doutes.

Commence par une config simple: la production, la consommation, pas de batterie, un seul switch et les valeurs par défaut. Si déjà ça ne marche pas ce n’est pas la peine de continuer.

Si tu as des équipements qui ne sont pas des switchs, suit bien ce qui est écrit ici : solar_optimizer/README-fr.md at main · jmcollin78/solar_optimizer · GitHub

Voilà, on va commencer comme ça et on avance doucement.

Je t’explique mon install physique: j’ai mon onduleur (Victron sur lequel est les batteries) en interface entre mon Linky et mon tableau.
Donc si tu veux que je commence simple, quel sensor je met en place?
La mesure de puissance sur mon linky
ou la mesure de puissance en entrée de mon onduleur?

Ensuite je suis d’accord, je veux bien ne mettre qu’une seule charge, une lampe de test de 10W de manière a éviter que ma PAC fasse des ON/OFF durant la mise en place, je supprime mes autres charges.

Le minimum c’est la production Et la consommation. Relis bien mon message précédent.

Ni l’un ni l’autre, il te faudra créé un sensor qui est négatif lorsque la production solaires dépasse celle de la maison.

Voici comment j’ai fait :

  {{ ( states('sensor.victron_ac_consumption') | float(default=0) - min(3700,states('sensor.victron_pv_power') | float(default=0) ) ) | int }}

PS: J’ai mis le min en place car ma production du mppt dépasse la puissance max de mon onduleur , …

Bonjour,

Mon Solar Optimizer ne fonctionne pas comment mettre en route les logs et ou trouver le fichier des logs.

Merci

Dans l’intégration, les trois petits points, pour activer les logs puis l’arrêter et télécharger les logs associées :

Bonne journée

Salut @Jean-Marc_Collin ,
En ces périodes de fort excédents solaire,

je remarque un souci avec la gestion des équipements allumé mais qui ne consomme plus (ballon d’eau chaude)

En résumé, Solar Optimizer l’arrêt en pensant économiser 1150w et ainsi, il allume un équipement en même temps pour 1680w.
Or comme le ballon est déjà chaud, mon power_consumption passe de -1476w a 215w (~ -1476w+1680w)

du coup, SO fait une boucle pas cool pour la conso :

mais si je déactive l’équipement ballon eau ( switch.,enable_solar_optimizer_ballon_d_eau_chaude) SO a le bon comportement (cf graph après 13h28m27s)

Détail des logs de la boucle a 13h26h03s :

jusqu’a 13h26:
net consumption stable a environ -1476W ( cf power_consumption=-1476.00 )

  • resille salon d’allumer
  • le ballon d’eau (allumer mais déjà chaud donc il consomme pas les 1150W de configurer dans SO pour lui)

13:26:03 : SO choisi d’éteindre le ballon d’eau d’allumer la résille Cuisine:

2026-04-05 13:26:03.326 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
2026-04-05 13:26:03.326 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is active
2026-04-05 13:26:03.326 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 1150.0 for device Ballon d'eau Chaude cause active and not can_change_power
2026-04-05 13:26:03.326 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Salon is active
2026-04-05 13:26:03.326 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 2200.0 for device Résille Salon cause active and not can_change_power
2026-04-05 13:26:03.327 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 0 for device Résille Cuisine cause not active
2026-04-05 13:26:03.327 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 0 for device Résille Entrée cause not active
2026-04-05 13:26:03.327 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 0 for device Chauffage SdB cause not active
2026-04-05 13:26:03.327 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Calling recuit_simule with power_consumption=-1476.00, solar_power_production=5288.50 sell_cost=0.01, buy_cost=0.19, tax=20.00% devices=[<custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7efdcc02f0>, <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7efdcc1550>, <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7f2c3ea510>, <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7f68ee9010>, <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7f68ee9160>]
2026-04-05 13:26:03.328 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is active
2026-04-05 13:26:03.328 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is active
2026-04-05 13:26:03.329 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Salon is active
2026-04-05 13:26:03.329 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Salon is active
2026-04-05 13:26:03.332 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Entrée is not usable due to max_on_time_per_day_min exceeded 7244 >= 7200
2026-04-05 13:26:03.333 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Entrée is not usable due to max_on_time_per_day_min exceeded 7244 >= 7200
2026-04-05 13:26:03.333 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Chauffage SdB is disabled. Forget it

2026-04-05 13:26:03.334 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2026-04-05 13:26:03.334 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> C'est la meilleure jusque là

2026-04-05 13:26:03.353 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for Ballon d'eau Chaude - {'power_max': 1150.0, 'power_min': -1, 'power_step': 0, 'current_power': 1150.0, 'requested_power': 0, 'name': "Ballon d'eau Chaude", 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False, 'priority': 1}
2026-04-05 13:26:03.354 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is active
2026-04-05 13:26:03.354 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Extinction de Ballon d'eau Chaude
2026-04-05 13:26:03.354 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Applying action Deactivate for entity switch.ballon_d_eau_chaude. requested_power=0
2026-04-05 13:26:03.354 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Next availability date for Ballon d'eau Chaude is 2026-04-05 13:26:09.354555+02:00
2026-04-05 13:26:03.354 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Calling service switch/turn_off for entity switch.ballon_d_eau_chaude
2026-04-05 13:26:03.355 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Sending event solar_optimizer_state_change_event with action Deactivate for entity switch.ballon_d_eau_chaude with requested_power 0 and current_power 1150.0
2026-04-05 13:26:03.355 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for Résille Salon - {'power_max': 2200.0, 'power_min': -1, 'power_step': 0, 'current_power': 2200.0, 'requested_power': 2200.0, 'name': 'Résille Salon', 'state': True, 'is_usable': True, 'is_waiting': False, 'can_change_power': False, 'priority': 8}
2026-04-05 13:26:03.356 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Salon is active
2026-04-05 13:26:03.357 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for Résille Cuisine - {'power_max': 1680.0, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 1680.0, 'name': 'Résille Cuisine', 'state': True, 'is_usable': True, 'is_waiting': False, 'can_change_power': False, 'priority': 8}
2026-04-05 13:26:03.358 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Allumage de Résille Cuisine
2026-04-05 13:26:03.359 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Applying action Activate for entity switch.resille_cuisine. requested_power=1680.0
2026-04-05 13:26:03.359 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Next availability date for Résille Cuisine is 2026-04-05 13:26:09.359340+02:00
2026-04-05 13:26:03.359 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Calling service switch/turn_on for entity switch.resille_cuisine
2026-04-05 13:26:03.360 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Sending event solar_optimizer_state_change_event with action Activate for entity switch.resille_cuisine with requested_power 1680.0 and current_power 0
2026-04-05 13:26:03.361 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for Résille Entrée - {'power_max': 1090.0, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 0, 'name': 'Résille Entrée', 'state': False, 'is_usable': False, 'is_waiting': False, 'can_change_power': False, 'priority': 8}
2026-04-05 13:26:03.361 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Entrée is not usable due to max_on_time_per_day_min exceeded 7244 >= 7200
2026-04-05 13:26:03.361 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Calculated data are: {'power_production': 5288.5, 'power_production_brut': 5288.5, 'power_consumption': -1476.0, 'sell_cost': 0.01, 'buy_cost': 0.19, 'sell_tax_percent': 20.0, 'battery_soc': 99.0, 'battery_charge_power': 0, 'priority_weight': 80, 'best_solution': [{'power_max': 1150.0, 'power_min': -1, 'power_step': 0, 'current_power': 1150.0, 'requested_power': 0, 'name': "Ballon d'eau Chaude", 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False, 'priority': 1}, {'power_max': 2200.0, 'power_min': -1, 'power_step': 0, 'current_power': 2200.0, 'requested_power': 2200.0, 'name': 'Résille Salon', 'state': True, 'is_usable': True, 'is_waiting': False, 'can_change_power': False, 'priority': 8}, {'power_max': 1680.0, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 1680.0, 'name': 'Résille Cuisine', 'state': True, 'is_usable': True, 'is_waiting': False, 'can_change_power': False, 'priority': 8}, {'power_max': 1090.0, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 0, 'name': 'Résille Entrée', 'state': False, 'is_usable': False, 'is_waiting': False, 'can_change_power': False, 'priority': 8}], 'best_objective': 14.044444444444443, 'total_power': 3880.0, 'ballon_d_eau_chaude': <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7efdcc02f0>, 'resille_salon': <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7efdcc1550>, 'resille_cuisine': <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7f2c3ea510>, 'resille_entree': <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7f68ee9010>}
2026-04-05 13:26:03.362 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Finished fetching Solar Optimizer data in 0.036 seconds (success: True)
2026-04-05 13:26:03.363 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Active
2026-04-05 13:26:03.363 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is active
2026-04-05 13:26:03.364 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is active
2026-04-05 13:26:03.364 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is waiting
2026-04-05 13:26:03.364 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is not usable
2026-04-05 13:26:03.365 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Active
2026-04-05 13:26:03.365 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Salon is active
2026-04-05 13:26:03.365 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Salon is active
2026-04-05 13:26:03.366 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Active
2026-04-05 13:26:03.366 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is waiting
2026-04-05 13:26:03.369 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is not usable
2026-04-05 13:26:03.370 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Active
2026-04-05 13:26:03.371 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Entrée is not usable due to max_on_time_per_day_min exceeded 7244 >= 7200
2026-04-05 13:26:03.371 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Active
2026-04-05 13:26:03.371 DEBUG (MainThread) [custom_components.solar_optimizer.switch] No device chauffage_sdb found ...
2026-04-05 13:26:03.626 INFO (MainThread) [custom_components.solar_optimizer.sensor] Call of on_state_change at 2026-04-05 13:26:03.626606+02:00 with event <Event state_changed[L]: entity_id=switch.ballon_d_eau_chaude, old_state=<state switch.ballon_d_eau_chaude=on; icon=mdi:water-boiler, friendly_name=Ballon d'eau Chaude @ 2026-04-05T13:25:51.529824+02:00>, new_state=<state switch.ballon_d_eau_chaude=off; icon=mdi:water-boiler, friendly_name=Ballon d'eau Chaude @ 2026-04-05T13:26:03.625596+02:00>>
2026-04-05 13:26:03.627 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] The managed device becomes off - increment the delta time
2026-04-05 13:26:03.627 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is not usable
2026-04-05 13:26:03.628 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude - Set on_time=14739
2026-04-05 13:26:03.628 INFO (MainThread) [custom_components.solar_optimizer.switch] Appel de on_state_change à 2026-04-05 13:26:03.628528 avec l'event <Event state_changed[L]: entity_id=switch.ballon_d_eau_chaude, old_state=<state switch.ballon_d_eau_chaude=on; icon=mdi:water-boiler, friendly_name=Ballon d'eau Chaude @ 2026-04-05T13:25:51.529824+02:00>, new_state=<state switch.ballon_d_eau_chaude=off; icon=mdi:water-boiler, friendly_name=Ballon d'eau Chaude @ 2026-04-05T13:26:03.625596+02:00>>
2026-04-05 13:26:03.629 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is waiting
2026-04-05 13:26:03.629 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is not usable
2026-04-05 13:26:03.637 INFO (MainThread) [custom_components.solar_optimizer.sensor] Call of on_state_change at 2026-04-05 13:26:03.637101+02:00 with event <Event state_changed[L]: entity_id=switch.resille_cuisine, old_state=<state switch.resille_cuisine=off; icon=mdi:heating-coil, friendly_name=Resille Cuisine @ 2026-04-05T13:25:45.520551+02:00>, new_state=<state switch.resille_cuisine=on; icon=mdi:heating-coil, friendly_name=Resille Cuisine @ 2026-04-05T13:26:03.635253+02:00>>
2026-04-05 13:26:03.637 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is active
2026-04-05 13:26:03.637 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] The managed device becomes on - store the last_datetime_on
2026-04-05 13:26:03.638 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is not usable
2026-04-05 13:26:03.639 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine - Set on_time=2887
2026-04-05 13:26:03.639 INFO (MainThread) [custom_components.solar_optimizer.switch] Appel de on_state_change à 2026-04-05 13:26:03.639753 avec l'event <Event state_changed[L]: entity_id=switch.resille_cuisine, old_state=<state switch.resille_cuisine=off; icon=mdi:heating-coil, friendly_name=Resille Cuisine @ 2026-04-05T13:25:45.520551+02:00>, new_state=<state switch.resille_cuisine=on; icon=mdi:heating-coil, friendly_name=Resille Cuisine @ 2026-04-05T13:26:03.635253+02:00>>
2026-04-05 13:26:03.640 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is active
2026-04-05 13:26:03.640 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is active
2026-04-05 13:26:03.640 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is waiting
2026-04-05 13:26:03.641 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is not usable

6 secondes après, comme power_consumption > 0, on arrêt un équipement

comme on a allumer la Résille Cuisine , le net_compustion est passer de -1470W a 215w
du coup l’itération suivant il arret le device « Resille Cuisine »:

2026-04-05 13:26:09.426 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
2026-04-05 13:26:09.427 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 0 for device Ballon d'eau Chaude cause not active
2026-04-05 13:26:09.427 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Salon is active
2026-04-05 13:26:09.427 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 2200.0 for device Résille Salon cause active and not can_change_power
2026-04-05 13:26:09.427 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is active
2026-04-05 13:26:09.427 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 1680.0 for device Résille Cuisine cause active and not can_change_power
2026-04-05 13:26:09.427 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 0 for device Résille Entrée cause not active
2026-04-05 13:26:09.428 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 0 for device Chauffage SdB cause not active
2026-04-05 13:26:09.428 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Calling recuit_simule with power_consumption=215.00, solar_power_production=5286.40 sell_cost=0.01, buy_cost=0.19, tax=20.00% devices=[<custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7efdcc02f0>, <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7efdcc1550>, <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7f2c3ea510>, <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7f68ee9010>, <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7f68ee9160>]
2026-04-05 13:26:09.429 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Salon is active
2026-04-05 13:26:09.430 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Salon is active
2026-04-05 13:26:09.431 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is active
2026-04-05 13:26:09.431 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is active
2026-04-05 13:26:09.433 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Entrée is not usable due to max_on_time_per_day_min exceeded 7244 >= 7200
2026-04-05 13:26:09.433 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Entrée is not usable due to max_on_time_per_day_min exceeded 7244 >= 7200
2026-04-05 13:26:09.433 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Chauffage SdB is disabled. Forget it
2026-04-05 13:26:09.434 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2026-04-05 13:26:09.434 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> C'est la meilleure jusque là

2026-04-05 13:26:09.446 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
2026-04-05 13:26:09.454 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for Ballon d'eau Chaude - {'power_max': 1150.0, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 1150.0, 'name': "Ballon d'eau Chaude", 'state': True, 'is_usable': True, 'is_waiting': False, 'can_change_power': False, 'priority': 1}
2026-04-05 13:26:09.455 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Allumage de Ballon d'eau Chaude
2026-04-05 13:26:09.455 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Applying action Activate for entity switch.ballon_d_eau_chaude. requested_power=1150.0
2026-04-05 13:26:09.455 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Next availability date for Ballon d'eau Chaude is 2026-04-05 13:26:15.455231+02:00
2026-04-05 13:26:09.455 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Calling service switch/turn_on for entity switch.ballon_d_eau_chaude
2026-04-05 13:26:09.456 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Sending event solar_optimizer_state_change_event with action Activate for entity switch.ballon_d_eau_chaude with requested_power 1150.0 and current_power 0
2026-04-05 13:26:09.457 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for Résille Salon - {'power_max': 2200.0, 'power_min': -1, 'power_step': 0, 'current_power': 2200.0, 'requested_power': 2200.0, 'name': 'Résille Salon', 'state': True, 'is_usable': True, 'is_waiting': False, 'can_change_power': False, 'priority': 8}
2026-04-05 13:26:09.457 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Salon is active
2026-04-05 13:26:09.458 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for Résille Cuisine - {'power_max': 1680.0, 'power_min': -1, 'power_step': 0, 'current_power': 1680.0, 'requested_power': 0, 'name': 'Résille Cuisine', 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False, 'priority': 8}
2026-04-05 13:26:09.458 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is active
2026-04-05 13:26:09.459 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Extinction de Résille Cuisine
2026-04-05 13:26:09.459 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Applying action Deactivate for entity switch.resille_cuisine. requested_power=0
2026-04-05 13:26:09.459 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Next availability date for Résille Cuisine is 2026-04-05 13:26:15.459714+02:00
2026-04-05 13:26:09.459 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Calling service switch/turn_off for entity switch.resille_cuisine
2026-04-05 13:26:09.460 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Sending event solar_optimizer_state_change_event with action Deactivate for entity switch.resille_cuisine with requested_power 0 and current_power 1680.0
2026-04-05 13:26:09.461 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for Résille Entrée - {'power_max': 1090.0, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 0, 'name': 'Résille Entrée', 'state': False, 'is_usable': False, 'is_waiting': False, 'can_change_power': False, 'priority': 8}
2026-04-05 13:26:09.461 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Entrée is not usable due to max_on_time_per_day_min exceeded 7244 >= 7200
2026-04-05 13:26:09.462 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Calculated data are: {'power_production': 5286.4, 'power_production_brut': 5286.4, 'power_consumption': 215.0, 'sell_cost': 0.01, 'buy_cost': 0.19, 'sell_tax_percent': 20.0, 'battery_soc': 99.0, 'battery_charge_power': 0, 'priority_weight': 80, 'best_solution': [{'power_max': 1150.0, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 1150.0, 'name': "Ballon d'eau Chaude", 'state': True, 'is_usable': True, 'is_waiting': False, 'can_change_power': False, 'priority': 1}, {'power_max': 2200.0, 'power_min': -1, 'power_step': 0, 'current_power': 2200.0, 'requested_power': 2200.0, 'name': 'Résille Salon', 'state': True, 'is_usable': True, 'is_waiting': False, 'can_change_power': False, 'priority': 8}, {'power_max': 1680.0, 'power_min': -1, 'power_step': 0, 'current_power': 1680.0, 'requested_power': 0, 'name': 'Résille Cuisine', 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False, 'priority': 8}, {'power_max': 1090.0, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requested_power': 0, 'name': 'Résille Entrée', 'state': False, 'is_usable': False, 'is_waiting': False, 'can_change_power': False, 'priority': 8}], 'best_objective': 7.023066485753053, 'total_power': 3350.0, 'ballon_d_eau_chaude': <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7efdcc02f0>, 'resille_salon': <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7efdcc1550>, 'resille_cuisine': <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7f2c3ea510>, 'resille_entree': <custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7f68ee9010>}
2026-04-05 13:26:09.462 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Finished fetching Solar Optimizer data in 0.035 seconds (success: True)
2026-04-05 13:26:09.463 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Active
2026-04-05 13:26:09.464 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is waiting
2026-04-05 13:26:09.464 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is not usable
2026-04-05 13:26:09.465 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Active
2026-04-05 13:26:09.465 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Salon is active
2026-04-05 13:26:09.465 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Salon is active
2026-04-05 13:26:09.466 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Active
2026-04-05 13:26:09.467 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is active
2026-04-05 13:26:09.467 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is active
2026-04-05 13:26:09.467 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is waiting
2026-04-05 13:26:09.470 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is not usable
2026-04-05 13:26:09.471 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Active
2026-04-05 13:26:09.471 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Entrée is not usable due to max_on_time_per_day_min exceeded 7244 >= 7200
2026-04-05 13:26:09.471 DEBUG (MainThread) [custom_components.solar_optimizer.switch] Calling _handle_coordinator_update for Active
2026-04-05 13:26:09.472 DEBUG (MainThread) [custom_components.solar_optimizer.switch] No device chauffage_sdb found ...
2026-04-05 13:26:09.732 INFO (MainThread) [custom_components.solar_optimizer.sensor] Call of on_state_change at 2026-04-05 13:26:09.732311+02:00 with event <Event state_changed[L]: entity_id=switch.ballon_d_eau_chaude, old_state=<state switch.ballon_d_eau_chaude=off; icon=mdi:water-boiler, friendly_name=Ballon d'eau Chaude @ 2026-04-05T13:26:03.625596+02:00>, new_state=<state switch.ballon_d_eau_chaude=on; icon=mdi:water-boiler, friendly_name=Ballon d'eau Chaude @ 2026-04-05T13:26:09.731665+02:00>>
2026-04-05 13:26:09.732 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is active
2026-04-05 13:26:09.732 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] The managed device becomes on - store the last_datetime_on
2026-04-05 13:26:09.733 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is not usable
2026-04-05 13:26:09.734 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude - Set on_time=14739
2026-04-05 13:26:09.734 INFO (MainThread) [custom_components.solar_optimizer.switch] Appel de on_state_change à 2026-04-05 13:26:09.734149 avec l'event <Event state_changed[L]: entity_id=switch.ballon_d_eau_chaude, old_state=<state switch.ballon_d_eau_chaude=off; icon=mdi:water-boiler, friendly_name=Ballon d'eau Chaude @ 2026-04-05T13:26:03.625596+02:00>, new_state=<state switch.ballon_d_eau_chaude=on; icon=mdi:water-boiler, friendly_name=Ballon d'eau Chaude @ 2026-04-05T13:26:09.731665+02:00>>
2026-04-05 13:26:09.734 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is active
2026-04-05 13:26:09.734 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is active
2026-04-05 13:26:09.734 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is waiting
2026-04-05 13:26:09.734 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Ballon d'eau Chaude is not usable
2026-04-05 13:26:09.773 INFO (MainThread) [custom_components.solar_optimizer.sensor] Call of on_state_change at 2026-04-05 13:26:09.773634+02:00 with event <Event state_changed[L]: entity_id=switch.resille_cuisine, old_state=<state switch.resille_cuisine=on; icon=mdi:heating-coil, friendly_name=Resille Cuisine @ 2026-04-05T13:26:03.635253+02:00>, new_state=<state switch.resille_cuisine=off; icon=mdi:heating-coil, friendly_name=Resille Cuisine @ 2026-04-05T13:26:09.764870+02:00>>
2026-04-05 13:26:09.774 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] The managed device becomes off - increment the delta time
2026-04-05 13:26:09.775 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is not usable
2026-04-05 13:26:09.776 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine - Set on_time=2893
2026-04-05 13:26:09.776 INFO (MainThread) [custom_components.solar_optimizer.switch] Appel de on_state_change à 2026-04-05 13:26:09.776465 avec l'event <Event state_changed[L]: entity_id=switch.resille_cuisine, old_state=<state switch.resille_cuisine=on; icon=mdi:heating-coil, friendly_name=Resille Cuisine @ 2026-04-05T13:26:03.635253+02:00>, new_state=<state switch.resille_cuisine=off; icon=mdi:heating-coil, friendly_name=Resille Cuisine @ 2026-04-05T13:26:09.764870+02:00>>
2026-04-05 13:26:09.776 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is waiting
2026-04-05 13:26:09.777 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Résille Cuisine is not usable

Hello @roumano,

Allumer un équipement qui ne consomme pas n’a aucune incidence. Le coup d’après, la puissance disponible sera la même et donc un autre équipement sera allumé.

Ton cas, est symptomatique d’un équipement mal configuré pour lequel la puissance configurée est inférieure à la puissance réellement consommée une fois allumé.

Exemple:
conso nette -100,
Eqt 1 puissance configurée: 90
Eqt 1 puissance effective : 110

A chaque cycle, SO va allumer / éteindre eqt 1. Puisqu’avec 90 de configuré, SO pense qu’il peut l’allumer mais si la conso effective est de 110 la conso nette va repasser positive et il sera donc éteint au prochain cycle.

Salut,

Mon souci (que je pense car c’est une supposition de comment fonctionne SO) n’est pas que SO allume un équipement qui ne consomme pas, mais qu’il en éteint un qui consomme pas en supposant qu’il vas récupérer l’énergie paramétrer dans l’attribut Puissance Maximale ET qu’en même temps il en allume un autre:

donc mon exemple plus haut, A l’instant T, net consumption = -1476W
d’après les logs et ce que j’en ai compris, a ce moment SO décide de :

  • éteindre le ballon (mais il récupére pas les 1150W qui sont configurer)
  • Allumé « résille cuisine » qui a pour configuration Puissance Maximale 1680

Donc a l’instant d’après net consumption vaut -1476W + 1680w (donc valeur en positive) donc il éteint immédiatement la charge qu’il vient d’allumé, ce qui fait un yoyo qui se répète plusieurs fois.

Si tu confirme qu’il fait ça, l’une des solution serait que SO fasse son travail par étape, d’abord il éteint l’équipement, il vois comment évolue le net consumption puis il allume une autre charge

De plus, mais ça c’est un autre sujet, la consommation d’un équipement n’est jamais totalement plat mais varie dans le temps et elle est fortement lié a la tension du réseau pour les charges résistive

et avec l’arrivé des beau jours et beaucoup d’excédent solaire, la tension du réseau peut varié pas mal dans le temps

Voici un exemple de la consommation de mon ballon qu’on vois une relation avec la tension du réseau (bien que le relever n’est pas hyper précis pour ce équipement ballon )

Oui sur un même cycle il peut éteindre un eqt et allumer un autre eqt pour ajuster la consommation vs production. Donc si l’extinction finalement ne libère rien, il est possible en effet de dépasser, temporairement la conso. Ca doit être corrigé rapidement derrière.

C’est le cœur du système donc je ne peux pas changer ça.
Je que je fais de mon coté, c’est de mettre en non utilisable le chauffe-eau lorsque l’eau est chaude. Ca demande d’avoir une mesure de la température de l’eau.

Bonsoir
je suis entrain de parametrer solar optimizer pour declenche la charge de la tesla avec une charge reglable dans l’exemple fourni on a check_usable_template: "{{ is_state(‹ input_select.charge_mode ›, ‹ Solaire ›) and is_state('bina
Comment est parametre cette input select.charge mode en mode « solaire » ?
Merci de votre eclairage

Hello, c’est un paramètre de type inout_sélect perso qui me permet d’activer ou non SO. Il vaut Solaire ou Manuel. Si il est sur Manuel, SO n’y touche pas. Ça évite que SO coupe la charge pendant un voyage par exemple.