Intégration Solar Optimizer - Optimisation de sa consommation Solaire

bonjour @patBrid ,
Pour créer un input number il te faut aller dans paramètres, appareils et services, entrées

puis créer ton input number comme suit:

le code est un automatisme qui affecte une valeur d’un sensor à l’input number précédemment crée.
Cela répond à ta question??

Bonjour @phil

Super merci cela fonctionne. :+1:

Je dis cela au cas où, j’ai l’intégration RTE Tempo, du coup je n’ai pas à gérer le changement de prix manuellement, tout se fait automatiquement

Je récupère la valeur « EDF tempo Prix Actuel » qui change quotidiennement dans le input via le code de ton automatisme

image

2 « J'aime »

Bonjour à tous

Avant tout, félicitation et un grand merci à @Jean-Marc_Collin pour cet outil…un indispensable lorsqu’on a la possibilité d’avoir des panneaux solaires.
j’ai pu installer Solar Optimizer et un appareil (module shelly qui déclenche un chauffe eau) sans problème particulier.

J’ai quelques petites questions par rapport à ce que j’ai pu observer ces derniers jours.
1 - le chauffe eau (déclaré à 1800 w) est déclenché alors que la production solaire était à 1300w, est-ce le fonctionnement normal ?
2 - le chauffe eau ne se coupe pas, j’ai dû l’arrêter manuellement à 19h30 alors que la production à ce moment là était de 100w.

3 - la question a déjà était posé, mais je souhaitais savoir avant d’y consacrer un peu de temps au risque de réinventer la roue, si depuis, quelqu’un a travaillé sur un déclenchement en heures creuses d’un appareil (le chauffe eau est un bon exemple) si ce dernier n’a pas été déclenché ou pas suffisamment par Solar Optimizer durant la journée.
Intuitivement (je débute avec Home assistant), je chercherais à récupérer le journal ou fichier de log pour déterminer le temps de fonctionnement, selon le résultat, je déclencherais un automatisme pour compenser le manque de chauffe (la cerise sur le gateau serait un temps de chauffe défini dynamiquement).
Est ce que la logique est bonne, est-ce possible de faire cela ? (notamment lecture de fichier de log, temps de chauffe dynamique…)

merci

algorithm:
  initial_temp: 1000
  min_temp: 0.1
  cooling_factor: 0.95
  max_iteration_number: 1000
devices:
  - name: "Chauffe eau"
    entity_id: "switch.chauffe_eau_switch_0"
    # la puissance du chauffe eau
    power_max: 1800
    # Toujours utilisable
    # check_usable_template: "{{ True }}"
    # 30 min d'activation minimum
    duration_min: 30
    duration_stop_min: 60
    # On active/desactive via un appel de service
    action_mode: "service_call"
     # Le service permettant d'activer le switch
    activation_service: "switch/turn_on"
    deactivation_service: "switch/turn_off"

1 « J'aime »

Hello @patBrid ,

Ce qui compte ce n’est pas la production mais le surplus (production - consommation) qui utilise la production lissée pour éviter les phénomènes de baggottement liés aux nuages. Donc regarde ta courbe de production lissée (y a un capteur donné par l’intégration) :
Capture d’écran 2024-05-29 à 09.52.03

Après si tu avais 1300 w de prod, on est d’accord que c’est curieux d’avoir un surplus > 1800 w mais ca peut arriver temporairement avec un passage nuageux.

Tu as une durée minimale d’activation. C’est certainement du à ça.

C’est une évolution demandée et que je vais faire un jour. En ce moment, j’ai vraiment pas le temps de m’y remettre mais c’est pas perdu.

Est ce que la logique est bonne, est-ce possible de faire cela ? (notamment lecture de fichier de log, temps de chauffe dynamique…)

Il vaut mieux écouter les changements d’états on/off tenir à jour un compteur dans un input_number, le remettre à zéro et si le soir lors des heures creuses il n’y a pas eu la durée minimale requise, activer le switch. Ca se fait directement sous HA mais c’est pas si simple car ça fait intervenir beaucoup de composants. C’est pour ça que ce serait bien mieux en natif dans l’intégration.

merci @Jean-Marc_Collin
Concernant l’évolution demandée, je fouine dans le forum pour prendre des idées…ce n’est pas très grave si je coince à un moment ou à un autre, je prends cela comme une autoformation sur home assistant :wink:

1 « J'aime »

