Contrôle d'une batterie solaire via Node-RED – Gladys

Vous êtes un expert ? Vous utilisez Gladys depuis longtemps ? Dans ce cas, n’hésitez pas : passez votre chemin, il n’y a rien à voir ici, merci de votre visite :wink:

Vous êtes débutant ? Les termes comme « énergie », « puissance », « watt », etc. ne vous disent rien ? Alors approchez-vous, entrez, jetez un œil. Merci beaucoup d’être venu :slight_smile:

Conditions préalables :

1. Batterie contrôlable

2. Informations actualisées sur votre consommation d’électricité relevées sur le compteur

3. Node-RED

4. Gladys

Le flux décrit ci-dessous se compose de trois parties. La première partie permet de déterminer la consommation électrique actuelle au niveau de votre compteur. Ces données sont ensuite utilisées pour procéder à une décharge forcée de la batterie d’une centrale électrique de balcon. La troisième partie génère ensuite des informations supplémentaires pour la boucle ou le flux. Remarque : nous exploitons ici uniquement la batterie, sans panneaux solaires ni câblage… Idéal pour un appartement en location ou si vous n’avez pas envie de poser des goulottes de câbles ni de creuser.

Partie 1 :

Pour interroger le compteur électrique, on utilise un produit de la société Wattwächter. Cette tête IR se fixe sur le compteur du fournisseur d’électricité et fournit à tout moment la consommation actuelle sur le réseau. L’un des avantages réside dans la possibilité d’interroger le compteur via MQTT ou Modbus.

Ce qui importe pour vous, c’est simplement qu’à la fin de cette première partie, vous obteniez la consommation actuelle de votre compteur en watts. Le produit que vous utilisez pour cela n’a aucune importance. Le fabricant de batteries indique les produits homologués, mais si vous disposez déjà d’un autre produit, vous êtes au bon endroit.

Remplacez donc cette partie, le cas échéant, par vos propres solutions techniques.

Structure :

Nœud d’injection : début du flux. Sortie de débogage sous forme de date et d’heure pour vérifier quelle heure est utilisée.

Interrogation Modbus de la tête IR de la société Wattwächter : ID d’unité : 1, lecture FC3 du registre de maintien à l’adresse 40088, quantité 1

Fonction de traitement des valeurs :

// ********************************************

let payload = msg.payload;

let wert = 0;

if (payload && payload.data && Array.isArray(payload.data) && payload.data.length > 0) {

wert = payload.data\[0\];

}

// int16-Korrektur für negative Werte (Einspeisung)

if (wert > 32767) {

wert = wert - 65536;

}

// Wert im Flow-Kontext speichern

flow.set(« Hausuebergabepunkt », wert);

// WICHTIG: Wir triggern hier direkt die Berechnung, sobald ein neuer Zählerwert kommt

msg.payload = wert;

return msg;

// *******************************************************

La ligne « flow.set(« Point de transfert domestique », valeur) » est déterminante : la valeur en watts actuellement obtenue est enregistrée dans le flux pour une utilisation ultérieure.

À la fin de la première partie du flux, le niveau actuel de la batterie est également interrogé en pourcentage. Cette valeur est importante pour éviter une décharge profonde de la batterie :

Interrogation Modbus de la batterie : ID d’unité : 1, FC3 Reading holding Register, registre 37612, quantité 1

Ensuite, le flux passe par un switch. Celui-ci permet de déterminer si le traitement se poursuit ou s’arrête.

Variante A :

La batterie est déjà déchargée. Le nœud switch renvoie alors le contrôle à distance à l’application pour smartphone du fabricant Solakon à l’aide de la fonction suivante :

// ********************************************

// msg.payload zur Rückgabe der Kontrolle an die Smartphone-App

msg.payload = {

    value:\[0\],       // 0 deaktiviert den Remote-Modus

    fc: 16,            // Holding Register beschreiben

    unitid: 1,         // Modbus-ID Ihres Solakon ONE

    address: 46001,    // Startadresse

    quantity: 1        // Nur dieses eine Register beschreiben

};

// 4. Nachricht an den Modbus-Node weiterleiten

return msg;

// *********************************************************

La valeur de msg.payload est ensuite simplement transmise à l’aide d’un nœud modbus-flex-write.

Variante B :

Le processus se poursuit : si la batterie dispose encore de plus de 12 %, par exemple, le flux passe à l’étape suivante.

Nous générons les informations nécessaires à l’aide d’une fonction.

