[TUTO] Connecter/contrôler sa batterie Hyper2000 ZENDURE depuis HA

Je viens de faire quelques tests, vite fait, et cela semble pouvoir fonctionner pour 2 H2K, Il faut juste supprimer le mode grappe (cluster) dans l’application.
Je n’ai pas encore testé le mode intelligent avec tes automatisations, dans les jours à venir je pense.
Mais la charge, décharge indépendante de chaque H2K est possible déjà.
Je tiendrai informé sur ce topic.

1 « J'aime »

Ah ouais sympas tes évolutions, je suis partie dans une trajectoire totalement différente de côté :smiley:
Mais au final, on a le même truc globalement, mais tes configs sont beaucoup plus propres que les miennes ! :slight_smile:

1 « J'aime »

Bonjour Julien
j’avance lentement, parce que, jai des erreurs. peux tu me renseigner, j’ai beau reprendre ton tuto , je n’identifie pas dans l’automation « charge » le sensor « number.iobroker_zendure_p_limite_entree_zendure ». tu peux m’éclairer ?

Bonjour,
le sensor « number.iobroker_zendure_p_limite_entree_zendure » correspond au control MQTT de la puissance d’entrée de l’hyper. Celui-ci :

- name: "P Limite Entrée AC"
  unique_id: "Hyper2000_setInputLimit"
  state_topic: "zendure-solarflow/0/xxxxxx/yyyyyyyy/control/setInputLimit"
  command_topic: "zendure-solarflow/0/xxxxxx/yyyyyyyy/control/setInputLimit/set"
  value_template: >
    {{ int(value, 0) }}
  min: 0
  max: 1200
  step: 5
  mode: box
  unit_of_measurement: "W"
  icon: "mdi:home-plus"
1 « J'aime »

Bonjour,

Une question a ceux qui ont mis en place le iobroker, vous êtes à quelle version ?

Je suis en 1.10.0 alors que sur le github il devrait-être en 1.10.6

Mais peut être est-ce normal.

Hello,

tout d’abord un grand merci à @Julien_Galliot pour le tuto est les automatisations

pour ioBroker, la 1.10.0 est la dernière version stable, la 1.10.6 est sur le dépôt beta.

A+

2 « J'aime »

Hello @Julien_Galliot,

J’ai regardé l’automatisation de Décharge pour le problème de limitation de la puissance et je penses avoir corrigé le problème, j’ai également déplacé le code redondant des choix suivant la puissance à compenser à la fin des choix

alias: Zendure  - Décharge AC
description: ""
triggers:
  - trigger: time_pattern
    seconds: /10
conditions: []
actions:
  - if:
      - condition: device
        device_id: 8380f796ee4d748c326e7ae2b055d6cd
        domain: select
        entity_id: 783c076b0ca3e78ce50139bc39425e8a
        type: selected_option
        option: "2"
    then:
      - if:
          - condition: numeric_state
            entity_id: sensor.niveau_batterie_zendure
            above: 15
        then:
          - choose:
              - conditions:
                  - condition: numeric_state
                    entity_id: sensor.shellypro3em_a0dd6ca18868_phase_c_active_power
                    above: 50
                    below: 200
                sequence:
                  - action: input_number.increment
                    metadata: {}
                    data: {}
                    target:
                      entity_id: input_number.zendure_consigne_decharge_ac
              - conditions:
                  - condition: numeric_state
                    entity_id: sensor.shellypro3em_a0dd6ca18868_phase_c_active_power
                    above: 200
                    below: 500
                sequence:
                  - repeat:
                      count: 2
                      sequence:
                        - action: input_number.increment
                          metadata: {}
                          data: {}
                          target:
                            entity_id: input_number.zendure_consigne_decharge_ac
              - conditions:
                  - condition: numeric_state
                    entity_id: sensor.shellypro3em_a0dd6ca18868_phase_c_active_power
                    above: 500
                sequence:
                  - repeat:
                      count: 4
                      sequence:
                        - action: input_number.increment
                          metadata: {}
                          data: {}
                          target:
                            entity_id: input_number.zendure_consigne_decharge_ac
              - conditions:
                  - condition: numeric_state
                    entity_id: sensor.shellypro3em_a0dd6ca18868_phase_c_active_power
                    below: 0
                    above: -200
                sequence:
                  - action: input_number.decrement
                    metadata: {}
                    data: {}
                    target:
                      entity_id: input_number.zendure_consigne_decharge_ac
              - conditions:
                  - condition: numeric_state
                    entity_id: sensor.shellypro3em_a0dd6ca18868_phase_c_active_power
                    below: -200
                    above: -500
                sequence:
                  - repeat:
                      count: 2
                      sequence:
                        - action: input_number.decrement
                          metadata: {}
                          data: {}
                          target:
                            entity_id: input_number.zendure_consigne_decharge_ac
              - conditions:
                  - condition: numeric_state
                    entity_id: sensor.shellypro3em_a0dd6ca18868_phase_c_active_power
                    below: -500
                sequence:
                  - repeat:
                      count: 4
                      sequence:
                        - action: input_number.decrement
                          metadata: {}
                          data: {}
                          target:
                            entity_id: input_number.zendure_consigne_decharge_ac
          - if:
              - condition: numeric_state
                entity_id: input_number.zendure_consigne_decharge_ac
                above: input_number.zendure_p_limite_sortie_ac
            then:
              - action: input_number.set_value
                target:
                  entity_id: input_number.zendure_consigne_decharge_ac
                data:
                  value: "{{ states('input_number.zendure_p_limite_sortie_ac') }}"
          - action: number.set_value
            target:
              entity_id: number.iobroker_zendure_puissance_decharge_max
            data:
              value: "{{ states('input_number.zendure_consigne_decharge_ac') }}"
        else:
          - action: input_number.set_value
            metadata: {}
            data:
              value: 0
            target:
              entity_id: input_number.zendure_consigne_decharge_ac
          - delay:
              hours: 0
              minutes: 0
              seconds: 2
              milliseconds: 0
          - action: number.set_value
            target:
              entity_id: number.iobroker_zendure_puissance_decharge_max
            data:
              value: "{{ states('input_number.zendure_consigne_decharge_ac') }}"
    else:
      - device_id: 8380f796ee4d748c326e7ae2b055d6cd
        domain: select
        entity_id: 783c076b0ca3e78ce50139bc39425e8a
        type: select_option
        option: "2"
mode: single

Pour faire simple avec les choix :

  • on incrémente ou décrémente plus ou moins la consigne
  • on vérifie que la consigne n’est pas supérieure au max défini, si supérieur on met la limite dans la consigne
  • on affecte la consigne à la puissance de décharge de la batterie

A+

