Php: trouver l'object sceanrio en fonction de son nom

j’ai un scenario pour activer un scenario passé en paramètre dans un tag:
ce tag « scenario » contient un nom sous la forme : [Alarmes][Maison][Alarme_Fuite_eau]
dans le code comment retrouver l’objet scenario pour pouvoir l’activer?

$scenario = $tags['#scenario#'] // récupère le nom du scenario
$scenari =  ????? // passer tu texte a l'objet ?
$scenari->setIsActive(1); //active le scénario
$scenari->save();

Salut,

Ceci devrait faire l’affaire :

$scenari = scenario::byString($scenario);

Par contre $scenario est une variable attribuée automatiquement par Jeedom au scénario en cours. Il vaudrait mieux faire par exemple :

$scenari = scenario::byString($tags['#scenario#']); // récupère l'objet scénario
$scenari->setIsActive(1)->save(); //active le scénario

Merci, mais

$sc = $tags['#scenario#'];
$scenario->setLog("SK: ". $sc);

$scenari = scenario::byString($tags['#scenario#']); // récupère l'objet scénario

me renvoi:
La commande n’a pas pu être trouvée : [Alarmes][Maison][Alarme_Fuite_eau] => [Alarmes][Maison][Alarme_Fuite_eau]

J’ai essayé en passant le tag au format #[Alarmes][Maison][Alarme_Fuite_eau]# et le tag est recupéré comme #scenario56#.
mais un $scenari = scenario::byID($tags[‹ #scenario# ›]) ne renvoi pas le scenario

donc je sèche…

Essayes ça pour voir :

$scenari = scenario::byString('#'.$tags['#scenario#'].'#');

Ok je viens de capter que tu as déjà essayé à priori. Ça tourne autour de ça normalement, j’ai pas l’occasion de tester là. Peut-être utiliser un toHumanReadable…

Ou ça alors si tu récupère un id au lieu du nom au final?

$scenari = scenario::byId('#'.$tags['#scenario#'].'#');

Yeah! cela fonctionne avec un string. Merci!

Par contre si j’appelle le scenario avec le tag=#[Alarmes][Maison][Alarme_Fuite_eau]# (avec # avant et après)

le log du scenario appelé indique:
[SCENARIO] Start : Lancement provoque par le scenario : [Test][Aucun][test_ena_scenario]. Tags : {"#scenario#":"#scenario56#"}

par contre dans ce cas je n’arrive pas a transformer le tag #scenario56# en object scenario utilisable

une idée?

De mémoire la fonction du core enlève les dièses et le terme scenario pour ne récupérer que l’id donc ça devrait fonctionner avec le byId il me semble

Edit: Je viens de vérifier et c’est dans la fonction ByString que le remplacement est effectué. C’est donc bien la même chose : scenario::byString('#scenario56#') retourne bien l’objet scénario portant l’id 56.

Ok cela marche avec une chaîne en dur. En sauvegardant le scenario, la ligne est remplacée par scenario::byString(‹ #[Alarmes][Maison][Alarme_Fuite_eau]# ›);

mais scenario::byString(‹ # ›.$tags[‹ #scenario# ›].‹ # ›); ou scenario::byString($tags[‹ #scenario# ›]); ne fonctionnent pas…

Par principe j’utiliserai dans le scénario « appelant » le tag suivant :
scenario=#[Alarmes][Maison][Alarme_Fuite_eau]#
et ainsi dans le scenario « appelé » :
$scenari = scenario::byString($tags['#scenario#']);

Ceci, car si tu modifie le nom du scenario « appelé » par :
Alarme_Fuite_eau_2 par exemple, sa aura effet de modifier aussi automatiquement dans le code du scénario « appelant », sans le besoin d’intervenir dans le code.

Je suis entièrement d’accord avec toi, mais cela ne fonctionne pas:

mon scenario:

$scenari = scenario::byString($tags['#scenario#']);
$scenario->setLog($scenario->getName().": scenari:" . $scenari->getName());

le log:

[2021-11-28 21:59:59][SCENARIO] Start : Lancement provoque par le scenario  : [Test][Aucun][test_ena_scenario]. Tags : {"#scenario#":"#scenario56#"}
[2021-11-28 21:59:59][SCENARIO] Exécution du sous-élément de type [action] : code
[2021-11-28 21:59:59][SCENARIO] Exécution d'un bloc code
[2021-11-28 21:59:59][SCENARIO] La commande n'a pas pu être trouvée :  => 
[2021-11-28 21:59:59][SCENARIO] Fin correcte du scénario

pour info je suis en jeedom 4.1.27

Tu initie les tag au début de ton scénario ?

$tags = $scenario->getTags(); //récupère la liste des tags
$scenari = scenario::byString($tags['#scenario#']);
$scenario->setLog($scenario->getName().": scenari:" . $scenari->getName());

Oups! Quel boulet je fait! il doit se fait tard pour mes neurones!!!

Merci beaucoup pour ton aide

en résumé et pour référence pour d’autres utilisateurs:

j’appelle mon scénario avec les tags suivants:
scenario=#[Alarmes][Maison][Alarme_Fuite_eau]# scenario_s=[Alarmes][Maison][Alarme_Fuite_eau]

le scénario:

// by ID
$tags = $scenario->getTags();
$scenari = scenario::byString("" . $tags['#scenario#']."");
$scenario->setLog($scenario->getName().": scenari:" . $scenari->getName());

// by string
$scenari = scenario::byString('#'.$tags['#scenario_s#'].'#');
$scenario->setLog($scenario->getName().": scenari_s:" . $scenari->getName());

le résultat:

[2021-11-28 22:13:14][SCENARIO] Start : Lancement provoque par le scenario  : [Test][Aucun][test_ena_scenario]. Tags : {"#scenario#":"#scenario56#","#scenario_s#":"[Alarmes][Maison][Alarme_Fuite_eau]"}
[2021-11-28 22:13:14][SCENARIO] Exécution du sous-élément de type [action] : code
[2021-11-28 22:13:14][SCENARIO] Exécution d'un bloc code
[2021-11-28 22:13:14][SCENARIO] Activer_scenario: scenari:Alarme_Fuite_eau
[2021-11-28 22:13:14][SCENARIO] Activer_scenario: scenari_s:Alarme_Fuite_eau
[2021-11-28 22:13:14][SCENARIO] Fin correcte du scénario

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