Sofar ME3000SP

Bonjour a tous,

Il y a quelques semaines j’ai voulu ajouter a mon installation photovoltaique un moyen simple de stockage d’electicite qui soit integre a Jeedom.
J’ai alors travaille avec @marco67660 et on a choisi des batteries Pylontech (48V, modulables, lithium fer phostfate) et un onduleur hybride Sofar Solar ME3000SP.

Des gens me demandent par message prive comment c’est integre a Jeedom, je cree alors ce fil de discussion afin que l’on puisse partager nos experiences sur ce modele d’onduleur et l’interfacage avec Jeedom.

Voici mon experience:
1) Choix du projet d’interface:
On trouve facilement sur le web le projet de monsieur Colin McGerty : Sofar2mqtt
https://github.com/cmcgerty/Sofar2mqtt

Il permet d’obtenir les donnees du Sofar mais egalement de le piloter!
Le fait de pouvoir piloter l’appareil est primordial dans mon installation car je suis en triphase et je ne peux donc pas utiliser la pince amperemitrique de l’onduleur (monophase) pour mesurer la balance energetique de la maison.

Par contre dans mon installation photovoltaique j’ai du SMA comme onduleurs triphase et aussi un SMA Meter pour mesurer la banlance energetique de la maison et je recupere deja tout ceci dans Jeedom a l’aide de mon plugin SMA.

Il me suffisait donc d’utiliser les donnees du SMA Meter et de piloter le Sofar ME3000SP en ajustant la puissance de charge/decharge en fonction de la balance energetique de la maison.
C’est la que Sofar2mqtt entre en jeux!

image

2) Module TTL - RS485

Dans le projet Sofar2mqtt ils utilisent ce module :
image

Mais avec tous les tests que Marc et moi avons fait, on a observe que sur un lot de 10 modules, beaucoup ne fonctionnent tout simplement pas!!! (on a meme eux des reboot du Wemos lorsque le module etait connecte)

On a alors essaye un autre module qui lui fonctionne mieux:

https://www.amazon.fr/gp/product/B07DJ4TGY3/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1

Il y a toujours des erreurs CRC mais ce n’est pas un probleme…

3) Le programme arduino/ESP demande une petit modification.

Au depart on n’arrivait pas a passer une commande (standby, charge, decharge) a l’onduleur.
En analysant les logs, je me suis appercu que lors de l’appel de la commande par jmqtt on passait en argument un boolean mais le programme Arduino l’analyse comme ceci :

messageTemp == "true"

Meme en mettant 1, true ou « true » depuis Jeedom dans jmqtt l’imterpretation ne fonctionnait pas!