Salut, tiens ben justement j’ai également sorti la partie redondante du code à la fin du choix pas plus tard que hier! J’avais vu il y a quelques jours que je pouvais simplifier le code. Par contre j’ai pas vérifié encore si ça règle le problème de la limitation.

Ce qui corrige entre autre le problème de gestion de la valeur limite c’est le test de dépassement, dans ta version tu compares la valeur actuellement sur la batterie avec la limite et dans ma version je compare la valeur de la consigne avec la limite avant de l’appliquer à la batterie.

Dans l’automatisation pour la gestion du mode on peux également sortir des conditions les désactivations des 3 automatisations (charge, décharge, intelligent) pour les mettre juste avant.

Gestion de mode

description: ""
triggers:
  - trigger: state
    entity_id:
      - input_select.mode_batterie_zendure
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.zendure_decharge_ac
  - action: automation.turn_off
    metadata: {}
    data:
      stop_actions: true
    target:
      entity_id: automation.zendure_charge_ac
  - choose:
      - conditions:
          - condition: state
            entity_id: input_select.mode_batterie_zendure
            state: Charge
        sequence:
          - device_id: 8380f796ee4d748c326e7ae2b055d6cd
            domain: number
            entity_id: c1245cb122428ce8fdefa29721a5b1b1
            type: set_value
            value: 0
          - device_id: 8380f796ee4d748c326e7ae2b055d6cd
            domain: select
            entity_id: 783c076b0ca3e78ce50139bc39425e8a
            type: select_option
            option: "1"
      - conditions:
          - condition: state
            entity_id: input_select.mode_batterie_zendure
            state: Décharge
        sequence:
          - device_id: 8380f796ee4d748c326e7ae2b055d6cd
            domain: number
            entity_id: d86b1d83416884e826a794ac45126102
            type: set_value
            value: 0
          - device_id: 8380f796ee4d748c326e7ae2b055d6cd
            domain: select
            entity_id: 783c076b0ca3e78ce50139bc39425e8a
            type: select_option
            option: "2"
      - conditions:
          - condition: state
            entity_id: input_select.mode_batterie_zendure
            state: Automatique
        sequence:
          - device_id: 8380f796ee4d748c326e7ae2b055d6cd
            domain: number
            entity_id: d86b1d83416884e826a794ac45126102
            type: set_value
            value: 0
          - device_id: 8380f796ee4d748c326e7ae2b055d6cd
            domain: number
            entity_id: c1245cb122428ce8fdefa29721a5b1b1
            type: set_value
            value: 0
          - device_id: 8380f796ee4d748c326e7ae2b055d6cd
            domain: select
            entity_id: 783c076b0ca3e78ce50139bc39425e8a
            type: select_option
            option: "0"
          - action: automation.turn_on
            metadata: {}
            data: {}
            target:
              entity_id: automation.zendure_mode_intelligent
          - if:
              - condition: numeric_state
                entity_id: sensor.surplus_pv
                above: 0
            then:
              - action: automation.turn_on
                metadata: {}
                data: {}
                target:
                  entity_id: automation.zendure_charge_ac
            else:
              - action: automation.turn_on
                metadata: {}
                data: {}
                target:
                  entity_id: automation.zendure_decharge_ac
mode: single

Bonjour, effectivement je comparais pas les bonne choses! C’est corrigé de mon côté, merci pour le débug. Je me suis laissé cette possibilité de brider l’hyper en sortie mais pour l’instant je ne l’utilise pas. J’utilise surtout les limites basses et haute de charge. La limite basse est très intéressante pour charger dans la plage ou l’efficacité de la conversion ac/DC commence a être bonne (>90%). D’après mes essais 500w de consigne de charge minimum est un bon compromis.

Bonjour Julien,

Tu aurais le code de ces tableaux de bord stp ? Car les noms des capteurs, sensors … changent du tuto aux screens :slight_smile:
J’ai fini d’adapter toutes les automatisations et je souhaite le mettre en forme sur ton exemple (pour tester sur cette base).
De plus, juste par curiosité, ta prise connectée sur le hyper c’est pour ? En cas de calibration un jour rouge ?
Merci d’avance.

Salut,

Voilà mes 3 dashboards en yaml :

type: entities
entities:
  - entity: input_select.mode_batterie_zendure
  - entity: sensor.niveau_batterie_zendure
  - entity: sensor.iobroker_zendure_ac_mode
  - entity: sensor.iobroker_zendure_etat_batterie
  - entity: sensor.iobroker_zendure_temperature_zendure
title: Mode et états
type: entities
entities:
  - entity: input_boolean.charge_batterie_zendure
    secondary_info: last-changed
    icon: mdi:battery-arrow-up
  - entity: input_number.zendure_p_limite_entree_ac
  - entity: input_number.limite_min_entree_ac
  - entity: input_number.zendure_seuil_charge_ac
  - entity: number.iobroker_zendure_p_limite_entree_zendure
  - entity: sensor.iobroker_zendure_puissance_reseau_zendure
  - entity: sensor.iobroker_zendure_energie_soutiree_zendure
  - entity: sensor.consigne_charge_ac
    secondary_info: none
    icon: ""
title: Charge
type: entities
entities:
  - entity: input_boolean.decharge_batterie_zendure
  - entity: input_number.zendure_p_limite_sortie_ac
  - entity: number.iobroker_zendure_p_limite_sortie_zendure
  - entity: sensor.iobroker_zendure_p_sortie_ac
  - entity: sensor.iobroker_zendure_energie_sortie_batterie
  - entity: input_number.zendure_consigne_decharge_ac
title: Décharge

La prise connectée, c’était pour faire des essais et mesures au début, elle n’existe plus.

Bonne continuation pour tes tests!

1 « J'aime »

Petite modification du jour, je suis passé sur des pas de 25W pour la décharge, pour une meilleur précision et coller un peu mieux au besoin de la maison :

Ainsi je suis passé à 8 choix au lieu de 6 avec :

  • Seuil de 50W abaissé à 25W
  • Nouveaux seuils à 100W et -100W
  • Incrémentation de 1/2/4/8 pas (fonction « répéter ») pour les choix 1 à 4
  • Décrémentation de 1/2/4/8 pas (fonction « répéter ») pour les choix 5 à 8

Avec cette modification, j’arrive à une correspondance à la courbe supérieure à 90%. Ca pouvait être sensiblement moins lorsque la maison consommait peu, sur le talon par exemple, avec le pas de 50.

1 « J'aime »

Merci encore.

D’où vient le input_boolean.charge_batterie_zendure d’un coup sur ton dashboard ? :slight_smile: Je ne le vois créer nulle part … (idem pour sensor.iobroker_zendure_puissance_reseau_zendure et sensor.iobroker_zendure_energie_soutiree_zendure par exemple mais j’ai compris que cela devait être sensor.iobroker_zendure_p_sortie_ac et sensor.iobroker_zendure_p_entree_ac).

