Intégration Zendure

Bonjour à tous,

Je crée ce sujet afin de pouvoir échanger sur la toute nouvelle intégration Zendure développée par Fireson et disponible sur HACS :

Cette 1ière intégration Zendure non officielle est en version alpha mais elle fonctionne déjà très bien pour surveiller et contrôler efficacement les hyper 2000 (et autres solarflow 800) depuis Home Assistant.

C’est de loin la meilleure alternative à ce jour à la solution IoBroker qui nécessitait d’utiliser un broker externe. Surtout elle est beaucoup plus simple à mettre en œuvre.

Alors n’hésitez à partager ici vos retours sur cette intégration et l’utilisation que vous en faite.

8 « J'aime »

Bonsoir et merci pour ce nouveau suivi.
J’ai un shelly 3em. c’est son sensor power que je dois mettre dans le p1 sensor c’est bien ça?

Bonsoir, oui c’est bien ça.

1 « J'aime »

Ce qui est peut être très intéressant pour certains, c’est qu’avec cet add-on, il n’y a pas obligation d’avoir un Shelly … N’importe quelle pince ampèremétrique compatible HA fonctionnera.

1 « J'aime »

Bonjour Julien

Éventuellement , pourrais tu partager ton automatisation pour ta charge en heures creuses avec les prévisions Solcast ???
D’avance Merci

Bonjour,

Le voici :

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

Rien de bien exceptionnel en fait, je lance une charge à 1200W à 2h00 du matin (Heures Super Creuses chez moi) si le SOC est inférieur à 60%. Si les prévisions Solcast pour le jour sont bonnes (>8kWh) je charge jusqu’à 60% de SOC, sinon je charge à 100%. A 6h00 j’arrête la charge si elle n’est pas fini car je repasse en heures creuses et j’atttends 7h00 (Heures Pleines) pour relancer le mode automatique pour la journée.

3 « J'aime »

Super … Merci bien
En plus , je ne maitrisais pas trop la technique des ID .
Là , c’est limpide …

De rien…et oui très pratique les ID de trigger ! :wink:

Merci pour tes retours et ton partage, peux tu faire de même avec tes autres automatisations s’il te plaît ?

bonjour cob94440 j ai pas saisie ce qu il faut faire avec le p1 sensor
peux tu m expliquer stp

Bonjour,
Pour ma part avec un shelly j’ai indiqué la conso de ma phase sur laquelle se trouve la pince.

ce que tu as fait c est dans l application sur smartphone ou dans l intégration (ha)

Merci. Je ne vois pas l’intégration dans Hacs, Y a t il un dépôt personnalisé?

Dans l’intégration. Au moment de la configurer tu rentres le login mot de passe et en dessous « P1 sensor for smart matching ».
C’est là que je l’ai mis.
Mon shelly était déjà dans mon application.

Oui c’est dans la doc :wink: GitHub - FireSon/Zendure-HA: Zendure Home Assistant Integration

1 « J'aime »

j ai rate cette etape c est pour cela que j ai pas compris

merci pour l info

ca marche mieux maintenant

1 « J'aime »

Avec plaisir. Quand on peut aider.

Bonsoir,
As tu pu adapter ton tableau de bord que tu avais partagé sur l’autre post?
J’ai commencé de mon côté.
Il me manque le select mode,
Ainsi que la partie charge et décharge pour lesquels je n’ai pas trouvé d’équivalent a priori sur l’intégration.
Merci d’avance si tu as une idée.

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 !

3 « J'aime »

Bonsoir, oui ça prend un peu de temps mais il suffit de substituer les entités IoBroker par celles de l’intégration, mon code est resté le même sauf quelques modifications mineures.