Intégration Solar Optimizer - Optimisation de sa consommation Solaire

Re Hello @Chris73 ,

T’as des courbes pour me faire voir ?
Il me faut la consommation nette (negative si tu exportes) dans le temps et la courbe d’allumage de ton Twizy Rouge.

Si tu as les logs au moment de l’allumage je prends aussi.

Bonjour,

Surement du au fait que j’ai fait la capture de ces infos alors que j’avais désactivé les automatismes sur SO ?
j’ai réactivé pour recréer des logs
Comment je récupère, et quoi ?

Ok merci Jean Marc, je suis repassé sur la 2.0.0 en attendant, si besoin de plus de logs / cas de tests dit moi

tu fais ça comment ?
Merci

edit : trouvé

ok j’ai trouvé le soucis. La valeur par défaut de offpeak_time est 23:59 si elle n’est pas configurée. Donc ca se déclenche a 23h59. Je corrige ça.

Fixed: Release 2.1.1 · jmcollin78/solar_optimizer · GitHub

Merci pour les signalements.

1 « J'aime »

Merci pour la correction

Je vais remettre la version et retester

1 « J'aime »

Bonjour a tous

Bonjour @Jean-Marc_Collin,

tout d’abord merci pour cette le release, j’apprécie beaucoup l’idée et m’évitera quelques automatisations pour atteindre le même objectif

Par contre petit soucis pour ma part:
je n’arrive pas a faire fonctionner mon chauffe-eau quand je n’ai pas de production solaire !

j’ai relu le readme plusieurs fois et je ne comprends pas ce qui peut ce passer !

J’ai enlevé mes conditions dans check_usable_template pour qu’elles soient toujours vrai, ça n’a rien changé !
j’avais mis offpeak_time à 02:00 ça n’a pas démarré à 02:00, j’ai essayé ensuite de le mettre avant minuit pensant que ça pourrait résoudre mon problème, ça n’a pas démarré non plus !

j’ai attendu plusieurs jours avant de poster mais là je ne vois pas? j’ai redémarré home assistant plusieurs fois et complètement même mais c’est toujours pareil?

voici le paramétrage de mon chauffe-eau:

devices:
  - name: "Chauffe-Eau"
    # Le switch qui commande le chauffe-eau
    entity_id: "switch.shelly_chauffe_eau"
    # la puissance du chauffe-eau
    power_max: 2300
    # Utilisable si total puissance consommee net instantanée - puissance chauffe-eau < 2300W et que l'input "Temperature Atteinte" est sur OFF
    check_usable_template: "{{ True }}"
    # 15 min d'activation minimum
    duration_min: 15
    # 15 min de desactivation minimum
    # duration_stop_min: 15
    # On active/desactive via un appel de service
    action_mode: "service_call"
    # Le service permettant d'activer le switch
    activation_service: "switch/turn_on"
    # Le service permettant de désactiver le switch
    deactivation_service: "switch/turn_off"
    # 4h par jour maximum
    max_on_time_per_day_min: 240
    # 4h par jour minimum ...
    min_on_time_per_day_min: 240
    # ... starting at 2:00
    offpeak_time: "23:25"

Aujourd’hui mon chauffe-eau démarre avec Scheduler de 04:00 à 07:00
Version Solar Optimizer: 2.1.1
Solar Optimizer-Chauffe-Eau On time today se réinitialise bien à 06:00 comme je l’ai configuré dans SO:

image

Est ce possible que ce soit parce que je n’ai pas de valeur dans « Total puissance consommée net instantanée » quand il fait nuit?

ce sont les templates que j’ai récupéré sur cette discussion pour le paramétrage de SO

image

Merci d’avance pour votre aide !

Ta configuration semble bonne, …

par contre, je pense que pour pouvoir comprendre, il faut les logs de solar_optimizer , …

Voici un exemple de l’exécution en off pike chez moi, hier soir (où ca fonctionne )