// *************************************************************

// 1. Werte aus dem Speicher holen

let netzBezug = flow.get(« Hausuebergabepunkt ») || 0;

// Holt den Wert, den Ihre aktualisierte Batterie-Funktion speichert

let aktuelleEntladung = flow.get(« AktuelleBatterieEntladung »);

// Falls Node-RED frisch startet und der Speicher leer ist,

// nehmen wir die 100W als sicheren Startwert an

if (aktuelleEntladung === undefined || aktuelleEntladung === null) {

aktuelleEntladung = 100;

}

// 2. Den ECHTEN Hausverbrauch berechnen (Zählerstand + aktuelle Entladeleistung)

let echterHausverbrauch = netzBezug + aktuelleEntladung;

// 3. Zielwert für die Batterie setzen (entspricht dem echten Verbrauch)

let targetPower = echterHausverbrauch;

// 4. Sicherheitsgrenzen einhalten (0 bis maximal 800 Watt)

targetPower = Math.round(targetPower);

if (targetPower < 0) {

targetPower = 0;

}

if (targetPower > 800) {

targetPower = 800;

}

// 5. 32-Bit-Split für das Solakon Modbus-Register (I32 Big Endian)

const powerHigh = (targetPower >> 16) & 0xFFFF;

const powerLow = targetPower & 0xFFFF;

// msg.payload für das Modbus-Flex-Write Node vorbereiten

msg.payload = {

value: \[5, 240, powerHigh, powerLow\], // 5 = Entlademodus

fc: 16,                        

unitid: 1,                    

address: 46001,                

quantity: 4                    

};

return msg;

// ******************************************************************

Nous renvoyons simplement cette information à la batterie via une commande Modbus Flex-Write.

C’est terminé…

Nous avons interrogé le produit de la société Wattwächter pour connaître la consommation électrique actuelle, récupéré l’état actuel de la batterie, calculé la décharge nécessaire à partir de ces données et envoyé ce calcul à la batterie.

Mais :

C’est un cycle, c’est-à-dire que le flux n’est en réalité terminé que lorsque nous y mettons fin ou que la batterie est à plat, donc :

Nous attendons 5 secondes à l’aide d’un nœud « delay » afin que la batterie puisse enregistrer les valeurs.

Ensuite, nous interrogeons à nouveau la batterie via Modbus :

ID d’unité : 1, FC3 Reading Holding Register, registre 39134, quantité 2

Puis, nous utilisons une autre fonction pour intégrer les nouvelles valeurs dans la boucle.

Nom sur l’image : « État de la batterie »

Fonction :

//****************************************************

if (!msg.payload || !msg.payload.buffer) {

node.error("Fehler: Kein Buffer im msg.payload gefunden.");

return null;

}

const buf = msg.payload.buffer;

const rawValue = buf.readInt32BE(0);

// Umrechnung exakt wie bei der funktionierenden « anlage »-Node

let wert = rawValue / 1000;

wert = Math.round(wert * 1000);

wert = wert * -1; // Macht den Wert für die Anzeige negativ (z.B. -239)

// Für die Anzeige im Dashboard / Debug (wird nun korrekt angezeigt!)

msg.payload = wert;

msg.topic = « solakon/status/batterie »;

// WICHTIG: Für unsere Steuerungs-Rechnung brauchen wir den Wert POSITIV im Speicher

// Math.abs(-239) macht daraus +239 Watt

flow.set(« AktuelleBatterieEntladung », Math.abs(wert));

return msg;

// ********************************************************

Nous attendons ensuite 2 minutes, puis le cycle recommence depuis le début.

Autrement dit, au bout de deux minutes, le contrôleur de puissance est à nouveau interrogé et les nouvelles données sont finalement recalculées dans la fonction « Décharge forcée », puis transmises à la batterie.

Voici le cycle complet avec les sorties de débogage correspondantes :

Il s’agit de la première partie du tutoriel. Dans la partie suivante, nous aborderons la recharge automatique de la batterie à des horaires que nous aurons définis (par exemple, dans le cadre de tarifs d’électricité dynamiques ou similaires ; une autre installation photovoltaïque pourrait également être envisagée) ; nous expliquerons également comment, à partir des informations en watts provenant de la batterie ou du point de raccordement du logement, mettre en place un système de surveillance énergétique précis pour Gladys.

D’ici là,

bonne découverte

Cordialement

Thomas

3 « J'aime »