Pour ceux qui utilisent Solar Optimizer pour recharger leur Tesla et rencontrent des problèmes récents d’API (limitation du nombre de commandes par jour), voici une méthode pour limiter les dégâts en attendant une solution plus permanente.

Elle consiste à vérifier les logs de Home Assistant, détecter les erreurs d’ajustement de l’ampérage du véhicule, et arrêter la charge via un raccourci iOS.

Capteur pour Détecter les Erreurs d’Ajustement de l’Ampérage

command_line:
  - sensor:
      name: Tesla failed power adjustment
      command: >
        awk -v d="$(date -d "@$(( $(date +%s) - 3600))" "+%Y-%m-%d %H:%M:%S")" '$1" "$2>=d &&/ERROR(.*)number.set_value(.*)number.tesla_charging_amps/' home-assistant.log | wc -l

Ce capteur retourne le nombre d’erreurs relevées dans la dernière heure. Vous pouvez ajuster la période (en modifiant 3600 secondes) et le nom de l’entité number (number.tesla_charging_amps) selon vos besoins.

Automatisation

Déclenchement : Le capteur d’erreur change de valeur.

Conditions :

  • Véhicule en charge.
  • Optimisation en cours.
  • Capteur d’erreur au-dessus d’un certain seuil.

Actions :

  • Notification via l’app iOS.
  • Déclenchement d’un raccourci TeslaStopCharge.

** Code **

alias: Stop chonk charge using IOS shortcut
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.chonk_failed_power_adjustment
    to: null
    id: Chonk
condition:
  - condition: and
    conditions:
      - condition: state
        entity_id: binary_sensor.chonk_charging
        state: "on"
      - condition: state
        entity_id: switch.solar_optimizer_chonk
        state: "on"
      - condition: numeric_state
        entity_id: sensor.chonk_failed_power_adjustment
        above: 1
action:
  - service: notify.mobile_app_phone
    data:
      message: Arrêter la charge solaire
      data:
        shortcut:
          name: StopTeslaCharge
mode: single

Raccourci iOS

Créez un raccourci nommé StopTeslaCharge dans l’application Shortcuts et ajoutez une action pour arrêter la charge du véhicule.

Prochaines Étapes

  • Nettoyer l’automatisation : Envoyer des paramètres au raccourci pour gérer l’arrêt de charge de plusieurs véhicules.
  • Solution à long terme : Explorer les commandes à envoyer via BLE pour résoudre le problème de fond.

Bonjour,

J’utilise cet outils pour piloter mon électroménager via une prise : ca fonctionne super.
J’essaye d’ajouter maintenant un climatiseur, mais je rencontre quelques soucis (désactivation immédiatement après l’activation). Voici le code que j’ai utilisé pour le climatiseur :

devices:
  - name: "CLIM veranda"
    entity_id: "climate.clim_veranda"
    power_max: 600
    duration_min: 20
    duration_stop_min: 15
#   check_usable_template: "{{ states('sensor.temperature_veranda') | float(50) > 23.5 }}"
    action_mode: "event"
    activation_service: "switch/turn_on"
    deactivation_service: "switch/turn_off"

J’ai ajouté deux automatismes pour commander le climatiseur lorsque l’event est activé et l’event est désactivé. Ces deux automatismes fonctionnent normalement lorsque je force leur exécution en dehors du Solar Optimizer.

Néanmoins, lorsque ces deux automatismes sont appelés via le Solar Optimizer, le composant s’active et se désactive immédiatement. Ce phénomène se produit lorsque j’active le commutateur du composant dans le Solar Optimizer et lorsque l’outils active le scénario lorsque l’excédent solaire est suffisant.

