ME3000SP MQTT Calcul valeur commande info avec conditions

Bonjour a tous,

j’ai réalisé la communication entre mon onduleur ME3000SP et JEEDOM via MQTT en suivant le tuto de SOFARMQTT.

J’ai réussi à avoir sur Facebook les calculs utilisés par d’autres personnes sur Home assistant, cependant j’ai beaucoup de mal à retranscrire ça sur JEEDOM.

Il s’agit de la valeur de la puissance de la batterie, qui peut être soit en charge, soit en décharge.

J’ai bien les infos qui remontent, j’ai une opération à faire quand elle décharge.
(65535-valeur affichée) /100 et aucun calcul à réaliser quand elle charge, sachant qu’il y a une condition, ça rend les choses un peu compliquées pour moi, je peux par contre connaitre l’état en charge ou non sur une autre commande info.

Sur home assistant voici un exemple de calcul qui m’a été envoyé :

bp = parseInt(msg.payload.battery_power);
if (bp > 65535/2)
{
//Discharing
bp = parseInt((65535 - bp)10);
}
else
{
//Charging
bp = parseInt(bp
10);
bp = 0-bp;
}

J’ai cru comprendre que c’était du javascript, et que je ne pourrai pas l’appliquer directement dans les options avancées de la commande, dans le menu formule de calcul.

Le calcul avec le 65535 est lié au MODBUS.

Pour ma part, ce que je souhaite avoir comme information, c’est uniquement quand la batterie décharge, en effet, la charge est déjà comptabilisée dans l’export de la production. Il faut donc que ma formule puisse ne pas comptabiliser les phases de chargement et ressembler à quelque chose de ce style-là :

if #value# > 65535 then ((65535 - #value#)/100 if #value# < 65535 then #value# = 0

Je pensais à utiliser un scénario qui déclencherait seulement lors des phases de décharge, mais comment historiser la commande depuis le scénario ?

J’ai bien conscience qu’on n’utilise pas If et then dans ce cas de figure, mais c’est pour vous faire comprendre la logique du besoin.

Encore merci pour votre aide

Bonsoir,

Si la commande que tu as s’appelle #commande# (évidemment il faudra adapter), tu pourrais faire une commande info qui vaut (#commande#>65535)?(65535-#commande#)/100:0

Mais bon il me semble que ce n’est pas le calcul qui est effectué dans le code qui t’a été donné :thinking:

Bonsoir merci pour ton aide.

Effectivement, ce n’est pas précisément le calcul de HA,

Donc la avec l’exemple que tu m’as donné :

