Optimisation de l.auto consommation d'énergie solaire PVOptimizer

PVOptimizer

Cette application Appdaemon de Home Assistant permet de maximiser l’auto consommation de la production d’énergie de vos panneaux solaires. Elle permet de contrôler les gros appareils électroménagers, tels que lave-vaisselle ou lave-linge avec de simples switch, mais aussi des appareils plus complexes à gérer, tels que la filtration de piscine ou le contrôle de pompe à chaleur au travers d’applications communicantes dédiées nécessitant des mécanismes de contrôle multiparamétriques.

Elle est écrite en python sous appdaemon et devrait être facilement accessible à ceux qui ont des notions de programmation. Ce qui devrait permettre de la modifier facilement pour l’améliorer et l’adapter à ses propres besoins.

Caractéristiques

  • Prise en compte des abonnements : Tempo, Heures Creuses, Base
  • Prise en compte du prix de revente EDF OA
  • Calcul du seuil de déclenchement des appareils en fonction du tarif heure creuse heure pleine et du prix de revente
  • Programmation automatique des appareils qui n’ont pu être mise en route dans la journée en heure creuse la nuit.
  • Peut fonctionner avec un routeur de ballon d’eau chaude, s’il est possible de récupérer la puissance instantanée, délivrée à ce dernier. L’adjonction d’un routeur est même recommandée.
  • Permet de contrôler des systèmes complexes, type filtration de piscine, ou pompe à chaleur, au travers d’applications séparées qui dialoguent avec l’optimiseur.
  • Gère les périodes HP/HC multiples dans une journée (Après-midi, Nuit)

Prérequis

Installation de l’add-on appdaemon

Puissance solaire disponible

Elle se mesure à l’aide d’une pince ampèremétrique branchée sur le câble d’alimentation de la maison. Cette mesure peut être positive en cas de prélèvement sur le réseau ou négative en cas d’exportation. Si vous disposez d’un routeur ECS, il faut pouvoir disposer de la puissance envoyée sur le ballon, afin d’avoir la puissance solaire disponible, exacte.
P disponible = P export + P ballon ECS.

Couleur du jour pour les abonnements tempo

On peut utiliser l’API RTE par exemple.

Fonctionnement

Chaque appareil est décrit dans l’application par :

  • son nom,
  • sa puissance,
  • sa durée de fonctionnement,
  • le switch qui le commande,
  • l’heure de mise en route en heure creuse si nécessaire.

Le programme effectue toutes les minutes, un recueil de la puissance solaire disponible. Il arrête les appareils qui ont atteint leur durée de fonctionnement programmée et essaie de mettre en route les appareils en attente en fonction de la puissance disponible.

La mise en route de l’appareil se fait à partir d’un seuil de puissance, qui dépend du coût de fonctionnement comparé à celui des heures creuses.Le calcul du seuil de puissance nécessaire à la mise en route, se fait selon la formule :

P seuil = P appareil \* (1-(Prix HC – Prix rachat) / Prix HP).
Cette modalité permet d’abaisser la puissance de mise en route et de voir s’il est plus avantageux de démarrer de jour ou en heures creuses

En cas de production solaire limitée du fait de la couverture nuageuse, le système programme, tous les appareils qui n’ont pu être mis en route pendant les heures creuses la nuit aux horaires définis dans le fichier de configuration.

Lorsqu’un appareil est mis en route, il effectue la totalité de son cycle, même si la puissance solaire disponible diminue. En effet, par exemple, il n’est pas logique d’arrêter un lave-vaisselle ou lave-linge en plein cycle.

Pour ceux qui ont un abonnement tempo, l’optimiseur ne fonctionne pas les jours rouges afin d’éviter des dépenses importantes liées à des diminutions de production solaire.

Installation

  1. Installer l’add-on appdaemon à partir de paramètres / modules complémentaires si cela n’est pas déjà fait.
  2. Télécharger le dépôt
  3. Mettre les fichiers PVOptimizer.py et PVOptimiser.yaml dans le répertoire addon_configs/a0d7b954_appdaemon/apps
  4. Mettre le fichier optimizerentities.yaml dans le répertoire /config/ de HA ou dans un sous répertoire dédié au fichiers yaml si vous en avez un.

Configuration

  1. Ajouter dans le fichier addon\_configs/a0d7b954\_appdaemon/appdaemon.yaml
       pvoptimizer_log :
         name: PVOptimizerLog
         filename: /homeassistant/log/pvoptimizer.log
         log_generations: 3
         log_size: 100000 