2024-06-08 16:50:15.010 INFO (MainThread) [custom_components.solar_optimizer.switch] Turn_on Solar Optimizer switch Solar Optimizer CLIM veranda
2024-06-08 16:50:15.010 DEBUG (MainThread) [custom_components.solar_optimizer.managed_device] Applying action Activate for entity climate.clim_veranda. requested_power=None
2024-06-08 16:50:15.010 INFO (MainThread) [custom_components.solar_optimizer.managed_device] Sending event solar_optimizer_change_power_event with action Activate for entity climate.clim_veranda with requested_power 0 and current_power 0
2024-06-08 16:50:16.021 INFO (MainThread) [custom_components.solar_optimizer.switch] Appel de on_state_change à 2024-06-08 16:50:16.021839 avec l'event <Event state_changed[L]: entity_id=climate.clim_veranda, old_state=<state climate.clim_veranda=off; hvac_modes=[<HVACMode.COOL: 'cool'>, <HVACMode.DRY: 'dry'>, <HVACMode.HEAT: 'heat'>, <HVACMode.HEAT_COOL: 'heat_cool'>, <HVACMode.FAN_ONLY: 'fan_only'>, <HVACMode.OFF: 'off'>], min_temp=16, max_temp=32, target_temp_step=1, fan_modes=['quiet', 'low', 'medium', 'medium_high', 'high', 'auto'], swing_modes=['stopped', 'rangefull'], current_temperature=25.1, temperature=23, current_humidity=71.5, fan_mode=auto, swing_mode=stopped, icon=mdi:air-conditioner, friendly_name=Clim Veranda, supported_features=425 @ 2024-06-08T16:47:18.840251+02:00>, new_state=<state climate.clim_veranda=cool; hvac_modes=[<HVACMode.COOL: 'cool'>, <HVACMode.DRY: 'dry'>, <HVACMode.HEAT: 'heat'>, <HVACMode.HEAT_COOL: 'heat_cool'>, <HVACMode.FAN_ONLY: 'fan_only'>, <HVACMode.OFF: 'off'>], min_temp=16, max_temp=32, target_temp_step=1, fan_modes=['quiet', 'low', 'medium', 'medium_high', 'high', 'auto'], swing_modes=['stopped', 'rangefull'], current_temperature=25.1, temperature=23, current_humidity=71.5, fan_mode=auto, swing_mode=stopped, icon=mdi:air-conditioner, friendly_name=Clim Veranda, supported_features=425 @ 2024-06-08T16:50:16.021544+02:00>>
2024-06-08 16:50:16.574 INFO (MainThread) [custom_components.solar_optimizer.switch] Appel de on_state_change à 2024-06-08 16:50:16.574389 avec l'event <Event state_changed[L]: entity_id=climate.clim_veranda, old_state=<state climate.clim_veranda=cool; hvac_modes=[<HVACMode.COOL: 'cool'>, <HVACMode.DRY: 'dry'>, <HVACMode.HEAT: 'heat'>, <HVACMode.HEAT_COOL: 'heat_cool'>, <HVACMode.FAN_ONLY: 'fan_only'>, <HVACMode.OFF: 'off'>], min_temp=16, max_temp=32, target_temp_step=1, fan_modes=['quiet', 'low', 'medium', 'medium_high', 'high', 'auto'], swing_modes=['stopped', 'rangefull'], current_temperature=25.1, temperature=23, current_humidity=71.5, fan_mode=auto, swing_mode=stopped, icon=mdi:air-conditioner, friendly_name=Clim Veranda, supported_features=425 @ 2024-06-08T16:50:16.021544+02:00>, new_state=<state climate.clim_veranda=cool; hvac_modes=[<HVACMode.COOL: 'cool'>, <HVACMode.DRY: 'dry'>, <HVACMode.HEAT: 'heat'>, <HVACMode.HEAT_COOL: 'heat_cool'>, <HVACMode.FAN_ONLY: 'fan_only'>, <HVACMode.OFF: 'off'>], min_temp=16, max_temp=32, target_temp_step=1, fan_modes=['quiet', 'low', 'medium', 'medium_high', 'high', 'auto'], swing_modes=['stopped', 'rangefull'], current_temperature=25.1, temperature=23, current_humidity=71.8, fan_mode=auto, swing_mode=stopped, icon=mdi:air-conditioner, friendly_name=Clim Veranda, supported_features=425 @ 2024-06-08T16:50:16.021544+02:00>>
2024-06-08 16:50:16.963 INFO (MainThread) [custom_components.solar_optimizer.switch] Appel de on_state_change à 2024-06-08 16:50:16.962988 avec l'event <Event state_changed[L]: entity_id=climate.clim_veranda, old_state=<state climate.clim_veranda=cool; hvac_modes=[<HVACMode.COOL: 'cool'>, <HVACMode.DRY: 'dry'>, <HVACMode.HEAT: 'heat'>, <HVACMode.HEAT_COOL: 'heat_cool'>, <HVACMode.FAN_ONLY: 'fan_only'>, <HVACMode.OFF: 'off'>], min_temp=16, max_temp=32, target_temp_step=1, fan_modes=['quiet', 'low', 'medium', 'medium_high', 'high', 'auto'], swing_modes=['stopped', 'rangefull'], current_temperature=25.1, temperature=23, current_humidity=71.8, fan_mode=auto, swing_mode=stopped, icon=mdi:air-conditioner, friendly_name=Clim Veranda, supported_features=425 @ 2024-06-08T16:50:16.021544+02:00>, new_state=<state climate.clim_veranda=off; hvac_modes=[<HVACMode.COOL: 'cool'>, <HVACMode.DRY: 'dry'>, <HVACMode.HEAT: 'heat'>, <HVACMode.HEAT_COOL: 'heat_cool'>, <HVACMode.FAN_ONLY: 'fan_only'>, <HVACMode.OFF: 'off'>], min_temp=16, max_temp=32, target_temp_step=1, fan_modes=['quiet', 'low', 'medium', 'medium_high', 'high', 'auto'], swing_modes=['stopped', 'rangefull'], current_temperature=25.1, temperature=23, current_humidity=71.8, fan_mode=auto, swing_mode=stopped, icon=mdi:air-conditioner, friendly_name=Clim Veranda, supported_features=425 @ 2024-06-08T16:50:16.962712+02:00>>
2024-06-08 16:50:17.576 INFO (MainThread) [custom_components.solar_optimizer.switch] Appel de on_state_change à 2024-06-08 16:50:17.576583 avec l'event <Event state_changed[L]: entity_id=climate.clim_veranda, old_state=<state climate.clim_veranda=off; hvac_modes=[<HVACMode.COOL: 'cool'>, <HVACMode.DRY: 'dry'>, <HVACMode.HEAT: 'heat'>, <HVACMode.HEAT_COOL: 'heat_cool'>, <HVACMode.FAN_ONLY: 'fan_only'>, <HVACMode.OFF: 'off'>], min_temp=16, max_temp=32, target_temp_step=1, fan_modes=['quiet', 'low', 'medium', 'medium_high', 'high', 'auto'], swing_modes=['stopped', 'rangefull'], current_temperature=25.1, temperature=23, current_humidity=71.8, fan_mode=auto, swing_mode=stopped, icon=mdi:air-conditioner, friendly_name=Clim Veranda, supported_features=425 @ 2024-06-08T16:50:16.962712+02:00>, new_state=<state climate.clim_veranda=cool; hvac_modes=[<HVACMode.COOL: 'cool'>, <HVACMode.DRY: 'dry'>, <HVACMode.HEAT: 'heat'>, <HVACMode.HEAT_COOL: 'heat_cool'>, <HVACMode.FAN_ONLY: 'fan_only'>, <HVACMode.OFF: 'off'>], min_temp=16, max_temp=32, target_temp_step=1, fan_modes=['quiet', 'low', 'medium', 'medium_high', 'high', 'auto'], swing_modes=['stopped', 'rangefull'], current_temperature=25.1, temperature=23, current_humidity=71.8, fan_mode=auto, swing_mode=stopped, icon=mdi:air-conditioner, friendly_name=Clim Veranda, supported_features=425 @ 2024-06-08T16:50:17.576337+02:00>>

