Bonjour,
Suite à plusieurs demandes je partage mes automatisations, si ça peut aider …
Tout d’abord le package « zendure.yaml » à créer dans la configuration pour les entités nécessaires au automatisations :
############################################################
## Zendure Hyper 2000 ##
############################################################
## SENSOR ##
template:
- sensor:
# Calcul du Surplus Solaire (Par Phase) avec Shelly/CT Hyper (plus précis) = Puissance active mesurée sur la phase (Shelly ou CT) - Puissance mesurée Hyper 1 (- Puissance mesurée Hyper 2/3/... SI APPLICABLE) en VALEUR ABSOLUE
# A dupliquer pour chaque phase si installation triphasée avec 1 ou plusieurs hyper par phase
- name: Surplus Solaire
unique_id: "Surplus_Solaire"
unit_of_measurement: "W"
icon: "mdi:solar-power-variant"
state: >
{% if (states('sensor.shellypro3em_a0dd6ca18868_phase_c_active_power')|int - states('sensor.shellyproem50_08f9e0e5bb78_em0_power')|int) < 0 %}
{{ (states('sensor.shellypro3em_a0dd6ca18868_phase_c_active_power')|int - states('sensor.shellyproem50_08f9e0e5bb78_em0_power')|int)|abs }}
{% else %}
{{ 0 }}
{% endif %}
# Calcul du Surplus Solaire (Par Phase) sans Shelly/CT Hyper (moins précis) = Puissance active mesurée sur la phase (Shelly ou CT) - P entrée Hyper 1 (- P entrée Hyper 2 ... SI APPLICABLE) + P sortie Hyper 1 (+ P entrée Hyper 2 ... SI APPLICABLE) en VALEUR ABSOLUE
# A dupliquer pour chaque phase si installation triphasée avec 1 ou plusieurs hyper par phase
- name: Surplus Solaire 2
unique_id: "Surplus_Solaire_2"
unit_of_measurement: "W"
icon: "mdi:solar-power-variant"
state: >
{% if (states('sensor.shellypro3em_a0dd6ca18868_phase_c_active_power')|int - states('sensor.hyper_2000_grid_input_power')|int + states('sensor.hyper_2000_output_home_power')|int) < 0 %}
{{ (states('sensor.shellypro3em_a0dd6ca18868_phase_c_active_power')|int - states('sensor.hyper_2000_grid_input_power')|int + states('sensor.hyper_2000_output_home_power')|int)|abs }}
{% else %}
{{ 0 }}
{% endif %}
# Calcul du Déficit Solaire (Par Phase) avec Shelly/CT Hyper (plus précis) = Puissance active mesurée sur la phase (Shelly ou CT) - Puissance mesurée Hyper 1 (- Puissance mesurée Hyper 2/3/... SI APPLICABLE)
# A dupliquer pour chaque phase si installation triphasée avec 1 ou plusieurs hyper par phase
- name: Déficit Solaire
unique_id: "Deficit_Solaire"
unit_of_measurement: "W"
icon: "mdi:solar-power-variant"
state: >
{% if (states('sensor.shellypro3em_a0dd6ca18868_phase_c_active_power')|int - states('sensor.shellyproem50_08f9e0e5bb78_em0_power')|int) > 0 %}
{{ (states('sensor.shellypro3em_a0dd6ca18868_phase_c_active_power')|int - states('sensor.shellyproem50_08f9e0e5bb78_em0_power')|int) }}
{% else %}
{{ 0 }}
{% endif %}
# Calcul du Déficit Solaire (Par Phase) sans Shelly/CT Hyper (moins précis) = Puissance active mesurée sur la phase (Shelly ou CT) - P entrée Hyper 1 (- P entrée Hyper 2 ... SI APPLICABLE) + P sortie Hyper 1 (+ P entrée Hyper 2 ... SI APPLICABLE)
# A dupliquer pour chaque phase si installation triphasée avec 1 ou plusieurs hyper par phase
- name: Déficit Solaire 2
unique_id: "Déficit_Solaire_2"
unit_of_measurement: "W"
icon: "mdi:solar-power-variant"
state: >
{% if (states('sensor.shellypro3em_a0dd6ca18868_phase_c_active_power')|int - states('sensor.hyper_2000_grid_input_power')|int + states('sensor.hyper_2000_output_home_power')|int) > 0 %}
{{ (states('sensor.shellypro3em_a0dd6ca18868_phase_c_active_power')|int - states('sensor.hyper_2000_grid_input_power')|int + states('sensor.hyper_2000_output_home_power')|int) }}
{% else %}
{{ 0 }}
{% endif %}
# Calcul de la consigne de charge = Surplus Solaire - Seuil de suplus solaire
- name: Consigne Charge
unique_id: "Consigne_Charge"
unit_of_measurement: "W"
icon: "mdi:home-plus"
state: >
{% if states('sensor.surplus_solaire')|int > states('input_number.zendure_seuil_surplus_solaire')|int %}
{% if (states('sensor.surplus_solaire')|int - states('input_number.zendure_seuil_surplus_solaire')|int) < 1200 %}
{{ states('sensor.surplus_solaire')|int - states('input_number.zendure_seuil_surplus_solaire')|int }}
{% else %}
{{ 1200 }}
{% endif %}
{% else %}
{{ 0 }}
{% endif %}
# Calcul de la consigne de décharge = Déficit Solaire - Seuil de déficit solaire
- name: Consigne Décharge
unique_id: "Consigne_decharge"
unit_of_measurement: "W"
icon: "mdi:home-plus"
state: >
{% if states('sensor.deficit_solaire')|int > 0 %}
{% if (states('sensor.deficit_solaire')|int - states('input_number.zendure_seuil_deficit_solaire')|int) < 1200 %}
{{ states('sensor.deficit_solaire')|int - states('input_number.zendure_seuil_deficit_solaire')|int }}
{% else %}
{{ 1200 }}
{% endif %}
{% else %}
{{ 0 }}
{% endif %}
## INPUT NUMBER ##
input_number:
# Seuil de surplus solaire à partir duquel on commence à charger la batterie
# Mon réglage = 20W
zendure_seuil_surplus_solaire:
name: "Seuil Surplus Solaire"
min: 0
max: 500
step: 10
mode: box
unit_of_measurement: W
icon: "mdi:solar-power-variant"
# Seuil de déficit solaire à partir duquel on commence à décharger la batterie
# Mon réglage = 20W
zendure_seuil_deficit_solaire:
name: "Seuil Déficit Solaire"
min: 0
max: 500
step: 10
mode: box
unit_of_measurement: W
icon: "mdi:solar-power-variant"
# Seuil minimum de la consigne de charge (pour éviter la charge lente avec fortes pertes ; à régler à 450W pour rendement > 90%)
# Mon réglage = 450W
zendure_pmin_entree_ac:
name: "Limite Pmin entrée AC"
min: 0
max: 1200
step: 10
mode: box
unit_of_measurement: W
icon: "mdi:arrow-collapse-down"
# Limite maximum de la consigne de charge (pour brider la charge si nécessaire)
# Mon réglage = 1200W
zendure_pmax_entre_ac:
name: "Limite Pmax entrée AC"
min: 0
max: 1200
step: 10
mode: box
unit_of_measurement: W
icon: "mdi:arrow-collapse-up"
# Seuil minimum de la consigne de décharge (pour éviter la décharge lente avec fortes pertes ; à régler à 325W pour rendement > 90%)
# Mon réglage = 200W (pour effacer mon talon moyen qui est bas)
zendure_pmin_sortie_ac:
name: "Limite Pmin sortie AC"
min: 0
max: 1200
step: 10
mode: box
unit_of_measurement: W
icon: "mdi:arrow-collapse-down"
# Limite maximum de la consigne de charge (pour brider la charge si nécessaire)
# Mon réglage = 1200W
zendure_pmax_sortie_ac:
name: "Limite Pmax sortie AC"
min: 0
max: 1200
step: 10
mode: box
unit_of_measurement: W
icon: "mdi:arrow-collapse-up"
## INPUT SELECT ##
input_select:
# Selecteur du mode de fonctionnement Zendure :
# - Automatique : Equivalent du mode Intélligent Zendure avec basculement auto entre charge et décharge suivant conso
# - Charge : Mode charge uniquement (si surplus solaire)
# - Décharge : Mode décharge uniquement (si consommation)
# - Heures Creuses : Charge forcée pendant les heures creuses (nuit)
# - Manuel :
# - Veille :
mode_zendure:
name: Mode Zendure
options:
- Automatique
- Charge
- Décharge
- Heures Creuses
- Manuel
- Veille
initial: Automatique
icon: mdi:battery
## INPUT BOOLEAN ##
input_boolean:
# Etat 0/1 du mode charge AUTO :
charge_auto_zendure:
name: Charge Auto Zendure
icon: mdi:battery-arrow-up-outline
# Etat 0/1 du mode décharge AUTO :
decharge_auto_zendure:
name: Décharge Auto Zendure
icon: mdi:battery-arrow-down-outline
L’automatisme de charge AUTO :
alias: Zendure - Charge AC
description: ""
triggers:
- trigger: time_pattern
seconds: /5
conditions: []
actions:
- if:
- condition: numeric_state
entity_id: sensor.hyper_2000_electric_level
below: number.hyper_2000_soc_maximum
then:
- if:
- condition: state
state: "1"
entity_id: sensor.hyper_2000_acmode
then:
- if:
- condition: numeric_state
entity_id: sensor.consigne_charge
above: input_number.zendure_pmax_entre_ac
then:
- action: number.set_value
target:
entity_id: number.hyper_2000_limit_input
data:
value: "{{ states('input_number.zendure_pmax_entre_ac') }}"
else:
- if:
- condition: numeric_state
entity_id: sensor.consigne_charge
below: input_number.zendure_pmin_entree_ac
then:
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id:
- number.hyper_2000_limit_input
else:
- action: number.set_value
target:
entity_id: number.hyper_2000_limit_input
data:
value: "{{ states('sensor.consigne_charge') }}"
else:
- action: select.select_option
metadata: {}
data:
option: AC input mode
target:
entity_id: select.hyper_2000_ac_mode
else:
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id:
- number.hyper_2000_limit_input
mode: single
L’automatisme de décharge AUTO :
alias: Décharge Zendure
description: ""
triggers:
- trigger: time_pattern
seconds: /5
conditions: []
actions:
- if:
- condition: numeric_state
entity_id: sensor.hyper_2000_electric_level
above: number.hyper_2000_soc_minimum
then:
- if:
- condition: state
state: "2"
entity_id: sensor.hyper_2000_acmode
then:
- if:
- condition: numeric_state
entity_id: sensor.consigne_decharge_2
above: input_number.zendure_pmax_sortie_ac
then:
- action: number.set_value
target:
entity_id: number.hyper_2000_limit_output
data:
value: "{{ states('input_number.zendure_pmax_sortie_ac') }}"
else:
- if:
- condition: numeric_state
entity_id: sensor.consigne_decharge_2
below: input_number.zendure_pmin_sortie_ac
then:
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id:
- number.hyper_2000_limit_output
else:
- action: number.set_value
target:
entity_id: number.hyper_2000_limit_output
data:
value: "{{ states('sensor.consigne_decharge_2') }}"
else:
- action: select.select_option
metadata: {}
data:
option: AC output mode
target:
entity_id: select.hyper_2000_ac_mode
else:
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id:
- number.hyper_2000_limit_output
mode: single
L’automatisme de charge NUIT :
alias: Charge nuit Zendure
description: ""
triggers:
- trigger: time
at: "02:00:00"
id: HSC
- trigger: time
at: "06:00:00"
id: HC
- trigger: time
at: "07:00:00"
id: HP
- trigger: template
value_template: "{{ states ('sensor.hyper_2000_electric_level')|int > 99 }}"
id: FULL
- trigger: template
value_template: "{{ states ('sensor.hyper_2000_electric_level')|int > 59 }}"
id: MID
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- HSC
- condition: template
value_template: "{{ states ('sensor.hyper_2000_electric_level')|int < 60 }}"
sequence:
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id: automation.zendure_charge_ac
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id:
- automation.decharge_zendure
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id: automation.zendure_gestion_mode
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id: automation.zendure_mode_intelligent
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_input
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_output
- action: input_select.select_option
metadata: {}
data:
option: Heures Creuses
target:
entity_id:
- input_select.mode_zendure
- if:
- condition: state
state: "1"
entity_id: select.hyper_2000_ac_mode
then:
- action: number.set_value
metadata: {}
data:
value: "1200"
target:
entity_id: number.hyper_2000_limit_input
else:
- action: select.select_option
metadata: {}
data:
option: AC input mode
target:
entity_id: select.hyper_2000_ac_mode
- action: number.set_value
metadata: {}
data:
value: "1200"
target:
entity_id: number.hyper_2000_limit_input
- conditions:
- condition: trigger
id:
- HSC
- condition: template
value_template: "{{ states ('sensor.hyper_2000_electric_level')|int >= 60 }}"
sequence:
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id: automation.zendure_charge_ac
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id:
- automation.decharge_zendure
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id: automation.zendure_gestion_mode
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id: automation.zendure_mode_intelligent
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_input
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_output
- action: input_select.select_option
metadata: {}
data:
option: Veille
target:
entity_id:
- input_select.mode_zendure
- conditions:
- condition: trigger
id:
- HC
- FULL
- MID
- condition: state
state: Heures Creuses
entity_id: input_select.mode_zendure
sequence:
- if:
- condition: trigger
id:
- MID
- condition: numeric_state
entity_id: sensor.solcast_pv_forecast_previsions_pour_aujourd_hui
above: 8
then:
- if:
- condition: state
state: "1"
entity_id: select.hyper_2000_ac_mode
then:
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_input
else:
- action: select.select_option
metadata: {}
data:
option: AC input mode
target:
entity_id: select.hyper_2000_ac_mode
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_input
- action: input_select.select_option
metadata: {}
data:
option: Veille
target:
entity_id:
- input_select.mode_zendure
- if:
- condition: trigger
id:
- FULL
- HC
then:
- if:
- condition: state
state: "1"
entity_id: select.hyper_2000_ac_mode
then:
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_input
else:
- action: select.select_option
metadata: {}
data:
option: AC input mode
target:
entity_id: select.hyper_2000_ac_mode
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_input
- action: input_select.select_option
metadata: {}
data:
option: Veille
target:
entity_id:
- input_select.mode_zendure
- conditions:
- condition: trigger
id:
- HP
sequence:
- action: automation.turn_on
metadata: {}
data: {}
target:
entity_id: automation.zendure_gestion_mode
- action: input_select.select_option
metadata: {}
data:
option: Automatique
target:
entity_id:
- input_select.mode_zendure
mode: single
L’automatisation gestion de MODE :
alias: Zendure - Gestion mode
description: ""
triggers:
- trigger: state
entity_id:
- input_select.mode_zendure
id: MODE
conditions: []
actions:
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id: automation.zendure_mode_intelligent
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id:
- automation.decharge_zendure
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id: automation.zendure_charge_ac
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id:
- input_boolean.charge_auto_zendure
- input_boolean.decharge_auto_zendure
- choose:
- conditions:
- condition: state
state: Charge
entity_id: input_select.mode_zendure
sequence:
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_input
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_output
- action: select.select_option
metadata: {}
data:
option: AC input mode
target:
entity_id: select.hyper_2000_ac_mode
- action: automation.turn_on
metadata: {}
data: {}
target:
entity_id: automation.zendure_charge_ac
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id: input_boolean.charge_batterie_zendure
- conditions:
- condition: state
state: Décharge
entity_id: input_select.mode_zendure
sequence:
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_input
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_output
- action: select.select_option
metadata: {}
data:
option: AC output mode
target:
entity_id: select.hyper_2000_ac_mode
- action: automation.turn_on
metadata: {}
data: {}
target:
entity_id:
- automation.decharge_zendure
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id:
- input_boolean.decharge_auto_zendure
- conditions:
- condition: state
state: Automatique
entity_id: input_select.mode_zendure
sequence:
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_input
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_output
- action: select.select_option
metadata: {}
data:
option: None
target:
entity_id: select.hyper_2000_ac_mode
- action: automation.turn_on
metadata: {}
data: {}
target:
entity_id: automation.zendure_mode_intelligent
- if:
- condition: numeric_state
entity_id: sensor.surplus_solaire
above: 0
then:
- action: automation.turn_on
metadata: {}
data: {}
target:
entity_id: automation.zendure_charge_ac
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id:
- input_boolean.charge_auto_zendure
else:
- action: automation.turn_on
metadata: {}
data: {}
target:
entity_id:
- automation.decharge_zendure
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id:
- input_boolean.decharge_auto_zendure
- conditions:
- condition: state
state: Heures Creuses
entity_id: input_select.mode_zendure
sequence: []
- conditions:
- condition: state
state: Manuel
entity_id: input_select.mode_zendure
sequence:
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_input
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_output
- action: select.select_option
metadata: {}
data:
option: None
target:
entity_id: select.hyper_2000_ac_mode
- conditions:
- condition: state
state: Veille
entity_id: input_select.mode_zendure
sequence:
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_input
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id: number.hyper_2000_limit_output
- action: select.select_option
metadata: {}
data:
option: None
target:
entity_id: select.hyper_2000_ac_mode
mode: single
Et enfin le « mode Intelligent » :
alias: Zendure - Mode Intelligent
description: ""
triggers:
- trigger: numeric_state
entity_id:
- sensor.shellypro3em_a0dd6ca18868_phase_c_active_power
for:
hours: 0
minutes: 0
seconds: 30
above: input_number.zendure_pmin_sortie_ac
id: Decharge
- trigger: numeric_state
entity_id:
- sensor.consigne_charge
for:
hours: 0
minutes: 0
seconds: 30
above: input_number.zendure_pmin_entree_ac
id: Charge
conditions: []
actions:
- choose:
- conditions:
- condition: trigger
id:
- Charge
- condition: template
value_template: >-
{{ states ('sensor.hyper_2000_electric_level')|int < states
('number.hyper_2000_soc_maximum')|int }}
sequence:
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id:
- automation.decharge_zendure
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id:
- input_boolean.decharge_auto_zendure
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id:
- number.hyper_2000_limit_output
- action: select.select_option
metadata: {}
data:
option: AC input mode
target:
entity_id: select.hyper_2000_ac_mode
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id:
- number.hyper_2000_limit_input
- action: automation.turn_on
metadata: {}
data: {}
target:
entity_id: automation.zendure_charge_ac
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id:
- input_boolean.charge_auto_zendure
- conditions:
- condition: trigger
id:
- Decharge
- condition: template
value_template: >-
{{ states ('sensor.hyper_2000_electric_level')|int > states
('number.hyper_2000_soc_minimum')|int }}
sequence:
- action: automation.turn_off
metadata: {}
data:
stop_actions: true
target:
entity_id: automation.zendure_charge_ac
- action: input_boolean.turn_off
metadata: {}
data: {}
target:
entity_id:
- input_boolean.charge_auto_zendure
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id:
- number.hyper_2000_limit_input
- action: select.select_option
metadata: {}
data:
option: AC output mode
target:
entity_id: select.hyper_2000_ac_mode
- action: number.set_value
metadata: {}
data:
value: "0"
target:
entity_id:
- number.hyper_2000_limit_output
- action: automation.turn_on
metadata: {}
data: {}
target:
entity_id:
- automation.decharge_zendure
- action: input_boolean.turn_on
metadata: {}
data: {}
target:
entity_id:
- input_boolean.decharge_auto_zendure
mode: single
Ces automatismes me permettent de gérer un seul hyper, mais ils pourraient facilement être adaptés pour un cluster en y ajoutant le partage de charge/décharge des différents hypers.
Pour une installation triphasée avec 1 hyper/cluster par phase, il faudra un jeu d’automatisations par phase.
Pour terminer un exemple de dashboard pour gérer ça avec les superbes bubble cards!
Bon courage pour ceux qui se lancent !