Aide sur Bloc code pour Eclairage

Bonsoir à tous

Je continue mon apprentissage du bloc code dans les scénarios.

Mon scénario pour l’éclairage de ma lampe de bureau par exemple est le suivant :

  • Si j’appuie sur le bouton (état=single) alors j’allume mon ampoule (ON) et je mets la luminosité à 254 et la couleur température à 370.
  • Si j’appuie de nouveau sur le bouton (état=single) alors j’éteins l’ampoule (OFF) et je passe la luminosité à 0 et la couleur température à 153

Jusque là pas trop de soucis ça fonctionne très bien.

Ensuite je souhaite faire le calcul de temps d’allumage et donc j’en tire ensuite un cumul de l’allumage de mon ampoule ce qui devrait me montrer la durée de vie de celle ci. on peut aussi en déduire le coût etc…

Je prends au moment du ON le timestamp que je stocke dans un virtuel et je prends ensuite au moment du OFF le timestamp aussi que je stocke dans une autre commande du même virtuel.

Je calcule la différence du TS_ON et du TS_OFF puis j’en déduis un temps au format H:i:s que je viens afficher et que je cumule dans une autre commande de mon virtuel.

ces infos je les envoies sur DIscord avec un message que je souhaite formaté comme ceci :
image
ceci est produit par un scénario on va dire classique pour le moment par envoie de tag et les calculs et autres formatages sont fait dans ce scénario

C’est là qu’arrive ma demande d’aide dans mon code, comment passer ce morceau en code ?

Pour avoir ceci avec les morceaux en gras quand même
image

Mon bloc code au dessus de ça est :

// Infos :
// Utiliser les Tags quand vous appelez ce scénario
// channel=*** 		: général - équipements - notif - machines - sécurité
// Titre=*** 		: Titre du message pouvant comprendre des emojis dans discord
// description1=*** : Ce qui sera écrit sur la ligne 1 du corps de message
// description2=*** : Ce qui sera écrit sur la ligne 2 du corps de message 
// description3=*** : Ce qui sera écrit sur la ligne 3 du corps de message 
// description4=*** : Ce qui sera écrit sur la ligne 4 du corps de message 
// description5=*** : Ce qui sera écrit sur la ligne 5 du corps de message 
// description6=*** : Ce qui sera écrit sur la ligne 6 du corps de message 
// MSG=*** 			: Ce qui sera écrit sur la ligne 7 du corps de message
// QUI=***			: Jérôme
// channel=***		: sécurité, machines, notif, équipements, général

//-------------------------------------------------------------------------------
// Récupération des tags passés en paramètres
//-------------------------------------------------------------------------------
$tags = $scenario->getTags();

empty($tags['#DE#']) ? $tags['#DE#'] = "NON" : null;
empty($tags['#QUOI#']) ? $tags['#QUOI#'] = "NON" : null;
empty($tags['#Titre#']) ? $tags['#Titre#'] = 0 : null;
empty($tags['#description1#']) ? $tags['#description1#'] = 0 : null;
empty($tags['#description2#']) ? $tags['#description2#'] = 0 : null;
empty($tags['#description3#']) ? $tags['#description3#'] = 0 : null;
empty($tags['#description4#']) ? $tags['#description4#'] = 0 : null;
empty($tags['#description5#']) ? $tags['#description5#'] = 0 : null;
empty($tags['#description6#']) ? $tags['#description6#'] = 0 : null;
empty($tags['#description7#']) ? $tags['#description7#'] = 0 : null;
empty($tags['#ScenarioCKI#']) ? $tags['#ScenarioCKI#'] = $scenario->getName() : null;

$trigger = $scenario->getTrigger();									// Array 
$cmdID = str_replace('#', '', $trigger[0]);							// ID du trigger sans ##
$cmdID1 = $scenario->getRealTrigger();								// ID du trigger avec ##
$cmdID2 = cmd::cmdToHumanReadable($scenario->getRealTrigger());		// La commande avec ##
$value = cmd::byString($cmdID2)->execCmd();							// La valeur de la commande
$cmdID3 = str_replace('#', '', $cmdID2);							// La commande sans ##
setlocale(LC_TIME, 'fr_FR.utf8','fra');

