Automatisation Chauffe Eau panneau solaire + Zlinky

Mon problème

Bonjour à tous,
Je suis débutant et j’aimerai automatiser le lancement de mon chauffe-eau en fonction de ma consommation et de l’injection de ma production sur le réseau. J’ai essayé des choses mais cela ne fonctionne pas. J’aimerai vos avis, des conseils pour arriver à créer mon automatisation.
Pour ceux qui le préciseront, je sais qu’il existe des routeurs mais mon chauffe eau est électronique et comme il est sous garanti (installé par un pro), je ne préfère rien tenter. On verra ça certainement plus tard.

Voici quelques sensors que j’ai créer pour réaliser l’automatisation :

#Calcul moyenne injectée sur les dernières minutes : zlinky_eait en kW (ce sensor représente le cumul injecté)
  - platform: derivative
    source: sensor.zlinky_eait
    round: 3
    unit_time: h
    unit: kWh
    time_window: "00:15:00"
    name: "Puissance injectée moyenne"
#Calcul moyenne consommé sur les dernières minutes : zlinky_east en kW (ce sensor représente le cumul de la consommation)
  - platform: derivative
    source: sensor.zlinky_east
    name: Moyenne_puissance_consommee
    round: 3
    unit_time: h
    unit: kWh
    time_window: "00:15:00"
#Je calcule le temps dont le chauffe eau a été activé le matin à partir de 10h
  - platform: history_stats
    name: eau_chaude_active_today
    entity_id: switch.chauffe_eau
    state: 'on'
    type: time
    start: "{{ now().replace(hour=10, minute=0, second=0, microsecond=0) }}"
    end: "{{ now() }}"

Le but est d’activer le chauffe eau dès que l’injection atteint 2kWh et s’arrête lorsque je consomme 1kWh avec des tempo pour éviter les déclenchement intempestif (que je mettrais plus tard car en test) et d’activer le chauffe eau le soir à partir de 22h40 (début heures creuses) pour compléter la chauffe de la journée s’il n’a pas déclenché au moins 2h.
Voici mes automatisations :

alias: Chauffe eau activé - Injection >2kW
description: ""
trigger:
  - platform: numeric_state
    entity_id: sensor.puissance_injectee_moyenne
    for:
      hours: 0
      minutes: 0
      seconds: 0
    above: 2
condition:
  - condition: device
    type: is_off
    device_id: 842831a26497bbdf9954a40b912297e4
    entity_id: 47a9a83f59d98acef13688eecd2daa1f
    domain: switch
action:
  - type: turn_on
    device_id: 842831a26497bbdf9954a40b912297e4
    entity_id: switch.chauffe_eau
    domain: switch
  - service: notify.mobile_app_samsung_a33
    data:
      message: "Chauffe eau mise en route "
mode: single
alias: Eteindre chauffe eau  - Consommation Linky > 1kwh
description: ""
trigger:
  - platform: numeric_state
    entity_id: sensor.moyenne_puissance_consommee
    for:
      hours: 0
      minutes: 0
      seconds: 0
    above: 1
condition:
  - condition: device
    type: is_on
    device_id: 842831a26497bbdf9954a40b912297e4
    entity_id: 47a9a83f59d98acef13688eecd2daa1f
    domain: switch
#On ne déclenche pas l'automatisation durant les heures creuses
  - condition: time
    after: "06:30:00"
    before: "22:30:00"
    weekday:
      - mon
      - tue
      - wed
      - thu
      - fri
      - sat
      - sun
action:
  - delay:
      hours: 0
      minutes: 30
      seconds: 0
      milliseconds: 0
  - type: turn_off
    device_id: 842831a26497bbdf9954a40b912297e4
    entity_id: switch.chauffe_eau
    domain: switch
  - service: notify.mobile_app_samsung_a33
    data:
      message: Arrêt chauffe eau declencheur p<0,5kwh
mode: single
alias: Activer chauffe eau si pas activé en journée
description: Pas activé pendant 2h depuis 10h
trigger:
  - platform: time
    at: "22:40:00"
condition:
  - condition: numeric_state
    entity_id: sensor.eau_chaude_active_today
    above: 0
    below: 2