Nov 18 22:05:36 pi hass[795181]: 2024-11-18 22:05:36.955 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] Call of _on_update_on_time at 2024-11-18 22:05:36.955085+01:00
Nov 18 22:06:36 pi hass[795181]: 2024-11-18 22:06:36.956 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] Call of _on_update_on_time at 2024-11-18 22:06:36.955988+01:00
Nov 18 22:07:36 pi hass[795181]: 2024-11-18 22:07:36.957 DEBUG (MainThread) [custom_components.solar_optimizer.sensor] Call of _on_update_on_time at 2024-11-18 22:07:36.957012+01:00
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.681 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.681 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Set current_power to 0 for device Ballon d'eau Chaude cause not active
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.681 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Calling recuit_simule with power_consumption=413.00, solar_power_production=0.00 sell_cost=0.00, 
buy_cost=0.19, tax=0.00% devices=[<custom_components.solar_optimizer.managed_device.ManagedDevice object at 0x7f318897f0>]
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.682 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.683 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.683 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.683 DEBUG (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] ---> On garde l'objectif voisin
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.693 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Dealing with best_solution for {'power_max': 1000, 'power_min': -1, 'power_step': 0, 'current_power': 0, 'requ
ested_power': 0, 'name': "Ballon d'eau Chaude", 'state': False, 'is_usable': True, 'is_waiting': False, 'can_change_power': False}
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.693 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] <custom_components.solar_optimizer.coordinator.SolarOptimizerCoordinator object at 0x7f318894f0> - we should f
orce Ballon d'eau Chaude name
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.693 DEBUG (MainThread) [custom_components.solar_optimizer.coordinator] Allumage de Ballon d'eau Chaude
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.694 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Applying action Activate for entity switch.ballon_d_eau_chaude. requested_power=0
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.694 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Next availability date for Ballon d'eau Chaude is 2024-11-18 22:13:01.694125+01:00
Nov 18 22:08:01 pi hass[795181]: 2024-11-18 22:08:01.694 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Calling service switch/turn_on for entity switch.ballon_d_eau_chaude

Merci @roumano comment est ce que je récupère ces infos?
il faut « activer l’enregistrement des journaux » dans SO c’est ça? et chercher dans le fichier log qu’il te propose d’enregistrer quand tu arrêtes « l’enregistrement des journaux »

