Modification de la "Formule de calcul" d'une commande via scénario

Bonjour,
Je suis équipé d’un Eco Compteur LEGRAND (ref. 412000) pour remonter ma consommation électrique.
J’ai installé le plugin ecocompteur afin de remonter ma consommation dans Jeedom.
image

En raison d’un bug sur l’écocompteur, il est parfois nécessaire de le réinitialiser, ce qui a pour conséquence de remettre à 0 tous les compteurs.
J’ai créé un scénario dans Jeedom qui va me permettre de réinitialiser l’ecocompteur mensuellement. Mais pour ne pas « perdre » les valeurs des commandes, je vais devoir modifier manuellement les commandes via la « Formule de calcul » pour y ajouter la valeur avant réinitialisation :

Est il possible d’automatiser cela et de le faire dans le scénario Jeedom plutôt que de devoir le faire à la main ?

Dans le scénario, il faudrait la formule suivante : #value#+XXX+YYY
XXX étant la valeur de l’index avant la réinitialisation précédente. A la 1ère réinitialisation XXX est donc à 0.
YYY étant la valeur de l’index avant cette réinitialisation.

J’espère que ma demande est compréhensible :slight_smile:

Dans un bloc code. A tester.

cmd::byString('#[ta][commande][info]#')->setConfiguration('calculValueOffset', "Ta formule")->save();
1 « J'aime »

Merci pour la commande elle fonctionne.
Pour modifier l’index du circuit 5, j’ai testé :
cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit5]#')->setConfiguration('calculValueOffset', "#value#+10")->save();

Par contre, à la place de mettre une valeur fixe comme « #value#+10 », je voudrais que le « 10 » corresponde à la valeur de #[Maison][Eco-Compteur][csv - energie_circuit5]# avant la réinitialisation du compteur.
Comment puis-je faire cela?

Un peu de lecture.

Capture d’écran du 2022-11-03 20-07-29

Merci beaucoup pour ton aide et pour le lien vers ce site très intéressant à lire :slight_smile:
Grâce à toi, j’ai réussi à faire ce que je voulais.

Voici le code utilisé :

$index5 = cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit5]#')->execCmd();
$scenario->setLog('Valeur [csv - energie_circuit5] avant reset : '.$index5);
cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit5]#')->setConfiguration('calculValueOffset', "#value#+$index5")->save();

Le log du scénario :

[2022-11-04 11:19:08][SCENARIO] **-- Start :** Scenario lance manuellement. 
[2022-11-04 11:19:08][SCENARIO] - Exécution du sous-élément de type [action] : code 
[2022-11-04 11:19:08][SCENARIO] Exécution d\'un bloc code 
[2022-11-04 11:19:08][SCENARIO] Valeur [csv - energie_circuit5] avant reset : 0.004 
[2022-11-04 11:19:08][SCENARIO] Fin correcte du scénario

et le résultat sur ma commande :

2 « J'aime »

Bonjour,

Même si je ne compte pas le faire mensuellement comme toi, je n’ai également pas le choix à cause du bug que de reseter mon écocompteur à intervalle régulier.
Ton scénario me facilitera la vie pour la mise à jour des index :blush:

Est ce que tu le réinitialise manuellement ou via un scénario ?

Si jamais tu le fais à la main et que tu souhaites le faire via un scénario voici le code complet. Il faudra juste modifier l’adresse ip de ton eco compteur et le nom de tes commandes de l’éco compteur.

// Mise à jour de la formule de calcul de la commande [csv - energie_circuit1]
$index1 = cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit1]#')->execCmd();
$scenario->setLog('Valeur [csv - energie_circuit1] avant reset : '.$index1);
cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit1]#')->setConfiguration('calculValueOffset', "#value#+$index1")->save();

// Mise à jour de la formule de calcul de la commande [csv - energie_circuit2
$index2 = cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit2]#')->execCmd();
$scenario->setLog('Valeur [csv - energie_circuit2] avant reset : '.$index2);
cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit2]#')->setConfiguration('calculValueOffset', "#value#+$index2")->save();