Ceci vous permet de lire les log de l’application dans le fichier /config/ pvoptimizer_log
ou directement dans http://ip_ha:5050

  1. Compléter le fichier /addon_configs/a0d7b954_appdaemon/apps/PVOptimiser.yaml :
    a. nom de votre sensor qui donne l’énergie solaire disponible dans available_energy :
    b. type d’abonnement électrique dans subscription :
    Tempo, HeuresCreuses, Base
    c. sensor qui donne la couleur du jour tempo dans journée_tempo :
    mettre deux double quote si vous avez un autre type d’abonnement
    d. les prix du Kwh en Centimes ou en Euros. Pour un abonnement Heures creuses mettre les prix : prix_bleu_hc et prix_bleu_hp.

  2. **Décrire chaque appareil dans my_devices : en respectant bien l’indentation comme décrite ci-dessous. Le fichier est prérempli avec un appareil à titre d’exemple que vous pouvez modifier.

     my_devices:
       lave_vaisselle:
         name: lave_vaisselle
         power: 2000
         duration: 180
         switch_entity: switch.lave_vaisselle
         night_time_on: "00:30:00"    

La puissance( power) est en Watt,
la durée (duration) en minutes,
l’heure de mise en route night_time_on doit être mise à None s’il s’agit d’une autre application type filtration piscine par exemple.

  1. Recharger la configuration yaml dans outils/toute la configuration
  2. Créer le dashboard de contrôle des appareils ou adapter celui donné dans le dépôt.

Le Dashboard

A titre d’exemple vous trouverez dans le dépôt un fichier yaml d’exemple de configuration de base tout à fait perfectible.
Il contient 4 entités par appareil :

  • La demande de mise en route : input_boolean.device_request_1,
  • Le sensor switch de commande de l’appareil switch.<appareil> ,
  • Le sensor power de l’appareil sensor.<power appareil>
  • Le sensor de durée d’exécution : input_text.device_duration_1.

Les sensors input_boolean.device_request_x et input_text.device_duration_x sont prédéfinis dans le fichier optimizerentities.yaml. x correspond au rang de définition de l’appareil .
Il faudra ajouter une entrée sur le dashboard pour le sensor input_boolean.enable_solar_optimizer qui permet de désactiver l’application si nécessaire.

Mode d’emploi de base

Une fois l’installation réalisée, l’intégration est opérationnelle.
Cette partie concerne les appareils qui sont uniquement commandés par un switch.

Pour demander la mise en route d’un appareil, il faut cliquer sur l’icône de l’appareil, à gauche. Il passe du gris au vert.
Si la production solaire est suffisante, l’appareil est mis en route, le deuxième icône devient vert et la puissance de fonctionnement s’affiche sur le 3eme icône et la durée de fonctionnement sur le 4ème icône.

Activation d’un appareil

Pour effectuer une demande de mise en route d’un appareil, il suffit de cliquer sur le premier sensor (Request).
Si l’énergie solaire disponible est suffisante, le switch de l’appareil va être activé, la puissance délivrée va s’afficher et le décompte du temps d’exécution va débuter et s’afficher toutes les minutes.
Il est possible de forcer le démarrage d’un appareil, même si la puissance solaire disponible n’est pas suffisante en cliquant directement sur le switch. Les entités de l’appareil s’afficheront alors comme si le démarrage avait été effectué par l’intégration.

Arrêt d’un appareil

L’appareil va s’arrêter lorsque le temps d’exécution planifié sera écoulé. On peut forcer l’arrêt en cliquant sur le switch.

Programmation en heure creuse

Tous les appareils pour lesquels une demande n’a pas été satisfaite dans la journée, faute d’énergie suffisante sont automatiquement reprogrammés la nuit en heure creuse.
Pour cela il faut veiller à mettre dans la configuration des horaires de démarrage en période creuse.

Visualisation des problèmes éventuels

L’intégration génère un fichier de log qui est stocké dans le fichier /config/log/pvoptimizer.log.
Il est possible aussi d’avoir plus de détails en appelant directement la console de debug d’appdaemon : http://<ip_homeassistant>:5050

Vous pourrez alors voir le démarrage et l’arrêt de l’intégration dans main_log, les erreurs éventuelles dans error_log et le déroulement de l’activité de l’intégration dans pvoptimizer_log.

Utilisation avancée

L’intégration, PVOptimizer permet de piloter des appareils qui nécessitent des paramètres de régulation supplémentaires.