Je sais que c’est énormément de temps ce que tu as fait et merci, mais si tu en as la possibilité, est-il possible que tu puisses modifier ou résumer les noms entités, sensors, etc modifiés ? Car du début à la fin, cela change et malgré mes interpolations… parfois je suis perdu (je ne dois pas être le seul).

Encore merci pour tout le taf fait.

Bonjour,

Effectivement souvent la difficulté dans HA c’est qu’on créé des sensors en yaml avec des sensor id compliqués (exemple : sensor.iobroker_zendure_puissance_reseau_zendure) mais ensuite dans l’UI pour les dashboards on va utiliser des noms plus courts (sinon ça rentre pas) et plus parlant (« P Entrée AC » pour le même exemple cité plus haut).

Pour la correspondance entre les yaml et les dashboards, je les redonne dans le même post si ça peut aider. L’ordre des yaml correspond à l’ordre dans les dashboards :

type: entities
entities:
  - entity: input_select.mode_batterie_zendure
  - entity: sensor.niveau_batterie_zendure
  - entity: sensor.iobroker_zendure_ac_mode
  - entity: sensor.iobroker_zendure_etat_batterie
  - entity: sensor.iobroker_zendure_temperature_zendure
title: Mode et états

type: entities
entities:
  - entity: input_boolean.charge_batterie_zendure
    secondary_info: last-changed
    icon: mdi:battery-arrow-up
  - entity: input_number.zendure_p_limite_entree_ac
  - entity: input_number.limite_min_entree_ac
  - entity: input_number.zendure_seuil_charge_ac
  - entity: number.iobroker_zendure_p_limite_entree_zendure
  - entity: sensor.iobroker_zendure_puissance_reseau_zendure
  - entity: sensor.iobroker_zendure_energie_soutiree_zendure
  - entity: sensor.consigne_charge_ac
    secondary_info: none
    icon: ""
title: Charge

type: entities
entities:
  - entity: input_boolean.decharge_batterie_zendure
  - entity: input_number.zendure_p_limite_sortie_ac
  - entity: input_number.limite_min_sortie_ac
  - entity: number.iobroker_zendure_p_limite_sortie_zendure
  - entity: sensor.iobroker_zendure_p_sortie_ac
  - entity: sensor.iobroker_zendure_energie_sortie_batterie
  - entity: input_number.zendure_consigne_decharge_ac
title: Décharge
1 « J'aime »

Super, merci. Et pour input_boolean.charge_batterie_zendure et input_boolean.decharge_batterie_zendure tu les as créés quand et cela active quoi (une automatisation je pense) ?

Ah non j’ai ajouté ça dans mes automatismes pour savoir quand HA envoie une consigne de charge ou de décharge à la batterie. Interrupteur à 1 si une consigne a été envoyée, à 0 si pas de consigne.

J’ai eu quelque fois l’instance mqtt d’iobroker qui se mettait en défaut, avec besoin de redémarrer le broker, et dans ce cas HA envoyait des consignes qui n’arrivaient pas jusqu’au système zendure. Rien d’alarmant (ce n’est pas récurrent) mais toujours embêtant quand ça arrive, j’ai bien perdu une ou deux journée de stockage comme ça.

Donc pour commencer j’ai installer l’intégration Proxmox qui me permet de redémarrer à distance ma VM windows sur laquelle tourne iobroker depuis HA (c’est très pratique), et l’étape suivant est de créer un automatisme qui surveillera que tout fonctionne bien, que les publications MQTT passent bien en particulier, qui me notifiera et rédémarrera iobroker automatiquement en cas de problème. D’où ces 2 nouveaux binary sensor que j’ai créé.

Aussi tu remarquera en nouveauté que j’ai ajouté une limite basse de décharge (comme je l’avais déjà fait pour la charge) car je veux éviter de décharger à faible puissance car trop de perte. De manière générale, il faudrait idéalement charger à partir de 450W et décharger à partir de 350W pour avoir moins de 10% de perte sur chaque conversion soit un rendement AC/DC/AC de l’ordre de 80%.

Les graphiques suivants montrent bien qu’il n’est pas rentable de charger ou décharger à très faible puissance :

Pour ma configuration j’ai une limite basse de charge à 450W et une limite basse de décharge à 200W (car j’ai un talon de conso très bas et je veux le compenser à minima), donc je suis plutôt entre 75% et 80% de rendement sur un cycle complet de batterie.

Bonjour à tous,

Pour ceux qui voudraient mettre en place la solution proposée par @Julien_Galliot sans trop se prendre la tête, j’ai mis sous forme de packages tout le nécessaire.

  • Créer un dossier packages dans le dossier de configuration de HA
  • Dans le fichier configuration.yaml ajouter dans la section homeassistant :
    packages: !include_dir_named packages
  • Créer un fichier zendure-entities.yaml dans le dossier packages avec comme contenu :
    Le code est prévu pour l’hyper2k et 4 batteries, commenter les batteries non utilisées au besoin (lignes 168 à 408, 5 entités par batterie)
    Faire les modifications indiquées au début du fichier
zendure_entities.yaml
############################################################
##         MQTT  HYPER 2000 - Package - entities          ##
############################################################