j’ai ça sur l’heure à laquel `offpeak_time: « 23:25 »

8411: 2024-11-17 23:21:50.628 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
8412: 2024-11-17 23:21:50.629 INFO (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Not all informations are available for Simulated Annealign algorithm to work. Calculation is abandoned
8449: 2024-11-17 23:26:50.628 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
8450: 2024-11-17 23:26:50.629 INFO (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Not all informations are available for Simulated Annealign algorithm to work. Calculation is abandoned
8494: 2024-11-17 23:31:50.629 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
8495: 2024-11-17 23:31:50.629 INFO (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Not all informations are available for Simulated Annealign algorithm to work. Calculation is abandoned
24149: 2024-11-18 23:21:50.629 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
24150: 2024-11-18 23:21:50.629 INFO (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Not all informations are available for Simulated Annealign algorithm to work. Calculation is abandoned
24216: 2024-11-18 23:26:50.629 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
24217: 2024-11-18 23:26:50.630 INFO (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Not all informations are available for Simulated Annealign algorithm to work. Calculation is abandoned
24262: 2024-11-18 23:31:50.628 INFO (MainThread) [custom_components.solar_optimizer.coordinator] Refreshing Solar Optimizer calculation
24263: 2024-11-18 23:31:50.629 INFO (MainThread) [custom_components.solar_optimizer.simulated_annealing_algo] Not all informations are available for Simulated Annealign algorithm to work. Calculation is abandoned

j’ai tjrs le meme message pareil pour le 19/11/24

Sur ta config a mon avis 1 erreur le « duration_stop_min » a un # devant ça doit te mettre le bazard dedans .

- name: "CHAUFFE EAU CUISINE"
    max_on_time_per_day_min: 120
    min_on_time_per_day_min: 30
    offpeak_time: "06:30"
    entity_id: "switch.chauffe_eau_cuisine"
    power_max: 2400
    check_usable_template: "{{ (states('sensor.lave_vaisselle_power') | float < 20) 
   and (states('sensor.lave_linge_power') | float < 2000)  }}" 
    duration_min: 30
    duration_stop_min: 10
    action_mode: "service_call"
    activation_service: "switch/turn_on"
    deactivation_service: "switch/turn_off"

Voila une partie de ma config , et il a fonctionné ce matin après le offpeak time j 'ai 3 entité auxqu’elles j’ai configurer des offpeak time et max and min duration différent (en cascade grosso modo) et ce matin tous c’est mis en route impecable

j’ai mis le # sur duration_stop_min au cas ou je veuilles l’utiliser, ça ne ça n’empêche pas le démarrage quand je produis?

y a t il une importance ou priorité à mettre

max_on_time_per_day_min: 120
min_on_time_per_day_min: 30
offpeak_time: "06:30"

En début de config?

Hello @AndAriel ,

Ce message là n’est pas normal. Y a un truc qui ne marche pas.
Les conditions c’est que les valeurs de tes capteurs soient valorisées:

if (
            len(devices) <= 0  # pylint: disable=too-many-boolean-expressions
            or power_consumption is None
            or solar_power_production is None
            or sell_cost is None
            or buy_cost is None
            or sell_tax_percent is None
        ):
            _LOGGER.info(
                "Not all informations are available for Simulated Annealign algorithm to work. Calculation is abandoned"
            )

Je pense que quand tu ne produis pas, au lieu d’avoir 0 dans ton capteur, tu as None ou un truc du genre et du coup l’algo ne peux pas travailler.

Regarde de ce coté là et fais en sorte que les capteurs remontent 0 quand … il y a 0 production.

1 « J'aime »

Bonjour a tous

Petit retour sur le problème rencontré
L’orientation était bonne @Jean-Marc_Collin c’était bien a cause de l’indisponibilité issue des templates que j’ai recopié dans la discussion suivante: Intégration Solar Optimizer - Optimisation de sa consommation Solaire - #63 par Jean-Marc_Collin

j’ai remplacé none pas 0 pour les templates suivant « Total puissance consommee instantanée », « Total puissance exportée instantanée (W) » et « Total puissance consommée net instantanée »

voir exemple template « Total puissance consommée net instantanée » ci joint:

{% 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 %}
  0
{% else %}
  {% set delta = (importe - exporte) | round(2) %}
  {{ delta }}
{% endif %}

@Jean-Marc_Collin,
j’ai également Enphase comme système de production donc certainement les mêmes données que toi quand nous ne produisons pas? tes templates ne t’indiquaient jamais « indisponible » le soir quand tu ne produis plus?

2 « J'aime »

J’ai jamais remarqué c’est vrai. La différence c’est que None ce n’est pas une valeur donc elle n’est pas mémorisée dans les historiques alors que 0 va l’être.
Si le capteur Enphase est en panne (ca m’est arrivé), il vaut mieux avoir None que 0.
Mais si la valeur est juste un peu négative, le template devrait renvoyer 0 et pas None.

Je vais regader mon template du coup. Merci du signalement.

1 « J'aime »

Si je regarde ce que j’ai en ce moment :

On voit clairement les « trous » dans la puissance exportée qui est souvent pas valorisée du tout.
On voit que pendant les « trous » je n’ai pas de « Total puissance consommée net instantanée », ce qui, du coup, ne dois pas bien marcher.

Je vais faire comme toi, ça me parait mieux finalement et tant pis le jour ou Enphase est Enpanne.

1 « J'aime »

J’ai fais également quelques petits essais cette après midi pour voir comment ce comporte les entités et variables.

Mes équipements démarrent bien à l’heure reglés sur offpeak_time mais je ne vois pas l’entité should_be_forced_offpeak passer à true ou alors c’est très rapide?

Peux me confirmer que check_usable_template doit être tjrs vrai pour que le forçage offpeak_time fonctionne?
Je m’explique, j’avais mis des conditions de puissance pour l’activation de certains switch en production solaire, ceci dit la nuit, je ne produis pas donc le forçage ne fonctionnera pas? on est bien d’accord? ou c’est possible de le faire même si check_usable_template est faux?

image

Hello @AndAriel

Ou je te confirme. Il faut que toutes les conditions soient réunies (l’entité enable à true, le check_template à true, le temps offpeak_time dépassé et le on_time < min_on_time.
La condition sur la batterie a été enlevée.

Tu n’as pas défini de min dans le screen que je vois au-dessus. Il est obligatoire sinon je ne peux pas tester que on_time < min_on_time. Ajpute un min et ça devrait marcher

Il reste a true pendant toute la durée. Jusqu’à ce que max_on_time soit atteint ou raz_time dépassé donc.

Ben… Au contraire le forçage permet justement de déclencher le device même si y a pas de production. C’est le but du forçage en heure creuse.

Je te confirme que min_on_time_per_day_min est bien configuré, le chauffe-eau fonctionne en offpeak_time depuis jeudi matin 02:00

Voici la configuration de mon chauffe-eau:

- name: "Chauffe-Eau"
    # Le switch qui commande le chauffe-eau
    entity_id: "switch.shelly_chauffe_eau"
    # la puissance du chauffe-eau
    power_max: 2300
    # Utilisable si total puissance consommee net instantanée - puissance chauffe-eau < 2300W et que l'input "Temperature Atteinte" est sur OFF
    check_usable_template: "{{ True }}"

    # 15 min d'activation minimum
    duration_min: 15
    # 15 min de desactivation minimum
    # duration_stop_min: 15
    # On active/desactive via un appel de service
    action_mode: "service_call"
    # Le service permettant d'activer le switch
    activation_service: "switch/turn_on"
    # Le service permettant de désactiver le switch
    deactivation_service: "switch/turn_off"
    # 4h par jour maximum
    max_on_time_per_day_min: 240
    # 4h par jour minimum ...
    min_on_time_per_day_min: 240
    # ... starting at 2:00
    offpeak_time: "02:00"

Effectivement dans Outils de développement > Etats, l’info min_on_time_per_day_min n’apparait pas ! est-ce normal?
Est ce que tu as cette donnée chez toi?


Sur mon sèche serviette non plus d’ailleurs

Hello, oui tu as raison, le min n’est pas mis dans les attributs. Je vais l’ajouter.

1 « J'aime »