Script pour calculer consommation totale des shelly ( ou autres) meme aprés raz conso du module

Bonjour,
Je vous propose mon premier script ( avec l’aide de Mips , merci à lui) dans un bloc code scénario.
Mon besoin comme dit dans le titre , de pouvoir garder la conso totale d’un module shelly meme aprés coupure. Comme j’en ai 9, je ne voulais pas faire 9 fois des si truc…alors machin, avec des variables jeedom partout.
J’ai donc eu l’idée d’écrire un script avec des tags afin d’indiquer les variables lors du lancement du scénario dans un scénario appelant.
l’idée est de passer comme tags

  • L’id de l’equipement source
    -L’id de l’équipement qui reçoit le total ( virtuel)
  • une commande tampon de la commande pour stoker valeur précédente ( du virtuel)
  • La commande total ( du virtuel)
    voici le script :
$IdSource = $tags['#IdSource#'];    // Id equipement Shelly source 
$IdTotal = $tags['#IdTotal#'];		// Id virtuel recevant les données
$Tampon_Com = $tags['#Tampon_Com#']; //stockage de la valeur de la source précédente dans un virtuel
$Commande_Total = $tags['#Commande_Total#']; // nom de la commande  

$equipementS=eqLogic::byId($IdSource); 
$equipementT=eqLogic::byId($IdTotal);


$NomEquipementS=$equipementS->getHumanName(); // Récupération du nom complet de l'équipement
$NomEquipementT=$equipementT->getHumanName(); // Récupération du nom complet de l'équipement


$cmdS='#'.$NomEquipementS.'[Consommation]'.'#'; // Définition de la commande source
$cmdT='#'.$NomEquipementT.'['.$Commande_Total.']#'; // Définition de la commande total conso
$cmdC='#'.$NomEquipementT.'['.$Tampon_Com.']#'; // commande du virtuel de stockage

$scenario->setLog("La commande source est {$cmdS} et le total {$cmdT},commande temp :{$cmdC}"); // Ecriture dans le log du scénario pour tracer la demande

$Source=cmd::byString($cmdS) ->execCmd();
$Total=cmd::byString($cmdT) ->execCmd();
$scenario->setLog('La valeur totale = '.$Total.' .La conso Shelly est '.$Source); // Ecriture dans le log du scénario pour tracer la demande

if($Source>=$Total) {  //comportement normal du shelly ou autre module)
	$Total=$Source;
	$param=0;
	cmd::byString($cmdC) ->event($param);
}
   else {   // si remise à 0 de la commande par le shelly
     
    $tampon=cmd::byString($cmdC) -> execCmd();  
     	if($Source < $tampon)   // raz suivante
        {
          $tampon=0;
        };
    $Total=$Total+($Source-$tampon);
  	cmd::byString($cmdC) ->event($Source);
  
};
cmd::byString($cmdT)->event($Total);

Je pense qu’il y a moyen d’optimiser tout ça, mais j’ai fait avec mes connaissances et ce que j’ai glané à droite à gauche :slight_smile:

voici le virtuel qui me fait le total :

Je continuerai à rajouter les modules en suivant.

voici le scénario appelant :

Je me demande s’il n’y aura pas trop d’appel en faisant comme ça , vous en pensez quoi ?
Peut etre plutot le lancer tout les 1/4 h sans triger

Voilà je voulais partager ,si ça peut aider ou servir d’exemple.
Amélioration que je vais apporter , passer l’info « consommation » du shelly en tag , pour ça soit plus généraliste. La commande info conso du 1PM par ex est « Total énergie »

2 « J'aime »

Salut,

Très bien ton truc, juste un petit détail pour être plus juste, c’est un bloc code scénario :wink:

Belle idée, je n’avais pas pensé à faire un truc comme ça et ce que j’ai est beaucoup plus compliqué et ne fonctionne pas toujours en plus :joy:

Merci pour le partage

Voilà modifié, merci

1 « J'aime »