############################################################
##              MODIFICATIONS NECESSAIRES                 ##
##                                                        ##
## remplacer gxxxxx/Rxxxxxxx par les ids de MQTT          ##
##                                                        ##
## remplacer les numéros de série des Batteries           ##
## batterie 1 : CO4FHMHDMxxxxx1                           ##
## batterie 2 : CO4FHMHDMxxxxx2                           ##
## batterie 3 : CO4FHMHDMxxxxx3                           ##
## batterie 3 : CO4FHMHDMxxxxx4                           ##
##                                                        ##
############################################################
mqtt:
  - sensor:
    - name: "Niveau Batteries"
      unique_id: "iobroker_hyper_2000_niveau_batteries"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/electricLevel
      value_template: '{{ value }}'
      unit_of_measurement: "%"
      device_class: "battery"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Temps de charge restant"
      unique_id: "iobroker_hyper_2000_charge_restant"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/remainInputTime
      value_template: "{{ value }}"
      device_class: "duration"
      unit_of_measurement: "min"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
    
    - name: "Temps de décharge restant"
      unique_id: "iobroker_hyper_2000_decharge_restant"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/remainOutTime
      value_template: "{{ value }}"
      device_class: "duration"
      unit_of_measurement: "min"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Charge maxi"
      unique_id: "iobroker_hyper_2000_charge_maxi"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/socSet
      unit_of_measurement: "%"
      value_template: "{{ value }}"
      icon: "mdi:battery-high"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Charge mini"
      unique_id: "iobroker_hyper_2000_charge_mini"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/minSoc
      unit_of_measurement: "%"
      value_template: "{{ value }}"
      icon: "mdi:battery-low"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
        
    - name: "Puissance de sortie max"
      unique_id: "iobroker_hyper_2000_puissance_sortie_max"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/outputLimit
      value_template: "{{ value }}"
      unit_of_measurement: "W"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Puissance solaire"
      unique_id: "iobroker_hyper_2000_puissance solaire"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/solarInputPower
      unit_of_measurement: "W"
      device_class: "power"
      value_template: "{{ value }}"
      state_class: "measurement"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Puissance décharge batteries"
      unique_id: "iobroker_hyper_2000_puissance_decharge_batteries"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packInputPower
      unit_of_measurement: "W"
      device_class: "power"
      value_template: "{{ value }}"
      state_class: "measurement"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Puissance charge batteries"
      unique_id: "iobroker_hyper_2000_puissance_charge_batteries"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/outputPackPower
      unit_of_measurement: "W"
      device_class: "power"
      value_template: "{{ value }}"
      state_class: "measurement"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Consommation maison"
      unique_id: "iobroker_hyper_2000_conso_maison"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/outputHomePower
      unit_of_measurement: "W"
      device_class: "power"
      value_template: "{{ value }}"
      state_class: "measurement"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Puissance solaire 1"
      unique_id: "iobroker_hyper_2000_puissance_solaire_1"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/pvPower1
      value_template: "{{ value }}"
      unit_of_measurement: "W"
      device_class: "power"
      state_class: "measurement"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Puissance solaire 2"
      unique_id: "iobroker_hyper_2000_puissance_solaire_2"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/pvPower2
      value_template: "{{ value }}"
      unit_of_measurement: "W"
      device_class: "power"
      state_class: "measurement"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Temp. max batterie 1"
      unique_id: "iobroker_hyper_2000_temp_max_batterie_1"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx1/maxTemp
      value_template: "{{ value }}"
      unit_of_measurement: "°C"
      device_class: "temperature"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Niveau batterie 1"
      unique_id: "iobroker_hyper_2000_niveau_batterie_1"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx1/socLevel
      value_template: "{{ value }}"
      unit_of_measurement: "%"
      device_class: "battery"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"

    - name: "Tens. max batterie 1"
      unique_id: "iobroker_hyper_2000_tens_max_batterie_1"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx1/maxVol
      value_template: "{{ value }}"
      unit_of_measurement: "V"
      device_class: "voltage"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Tens. min batterie 1"
      unique_id: "iobroker_hyper_2000_tens_min_batterie_1"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx1/minVol
      value_template: "{{ value }}"
      unit_of_measurement: "V"
      device_class: "voltage"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Tens. batterie 1"
      unique_id: "iobroker_hyper_2000_tens_batterie_1"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx1/totalVol
      value_template: "{{ value }}"
      unit_of_measurement: "V"
      device_class: "voltage"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
    
    - name: "Temp. max batterie 2"
      unique_id: "iobroker_hyper_2000_temp_max_batterie_2"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx2/maxTemp
      value_template: "{{ value }}"
      unit_of_measurement: "°C"
      device_class: "temperature"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Niveau batterie 2"
      unique_id: "iobroker_hyper_2000_niveau_batterie_2"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx2/socLevel
      value_template: "{{ value }}"
      unit_of_measurement: "%"
      device_class: "battery"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"

    - name: "Tens. max batterie 2"
      unique_id: "iobroker_hyper_2000_tens_max_batterie_2"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx2/maxVol
      value_template: "{{ value }}"
      unit_of_measurement: "V"
      device_class: "voltage"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Tens. min batterie 2"
      unique_id: "iobroker_hyper_2000_tens_min_batterie_2"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx2/minVol
      value_template: "{{ value }}"
      unit_of_measurement: "V"
      device_class: "voltage"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Tens. batterie 2"
      unique_id: "iobroker_hyper_2000_tens_batterie_2"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx2/totalVol
      value_template: "{{ value }}"
      unit_of_measurement: "V"
      device_class: "voltage"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
    
    - name: "Temp. max batterie 3"
      unique_id: "iobroker_hyper_2000_temp_max_batterie_3"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx3/maxTemp
      value_template: "{{ value }}"
      unit_of_measurement: "°C"
      device_class: "temperature"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Niveau batterie 3"
      unique_id: "iobroker_hyper_2000_niveau_batterie_3"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx3/socLevel
      value_template: "{{ value }}"
      unit_of_measurement: "%"
      device_class: "battery"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"

    - name: "Tens. max batterie 3"
      unique_id: "iobroker_hyper_2000_tens_max_batterie_3"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx3/maxVol
      value_template: "{{ value }}"
      unit_of_measurement: "V"
      device_class: "voltage"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Tens. min batterie 3"
      unique_id: "iobroker_hyper_2000_tens_min_batterie_3"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx3/minVol
      value_template: "{{ value }}"
      unit_of_measurement: "V"
      device_class: "voltage"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Tens. batterie 3"
      unique_id: "iobroker_hyper_2000_tens_batterie_3"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx3/totalVol
      value_template: "{{ value }}"
      unit_of_measurement: "V"
      device_class: "voltage"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
    
    - name: "Temp. max batterie 4"
      unique_id: "iobroker_hyper_2000_temp_max_batterie_4"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx4/maxTemp
      value_template: "{{ value }}"
      unit_of_measurement: "°C"
      device_class: "temperature"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Niveau batterie 4"
      unique_id: "iobroker_hyper_2000_niveau_batterie_4"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx4/socLevel
      value_template: "{{ value }}"
      unit_of_measurement: "%"
      device_class: "battery"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"

    - name: "Tens. max batterie 4"
      unique_id: "iobroker_hyper_2000_tens_max_batterie_4"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx4/maxVol
      value_template: "{{ value }}"
      unit_of_measurement: "V"
      device_class: "voltage"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Tens. min batterie 4"
      unique_id: "iobroker_hyper_2000_tens_min_batterie_4"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx4/minVol
      value_template: "{{ value }}"
      unit_of_measurement: "V"
      device_class: "voltage"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Tens. batterie 4"
      unique_id: "iobroker_hyper_2000_tens_batterie_4"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packData/CO4FHMHDMxxxxx4/totalVol
      value_template: "{{ value }}"
      unit_of_measurement: "V"
      device_class: "voltage"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
    
    - name: "Puissance de charge du réseau"
      unique_id: "iobroker_hyper_2000_gridInputPower"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/gridInputPower
      value_template: "{{ value }}"
      unit_of_measurement: "W"
      device_class: "power"
      state_class: "measurement"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Temp. hyper"
      unique_id: "iobroker_hyper_2000_temp_hyper"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/hyperTmp
      value_template: "{{ value }}"
      unit_of_measurement: "°C"
      device_class: "temperature"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Etat batteries"
      unique_id: "iobroker_hyper_2000_etat_batteries"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/packState
      value_template: "{{ value }}"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Etat hyper"
      unique_id: "iobroker_hyper_2000_etat"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/hubState
      value_template: "{{ value }}"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Contournement"
      unique_id: "iobroker_hyper_2000_contournement"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/pass
      value_template: "{{ value }}"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"

    - name: "Energie Entrée AC"
      unique_id: "Hyper2000_gridInputEnergyTodayWh"
      state_topic: "zendure-solarflow/0/gxxxxx/Rxxxxxxx/calculations/gridInputEnergyTodayWh"
      unit_of_measurement: "Wh"
      value_template: '{{ value }}'
      icon: "mdi:transmission-tower-export"
      force_update: true
      device_class: energy
      state_class: total_increasing
      device:
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "Zendure"
        model: "Hyper 2000"

    - name: "Energie Entrée Batterie"
      unique_id: "Hyper2000_outputPackEnergyTodayW"
      state_topic: "zendure-solarflow/0/gxxxxx/Rxxxxxxx/calculations/outputPackEnergyTodayWh"
      unit_of_measurement: "Wh"
      value_template: '{{ value }}'
      icon: "mdi:battery-arrow-up"
      force_update: true
      device_class: energy
      state_class: total_increasing
      device:
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "Zendure"
        model: "Hyper 2000"
  
  - number:
    - name: "Puissance décharge max"
      unique_id: "iobroker_hyper_2000_puissance_sortie_maxi"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/outputLimit
      command_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/control/setOutputLimit/set
      value_template: "{{ value }}"
      min: 0.0
      max: 1200.0
      step: 50
      mode: "slider"
      unit_of_measurement: "W"
      icon: "mdi:home-battery"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Puissance charge max"
      unique_id: "iobroker_hyper_2000_puissance_entree_maxi"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/inputLimit
      command_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/control/setInputLimit/set
      value_template: "{{ value }}"
      min: 0.0
      max: 1200.0
      step: 50
      mode: "slider"
      unit_of_measurement: "W"
      icon: "mdi:transmission-tower-export"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Réglage décharge mini"
      unique_id: "iobroker_hyper_2000_decharge_mini"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/control/dischargeLimit
      command_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/control/dischargeLimit/set
      value_template: "{{ value }}"
      min: 0.0
      max: 100.0
      step: 5
      mode: "slider"
      unit_of_measurement: "%"
      icon: "mdi:battery-low"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
    - name: "Réglage charge maxi"
      unique_id: "iobroker_hyper_2000_charge_maxi"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/control/chargeLimit
      command_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/control/chargeLimit/set
      value_template: "{{ value }}"
      min: 0.0
      max: 100.0
      step: 5
      mode: "slider"
      unit_of_measurement: "%"
      icon: "mdi:battery-high"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"
  
  - select:
    - name: "Mode Hyper   1-> Charge  2-> Décharge"
      unique_id: "iobroker_hyper_2000_mode_hyper"
      state_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/acMode
      command_topic: zendure-solarflow/0/gxxxxx/Rxxxxxxx/control/acMode/set
      value_template: "{{ value }}"
      options:
        - "0"
        - "1"
        - "2"
      device: 
        name: "IoBroker-Zendure"
        identifiers: "Io-Zendure"
        manufacturer: "IoBroker-Zendure"
        model: "Hyper 2000"