//-------------------------------------------------------------------------------
// Si BTN == single && Etat == 0 alors ON
//-------------------------------------------------------------------------------
if((cmd::byString('#[CH Parents][BTN_CH_Parents_Bureau][Action]#')->execCmd() == 'single' && cmd::byString('#[CH Parents][ECL_CH_Parents_Bureau][Etat]#')->execCmd() == 0)) {
  $_etat = "Allumé";
  $_tps_demarage = time();											// Timestamp du démarrage de l'allumage
  $_tps_demarage_Gi = date('Gi', $_tps_demarage);					// Temps en Gi du démarrage de l'allumage
      
  cmd::byString('#[CH Parents][ECL_CH_Parents_Bureau][On]#')->execCmd();											// J'execute la commande ON de l'équipement #[CH Parents][ECL_CH_Parents_Bureau][Off]#
  $_slider_lum = array('slider'=>254);																				// Je définie la valeur du slider luminosité que je veux mettre ici 254
  cmd::byString('#[CH Parents][ECL_CH_Parents_Bureau][Luminosité]#')->execCmd($_slider_lum, $cache=0);				// J'affecte la valeur et je commande le slider de la commande luminosité #[CH Parents][ECL_CH_Parents_Bureau][Luminosité]#
  $_slider_temp = array('slider'=>370);																				// Je définie la valeur du slider couleur température que je veux mettre ici 370
  cmd::byString('#[CH Parents][ECL_CH_Parents_Bureau][Température couleur]#')->execCmd($_slider_temp, $cache=0);	// J'affecte la valeur et je commande le slider de la commande couleur température #[CH Parents][ECL_CH_Parents_Bureau][Température couleur]#
  
  cmd::byString('#[Essai][Test_ECL_Compteur][Timestamp_debut]#')->event($_tps_demarage);							//	Affectation de la valeur tps démarrage dans mon virtuel #[Essai][Test_ECL_Compteur][Timestamp_debut]# comme une variable
  cmd::byString('#[Essai][Test_ECL_Compteur][Time_debut]#')->event($_tps_demarage_Gi);								//	Affectation de la valeur tps démarrage au format Gi dans mon virtuel #[Essai][Test_ECL_Compteur][Timestamp_debut]# comme une variable
  
  $_tps_debut = strftime("%Hh%M", $_tps_demarage);							// Affichage de l'heure au format 12h00
  
  $_tps_debut_h  = strftime("%H h", $_tps_demarage);						// Affichage de l'heure au format 12h 00min 00s
  $_tps_debut_m  = strftime("%M Mmin", $_tps_demarage);						// Affichage de l'heure au format 12h 00min 00s
  $_tps_debut_s  = strftime("%S s", $_tps_demarage);						// Affichage de l'heure au format 12h 00min 00s
  
//-------------------------------------------------------------------------------  
// Je lance le scénario ID=344 avec un $tags['#trigger#'] = "ECL CH Parents Bureau"
// pour déclencher dans ce scénarion la bonne partie à la place de 
// trigger(#[CH Parents][ECL_CH_Parents_Bureau][Etat]#) == 1 déjà présent
//-------------------------------------------------------------------------------
  $id_notif_scenario=344;
  $notif_scenario=scenario::byId($id_notif_scenario);
  
  //Récupérer les tags dans un scenaraio
  $tags = $notif_scenario->getTags();
  //Ajouter des tags
  $tags['#trigger#'] = "ECL CH Parents Bureau";
  
  //Passer les tags à un sous-scenario et le lancer
  $notif_scenario->setTags($tags);
  $notif_scenario->launch();
  //trigger(#[CH Parents][ECL_CH_Parents_Bureau][Etat]#) == 1
  
//-------------------------------------------------------------------------------
// Définir les Tags nécessaire pour le scénario
//-------------------------------------------------------------------------------
  $tags['#Titre#'] = ':bulb: Lampe CH Parents :bulb:';
  $tags['#tps_debut#'] = $_tps_debut;
  $tags['#description2#'] = '';
  $tags['#description3#'] = '';
  $tags['#description4#'] = '';
  $tags['#description5#'] = '';
  $tags['#description6#'] = '';
  $tags['#description7#'] = '';
  
  }

