Zendure: Solarflow 2400AC contrôle perturbé

Bonjour à tous,

Je suis un utilisateur Home Assistant depuis 2 ans environ. J’ai un parc µGrid composé de 3 batteries zendure:

  • Hyper2000 + 2xAB2000x 2 panneaux
  • SolarFlow 2400AC 01 + 1xAB3000x
  • SolarFlow 2400AC 02 + 1xAB3000x

Elles sont piloté via l’application Zendure, et j’ai des retour d’info sur mon Dash. Mais j’ai voulu créer un automatisme sur NodeRed pour faire une gestion Dynamique suivant des paramètres perso. Apriori, mqtt est activé, dialogue bien en publish / subscrib, l’automatisme NodeRed fonctionne, mais il est perturbé par l’application Zendure. La batterie n’est pas dans le HEMS, mqtt est bien activé. Dans la section réglage réseau, 2 options entrée réseau ou sortie réseau. Pour le moment je n’utilise pas la prise hors réseau donc pas de conf, et je suis en norme Française. Le firmware est à jour.

Dans NodeRed:

J’ai tenté 2 approches: utiliser directement les topic mqtt,ce que je voudrai faire a thermes (résilience); utilisé des nod ‘action’ qui utilise les entité Home Assistant. Voyant que l’application Zendure prend la main, j’ai cherché mais rien trouvé.

Dans HA:

J’ai donc tenté de voir si avec l’integration j’avais la main, mais même constant, rien à faire.

Que fait l’application? Elle force une valeur prés établi dans l’ap dans le mode également prés établi. Cela à pour effet de faire bagoter le relais charge/décharge de façon régulière à interval compris entre 15 et 45 sec.

Avez-vous déja rencontré ce type de problème, avez vous une idé de piste à creuser?

Merci pour votre aide!

Je vous présente ci-dessous un extrait de mon automatisme sur NodeRed.

Pour explication:

L’automatisme est scindé en 3 parties:

  • Aquisition des états/variables
  • Bloc de charge
  • Bloc de décharge

Les 2 blocs étant lié par un “if”.

Voici une vue graphique de la partie qui semble poser problème:

et plus particulièrement la fonction “Décharge ?” dont voici le descriptif:

            ┌─────────────────────────┐
            │   Entrées (globals)     │
            │  Réseau / Solar / Hyper │
            └───────────┬─────────────┘
                        │
                        ▼
        ┌────────────────────────────────┐
        │ 2) Conditions rédhibitoires    │
        │ - SOC mini                     │
        │ - IRVE + cooldown              │
        │ - Hyper bloquant               │
        └───────────┬────────────────────┘
                    │ non bloqué
                    ▼
        ┌────────────────────────────────┐
        │ 3) Décharge dynamique HP       │
        │ - TC > seuil                   │
        │ - calcul dynamique             │
        │ - palier ou plafonnement       │
        └───────────┬────────────────────┘
                    ▼
        ┌────────────────────────────────┐
        │ 4) Limitation Hyper            │
        │ - Hyper en charge              │
        │ - marge disponible             │
        └───────────┬────────────────────┘
                    ▼
        ┌────────────────────────────────┐
        │ 5) Buffer anti-export          │
        │ - TC_après >= buffer           │
        └───────────┬────────────────────┘
                    ▼
        ┌────────────────────────────────┐
        │ 6) Hystérésis puissance        │
        │ - évite micro-oscillations     │
        └───────────┬────────────────────┘
                    ▼
        ┌────────────────────────────────┐
        │ 7) DeltaT (anti-cliquetis)     │
        │ - maintien à 0W pendant X s    │
        │ - reprise retardée             │
        └───────────┬────────────────────┘
                    ▼
        ┌────────────────────────────────┐
        │ 8) Antispam sortie             │
        │ - valeur inchangée ? stop      │
        └───────────┬────────────────────┘
                    ▼
        ┌────────────────────────────────┐
        │ 9) Sortie                      │
        │ msg.payload = décharge (W)     │
        │ msg.condition = log            │
        └────────────────────────────────┘

(je vous épargne l’intégralité du code et vous donne la partie qui bug avec l’application Zendure:

// ───────── 3) LOGIQUE DYNAMIQUE HP (décharge variable) ─────────
else {

    // 3.1) Conditions d’activation
    if (reseauTc > condTc && condPalier > 0) {

        const dynamique = reseauTc - condDechargeMax;

        // 3.2) Cas plafonné
        if (condDechargeMax > 0 && dynamique >= condDechargeMax) {
            decharge = condDechargeMax;
            conditionTxt =
                `3.2° HP Dynamique : TC=${reseauTc}W, dyn=${dynamique}W ≥ Max=${condDechargeMax}W → Decharge=${decharge}W`;

        }
        // 3.3) Cas palier
        else {
            const base = Math.floor(Math.abs(dynamique) / condPalier) * condPalier;
            decharge = base;

            conditionTxt =
                `3.3° HP Dynamique : TC=${reseauTc}W, dyn=${dynamique}W → Decharge=${decharge}W (palier=${condPalier}W)`;
        }

    }
    // 3.4) Conditions insuffisantes → pas de décharge
    else {
        decharge = 0;
        conditionTxt =
            `3.4° HP Dynamique OFF : TC=${reseauTc}W ≤ ${condTc}W ou Palier=${condPalier}W → Decharge=0`;
    }
}

Je me répète, mais j’utilise bien les entités de l’intégration Zendure de hacs.

J’espère ne pas vous avoir perdu.

Merci pour votre aide, Nicolas

Alors Pour faire suite à mon problème dont je pense avoir trouvé la solution:

  1. ‹ 3.2 › dans ma fonction la section 3.2:
    Ici, je relève le TC (conso instantané) mais ne tiens pas compte de la valeur de décharge déjà appliqué.

  2. Hystérésis:
    J’ai créé une valeur tampon pour quand je flirt le 0 mais ne l’utilise pas bien.

  3. cycle:
    Je fais des cycles toutes les secondes

Tout cela à pour effet de rendre la décision instable et donne cet effet de Yoyo.
J’ai donc repensé la section ‹ 3.2 › et maintenant je tiens compte de la valeur déjà appliqué. J’ai également travaillé sur la valeur hystérésis et décidé de 2 tampons 1/2 Hystérésis au dessus de 0 et 1/2 en dessous pour atténuer et donner une tolérance au changement de status de la batterie qui pose problème avec le bago du relais de puissance. J’ai également diminué la fréquence des cycle a savoir de 1sec à 15sec

Ce paramétrage est beaucoup plus souple, mais dans les jours à venir, je vai diminuer l’hystérésis et changer la fréquence des cycles pour être plus réactif et ne plus injecter sur le réseau.

→ Les valeurs d’entrée
→ La logique d’action
→ La sortie dans Home Assistant

Ce sujet a été automatiquement fermé après 60 jours. Aucune réponse n’est permise dorénavant.