Bonjour,
Après plusieurs mois d’investigations et de mise en place.
Je vous propose quelques bloccode utils dans vos scénarios :
- Tester si un scénario est en cours d’exécution :
$valeur = $scenario::byId("l'id de scénario ciblé");
$monScenar = $valeur->getName();
$Etat= $valeur->running();
if (empty($Etat)){
$Etat = 0;}
$tags['#actif#'] = $Etat;
$scenario->setTags($tags);
- Désactiver l’ensemble des Scénarios actifs, après avoir listé et sauvegardé ceux-ci dans une variable tableau (array), pour la réactivation automatique (voir ci-dessous)
$mesScenar=scenario::all();
$tags['#MonIC#'] = count($mesScenar);
$i = 0;
foreach ($mesScenar as $valeur) {
$id = $valeur->getId();
$monScenar = $valeur->getName();
$etat1 = $valeur->getIsActive();
$etat2 = $valeur->running();
if ($etat1 == 1){
$i = $i+1;
$array[] = $id;
$valeur->setIsActive(0);
$valeur->save();
$etat1 = $valeur->getIsActive();
$scenario->setLog($i." Id : ".$id . " " . $monScenar . " Etat1 " . $etat1 . " Etat2 " . $etat2);}
};
$tags['#MonI#'] = $i;
$scenario->setTags($tags);
$scenario->setData('MonTab', $array);
Faire suivre dans le scénario, la réactivation des quelques scénarios indispensable (même en cas d’absence).
- Puis réactiver les scénarios présents dans la variable tableau (ici MonTab)
$array = $scenario->getData('MonTab');
$i = 0;
$tags['#MonC#'] = count($array);
foreach ($array as $id) {
$valeur = $scenario::byId($id);
$monScenar = $valeur->getName();
$valeur->setIsActive(1);
$valeur->save();
$etat1 = $valeur->getIsActive();
$i = $i+1;
$scenario->setLog($i." Id : ".$id . " " . $monScenar . " Etat : " . $etat1);
};
//$tags['#MonI#'] = $array[1];
$scenario->setTags($tags);
- Récupérer le nom unique du saint du jour (voir plugin domogeek) → utile pour un TTS matinale.
$value = cmd::byString('#[FreeBox][DomoGeek][Saint du jour]#')->execCmd();
$array = explode(",", $value);
$tags['#fete#'] = $array[0];
$scenario->setTags($tags);
A suivre …