//-------------------------------------------------------------------------------
// Si BTN == single && Etat == 1 alors OFF
//-------------------------------------------------------------------------------
elseif ((cmd::byString('#[CH Parents][BTN_CH_Parents_Bureau][Action]#')->execCmd() == 'single' && cmd::byString('#[CH Parents][ECL_CH_Parents_Bureau][Etat]#')->execCmd() == 1)) {
  $_etat = "Eteint";
  $_tps_fin = time();											// Timestamp de la fin d'allumage
  $_tps_fin_Gi = date('Gi', $_tps_fin);							// Temps en Gi de la fin d'allumage
    
  cmd::byString('#[CH Parents][ECL_CH_Parents_Bureau][Off]#')->execCmd();											// J'execute la commande OFF de l'équipement #[CH Parents][ECL_CH_Parents_Bureau][Off]#
  $_slider_lum = array('slider'=>0);																				// Je définie la valeur du slider luminosité que je veux mettre ici 254
  cmd::byString('#[CH Parents][ECL_CH_Parents_Bureau][Luminosité]#')->execCmd($_slider_lum, $cache=0);				// J'affecte la valeur et je commande le slider de la commande luminosité #[CH Parents][ECL_CH_Parents_Bureau][Luminosité]#
  $_slider_temp = array('slider'=>153);																				// Je définie la valeur du slider couleur température que je veux mettre ici 370
  cmd::byString('#[CH Parents][ECL_CH_Parents_Bureau][Température couleur]#')->execCmd($_slider_temp, $cache=0);	// J'affecte la valeur et je commande le slider de la commande couleur température #[CH Parents][ECL_CH_Parents_Bureau][Température couleur]#
  
  $_tps_demarage = cmd::byString('#[Essai][Test_ECL_Compteur][Timestamp_debut]#')->execCmd();						// je récupère la valeur tps démarrage stockée dans le If pour le ON
  $_tps_demarage_Gi = cmd::byString('#[Essai][Test_ECL_Compteur][Time_debut]#')->execCmd();							// je récupère la valeur tps démarrage format Gi stockée dans le If pour le ON
  cmd::byString('#[Essai][Test_ECL_Compteur][Timestamp_fin]#')->event($_tps_fin);									//	Affectation de la valeur tps fin dans mon virtuel #[Essai][Test_ECL_Compteur][Timestamp_fin]# comme une variable
  cmd::byString('#[Essai][Test_ECL_Compteur][Time_fin]#')->event($_tps_fin_Gi);										//	Affectation de la valeur tps fin Gi dans mon virtuel #[Essai][Test_ECL_Compteur][Time_fin]# comme une variable
    
  $_tps_debut = strftime("%Hh%M", $_tps_demarage);							// Affichage de l'heure au format 12h00
  $_tps_debut_h  = strftime("%H h", $_tps_demarage);						// Affichage de l'heure au format 12h 00min 00s
  $_tps_debut_m  = strftime("%M Mmin", $_tps_demarage);						// Affichage de l'heure au format 12h 00min 00s
  $_tps_debut_s  = strftime("%S s", $_tps_demarage);						// Affichage de l'heure au format 12h 00min 00s
  
  $_tps_arret = strftime("%Hh%M", $_tps_fin);								// Affichage de l'heure au format 12h00
  $_tps_arret_h  = strftime("%H h", $_tps_fin);								// Affichage de l'heure au format 12h 00min 00s
  $_tps_arret_m  = strftime("%M Mmin", $_tps_fin);							// Affichage de l'heure au format 12h 00min 00s
  $_tps_arret_s  = strftime("%S s", $_tps_fin);								// Affichage de l'heure au format 12h 00min 00s
  
  $_tps_allumage = $_tps_fin - $_tps_demarage;								// Je calcul le temps d'allumage de l'ampoule
  $_tps_allumage_h = floor($_tps_allumage / 3600);							// Je transforme le timestamp d'allumage en heure
  $_tps_allumage2 = $_tps_allumage - ($_tps_allumage_h * 3600);				// j'enlève les heures au timestamp du départ pour ne traiter que les minutes et secondes restantes
  $_tps_allumage_m = floor((($_tps_allumage2 / 60) % 60));					// Je transforme le timestamp d'allumage2 en minutes par un modulo 60					
  $_tps_allumage_s = $_tps_allumage2 - $_tps_allumage_m * 60;				// j'enlève au temps d'allumage2 les minutes trouvées et il ne reste que les secondes
 		
  
  $_tps_total_histo = cmd::byString('#[Essai][Test_ECL_Compteur][Timestamp_total]#')->execCmd();		// Je récupère de mon virtuel le timestamp cumulé et stocké de l'ampoule pour avoir la durée de vie complète 
  $_tps_total = $_tps_total_histo +($_tps_fin - $_tps_demarage);										// je fait à nouveau la même mécanique de calcul qu'au dessus pour avoir des H Min et s
  $_tps_global_h = floor($_tps_total / 3600);
  $_tps_total2 = $_tps_total - ($_tps_global_h * 3600);
  $_tps_global_m = floor((($_tps_total2 / 60) % 60));
  $_tps_global_s = $_tps_total2 - $_tps_global_m * 60;
  cmd::byString('#[Essai][Test_ECL_Compteur][Timestamp_total]#')->event($_tps_total);					// J'affecte le résultat cumulé trouvé dans mon virtuel pour le prochain allumage de l'ampoule
  
  
//-------------------------------------------------------------------------------  
// Je lance le scénario ID=344 avec un $tags['#trigger#'] = "ECL CH Parents Bureau"
// pour déclencher dans ce scénarion la bonne partie à la place de 
// trigger(#[CH Parents][ECL_CH_Parents_Bureau][Etat]#) == 1 déjà présent
//-------------------------------------------------------------------------------
  $id_notif_scenario=344;
  $notif_scenario=scenario::byId($id_notif_scenario);
  //Récupérer les tags dans un scenaraio
  $tags = $notif_scenario->getTags();
  //Ajouter du tag trigger ="ECL CH Parents Bureau"
  $tags['#trigger#'] = "ECL CH Parents Bureau";
  //Passer les tags à un sous-scenario et le lancer
  $notif_scenario->setTags($tags);
  $notif_scenario->launch();
  //trigger(#[CH Parents][ECL_CH_Parents_Bureau][Etat]#) == 1
  
//-------------------------------------------------------------------------------
// Définir les Tags nécessaire pour le scénario
//-------------------------------------------------------------------------------
  $tags['#Titre#'] = ':bulb: Lampe CH Parents :bulb:';
  $tags['#tps_debut#'] = $_tps_debut;
  $tags['#tps_fin#'] = $_tps_arret;
  $tags['#tps_global#'] = $_tps_global_h.'h '.$_tps_global_m.'mn '.$_tps_global_s.'s';
  $tags['#tps_durée#'] = $_tps_allumage_h.'h '.$_tps_allumage_m.'min '.$_tps_allumage_s.'s';
  $tags['#description4#'] = '';
  $tags['#description5#'] = '';
  $tags['#description6#'] = '';
  $tags['#description7#'] = '';

  }

sleep(1);						// Je suis obligé de mettre un sleep d'une seconde car sinon le log n'arrive pas à se mettre à jour avec les bonnes valeurs
$_slider_lum1 = cmd::byString('#[CH Parents][ECL_CH_Parents_Bureau][Luminosité (Valeur)]#')->execCmd();
$_slider_temp1  = cmd::byString('#[CH Parents][ECL_CH_Parents_Bureau][Température couleur (Valeur)]#')->execCmd();

//-------------------------------------------------------------------------------
// Formatage du log du scénario
//-------------------------------------------------------------------------------
$scenario->setLog('');
$scenario->setLog('<=--------------------------------------------------------------------------------------------------------------=>');
$scenario->setLog('<=------------------------------------------------ Informations -----------------------------------------------=>');
$scenario->setLog('<=--------------------------------------------------------------------------------------------------------------=>');
$scenario->setLog('<=-----	Trigger					:	'.$cmdID3.' = '.$value);
$scenario->setLog('<=-----	Etat						:	'.$_etat);
$scenario->setLog('<=-----	Luminosité				:	'.$_slider_lum1);
$scenario->setLog('<=-----	Couleur					:	'.$_slider_temp1);
$scenario->setLog('<=-----																				');
$scenario->setLog('<=-----	Heure de début			:	'.$_tps_debut);
$scenario->setLog('<=-----	Heure de fin				:	'.$_tps_arret);
$scenario->setLog('<=-----	La durée d allumage 		:	'.$_tps_allumage_h.'h '.$_tps_allumage_m.'min '.$_tps_allumage_s.'s');
$scenario->setLog('<=-----	Le cumul d allumage 		:	'.$_tps_global_h.'h '.$_tps_global_m.'min '.$_tps_global_s.'s');
$scenario->setLog('<=--------------------------------------------------------------------------------------------------------------=>');
$scenario->setLog('');


//-------------------------------------------------------------------------------
// Mise à jour des tags avant exécution de la suite du scénario
//-------------------------------------------------------------------------------
$scenario->setTags($tags);

Merci d’avance

1 « J'aime »