Par exemple, pour une piscine, il faut prendre en compte la température de l’eau pour déterminer la durée et le séquencement des cycles de filtration journalière.
Pour cela, il est plus simple de piloter le fonctionnement de l’appareil dans une application appdaemon séparée qui communique avec PVOptimizer.
L’application séparée va alors demander la mise en route de l’appareil auprès de PVOptimizer en basculant input_boolean.device_request_x à true.

PVOptimizer va alors donner l’autorisation d’activation en basculant input_boolean.start.device_x à true.
L’application séparée va alors gérer le fonctionnement de l’appareil et l’arrêter si besoin avant le délai imparti.
Elle pourra demander au besoin ultérieurement d’autres mises en route.

Trois applications qui sont publiées dans mon dépôt :

Désinstallation

Il faut retirer les 2 fichiers PVOptimizer.py et PVOptimiser.yaml dans le répertoire addon_configs/a0d7b954_appdaemon/apps/
Puis le fichier optimizerentities.yaml dans le répertoire /config/ de HA,
Retirer aussi le dashboard PVOptimizer
Redémarrer HA.

Performances

L’intégration tourne depuis 10 mois avec une installation solaire de 3 KWc.
Pour l’instant je suis à 85% d’autoconsommation. Il reste à évaluer le comportement en été.

Mises à jour

version 1.1.0

Elle prend en compte les périodes multiples Heures creuses en effectuant un bilan de programmation des appareils en attente au début de chaque basculement en heure creuse.
Pour cela il faut veiller à paramétrer les horaires des appareils dans les périodes d’heure creuse.

Par exemple si vous avez une période Heure creuse l’apès midi entre 14h et 17h et que vous désirez que votre lave linge fonctionne l’après midi s’il n’y a pas eu assez de production solaire le matin paramétrez une heure de démarrage entre 14h et 17h dans le fichier PVOptimizer.yaml dans l’item night_time.

ATTENTION pour la mise à niveau, cette nouvelle version nécessite l’ajout d’une ligne dans le fichier PVOptimizer.yaml:

	   off_peak: binary_sensor.heure_creuse 
4 « J'aime »

Bonjour, je viens de l’installer pour la gestion d’une prise zigbee et d’un relais zigbee pour forçage solaire d’un ballon d’eau chaude.
Je te ferais un retour.

Bonjour,
Merci pour ton intérêt.
Suggestion : tu devrais songer a un routeur pour ton ballon d’eau chaude. C’est très efficace en terme d’auto consommation.

Bonjour,
Merci beaucoup pour toute la présentation et pour le développement.
Je viens de l’installer également ça a l’air vraiment pas mal.
Est il possible d’afficher le P seuil pour chaque appareil éventuellement ?

Bonjour, ta suggestion est effectivement à mettre dans la liste des améliorations.
Cela rajoute un sensor. Pour cela, Il faudrait que j’améliore le dashboard pour qu’il soit plus compact.

