Un petit bonsoir aux bloc-codeurs …
Je cherche à faire un DANS ou un A en bloc code, mais impossible de trouver la fonciton dans la doc …
une idée de la fonction et de la manière de l’utiliser
EDIT : Et l’equivalent du remove_inat
Merci
norbert
Un petit bonsoir aux bloc-codeurs …
Je cherche à faire un DANS ou un A en bloc code, mais impossible de trouver la fonciton dans la doc …
une idée de la fonction et de la manière de l’utiliser
EDIT : Et l’equivalent du remove_inat
Merci
norbert
Dans les 2 cas c’est un cron qui est créé. La source est dans core/class/scenarioElement.class.php
La source du DANS:
else if ($this->getType() == 'in') {
if ($this->getSubElement('in')->getOptions('enable', 1) == 0) {
return true;
}
$time = ceil(str_replace('.', ',', $this->getSubElement('in')->execute($_scenario)));
if (!is_numeric($time) || $time < 0) {
$time = 0;
}
if ($time == 0) {
$cmd = __DIR__ . '/../../core/php/jeeScenario.php ';
$cmd .= ' scenario_id=' . $_scenario->getId();
$cmd .= ' scenarioElement_id=' . $this->getId();
$cmd .= ' tags=\'' . json_encode($_scenario->getTags()).'\'';
$cmd .= ' >> ' . log::getPathToLog('scenario_element_execution') . ' 2>&1 &';
$_scenario->setLog($GLOBALS['JEEDOM_SCLOG_TEXT']['task']['txt'] . $this->getId() . $GLOBALS['JEEDOM_SCLOG_TEXT']['sheduleNow']['txt'] );
system::php($cmd);
} else {
$crons = cron::searchClassAndFunction('scenario', 'doIn', '"scenarioElement_id":' . $this->getId() . ',');
if (is_array($crons)) {
foreach ($crons as $cron) {
if ($cron->getState() != 'run') {
$cron->remove();
}
}
}
$cron = new cron();
$cron->setClass('scenario');
$cron->setFunction('doIn');
$cron->setOption(array('scenario_id' => intval($_scenario->getId()), 'scenarioElement_id' => intval($this->getId()), 'second' => date('s'), 'tags' => $_scenario->getTags()));
$cron->setLastRun(date('Y-m-d H:i:s'));
$cron->setOnce(1);
$next = strtotime('+ ' . $time . ' min');
$cron->setSchedule(cron::convertDateToCron($next));
$cron->save();
$_scenario->setLog($GLOBALS['JEEDOM_SCLOG_TEXT']['task']['txt'] . $this->getId() . $GLOBALS['JEEDOM_SCLOG_TEXT']['sheduledOn']['txt'] . date('Y-m-d H:i:s', $next) . ' (+ ' . $time . ' min)');
}
return true;
}
Le A est en dessous.
remove_inat est dans scenarioExpression.class.php C’est la suppression de tous les crons A et DANS du scenario:
elseif ($this->getExpression() == 'remove_inat') {
if ($scenario === null) {
return;
}
$this->setLog($scenario, __('Suppression des blocs DANS et A programmés du scénario', __FILE__) . ' ');
$crons = cron::searchClassAndFunction('scenario', 'doIn', '"scenario_id":' . $scenario->getId() . ',');
if (is_array($crons)) {
foreach ($crons as $cron) {
if ($cron->getPID() == getmypid()) {
continue;
}
$cron->remove();
}
}
return;
}
J’avais trouvé cela, mais je n’ai jamais essayé :
$scenario ="#[Ton][sce][nario]#";
$DateTime = date(‹ d-m à H:i ›);
$cmd = cmd::byString($scenario);
$cmd->event(($DateTime));
Fais nous un retour !
ouch ! ca me parait compliquer.
Je vais du coup peut-etre voir à le faire à l’exterieur du bloc code.
En fait, je souhaite juste planifier un cron pour une commande en ayant l’heure (au format jeedom) et la commande dans 2 variables php.
Norbert
Oui ce n’est pas possible car tu dois donner l’id du bloc de ton scénario que tu veux exécuter.
Donc tu pourrais créer une 2eme bloc code dans le scénario, récupérer l’id et programmer un doin
du bloc mais c’est bien tous le bloc qui sera exécuté.
Perso, en tant que dev, je ne comprends pas pourquoi les bloc codes sont tant utilisés par les utilisateurs… je ne dois pas en avoir plus que 2 ou 3 et c’est seulement parce que je ne savais vraiment pas faire autrement
En même temps si ça devient trop complexe je fais un plugin
Perso je fais des blocs de codes pour plusieurs raisons :
Quand je peux éviter d’en faire j’évite, mais y a des moments où on à pas trop le choix
Après pour moi c’est aussi la force de jeedom la possibilité d’être accessible à la fois au grand public et aux nerds
Je ne connaissais pas, merci pour l’info
Bonjour @Mips
Du coup je suis effectivement sorti du bloc- code pour le faire en mode bloc normal. Ça marche très bien.
En l’occurrence, j’essaie effectivement de reproduire ce que le plugin pool fait, ce dernier marche de moins en moins bien, pas de retour du dev.
J’ai bien essayé à plusieurs reprises de me mettre dans le plugin mais c’est trop compliqué, sans être développeur.
Du coup, pas trop le choix que de faire des blocs code. Et puis sur le fond ça m’intéresse aussi de comprendre un petit peu le PHP.
Norbert
Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.