input_number:
  zendure_seuil_charge_ac:
    name: "Seuil Surplus PV"
    min: 0
    max: 1000
    step: 10
    mode: box
    unit_of_measurement: W
    icon: "mdi:solar-power-variant"
    
  zendure_limite_max_ac:
    name: "Limite MAX entrée AC"
    min: 0
    max: 1200
    step: 10
    mode: box
    unit_of_measurement: W
    icon: "mdi:arrow-collapse-up"
    
  zendure_limite_min_ac:
    name: "Limite MIN entrée AC"
    min: 0
    max: 1200
    step: 10
    mode: box
    unit_of_measurement: W
    icon: "mdi:arrow-collapse-down"

  zendure_consigne_decharge_ac:
    name: "Consigne Décharge AC"
    min: 0
    max: 1200
    step: 10
    mode: box
    initial: 0
    unit_of_measurement: W
    icon: "mdi:home-plus"


template:
  - sensor:
    - name: Surplus PV
      unique_id: "Surplus_PV"
      unit_of_measurement: "W"
      state: >
        {% if has_value('sensor.iobroker_zendure_puissance_de_charge_du_reseau') %}
          {% if states('sensor.shelly_linky_em0_power')|int - states('sensor.iobroker_zendure_puissance_de_charge_du_reseau')|int < 0 %}
            {{ (states('sensor.shelly_linky_em0_power')|int - states('sensor.iobroker_zendure_puissance_de_charge_du_reseau')|int)|abs }}
          {% else %}
            {{ 0 }}
          {% endif %}
        {% else %}
          {% if states('sensor.shelly_linky_em0_power')|int < 0 %}
            {{ (states('sensor.shelly_linky_em0_power')|int)|abs }}
          {% else %}
            {{ 0 }}
          {% endif %}
        {% endif %}
      
    - name: Consigne_Charge_AC
      unique_id: "Cons_Charge_AC"
      unit_of_measurement: "W"
      state: >
        {% if states('sensor.surplus_pv')|int > states('input_number.zendure_seuil_charge_ac')|int %}
          {% if (states('sensor.surplus_pv')|int - states('input_number.zendure_seuil_charge_ac')|int) < 1200 %}
            {{ states('sensor.surplus_pv')|int - states('input_number.zendure_seuil_charge_ac')|int }}
          {% else %}
            {{ 1200 }}
          {% endif %} 
        {% else %}
          {{ 0 }}
        {% endif %}
  
    - name: Niveau Batterie Zendure
      unique_id: "Zendure_SOC"
      unit_of_measurement: "%"
      state: >
        {% if has_value('sensor.iobroker_zendure_niveau_batteries') %}
          {{ states('sensor.iobroker_zendure_niveau_batteries') }}
        {% else %}
          {{ 50 }}
        {% endif %} 


input_select:
  mode_batterie_zendure:
    name: Mode batterie Zendure
    options:
      - Automatique
      - Charge
      - Décharge
      - Manuel
    initial: Automatique
    icon: mdi:battery-high
  • Créer un fichier zendure-recorder.yaml dans le dossier packages, je désactive l’enregistrement de la plupart des entités (a modifier suivant vos besoins):
