Lancer l'execution d'une commande et la répéter

Bonjour,

je me suis lancée dans la création d’une fonction php pour généraliser une action récurrente sur mes volets.

Mon besoin est de pouvoir lancer une action (descendre le volet 1 par exemple) et de relancer la même action quelques secondes plus tard.

Comme j’ai beaucoup de volets, je voudrai faire une fonction générique.

Je suis donc allée dans data/php/user.function.class.php pour créer une nouvelle fonction

	public static function repeat_after_timer($arg1, $arg2)
    // $arg1 = action à répeter de type #[Salon][Volet 1][Descendre]#
    // $arg2 = timer en seconde (entier)
	{
		$cmd=cmd::byString('$arg1');
		$cmd->execCmd()
        while ($arg2 > 0) {
			$arg2 = $arg2 - 1;
  			sleep (1) ;
		} // On boucle jusqu'à atteindre 0
		$cmd->execCmd()
	}

Ensuite je lance ma commande depuis un scénario et… ça ne marche pas.

Y a-t-il un moyen de voir où ça plante ? un outil de visu du code pas à pas ?
Des idées pourquoi ça ne fonctione pas ?

Merci !

Bonsoir,

Il manque au moins les ; après les 2 cmd->execCmd()

Hello,

Tu peux exécuter ce scénario qui prend en paramètres (tags):
pieces : liste des pièces
équipement : nom commun de la commande à exécuter pour chaque pièce
action : commande à exécuter pour chaque équipement

:arrow_forward: Bloc code du scénario :

$tags = $scenario->getTags();

$pieces = (isset($tags['#pieces#'])) ? $tags['#pieces#'] : "";
$equipment = (isset($tags['#equipment#'])) ? $tags['#equipment#'] : "";
$action = (isset($tags['#action#'])) ? $tags['#action#'] : "";

if ($pieces == '') {
  $scenario->setLog('Les pièces ne sont pas renseignées !');
  return;
}
$pieces = explode(',', $pieces);
$pieces = array_map('trim', $pieces);

if ($equipment == '') {
  $scenario->setLog('L\'équipement n\'est pas renseigné !');
  return;
}
if ($action == '') {
  $scenario->setLog('L\'action n\'est pas renseignée !');
  return;
}

function sendCommand ($piece, $equipment, $action) {
    $command = "#[{$piece}][{$equipment}][{$action}]#";

    try {
      log::add('scenario', 'info', "Envoi de la commande :" . $command);
      $cmd=cmd::byString($command);
      $cmd->execCmd();
      log::add('scenario', 'info', "Commande envoyée avec succès pour :" . $command);

    } catch (Exception $e) {
        log::add('scenario', 'error', "Erreur lors de l'envoi de la commande : " . $e->getMessage());
    }

    sleep(5);
}

array_map(function($piece) use ($equipment, $action) {
    sendCommand ($piece, $equipment, $action);
}, $pieces);