action:
  - service: notify.mobile_app_samsung_a33
    data:
      message: Le chauffe eau s'est déclenché
  - type: turn_on
    device_id: 842831a26497bbdf9954a40b912297e4
    entity_id: 47a9a83f59d98acef13688eecd2daa1f
    domain: switch
  - delay:
      hours: 2
      minutes: 0
      seconds: 0
      milliseconds: 0
  - type: turn_off
    device_id: 842831a26497bbdf9954a40b912297e4
    entity_id: 47a9a83f59d98acef13688eecd2daa1f
    domain: switch
mode: single

Aujourd’hui cela ne fonctionne pas. Mon chauffe eau se déclenche dès que l’injection >0kWh (enfin c’est une impression) et s’arrête immédiatement.
Pouvez-vous m’expliquer ce que je ne fais pas correctement svp ? Si vous avez des conseils je suis preneur.


[center]## System Information

version core-2023.9.2
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.11.5
os_name Linux
os_version 6.1.21-v8
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4996
Installed Version 1.32.1
Stage running
Available Repositories 1298
Downloaded Repositories 8
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 10.5
update_channel stable
supervisor_version supervisor-2023.09.2
agent_version 1.5.1
docker_version 23.0.6
disk_total 219.4 GB
disk_used 12.8 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons RPC Shutdown (2.4), File editor (5.6.0), Mosquitto broker (6.3.1), Samba share (10.0.2), Terminal & SSH (9.7.1), Duck DNS (1.15.0), MariaDB (2.6.1), InfluxDB (4.7.0), Grafana (9.0.3), EMHASS (0.4.0), Node-RED (14.5.0), Plex Media Server (3.3.0), motionEye (0.19.1), Zigbee2MQTT (1.33.0-1)
Dashboards
dashboards 2
resources 2
views 4
mode storage
Recorder
oldest_recorder_run 20 septembre 2023 à 02:04
current_recorder_run 20 septembre 2023 à 04:04
estimated_db_size 214.73 MiB
database_engine sqlite
database_version 3.41.2
[/center] ___

Bonjour,

Juste un point qui me parait important de préciser : EAIT, c’est l’Energie active injectée totale c’est à dire ce qui est réinjecté dans le réseau (produit et non consommé). C’est un cumul et pas une mesure instantanée. Je pense que tu devrais démarrer le chauffe-eau en fonction de ta production solaire et pas en fonction de ce qui est réinjecté.

Hello @frk44 ,

J’ai fais cette intégration pour exactement ce besoin : Intégration Solar Optimizer - Optimisation de sa consommation Solaire

Jettes-y un oeil ca devrait t’aider

1 « J'aime »

Bonjour Yalec,
J’en ai conscience et c’est pour cela que je ne le récupère pas telle qu’elle…

Bonjour Jean-Marc,
Merci pour ton retour.
J’ai lu la doc et il me manque 2 sensors :
-prix du kWh exporté
-taxe sur kWh exporté (même s’il vaut 0 ?)
Dois-je les créer en dur ?
Par ailleurs, j’ai les heures pleines et creuses. Me confirmes-tu qu’il faut appliquer le tarif heures pleines ?

Hello @frk44 ,

C’est obligatoire pour le bon fonctionnement de l’algo. Le plus simple est de faire une entrée de type input_number avec la valeur de ta revente. 0.13 chez moi à l’heure ou je parle.

Tu peux mettre 0 mais comme au-dessus tu devrais mettre une valeur et je crois que c’est 10%. J’ai mis ça chez moi :
Capture d’écran 2023-10-01 à 09.12.13

Si tu ne veux pas t’embeter oui. Sinon, il faut mieux prendre le tarif en cours. Si tu as les heures creuses en journée (14h-17h chez moi), ca peut changer le résultat du calcul (des fois il vaut mieux revendre à 13 centimes que de consommer à 9 centimes). Si tu ne l’as pas déjà fait, il te faut un utility_meter qui changer le tarif en fonction de l’heure de la journée. Cherches dans le forum y a plein d’exemples. Les miens ressemblent à ça :

monthly_energy:
  source: sensor.total_energie_importee
  cycle: monthly
  name: Total énergie importée (mois)
  tariffs:
    - pleines
    - creuses
daily_energy:
  source: sensor.total_energie_importee
  cycle: daily
  name: Total énergie importée (jour)
  tariffs:
    - pleines
    - creuses
hourly_energy:
  source: sensor.total_energie_importee
  cycle: hourly
  name: Total énergie importée (heure)
  tariffs:
    - pleines
    - creuses


monthly_energy_production:
  source: sensor.total_energie_produite
  cycle: monthly
  name: Total énergie produite (mois)