J’ai alors tout simplement change le code Arduino comme ceci :

  // This is where we look at incoming messages and take action based on their content.
  if (topic == standbyMode)
  {
    BATTERYSAVE = false;
    if (messageTemp == "set") //if (messageTemp == "true")
    {
      modbusResponce responce = sendModbus(setStandby, sizeof(setStandby));
      if (responce.errorLevel == 0)
      {
        Serial.println(responce.errorMessage);
      }
    }
  }
  else if (topic == autoMode)
  {
    if (messageTemp == "set") //if (messageTemp == "true")
    {
      BATTERYSAVE = false;

On appelle donc depuis Jedoom / jmqtt les commandes avec ‹ set › comme argument.
Et la ca marche!

4) Scenario pour aujustement automatique de la charge / decharge.

Ici chacun ajustera son scenario comme bon lui semble mais je vous donne juste une petite astuce car j’ai eu des soucis au depart qui faisait faire n’importe quoi a l’onduleur…
J’ai remarque que les ecritures dans mqtt se mettent dans une file d’attente (queue) et que le programme Arduino prends les message mqtt dans l’ordre de la file.
Si vous passez trop de commandes depuis Jeedom, l’Arduino n’aura peut etre pas le temps de les analyser en fonction des cycles ou si vous le debranchez/rebranchez ce qui aura pour consequence de passer des ordres de charge/decharge a l’onduleur desynchronises par rapport au temps reel.
Donc pour remedier a ceci, je lis depuis Jeedom la tension secteur obtenu par Sofar2mqtt et je passe uniquement un ordre depuis Jeedom si cette tension a changee. (ca change a tous les cycles)

Ceci n’est que notre petite experience du moment mais ca pourra eviter a d’autres ces petits soucis et je suis certain qu la communaute va aider a ameliorer ce projet.

Pour info, je bosse actuellement sur un version Arduino MEGA avec interface reseau Ethernet/RJ45 car je veux eviter le WIFI pour ce type d’application ‹ sensible ›.
J’ouvrirai un sujet sur le forum prochainement pour que l’om puisse travailller ensemble la dessus.

Sebastien

3 « J'aime »

Sébastien, Un grand MERCI .
J’ai commandé le module TTL chez Amazon que je reçois mercredi, et j’en ai commandé un « rouge » en chine.
Pourrais tu faire nous faire un petit schémas de branchement ?
Il y a aussi la page Sofar2mqtt - Remote Control for Sofar Solar Inverters : 13 Steps (with Pictures) - Instructables
du même auteur.
A mercredi pour la suite.
Bonne journée

Salut,

L’autre module est simple a connecter:

La reference des ‹ incrustables › est juste une copie du project/site original de monsieur Colin McGerty …

Sebastien

Il y a pas mal de réponses dans les commentaires du « instructable »

Par exemple « OK, j’ai donc recâblé la carte RS485 du D1 Mini et utilisé la broche 5v au lieu de la broche 3.3v et hop, toutes les erreurs crc ont disparu et il semble qu’elle fasse exactement ce qu’elle est censée faire.
Il n’est donc pas nécessaire de remplacer la carte, il suffit simplement de recâbler la broche d’alimentation en fonction de la version de la puce que vous avez. MAZ3485 utilise l’alimentation 3,3 V. MAZ485 utilise l’alimentation 5 V. »

As tu essayé de le brancher en 5V?

Oui ça on a essayé mais le 5v ne change pas grand chose…

Sebastien

Bonjour,
J’ai refait le montage et c’est bien mieux.
Sébastien pourrai tu nous faire un tableau avec les différentes données et leur signification?
Je cherche aussi les différents états de « running_state »?
Standby, Charge , Discharge, Auto, Battery save.

Salut,

C’est dans le code:

// Sofar run states
#define waiting 0
#define check 1
#define charging 2
#define checkDischarge 3
#define discharging 4
#define epsState 5
#define faultState 6
#define permanentFaultState 7

Sebastien

bonjour @Sattaz
je n 'arrive pas a mettre en place les commandes vers l 'onduleur
peut tu nous donnez un exemple ?
merci a toi
cdt

Bonjour @Sattaz moi aussi je rame pour trouver la bonne façon de créer les commandes.
J’ai aussi un petit soucis avec mon équipement Sofar2mqtt qui passes en « batterie warning » de temps à autre. Je l’ai pourtant signalé sur secteur.
Je devrais aussi recevoir prochainement un Module de Signal MAX3485 TTL à RS485, développement de microcontrôleurs, Protection contre les surtensions 3.3V 5V pour Arduino kit de bricolage | AliExpress
Je referais le montage et je vous tiendrais au courant.
Bon dimanche

1 « J'aime »

Salut,

C’est tres simple, depuis jmqtt (ou mqtt), vous pouvez creer des commandes de ce type:

Moi j’utilise une variable ‹ Sofar1SetW › que je calcul depuis un scenario et si cette variable est < 0 alors je fais une decharge et si cette variable est > 0 je fais une charge.
J’utilise la valeur absolue ‹ abs(variable(Sofar1SetW)) › pour toujours envoyer une valeur positive de charge ou de decharge comme le demande le module Sofar2mqtt.

Voila :slight_smile:

Sebastien

Bonsoir @Sattaz

Merci pour les captures
Moi ce que je voudrait c est
Mettre en stand bye l onduleur
Et si possible régler là profondeur de décharge
Est ce possible?
Cordialement

Salut,

Pour la commande « standby », regarde mon message initial… il faut modifier quelques lignes de code dans le programme Arduino (j’explique pourquoi)
Ensuite tu appelles la fonction de la même façon que « charge » ou « discharge » par:
Sofar2mqtt/set/standby
Et en argument on écrira : set

Sebastien

1 « J'aime »

Salut @Sattaz
Ton système fonctionne en triphasé, c’est pour ca que tu utilise la variable ‹ Sofar1SetW ›?

Pour la commande il faut


Quelque chose comme ça?
A droite a part afficher, il faut cocher quelque chose?
Merci

Oui je suis en triphase, c’est pourquoi je pilote la charge/decharge depuis Jeedom et je n’utilise pas la pince amperemetrique.

Oui, ta copie d’ecran est correcte.

Sebastien

1 « J'aime »

Bonjour @Sattaz
J ai fait la même chose que @zep57
Et l onduleur ne passe pas en mode stand by
As tu une idée du pourquoi ?
Cdt

As-tu fais la modification dans le code Arduino comme je le montre sur mon premier message ?

Sebastien

bonjour @Sattaz
oui bien sur cela a ete fait
c 'est pour cela que je ne comprend pas
cdt

Avez-vous bien respecté les majuscules et minuscules ?
Si votre module s’appelle Sofar2mqtt dans le code Arduino alors la commande doit aussi avoir le S majuscule dans Sofar2mqtt …
La je vois qu’il est écrit sofar2mqtt/set/standby !

Sebastien

Bien vu :grinning:
Merci


C’est correct comme cela ?