// Mise à jour de la formule de calcul de la commande [csv - energie_circuit3]
$index3 = cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit3]#')->execCmd();
$scenario->setLog('Valeur [csv - energie_circuit3] avant reset : '.$index3);
cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit3]#')->setConfiguration('calculValueOffset', "#value#+$index3")->save();

// Mise à jour de la formule de calcul de la commande [csv - energie_circuit4]
$index4 = cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit4]#')->execCmd();
$scenario->setLog('Valeur [csv - energie_circuit4] avant reset : '.$index4);
cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit4]#')->setConfiguration('calculValueOffset', "#value#+$index4")->save();

// Mise à jour de la formule de calcul de la commande [csv - energie_circuit5]
$index5 = cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit5]#')->execCmd();
$scenario->setLog('Valeur [csv - energie_circuit5] avant reset : '.$index5);
cmd::byString('#[Maison][Eco-Compteur][csv - energie_circuit5]#')->setConfiguration('calculValueOffset', "#value#+$index5")->save();

// Requêtes pour réinitialiser les compteurs "csv - energie_circuit" 1 à 5 de l'ecocompteur
$req1  = 'curl "http://192.168.1.9/wp.cgi?wp=536+2+12724+-1+-1+4+0.0"';
$req2  = 'curl "http://192.168.1.9/wp.cgi?wp=536+4+12724+-1+-1+4+0.0"';
$req3  = 'curl "http://192.168.1.9/wp.cgi?wp=536+6+12724+-1+-1+4+0.0"';
$req4  = 'curl "http://192.168.1.9/wp.cgi?wp=536+8+12724+-1+-1+4+0.0"';
$req5  = 'curl "http://192.168.1.9/wp.cgi?wp=536+10+12724+-1+-1+4+0.0"';

/$scenario->setLog('DEBUG REQUETE : '.$req1);
$output1 = shell_exec($req1);
$scenario->setLog('DEBUG RETOUR : '.$output1);

$scenario->setLog('DEBUG REQUETE : '.$req2);
$output2 = shell_exec($req2);
$scenario->setLog('DEBUG RETOUR : '.$output2);

$scenario->setLog('DEBUG REQUETE : '.$req3);
$output3 = shell_exec($req3);
$scenario->setLog('DEBUG RETOUR : '.$output3);

$scenario->setLog('DEBUG REQUETE : '.$req4);
$output4 = shell_exec($req4);
$scenario->setLog('DEBUG RETOUR : '.$output4);

$scenario->setLog('DEBUG REQUETE : '.$req5);
$output5 = shell_exec($req5);
$scenario->setLog('DEBUG RETOUR : '.$output5);

Je précise que je ne m’y connais pas en php donc il y a peut être plus simple ou plus propre mais en tout cas cela fonctionne :slight_smile:

3 « J'aime »

Ahhhhhh tu peux reinitialiser via api ??
Je faisais en manuel par le petit trou de reset de mon côté ce qui oblige à enlever le plastron du tableau électrique.

Ça corrige le bug « il manque des donnés dans le csv par dépassement mémoire » (je ne sais pas comment mieux décrire le bug) ton appel api ?

Ça avait buggé de mon côté au bout de 2 ans.

1 « J'aime »

Tu peux aussi passer par des virtuels, ou encore mieux utiliser une variable dans la formule :

image

1 « J'aime »

Oui. C’est plus simple que de le faire en manuel.
Il y a une requête par circuit.
Par contre je ne réinitialise pas les 2 compteurs à impulsions car ils ne sont pas impactés par le bug.

Cela corrige le bug d’écart qu’il y a entre la consommation réelle et la consommation mesurée par l’éco compteur.

1 « J'aime »

Et du coup dans le scénario il faut mettre à jour la variable avec la valeur au lieu de réécrire toute la formule. C’est ça ?

C’est donc bien du même bug dont on parle :wink:

Un grand merci pour l’astuce :+1:

C’est ça en effet.

$scenario->setData('maVariable', 'valeur');
1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.