Bonjour,
Ok ça marche, après pour le dashboard, ça peut être en option
Du coup pour bien comprendre ton calcul pour un jour comme aujourd’hui (blanc) avec une puissance de 500 W, ça ferait une P seuil égale à 450,89 (500 * (1-(14,86 – 13) / 18,94) c’est bien cela ?
Sinon pour enclencher tes lave vaisselle, lave linge et sèche ligne tu utilises des fingerobot non ? Parce qu’un simple switch ne suffit pas pour les miens
Après pour le projet de la PAC il s’agirait d’un switch ou contact sec pour injecter le surplus pas pour l’allumer ou l’éteindre totalement non ?

Bonjour,
Pour le calcul de P seuil c’est correct. Tu peux deja le voir dans /config/log/pvoptimizer.log.
Pour le lave vaisselle, lave linge, j’utilise des prises connectées zigbee ou zwave qui me donnent aussi la puissance. Je met la prise en route pour la programmation. J’éteins la prise et je fais la demande sur HA.
Mes machines acceptent que je les mettent en route et que je les éteignent aussitôt pour redémarrer lorsque l’alimentation revient.
Pour la PAC, j’ai la possibilité de l’allumer et la mettre en marche par un thermostat dans la maison. J’ai remplacé ce thermostat par un switch commandé par HA. Je ne l’arrête pas complètement. Je vais essayer de te mettre un nouveau repo sur Github PVHeatpump avec les explications d’ici demain.

Ok je comprends le principe pour la Pac je peux faire pareil.
Je vais essayer ton idée pour les lave linge et vaisselle avec une prise connectée voir si ils ont le même comportement
Et pour le P seuil je vais créer des template

Bonjour,
Je viens de m’inscrire uniquement pour dire merci !!
Merci pour le partage et merci pour le travail :wink:

Avec plaisir, le partage est à la base de home assistant.
Je reste à votre disposition pour toute information complémentaire.

Bonjour

Déjà merci pour cette intégration que je vais certainement essayer, car je viens d’installer mes panneaux et le but d optimiser le tout m’intéresse.

Par contre j’ai une question est il possible si il n’y a pas ou pas eu assez de production solaire de faire tourner un device en Hc mais de jour.
par exemple j’ai 2 plage hc une la nuit et une l’aprèm. Je suis en tri et dans l’idée ce serait de faire tourner le chauffe eau sur la plage hc de l’aprèm si il y a pas eu de pic de production et de faire tourner la chaudière elec (plancher chauffant) la nuit en hc

Bonjour,
Je n ai pas pris en compte le cas où il y ait 2 plages en HC. Pour l instant le programme fait un bilan à 22h00 pour planifier les tâches à effectuer en HC.
Dans votre cas il faudrait faire un bilan avant chaque période HC pour planifier les tâches qui n ont pu être exécutées faute d énergie suffisante soient 2 bilans par jour
Il faut que je réfléchisse à cette extension. J ai besoin de quelques jours. C est faisable mais cela complique notablement le parametrage du programme
Concernant l heure de démarrage en HC, elle est déjà parametree donc pas de problème sur ce plan.
Je vous tiens au courant par mp

Bonjour,

j’ai essayer l 'intégration mais j’ai un souci des qu’elle est installer elle me désactive mes sensor modbus de mon onduleur .

a voir plus tard

Le sensor dont tu parles mesure quoi : la puissance solaire produite ou la puissance injectée ou prélevée sur le réseau.
Normalement le programme n’a besoin que de la valeur finale d’énergie disponible. C’est celle de la pince branchée sur la phase à la sortie du disjoncteur de ton domicile. La valeur est négative quand tu injecte sur le réseau. C’est cette valeur qu’il faut positiver et mettre dans le sensor available_energy.
Pour ceux qui ont un routeur sur leur chauffe eau, il faut ajouter à cette valeur la puissance envoyée dans le chauffe eau.
Pour cela il faut créer un sensor du type :

template:
  - sensor:
    - name: "Available Energy"  
      unit_of_measurement: "W"
      device_class: power
      state: "{{ (states('sensor.export_reseau') | float(0)) + (states('sensor.energie_envoyee_chauffe_eau') | float(0)) }}"

Par ailleurs, je reviens sur le problème de la gestion des 2 périodes heures creuses dont tu as besoin, j’ai écrit une nouvelle version qui fait un bilan des appareils en attente de mise en route en début de chaque période en heure creuse. Je la mettrai en ligne lorsqu’elle sera testée.

Je récupère les infos de l’onduleur justement via modbus, car pas d’intégration pour mon modèle. Enfin si une « SMA » mais mon modèle n’est pas reconnue encore

Donc en faite quand j’instal appdaemon et ton addon, il me rend indisponible toute les entités sous modbus et de ce fait je n’ai plus la production du jour , total etc

Au final tu dois tout de meme récupérer tes valeurs modbus de ton onduleur dans des sensors.
Quelles valeurs arrives tu à récupérer ?

je récupére la production du jour et total , la tension , et la puissance instantané . Mais avec ton addon plus aucun n’est dispo, je compend pas pourquoi car normalement rien n’est lié

La puissance instantanée correspond à la production solaire instantanée. Ce n’est pas le bon indicateur car il faut soustraire la consommation de base de ton domicile qui ne peut se faire qu à l aide d une pince branchée sur la phase d arrivée de ton domicile ou par le relevé du linky.
Je n ai pas d explication au fait que le programme te masque tes données modbus. En attendant d avoir le bon sensor d énergie disponible, désactives mon addon en supprimant pvoptimizer.py

Oui ca je l’ai avec mon shelly 3EM, conso instantané , retour etc . Y a vraiment aucun souci de paramétrage pour ma part sauf le fait qui me rend mes sensor modbus indisponible . J’ai tout effacé et je verrai plus tard ou avec l’autre addon qui a l’air sur le même principe

Bonjour,
Parfait, je n’avais pas cette information. Pourrais tu regarder dans les fichiers error.log et pvoptimizer.log qui sont dans le répertoire config/log/ s’il n’y a pas d’anomalie. Pourrais tu aussi me faire parvenir en mp ton fichier pvoptimizer.yaml.