zendure_recorder.yaml
############################################################
##         MQTT  HYPER 2000 - Package - recorder          ##
############################################################
recorder:
  include:
    entities:
      - sensor.iobroker_zendure_puissance_de_charge_du_reseau
      - sensor.iobroker_zendure_consommation_maison
#      - sensor.iobroker_zendure_puissance_decharge_batteries
#      - sensor.iobroker_zendure_puissance_charge_batteries
  exclude:   
    entities:
      - sensor.consigne_charge_ac
      - sensor.niveau_batterie_zendure
      - sensor.surplus_pv
    entity_globs:
      - sensor.iobroker_zendure*
      - number.iobroker_zendure*
      - input_number.zendure*
      - select.iobroker_zendure*
      
  • Créer un fichier zendure-automations.yaml dans le dossier packages :
    Dans un premier temps, je vous conseille de gérer les automation avec l’UI de HA pour pouvoir les modifier facilement le temps que le tout soit pleinement fonctionnel (même si ça fonctionne déjà bien en l’état)

MAJ 2025-01-25 : corrections des pas sur automatisation décharge
MAJ 2025-02-05 : augmentations des pas pour réduire les temps de convergence en décharge

MAJ 2025-02-06 :
utilisation des id pour le choix charge/decharge
passage à 8 choix pour la décharge pour coller aux automatisation de @Julien_Galliot