Quelqu’un aurait-il une idée de ce qui bloque ?

Bonjour à tous,

@Jean-Marc_Collin, très beau travail et merci pour ce partage.

Je suis actuellement en train de mettre en place l’intégration. Je voulais créer les sensors template comme tu l’indique dans le poste 62. Le capteur "Total puissance consommée instantanée"correspond a quoi pour toi? C’est ce que consomme ton logement (solaire + réseau) ou juste le réseau?

C’est ce que consomme le logement solaire consommé+ import réseau consommé

1 « J'aime »

Bonjour, Je n’ai pas encore réussi à rentrer dans les paramètres de solar optimizer, je pense que c’est un problème de paramétrage des imput_number. Est-ce qu’il est possible de me dire comment le configurer ? merci :slight_smile:
Prix de vente 0,1336 et prix d’achat 0,2516, taxe 9€ par an. (valeur mini maxi ?) (Pas ?) et si il y a autre chose qui m’échappe.
Merci beaucoup !

Hello @PierreSEDG ,

Je veux bien t’aider mais il faut que tu m’aides à comprendre ce que tu ne comprends pas.
Relis peut être ce chapitre : solar_optimizer/README-fr.md at main · jmcollin78/solar_optimizer · GitHub et dis moi ce que tu ne comprends pas.

Bonjour,

Je reviens avec ma problématique d’il y a 15j, je ne trouve toujours pas ce qui bloque.

Lorsque je retire la commande qui active la clim dans l’automatisme déclenché par l’event (il ne reste alors qu’un envoie de notification), ça fonctionne. Le switch du solar optimizer reste bien actif.