(#commande#>65535)?(65535-#commande#)/100:0

Le point d’interrogation sert à valider la condition ? Supérieur à 65535 si oui on fait le calcul (65535-#commande#)/100 et si Non le : indique le résultat a 0?

je vais tester, mais je n’aurai jamais trouvé ca tout seul…

Tu as tout compris c’est bien ça.

Effectivement, ça fonctionne, je viens de tester dans l’onglet FORMULE DE CALCUL en mettant :

(#value#>65535/2)?(65535-#value#)*10:0

En divisant par 10 ça m’affiche les watts, /100 les Kws…

Merci beaucoup, je testerai demain si en charge ça reste bien à 0.

En fait il y a deux formules assez proches, une pour la charge et l’autre pour la décharge sur HA, raison pour laquelle ce ne correspondait pas…

Pour finir mon raisonnement et aller un peu plus loin, je peux créer deux virtuels, 1 pour la charge et l’autre la décharge, en adaptant la formule de calcul et je pensais lancer le déclenchement d’un scénario sur le changement d’état de mon onduleur pour déclencher l’historisation.

À partir du moment ou mes commandes infos restent à 0 (avec les formules), dans les faits pas besoin de scénario pour déclencher l’historisation sous conditions, mais je reste curieux, n’ayant pas trouvé d’infos là-dessus.

Cependant, je ne vois pas comment lancer l’historisation d’une commande info depuis un scénario.

Serait-il possible d’avoir quelques idées ?

Attention car en mettant cela dans la formule de calcul il me semble bien que cela ne change que l’affichage du résultat et non la valeur de la commande elle même.

Si tu veux donc exploiter cette valeur dans un scénario par exemple il faut vraiment faire une autre commande info et indiquer ça dans la valeur de cette nouvelle commande (mais pas avec #value#).

Je n’ai pas trop compris, tu veux pouvoir cocher la case pour historiser seulement si tu as des valeurs différentes de 0 ?
Il y a surement moyen de faire ça avec un bloc code mais je dirais que ce n’est pas ce qu’il faut faire. Tu n’auras pas en historique le premier changement car la commande n’aura pas encore été historisée. Ça n’a pas beaucoup d’intérêt de faire ça.

Hello,

Tu as aussi la possibilité de souscrire 2x au même topic dans 2 commandes info différentes et d’appliquer des formules de calcul différentes :

Charge:
(#value#>65535/2)?(65535-#value#)*10:0
Décharge:
(#value#<65535/2)?#value#*10:0

Mais perso je partirais sur une seule commande avec une des deux valeur en négatif, type :
(#value#>65535/2)?(65535-#value#*10):(-#value#*10)

Qu’en penses-tu ?

Peux-tu nous donner le tuto ou le code que tu as trouvé pour ce calcul ?
J’ai trouvé ça, et les formules sont légèrement différentes :

Bonjour Bad,

Alors le fichier que tu as linké, c’est le fichier arduino de SofarMqtt : https://www.instructables.com/Sofar2mqtt-Remote-Control-for-Sofar-Solar-Inverter/

Le code affiché avec la méthode de calcul est pour l’afficheur de l’arduino, je l’avais vu également.

Très bonne idée de dupliquer la commande en souscrivant 2 fois au même topic, je n’y aurais pas pensé.

Les codes que j’ai linké m’ont gentillement étaient envoyés par un membre du groupe SOFARSOLAR sur Facebook. Ils sont d’origine pour Home assistant.

Voilà en intégralité ce que j’ai :

Batterie power :

bp = parseInt(msg.payload.battery_power);

if (bp > 65535/2)

{

//Discharing

bp = parseInt((65535 - bp)*10);

}

else

{

//Charging

bp = parseInt(bp*10);

bp = 0-bp;

}

Batterie current :


je n’ai que des images (mais ça donne déjà une idée).

Avec l’aide de Bison, je suis sur la bonne voie pour arriver à faire ce que je souhaite.

Je link le détail des calculs appliqués pour les commandes, ça peut servir à d’autres.

Pour la batterie, j’ai créé une commande pour la décharge uniquement, du coup elle affiche 0 lors des phases de chargement (kw déjà comptabilisés dans la production solaire), comme ça je peux m’en servir dans un graphe pour comparer avec la production panneaux et la consommation du foyer, et je la laisse dans les positifs pour le graph.

La formule appliquée est la suivante :
(#value#>65535/2)?(65535-#value#)*10:0

Pour la charge de la batterie, je suis quand même intéressé d’avoir le nombre de Kw chargés, du coup j’ai créé une commande séparée avec la formule suivante :
(#value#>65535/2)?:0

Pour le réseau, je peux soit importé, soit exporté, j’ai créé une commande qui affiche en positif pour l’import et en négatif pour l’export
(#value#>65535/2)?(65535-#value#) * -10:(#value# * 10)

Et je devrais en recréer des séparées en fonction de ce que je souhaite intégrer dans les graphiques

Pour la production panneaux, cette formule : #value# * 10

Mon idée est de me faire un petit design comme sur les applis solaires, avec l’onduleur au centre de l’image et voir ou la circulation du courant, et, en cliquant sur chaque icône, (par exemple batterie) de rentrer dans un menu plus détaillé sans en faire trop non plus.

Les tests que j’ai réalisé aujourd’hui sont plutôt concluants,

Bonjour Bison,

À tester pour l’histoire de #VALUE#

Ben l’historisation, j’aurais idéalement souhaité pouvoir historiser que les valeurs positives par exemple.
J’ai contourné ça en créant 2 commandes différentes avec les formules adaptées, mais c’est moins élégant…

Et bien si tu ne veux que les valeurs positives tu peux indiquer un 0 dans la valeur minimum et historiser cette commande.

Tu n’auras que les valeurs positives :smile:

1 « J'aime »

Oui mais du coup je perd l’affichage en temps réel des valeurs négatives

Certains dirait qu’on ne peut pas avoir le beurre, l’argent du beurre… et la crémière :upside_down_face: