$scenario->setLog dans une Fonction

Tags: #<Tag:0x00007fcbb1538ca0>

Bonjour ,

Je bute toujours pour écrire des logs dans mon scénario. Ma version de Jeedom est v4.0.61quit tourne sur un RPI3b+
image

Je suis tombé sur ce topic mais je n’arrive pas à la solution décrite par @Loic

J’ai une fonction appelée dans un scenario qui fonctionne bien sauf que l’instruction : $scenario->setLog($message) me retourne cela dans le log du scenario après son execution :

------------------------------------
[2021-02-23 12:25:39][SCENARIO] Start : Scenario lance manuellement.
[2021-02-23 12:25:39][SCENARIO] Exécution du sous-élément de type [action] : action
[2021-02-23 12:25:44][SCENARIO] Call to a member function setLog() on null
[2021-02-23 12:25:44][SCENARIO] Fin correcte du scénario

Le log du scénario est paramétré en « Temps Réel ». J’ai également fait quelques essais en paramétrant par « défaut » et en ajoutant $scenario->persistLog() . Le résulat est identique à savoir

Le code de ma fonction est le suivant :

public static function Vérif_Action_TV($Id_Action,$Id_Status,$Nb_Relance_Max,$intervalle_Relance,$Status_TBC){
		for ($i = 1; $i <= $Nb_Relance_Max; $i++) {
    	$cmd = cmd::byId($Id_Action)->execCmd();
  		sleep($intervalle_Relance);
        $value = cmd::byId($Id_Status)->execCmd();
             if ($Status_TBC == $value) {
            	        $scenario->setLog('Commande activé après ' . $i. ' Tentatives');
               	$scenario->persistLog();
             	break ;
          	 } elseif ($i == $Nb_Relance_Max)  {
              	log::add('user_function', 'error', 'status invalidé après '.$i.' itérations.');
            }
        }
    }                                     
}

Merci d’avance pour votre aide.

Salut,

Quand tu es dans un bloc code dans un scénario, il sait d’office qu’il s’agit du scenario en cours identifié par $scenario.

Par contre dans une fonction externe, il ne peut pas savoir de quel scenario tu parles, il faut l’identifier au préalable dans ta fonction :

$scenario = scenario::byId(XX);

Merci !! Hé bien oui , il faut identifier le scenario par son Id !! … et là ça fonctionne. :grin:

Ci-dessous le code de cette fonction qui fonctionne avec l’instruction $scenario->setLog qui remonte bien , suivi de $scenario->persistLog() (log du scenario paramétré en « défaut »)

public static function Vérif_Action_TV($Id_Action,$Id_Status,$Nb_Relance_Max,$intervalle_Relance,$Status_TBC,$Id_Scenario){
		$scenario = scenario::byId($Id_Scenario);
  		$nom_Id_Action = cmd::byId($Id_Action)->getHumanName(); 
  		for ($i = 1; $i <= $Nb_Relance_Max; $i++) {
    	$cmd = cmd::byId($Id_Action)->execCmd();
  		sleep($intervalle_Relance);
        $value = cmd::byId($Id_Status)->execCmd();
             if ($Status_TBC == $value) {
            	//log::add('user_function', 'error', 'status validé après '.$i.' itération.');
               	$scenario->setLog('Commande activé sur '.$nom_Id_Action.' après ' . $i. ' Tentative(s)');
               	$scenario->persistLog();
             	break ;
          	 } elseif ($i == $Nb_Relance_Max)  {
              	log::add('user_function', 'error', 'status invalidé après '.$i.' itérations.');
            }
        }
    }                                     
}

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