Dès que je remets la commande pour la clim, c’est cuit. le switch du solar optimizer s’active et se désactive juste après.

Je te comprends pas ce qui peut bloquer.

Bonjour, merci pour ta réponse. Téléchargé sur HACS, je rentre les sensors en Watt, production et consommation. les valeurs prix d’achat min à 0,1335 max 0,1336, prix d’achat
min 0,2515 max 0,2516. La taxe 0,014 et 0,015. Valider et la j’ai un message d’erreur : Configuration créée pour SolarOptimizer.

Cette intégration ne peut être chargée, essayez de redémarrer Home Assistant

Après redemarrage, `Enregistreur: homeassistant.setup
Source: setup.py:402
S'est produit pour la première fois: 12:22:57 (1 occurrences)
Dernier enregistrement: 12:22:57

Error during setup of component solar_optimizer
Traceback (most recent call last):


  File "/usr/src/homeassistant/homeassistant/setup.py", line 402, in _async_setup_component
    result = await task
             ^^^^^^^^^^
  File "/config/custom_components/solar_optimizer/__init__.py", line 97, in async_setup
    hass.data[DOMAIN]["coordinator"] = coordinator = SolarOptimizerCoordinator(
                                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/config/custom_components/solar_optimizer/coordinator.py", line 64, in __init__
    raise err
  File "/config/custom_components/solar_optimizer/coordinator.py", line 56, in __init__
    for _, device in enumerate(config.get("devices")):
                               ^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'get'`

Je pense avoir tout bien fait. La ligne "solar_optimizer: !include solar_optimizer.yaml" doit être rentrée après la configuration de l’intégration ou pas ? j’ai essayé ca m’a fait redemmarré HA en mode secours :confused:

J’ai une autre question, est ce que l’intégration prend en compte le fait qu’il y ait une batterie ?

fichier configuration.yaml:

solar_optimizer: !include solar_optimizer.yaml

fichier solar_optimizer.yaml (dans le même répertoire que configuration.yaml) :

algorithm:
  initial_temp: 1000
  min_temp: 0.1
  cooling_factor: 0.95
  max_iteration_number: 1000
devices:
  - name: "<nom de l'équipement>"
    entity_id: "switch.xxxxx"
    power_max: <puissance max consommée>
    check_usable_template: "{{ <le template qui vaut True si l'équipement est utilisable> }}"
    duration_min: <la durée minimale d'activation en minutes>
    duration_stop_min: <la durée minimale de desactivation en minutes>
    action_mode: "service_call"
    activation_service: "<service name>
    deactivation_service: "switch/turn_off"

Si tu n’y arrives pas copie/colle moi ton configuration.yaml et solar_optimizer.yaml

j’aurai mis action_mode: "service_call". Pourquoi tu as mis event ? Allumer et éteindre une clim se fait par un appel de service et pas par un event (ou tu as fait qqe-chose de spécial ?)

Je viens d’essayer avec un « service_call », j’ai le même phénomène, ça s’active et désactive juste ensuite.

devices:
  - name: "CLIM veranda"
    entity_id: "climate.clim_veranda"
    power_max: 600
    duration_min: 20
    duration_stop_min: 15
    action_mode: "service_call"
    activation_service: "climate/turn_on"
    deactivation_service: "climate/turn_off"

Je viens de tester avec ma PAC Air-Air, j’ai la même problématique qu’avec la clim. J’ai essayé de faire une video de ce qui se passe…

Le switch passe ON puis OFF dans la foulée.
La commande d’allumage est « envoyé » lors du ON, mais n’est pas éteinte lors du OFF, donc la clim resterait allumer car non percu allumé par le switch.

Screen Recording - Jun 23, 2024

Je ne vois pas ce qui peut se passer. Faut que tu regardes ta conf, tes automatisations, … Ca ne fait pas ça chez les autres à priori. Je l’utilise à fond en ce moment sans soucis.
Peut ton device qui s’étient tout seul ou qui est commandé par autre chose ?

Du coup étant à la maison en ce moment, je peux te confirmer que le device ne s’éteint pas. La clim reçoit l’ordre de s’allumer à chaque mise à jour du Solar Optimizer, bien qu’elle a déjà été allumé par lui juste avant. Donc ça bip bip fréquemment et ne s’éteint pas en cas de baisse de prod car n’est pas perçu comme ON dans l’outils.

Je n’ai rien d’autre qui pilote ces devices, donc je ne sais plus trop où chercher :pensive:.