daily_energy_production:
  source: sensor.total_energie_produite
  cycle: daily
  name: Total énergie produite (jour)
hourly_energy_production:
  source: sensor.total_energie_produite
  cycle: hourly
  name: Total énergie produite (heure)

monthly_energy_consumption:
  source: sensor.total_energie_consommee
  cycle: monthly
  name: Total énergie consommée (mois)
daily_energy_consumption:
  source: sensor.total_energie_consommee
  cycle: daily
  name: Total énergie consommée (jour)
hourly_energy_consumption:
  source: sensor.total_energie_consommee
  cycle: hourly
  name: Total énergie consommée (heure)

monthly_energy_rejection:
  source: sensor.total_energie_rejetee
  cycle: monthly
  name: Total énergie rejetée (mois)
daily_energy_rejection:
  source: sensor.total_energie_rejetee
  cycle: daily
  name: Total énergie rejetée (jour)
hourly_energy_rejection:
  source: sensor.total_energie_rejetee
  cycle: hourly
  name: Total énergie rejetée (heure)

et un input_number dans lequel tu stockes la valeur le prix courant du kWh (input_number.tarif_energie_tempo dans mon cas).
Cet input_number doit être mis à jour à chaque cycle par une automatisation.

→ c’est un peu complexe si tu ne l’as jamais fait donc tu peux juste créer un input_number avec le tarif heures pleines dans un premier temps. Ca changera pas grand chose.

Tu configures ensuite Solar Optimizer comme ça:

Merci Jean-Marc pour ces explications. J’ai mis en place l’intégration mais j’ai l’impression que cela ne fonctionne pas. J’ai du mal faire un truc :sweat_smile:
J’utilise les sensors conso et injection du système enphase. A priori, les infos remontent bien :
Capture
Est-ce que le fait de mettre « 0 » sur le sensor taxe d’export peut influer ?

Qu’est-ce qui te fait dire que ça marche pas ? Je vois une best objective qui montre que le calcul de l’optimum a remonté qqe-chose.

Malgré une belle journée, le chauffe eau ne s’est pas déclenché.

Tu peux me copier ta config ?

Voici le code YAML :

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"
    power_max: 2200
    #check_usable_template: "{{ <le template qui vaut True si l'équipement est utilisable> }}"
    duration_min: 60
    duration_stop_min: 240
    action_mode: "service_call"
    activation_service: "switch/turn_on"
    deactivation_service: "switch/turn_off"

Et la config :


Et une capture des entités :

Je ne sais si c’est ce que tu souhaites. J’ai l’impression par contre qu’il me la désactivé quand je l’active (18h17) ou quand il est activé par une automatisation (22h40) :

Merci pour ton aide !

La conf à l’air bonne a un détail près qui peut avoir son intéret. Essaye avec ça :

check_usable_template: "{{ True }}" pour qu’il soit toujours utilisable.

L’autre chose c’est la valeur de « Enable Solar Optimizer Chauffe-eau » qui doit aussi être True.

Je conseille de mettre en place la carte qui est dans readme et qui permet de commander / voir les valeurs de ces 2 flags. Si l’un est faux, Solar Optimizer ne prend pas l’eqt.

Avec la carte du va voir un truc comme ça qui permet de savoir en temps réel ce qui est pris / pas pris / activé / pas activé et pourquoi :

Merci de prendre ce temps pour m’aider !
J’ai essayé de mettre le code complémentaire mais ou dois-je le mettre ? J’ai pas saisi cette partie :sweat_smile:

# A mettre en début de page

Ca se met sur quelle page ?

Sur la page du dashboard où tu veux afficher la carte :
Capture d’écran 2023-10-05 à 14.24.40

Puis « Editeur de configuration »:
Capture d’écran 2023-10-05 à 14.25.30

J’ai ajouté le « True » mais maintenant le système met inconnu dans la valeur total_power. Je comprends pas.
Par ailleurs, j’ai bien mis le code du début mais j’arrive pas à intégrer la card (Custom element doesn’t exist: decluttering-card). Je dois pas comprendre la manip…

type: vertical-stack
cards:
  - type: custom:decluttering-card
    template: managed_device_power
    variables:
      - device: switch.solar_optimizer_chauffe_eau
      - secondary_infos: null
      - icon: mdi:ev-station
      - enable_entity: switch.solar_optimizer_chauffe_eau