zendure_automations.yaml
############################################################
##         MQTT  HYPER 2000 - Package - automations       ##
############################################################
############################################################
##              MODIFICATIONS NECESSAIRES                 ##
##                                                        ##
## remplacer sensor.shelly_linky_em0_power                ##
## par votre capteur de consommation/injection            ##
##                                                        ##
############################################################
automation:
  - alias: Zendure - Décharge AC
    description: ""
    triggers:
      - trigger: time_pattern
        seconds: /10
    conditions: []
    actions:
      - if:
          - condition: state
            entity_id: select.iobroker_zendure_mode_hyper_1_charge_2_decharge
            state: "2"
        then:
          - if:
              - condition: numeric_state
                entity_id: sensor.niveau_batterie_zendure
                above: number.iobroker_zendure_reglage_decharge_mini
            then:
              - choose:
                  - conditions:
                      - condition: numeric_state
                        entity_id: sensor.shelly_linky_em0_power
                        above: 30
                        below: 100
                    sequence:
                      - action: input_number.increment
                        metadata: {}
                        data: {}
                        target:
                          entity_id: input_number.zendure_consigne_decharge_ac
                  - conditions:
                      - condition: numeric_state
                        entity_id: sensor.shelly_linky_em0_power
                        above: 100
                        below: 200
                    sequence:
                      - repeat:
                          count: 5
                          sequence:
                            - action: input_number.increment
                              metadata: {}
                              data: {}
                              target:
                                entity_id: input_number.zendure_consigne_decharge_ac
                  - conditions:
                      - condition: numeric_state
                        entity_id: sensor.shelly_linky_em0_power
                        above: 200
                        below: 500
                    sequence:
                      - repeat:
                          count: 10
                          sequence:
                            - action: input_number.increment
                              metadata: {}
                              data: {}
                              target:
                                entity_id: input_number.zendure_consigne_decharge_ac
                  - conditions:
                      - condition: numeric_state
                        entity_id: sensor.shelly_linky_em0_power
                        above: 500
                    sequence:
                      - repeat:
                          count: 20
                          sequence:
                            - action: input_number.increment
                              metadata: {}
                              data: {}
                              target:
                                entity_id: input_number.zendure_consigne_decharge_ac
                  - conditions:
                      - condition: numeric_state
                        entity_id: sensor.shelly_linky_em0_power
                        below: 0
                        above: -100
                    sequence:
                      - action: input_number.decrement
                        metadata: {}
                        data: {}
                        target:
                          entity_id: input_number.zendure_consigne_decharge_ac
                  - conditions:
                      - condition: numeric_state
                        entity_id: sensor.shelly_linky_em0_power
                        below: -100
                        above: -200
                    sequence:
                      - repeat:
                          count: 5
                          sequence:
                            - action: input_number.decrement
                              metadata: {}
                              data: {}
                              target:
                                entity_id: input_number.zendure_consigne_decharge_ac
                  - conditions:
                      - condition: numeric_state
                        entity_id: sensor.shelly_linky_em0_power
                        below: -200
                        above: -500
                    sequence:
                      - repeat:
                          count: 10
                          sequence:
                            - action: input_number.decrement
                              metadata: {}
                              data: {}
                              target:
                                entity_id: input_number.zendure_consigne_decharge_ac
                  - conditions:
                      - condition: numeric_state
                        entity_id: sensor.shelly_linky_em0_power
                        below: -500
                    sequence:
                      - repeat:
                          count: 20
                          sequence:
                            - action: input_number.decrement
                              metadata: {}
                              data: {}
                              target:
                                entity_id: input_number.zendure_consigne_decharge_ac

              - if:
                  - condition: numeric_state
                    entity_id: input_number.zendure_consigne_decharge_ac
                    above: input_number.zendure_p_limite_sortie_ac
                then:
                  - action: input_number.set_value
                    target:
                      entity_id: input_number.zendure_consigne_decharge_ac
                    data:
                      value: "{{ states('input_number.zendure_p_limite_sortie_ac') }}"
              - action: number.set_value
                target:
                  entity_id: number.iobroker_zendure_puissance_decharge_max
                data:
                  value: "{{ states('input_number.zendure_consigne_decharge_ac') }}"
            else:
              - action: input_number.set_value
                metadata: {}
                data:
                  value: 0
                target:
                  entity_id: input_number.zendure_consigne_decharge_ac
              - delay:
                  hours: 0
                  minutes: 0
                  seconds: 2
                  milliseconds: 0
              - action: number.set_value
                target:
                  entity_id: number.iobroker_zendure_puissance_decharge_max
                data:
                  value: "{{ states('input_number.zendure_consigne_decharge_ac') }}"
        else:
          - action: select.select_option
            metadata: {}
            data:
              option: "2"
            target:
              entity_id: select.iobroker_zendure_mode_hyper_1_charge_2_decharge
    mode: single

  - alias: Zendure - Charge AC
    description: ""
    triggers:
      - trigger: time_pattern
        seconds: /10
    conditions:
      - condition: numeric_state
        entity_id: sensor.niveau_batterie_zendure
        below: number.iobroker_zendure_reglage_charge_maxi
    actions:
      - if:
          - condition: state
            entity_id: select.iobroker_zendure_mode_hyper_1_charge_2_decharge
            state: "1"
        then:
          - choose:
              - conditions:
                  - condition: numeric_state
                    entity_id: sensor.consigne_charge_ac
                    above: input_number.zendure_limite_max_ac
                sequence:
                  - action: number.set_value
                    target:
                      entity_id: number.iobroker_zendure_puissance_charge_max
                    data:
                      value: "{{ states('input_number.zendure_limite_max_ac') }}"
              - conditions:
                  - condition: numeric_state
                    entity_id: sensor.consigne_charge_ac
                    below: input_number.zendure_limite_min_ac
                sequence:
                  - action: number.set_value
                    target:
                      entity_id: number.iobroker_zendure_puissance_charge_max
                    data:
                      value: 0
            default:
              - action: number.set_value
                target:
                  entity_id: number.iobroker_zendure_puissance_charge_max
                data:
                  value: "{{ states('sensor.consigne_charge_ac') }}"
        else:
          - action: select.select_option
            metadata: {}
            data:
              option: "1"
            target:
              entity_id: select.iobroker_zendure_mode_hyper_1_charge_2_decharge
    mode: single

  - alias: Zendure - Gestion mode
    description: ""
    triggers:
      - trigger: state
        entity_id:
          - input_select.mode_batterie_zendure
    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.zendure_decharge_ac
      - action: automation.turn_off
        metadata: {}
        data:
          stop_actions: true
        target:
          entity_id: automation.zendure_charge_ac
      - choose:
          - conditions:
              - condition: state
                entity_id: input_select.mode_batterie_zendure
                state: Charge
            sequence:
              - action: number.set_value
                data:
                  value: "0"
                target:
                  entity_id: number.iobroker_zendure_puissance_decharge_max
              - action: select.select_option
                metadata: {}
                data:
                  option: "1"
                target:
                  entity_id: select.iobroker_zendure_mode_hyper_1_charge_2_decharge
          - conditions:
              - condition: state
                entity_id: input_select.mode_batterie_zendure
                state: Décharge
            sequence:
              - action: number.set_value
                data:
                  value: "0"
                target:
                  entity_id: number.iobroker_zendure_puissance_charge_max
              - action: select.select_option
                metadata: {}
                data:
                  option: "2"
                target:
                  entity_id: select.iobroker_zendure_mode_hyper_1_charge_2_decharge
          - conditions:
              - condition: state
                entity_id: input_select.mode_batterie_zendure
                state: Automatique
            sequence:
              - action: number.set_value
                data:
                  value: "0"
                target:
                  entity_id: number.iobroker_zendure_puissance_charge_max
              - action: number.set_value
                data:
                  value: "0"
                target:
                  entity_id: number.iobroker_zendure_puissance_decharge_max
              - action: select.select_option
                metadata: {}
                data:
                  option: "0"
                target:
                  entity_id: select.iobroker_zendure_mode_hyper_1_charge_2_decharge
              - action: automation.turn_on
                metadata: {}
                data: {}
                target:
                  entity_id: automation.zendure_mode_intelligent
              - if:
                  - condition: numeric_state
                    entity_id: sensor.surplus_pv
                    above: 0
                then:
                  - action: automation.turn_on
                    metadata: {}
                    data: {}
                    target:
                      entity_id: automation.zendure_charge_ac
                else:
                  - action: automation.turn_on
                    metadata: {}
                    data: {}
                    target:
                      entity_id: automation.zendure_decharge_ac
          - conditions:
              - condition: state
                entity_id: input_select.mode_batterie_zendure
                state: Manuel
            sequence:
              - action: number.set_value
                data:
                  value: "0"
                target:
                  entity_id: number.iobroker_zendure_puissance_charge_max
              - action: number.set_value
                data:
                  value: "0"
                target:
                  entity_id: number.iobroker_zendure_puissance_decharge_max
              - action: select.select_option
                metadata: {}
                data:
                  option: "2"
                target:
                  entity_id: select.iobroker_zendure_mode_hyper_1_charge_2_decharge
    mode: single

  - alias: Zendure - Mode Intelligent
    description: ""
    triggers:
      - trigger: numeric_state
        entity_id:
          - sensor.shelly_linky_em0_power
        for:
          hours: 0
          minutes: 1
          seconds: 0
        below: -80
        id: charge
      - trigger: numeric_state
        entity_id:
          - sensor.shelly_linky_em0_power
        for:
          hours: 0
          minutes: 1
          seconds: 0
        above: 80
        id: decharge
    conditions: []
    actions:
      - choose:
          - conditions:
              - condition: trigger
                id:
                  - charge
            sequence:
              - action: automation.turn_off
                metadata: {}
                data:
                  stop_actions: true
                target:
                  entity_id: automation.zendure_decharge_ac
              - action: number.set_value
                metadata: {}
                data:
                  value: "0"
                target:
                  entity_id: number.iobroker_zendure_puissance_decharge_max
              - action: select.select_option
                metadata: {}
                data:
                  option: "1"
                target:
                  entity_id: select.iobroker_zendure_mode_hyper_1_charge_2_decharge
              - action: number.set_value
                metadata: {}
                data:
                  value: "0"
                target:
                  entity_id: number.iobroker_zendure_puissance_charge_max
              - action: automation.turn_on
                metadata: {}
                data: {}
                target:
                  entity_id: automation.zendure_charge_ac
          - conditions:
              - condition: trigger
                id:
                  - decharge
            sequence:
              - action: automation.turn_off
                metadata: {}
                data:
                  stop_actions: true
                target:
                  entity_id: automation.zendure_charge_ac
              - action: number.set_value
                metadata: {}
                data:
                  value: "0"
                target:
                  entity_id: number.iobroker_zendure_puissance_charge_max
              - action: select.select_option
                metadata: {}
                data:
                  option: "2"
                target:
                  entity_id: select.iobroker_zendure_mode_hyper_1_charge_2_decharge
              - action: number.set_value
                metadata: {}
                data:
                  value: "0"
                target:
                  entity_id: number.iobroker_zendure_puissance_decharge_max
              - action: automation.turn_on
                metadata: {}
                data: {}
                target:
                  entity_id: automation.zendure_decharge_ac
    mode: single

  • Le code lovelace inspiré de l’interface de @Julien_Galliot, à copier-coller dans l’UI de HA via l’éditeur de configuration (code yaml) d’une vue.
