Création d'un cron pour exécuter un scénario

Bonjour tous !
je suis bloqué sur un scénario :crazy_face:

Voici le code :

$cron = new cron();
$cron->setClass('scenario');
$cron->setFunction('doIn');
$cron->setOption(array('scenario_id' => 24, 'scenarioElement_id' => 154, 'second' => date('s'), 'tags' => array("#message#" => "Héhé !!!")));
$cron->setLastRun(date('Y-m-d H:i:s'));
$cron->setOnce(1);
$next = strtotime('+ 1 min');
$cron->setSchedule(date('i', $next) . ' ' . date('H', $next) . ' ' . date('d', $next) . ' ' . date('m', $next) . ' * ' . date('Y', $next));
$cron->save();
$scenario->setLog(__('Tâche : ', __FILE__) . $cron->getId() . __(' programmé à : ', __FILE__) . date('Y-m-d H:i:00', $next));

Ce bout de code programme le déclenchement d’un scénario via le cron Jeedom.
Mais voilà, j’ai une erreur !!

[ERROR] : Erreur sur scenario::doIn() : Call to a member function execute() on bool

Trace du scénario cible :
image

API Jeedom :

Donc j’en conclu que mon ‹ scenarioElement_id › => 154 n’est pas bon !
J’ai édité en mode texte le scénario cible n°24…
image

Il attend quoi comme scenarioElement_id ?? Ou c’est autre chose ?? :upside_down_face:

Salut,

C’est pas l’api mais le code du core :wink:

scenario::doIn() ne sert pas à exécuter un scénario mais un bloc DANS, donc scenarioElement_id c’est l’ID du bloc DANS.

Mais franchement je ne comprend pas l’intérêt ni ce que vous voulez faire exactement.

Car si c’est ca que vous voulez faire:

alors non, le code ne fait pas du tout ca.

Il ne faut pas créer une nouvelle tâche pour programmer un scénario, il faut définir un déclencheur programmé sur celui-ci.

Pourquoi ne pas faire un déclencheur programmé? cela fait ton cron tout simplement.

Et ca prend 2 sec a faire.

1 « J'aime »

Si on ne connait pas le déclencheur et quand l’appel du scénario cible sera mis en place, il faut pouvoir programmer via le scénario en cours d’exécution

En faite pour faire simple, comment on traduit ce bloc en PHP !
Bloc A, faire ACTION :

Après y a une solution crade, en mettant en Tag les infos du scénario à lancer et de le programmer à la fin du bloc CODE avec le bloc A / FAIRE, mais une petite fonction PHP pour créer une tache cron c’est plus mieux :wink:

Un cron qui fonctionne :

La fonction ‹ setFunction › charge l’id du scenario et l’id du bloc scenarioElement_id
Il faut que le bloc du scénario cible soit un A/FAIRE, son getType est ‹ at › pour que cela fonctionne.

Si le bloc de la cible est autre chose le code sera exécuté :
image

la fonction doIn() va exécuter le bloc CODE
image

mais la syntaxe n’est pas reconnue :
image

La solution crade qui appelle un A/FAIRE dans le scénario cible ne fonctionne pas non plus.
image