Bonjour à tous,
J’ai acheté récemment une batterie Zendure (Hyper2000 + AB2000) pour stocker le surplus de mes panneaux solaires. N’ayant pas trouver de tuto complet (mais des morceaux par ici par là) pour connecter et contrôler ma batterie depuis HA, et ayant pas mal galéré pour y arriver, j’ai rédigé ce tuto pour ceux qui seraient dans le même cas que moi.
J’utilise la méthode du broker externe « ioBroker » (je sais qu’il y a une autre méthode que je n’ai pas testé personnellement), qui a l’avantage d’être très réactive et de permettre le contrôle de l’Hyper 2000 en écriture.
Voilà les étapes à suivre :
Etape 1 - Installation de ioBroker
La première étape consiste à installer ioBroker. Je ne déraillerai pas ici cette étape car il différentes méthodes d’installation (debian, window, …) et libre à chacun d’utiliser la méthode qui convient le mieux à sa configuration, son matériel et son niveau de connaissance :
Personnellement j’ai une VM windows 11 sous Proxmox qui tourne sur la même machine que HA, j’ai donc choisi l’installation windows de ioBroker
Etape 2 - Installation et configuration de l’adaptateur MQTT dans IoBroker
Une fois ioBroker installé et fonctionnel, il faudra installer dans ioBroket l’adaptateur MQTT :
Et le configurer comme indiqué ci-dessous.
Dans l’onglet « connection » configurez votre adresse IP, un user et un mot de passe :
Dans l’onglet « server setting » cocher « publier sans retain » :
Dans l’onglet « MQTT setting » :
- Ajouter le mask « zendure-solarflow.0.* »
- Cocher « send states (ack=true) »
- Cocher « use different topic names »
Etape 3 - Installation et configuration de l’adaptateur Zendure-solarflow dans IoBroker
Il faut installer ensuite dans ioBroker l’adapteur « zendure-solarflow » :
Et le configurer sur serveur UE avec vos identifiants de l’application Zendure :
ATTENTION : Dés que ioBroker sera connecté à votre compte Zendure, l’application de votre téléphone sera automatiquement déconnectée. Pour garder le contrôle sur l’application Zendure avec votre smartphone, il faudra créer un partage d’appareil avec un second compte Zendure
Etape 4 - Vérification avec MQTT explorer
C’est le moment de vérifier dans MQTT explorer que notre MQTT Zendure diffuse bien les informations :
Vous devriez obtenir cette données :
Etape 5 - Configurer le broker externe dans HA
Tout d’abord il va falloir créer un fichier « iobroker.conf » dans le répertoire share/mosquitto de votre HA :
Avec le contenu suivant (à adapter avec votre IP et les username/password/clientid définis dans ioBroker) :
Dans la configuration du module complémentaire mosquitto broker, activer la customization à « true » pour le répertoire « mosquitto » (celui qui contient le fichier .conf) :
Redémarrez mosquitto broker.
Si la connexion entre HA et ioBroker s’est faite correctement, vous devriez avoir ceci dans ioBroker avec tous les voyants au vert :
Etape 6 - Récupérer les information de MQTT dans HA
Il est maintenant possible de récupérer dans HA tous les données/contrôles de votre appareil Zendure :
Exemple de contrôle des limites entrée et sortie AC de l’Hyper2000 (de type « number ») :
############################################################
## MQTT ZENDURE ##
############################################################
- name: "P Limite Sortie AC"
unique_id: "Hyper2000_setOutputLimit"
state_topic: "zendure-solarflow/0/xxxxx/yyyyyyyy/control/setOutputLimit"
command_topic: "zendure-solarflow/0/xxxxxx/yyyyyyyy/control/setOutputLimit/set"
value_template: >
{{ int(value, 0) }}
min: 0
max: 1200
step: 5
mode: slider
unit_of_measurement: "W"
icon: "mdi:home-plus"
device:
name: "IoBroker-Zendure"
identifiers: "Io-Zendure"
manufacturer: "Zendure"
model: "Hyper 2000"
- name: "P Limite Entrée AC"
unique_id: "Hyper2000_setInputLimit"
state_topic: "zendure-solarflow/0/xxxxxx/yyyyyyy/control/setInputLimit"
command_topic: "zendure-solarflow/0/xxxxxx/yyyyyyyy/control/setInputLimit/set"
value_template: >
{{ int(value, 0) }}
min: 0
max: 1200
step: 5
mode: slider
unit_of_measurement: "W"
icon: "mdi:home-plus"
device:
name: "IoBroker-Zendure"
identifiers: "Io-Zendure"
manufacturer: "Zendure"
model: "Hyper 2000"
Exemple de contrôle du mode AC de l’Hyper2000 (de type « select ») :
- name: "Mode Hyper 1-> Charge 2-> Décharge"
unique_id: "iobroker_hyper_2000_mode_hyper"
state_topic: "zendure-solarflow/0/xxxxx/yyyyyyyyyy/acMode"
command_topic: "zendure-solarflow/0/xxxxxx/yyyyyyyyyyy/control/acMode/set"
value_template: "{{ value }}"
options:
- "0"
- "1"
- "2"
device:
name: "IoBroker-Zendure"
identifiers: "Io-Zendure"
manufacturer: "IoBroker-Zendure"
model: "Hyper 2000"
Exemple de contrôle du mode AC de l’Hyper2000 (de type « select ») :
############################################################
## MQTT ZENDURE ##
############################################################
- name: "Niveau batterie"
unique_id: "Hyper2000_electricLevel"
state_topic: "zendure-solarflow/0/xxxxxx/yyyyyy/electricLevel"
unit_of_measurement: "%"
value_template: '{{ value }}'
icon: "mdi:battery-unknown"
force_update: true
device_class: battery
device:
name: "IoBroker-Zendure"
identifiers: "Io-Zendure"
manufacturer: "Zendure"
model: "Hyper 2000"
- name: "P Entrée AC"
unique_id: "Hyper2000_gridInputPower"
state_topic: "zendure-solarflow/0/xxxxxx/yyyyyyy/gridInputPower"
unit_of_measurement: "W"
value_template: '{{ value }}'
icon: "mdi:transmission-tower-export"
force_update: true
device_class: power
device:
name: "IoBroker-Zendure"
identifiers: "Io-Zendure"
manufacturer: "Zendure"
model: "Hyper 2000"
Ce qui donne ceci dans HA :
Etape 7 - Créer vos automatisations dans HA
Les automatisations sont très personnelles, chacun ayant ses propres attentes et objectifs de fonctionnement. Je partage les miennes si ça peux aider.
!!! UPDATE DU 30/12/2024 !!!
Personnellement j’ai créé 4 automatisations :
- Charge AC : charge la batterie avec le surplus solaire en laissant une seuil de xxW paramétrable (réglé à 50W chez moi)
- Décharge AC : décharge la batterie suivant ma consommation par pas de 50W
- Mode intelligent : bascule automatiquement du mode charge au mode décharge (et inversement) suivant la mesure d’injection ou soutirage réseau (avec des seuils de basculement à -80/+80W pendant 1min)
- Gestion mode : permet de basculer du mode automatique (ou intelligent) aux modes charge et décharge manuels
Automatisation « Gestion mode » :
Déclencheur :
Je déclenche sur un changement d’état du sélecteur « Mode batterie Zendure » :
Ensuite choix entre 3 actions possibles suivant le mode sélectionné :
Choix 1 : mode « Charge » qui désactive tous les automatismes et envoie des requêtes MQTT pour activer la charge de l’hyper (AC mode = 1) en ayant préalablement remis à 0 la consigne de décharge
Choix 2 : mode « Décharge » qui désactive tous les automatismes et envoie des requêtes MQTT pour activer la décharge de l’hyper (AC mode = 2) en ayant préalablement remis à 0 la consigne de charge
Choix 3 : mode « Automatique » qui :
- désactive les automatismes « Charge » et « Décharge »,
- envoie des requêtes MQTT pour mettre l’hyper en mode neutre (AC mode = 0) en ayant préalablement remis à 0 les consignes de charge et décharge,
- active l’automatisme « Mode intelligent »,
- enfin réactive le mode « Charge » ou « décharge » en fonction de la valeur du surplus (charge si surplus >0, décharge si surplus=0) lorsque le mode automatique est sélectionné.
Automatisation « Mode intelligent » :
Déclencheur :
Je déclenche sur un pic positif ou négatif de consommation/injection de -80/+80W pendant 1 minutes (pour préserver l’électronique de l’hyper)
Ensuite choix entre 2 actions possibles suivant le mode sélectionné :
Choix 1 : Si j’injecte plus de 80w dans le réseau :
- Je désactive l’automatisme « décharge »
- Je force la consigne de décharge de l’hyper à 0W (requête MQTT)
- J’active le mode charge de l’hyper AC mode = 1 (requête MQTT)
- Je force la consigne de charge de l’hyper à 0W (requête MQTT)
- J’active l’automatisation de « charge »
Choix 2 : Si je consomme plus de 80w dans le réseau :
- Je désactive l’automatisme « charge »
- Je force la consigne de charge de l’hyper à 0W (requête MQTT)
- J’active le mode décharge de l’hyper AC mode = 2 (requête MQTT)
- Je force la consigne de décharge de l’hyper à 0W (requête MQTT)
- J’active l’automatisation de « décharge »
Automatisation « Charge » :
Pour l’automatisation de recharge, j’ai tout d’abord créé une entrée « Seuil mini charge AC » qui me permet de définir le seuil de surplus à partir duquel la batterie va charger :
J’ai réglé ce seuil à 50W
J’ai également créé une entrée « limite de charge » pour brider la charge à une valeur max si nécessaire :
Ensuite dans la configuration yaml, je calcule le surplus solaire. Celui ci est égal à la valeur absolue (on veut une valeur positive) de la mesure de mon shelly moins la puissance AC qui est envoyée dans la batterie (puisqu’il s’agit de surplus qu’on envoie directement dans la batterie et qui n’est pas vu par le shelly). Si la puissance AC envoyée dans la batterie est inconnue (ça arrive de temps en temps avec MQTT), je ne considère que la mesure du shelly (toujours en valeur absolue). Ca donne ceci :
- name: Surplus PV
unique_id: "Surplus_PV"
unit_of_measurement: "W"
state: >
{% if has_value('sensor.iobroker_zendure_puissance_reseau_zendure') %}
{% if states('sensor.shellypro3em_a0dd6ca18868_phase_c_active_power')|int - states('sensor.iobroker_zendure_puissance_reseau_zendure')|int < 0 %}
{{ (states('sensor.shellypro3em_a0dd6ca18868_phase_c_active_power')|int - states('sensor.iobroker_zendure_puissance_reseau_zendure')|int)|abs }}
{% else %}
{{ 0 }}
{% endif %}
{% else %}
{% if states('sensor.shellypro3em_a0dd6ca18868_phase_c_active_power')|int < 0 %}
{{ (states('sensor.shellypro3em_a0dd6ca18868_phase_c_active_power')|int)|abs }}
{% else %}
{{ 0 }}
{% endif %}
{% endif %}
Ensuite j’ai un autre calcul pour la consigne de charge AC qui, uniquement s’il y a du surplus, est égale au surplus moins le seuil de charge (celui que je règle à 50W):
- 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 %}
Et enfin mon automatisation très simple :
- Déclenchée toutes les 10s
- A condition que le niveau de la batterie soit inférieur à 100%
- Un 1er SI-Alors vérifie que l’hyper est bien en mode charge (AC mode=1), le SINON modifie l’AC mode à 1 si besoin
- Un second SI-Alors vérifie si la consigne de charge est supérieure à la limite que je me suis fixé:
- Si OUI alors définis que le contrôle MQTT « SetInputLimit » de l’hyper2000 est égal à la valeur limite fixée
- Si NON alors je définis que le contrôle MQTT « SetInputLimit » de l’hyper2000 est égal à la consigne de charge AC que j’ai calculé dans config.yaml
Ca donne ceci :
Automatisation « Décharge » :
Pour l’automatisation de décharge, j’ai tout d’abord créé une entrée « Consigne décharge AC » qui me permet de définir la puissance de décharge par pas de 50W :
J’ai également créé une entrée « limite de décharge » pour brider la décharge à une valeur max si nécessaire :
Et enfin mon automatisation :
- Déclenchée toutes les 10s
- A condition que le niveau de la batterie soit supérieur à 15%
- En fonction de la variation plus ou moins importante de la consommation, j’incrémente ou décrémente de 1, 2 voir 4 pas la consigne (soit incrémentation/décrémentation de 50W/100W/200W)
- Je limite la décharge à la valeur maximum définie si besoin
- Si la charge de la batterie est inférieure à 15% je force la décharge à 0W
- J’active le mode « décharge » de l’hyper (requête MQTT sur l’acMode) s’il n’est pas déjà actif.
Ca donne ceci :
Avec ce choix parmi 6 actions :
Option 1 (+1 pas) :
Option 2 (+2 pas) :
Option 3 (+4 pas) :
Option 4 (-1 pas) :
…et ainsi de suite pour option 5 (-2 pas) et option 6 (-4 pas)
Voilà c’est une manière (parmi tant d’autres certainement) de recréer un mode intelligent dans HA. Ensuite vous pourrez facilement jongler entre les différents mode suivant vos plannings, charger la nuit si besoin la veille d’un jour tempo, géré les priorités avec un autre équipement tel qu’un routeur, bref les possibilités sont grandes et vont bien au delà de ce que propose aujourd’hui l’appli Zendure.
Merci pour ceux qui ont lu jusqu’au bout ce très long tuto et bon courage pour ceux qui vont essayer de l’appliquer!