lovelace
  - type: sections
    title: Zendure
    path: zendure
    icon: mdi:home-battery
    sections:
      - type: grid
        cards:
          - type: heading
            heading: Mode et Etats
            heading_style: title
          - type: custom:mushroom-select-card
            entity: input_select.mode_batterie_zendure
            grid_options:
              columns: 12
              rows: 2
          - type: custom:mushroom-entity-card
            entity: select.iobroker_zendure_mode_hyper_1_charge_2_decharge
            name: AC Mode 1-> Charge  2-> Décharge
            grid_options:
              columns: 12
              rows: 1
          - type: custom:mushroom-entity-card
            entity: sensor.niveau_batterie_zendure
            grid_options:
              columns: 6
              rows: 1
          - type: custom:mushroom-entity-card
            entity: sensor.iobroker_zendure_etat_batteries
            name: Etat Batterie
            grid_options:
              columns: 6
              rows: 1
          - type: custom:mushroom-entity-card
            entity: sensor.iobroker_zendure_temp_hyper
            name: Temp Hyper2k
            grid_options:
              columns: 12
              rows: 1
          - type: custom:mushroom-entity-card
            entity: sensor.iobroker_zendure_temp_max_batterie_1
            name: Batterie 1
          - type: custom:mushroom-entity-card
            entity: sensor.iobroker_zendure_temp_max_batterie_2
            name: Batterie 2
          - type: custom:mushroom-entity-card
            entity: sensor.iobroker_zendure_temp_max_batterie_3
            name: Batterie 3
          - type: custom:mushroom-entity-card
            entity: sensor.iobroker_zendure_temp_max_batterie_4
            name: Batterie 4
      - type: grid
        cards:
          - type: heading
            heading: Charge
            heading_style: title
          - type: custom:mushroom-number-card
            entity: number.iobroker_zendure_puissance_charge_max
            name: Consigne P Charge
            display_mode: buttons
          - type: custom:mushroom-number-card
            entity: input_number.zendure_seuil_charge_ac
            display_mode: buttons
          - type: custom:mushroom-entity-card
            entity: sensor.iobroker_zendure_puissance_de_charge_du_reseau
            name: P charge AC
          - type: custom:mushroom-entity-card
            entity: sensor.consigne_charge_ac
            name: Calcul entrée AC
          - type: custom:mushroom-entity-card
            entity: sensor.surplus_pv
          - type: custom:mushroom-entity-card
            entity: sensor.iobroker_zendure_temps_de_charge_restant
            name: Durée charge restant
          - type: custom:mushroom-number-card
            entity: input_number.zendure_limite_max_ac
            display_mode: buttons
          - type: custom:mushroom-number-card
            entity: input_number.zendure_limite_min_ac
            display_mode: buttons
          - type: custom:mushroom-entity-card
            entity: sensor.iobroker_zendure_energie_entree_ac
            name: Energie Entrée AC
          - type: custom:mushroom-entity-card
            entity: sensor.zendure_energie_entree_ac
            name: Energie Charge Batterie
      - type: grid
        cards:
          - type: heading
            heading: Décharge
            heading_style: title
          - type: custom:mushroom-number-card
            entity: number.iobroker_zendure_puissance_decharge_max
            name: Puissance Décharge
            display_mode: buttons
          - type: custom:mushroom-number-card
            entity: input_number.zendure_consigne_decharge_ac
            display_mode: buttons
          - type: custom:mushroom-entity-card
            grid_options:
              columns: 6
              rows: 1
            entity: sensor.iobroker_zendure_consommation_maison
            name: Consommation maison
          - type: custom:mushroom-entity-card
            entity: sensor.iobroker_zendure_temps_de_decharge_restant
            name: Durée décharge restant
          - type: custom:mushroom-number-card
            entity: input_number.zendure_p_limite_sortie_ac
            display_mode: buttons
          - type: custom:mushroom-entity-card
            entity: sensor.iobroker_zendure_energie_entree_batterie
            name: Energie Sortie AC
          - type: custom:mushroom-entity-card
            entity: sensor.zendure_energie_sortie_ac
            name: Energie Décharge Batterie

Quelques différences par rapport à ce que propose @Julien_Galliot :

  • Certaines entités n’ont pas le même nom (mais suffisamment proche pour s’y retrouver facilement)
  • Sur les automatisation de charge et décharge, les seuils de batteries (15% et 100%) sont récupérés sur les réglages plutôt qu’en valeur fixe
  • Les pas de réglage des puissance de charge/décharge sont à 10W (pas de 1W dans l’appli Zendure) :
    • Impacte la réactivité lors d’un brusque changement de consommation
      • exemple : mise en route du frigo 80W compensé en 60s environ
    • Possibilité de modifier le pas dans les input_number du fichier zendure-entities.yaml, et de modifier le nombre de répétitions d’incrément/décrément dans les automatisations
  • Un mode manuel qui désactive les automatisations
    MAJ 2025-01-25 : Correction noms des fichiers
3 « J'aime »

Bonsoir @Lexyan …et bravo quel boulot ! :clap: Ca va effectivement aider ceux qui souhaiteraient mettre en place ces automatismes sans trop se prendre la tête.

2 petites questions me viennent concernant tes modifications :

En décharge, tes pas sont de +1/+4/+8 en positif et -1/-8/-20 en négatif c’est volontaire? Tu souhaites que le rattrapage soit plus rapide lors d’une baisse forte et soudaine de la consommation?

En utilisant les données MQTT brutes pour la décharge mini et la charge maxi, tu risque d’avoir des problème de blocage des automatismes sur valeur « indisponible », lors d’un rechargement de la configuration yaml par exemple. Les valeur remontent d’iobroker uniquement sur changement de valeur. Et comme ces valeurs vont être très rarement changées, elles risquent de rester longtemps indisponibles. C’est pour cette raison que j’avais recréé un sensor « niveau batterie zendure » avec le « if has value » et la valeur de 50 par défaut si indispo, car ça me bloquait les automatismes. Il fallait charger ou décharger un peu pour que le niveau de batterie change et remonte par MQTT, mais la valeur indisponible empêchait les automatismes de fonctionner (blocage total). Je me dis qu’il faudrait peut-être faire la même chose de ton côté en mettant des valeurs par défaut de 10% et 100% si indisponible.

Et encore bravo pour avoir mis de l’ordre dans tout ça ! J’avoue qu’à la base j’avais pas créé mes automatismes dans le but de les partager, donc j’ai fait ça à ma sauce perso, et je ne maitrise pas encore tous les rouages de HA. Je suis un transfuge de jeedom, et la transition est…difficile! :sweat_smile:

2 « J'aime »

Bonjour,
Je n’ai pas encore de système de batterie.
Je voulais savoir si le iobroker et ces paramétrages permettaient de faire fonctionner le Hyper 2000 sans avoir besoin des serveurs de Zendure.
En effet, je me pose la question : et si zendure ferme ses serveurs ou fait faillite, que devient ce système ?
Merci.