Scénarios : Petits codes entre amis

Tags: #<Tag:0x00007f59273d5db0> #<Tag:0x00007f59273d5c70>

Hello,

Comme tout le monde, j’ai galéré au début avec les bloc CODE des scénarios et ce qu’on pouvais faire avec.

Et un petit pense bête quelque part, c’est pas mal non plus.

Alors pour ceux que çà intéresse :

https://kiboost.github.io/jeedom_docs/jeedomV4Tips/CodesScenario

A compléter au fur et à mesure …
:wink:

14 J'aimes

Cool merci !!!

C’est Signet-té

Merci kiboost !

Super idée, parce que c’est absolument surpuissant. J’ai découvert il y a peu de temps, et on peut tout faire ou presque.

Quelques exemples récents que j’ai fait en m’inspirant d’exemples sur le forum :

Et j’ai amélioré un script posté sur l’ancien forum pour récupérer des données du site Infoclimat, il faut que je le poste d’ailleurs.

Edit : et voilà pour les données du site Infoclimat

Super idée merci

Super.
J’ajoute le lien du post historique.

https://www.jeedom.com/forum/viewtopic.php?f=32&t=20037

Retrait d’un message dans le centre de message à partir d’un scénario.

Si il a été ajouté de cette manière:

// Ajout d'un message dans le Centre de Message

message::add('Scénario ' . $scenario->getHumanName(),'Message 2','Message 3');

Il peut être retiré de cette manière, dans le même scénario :

// Retrait d'un message dans le Centre de Message

message::removeAll('Scénario ' . $scenario->getHumanName());

Hello,

Petite maj avec un exemple de user.function php :wink:

2 J'aimes

Bonjour,
Merci pour ce tuto qui va me permettre de faire le lien entre bloc code et scenario.

Avec votre paragraphe ci-dessous, je comprends mieux pourquoi la plupart du temps, vous utilisez les apostrophes pour délimiter les chaines de caractères.

“string” ou ‘string’ sont des chaînes de caractères. Toutefois, notez la différence entre les double-quote et simple-quote. Dans une “string”, php va rechercher des variables pour les traduire, ce sera donc plus lent qu’une ‘string’. Donc utilisez toujours des simple-quote dans ce cas, sauf si vous savez pourquoi. ex:

Dans les faits, ce n’est pas plus lent.
Ce code exécuté en dehors de Jeedom:

$nb = 1000000;
$a = 'TEST';
echo 'Nbre de boucles : ' .$nb .'<br/>';
$time_start = microtime(true);
for($i=0;$i<$nb;$i++)
  $b= 'Duree ' .$a .' ' .$i;
$time_end = microtime(true);
echo 'A [\'Duree \' .$a .\' \' .$i] ' .$b .' ' .round($time_end - $time_start,3).'<br/>';

$time_start = microtime(true);
for($i=0;$i<$nb;$i++)
  $b= "Duree " .$a ." " .$i;
$time_end = microtime(true);
echo 'B ["Duree " .$a ." " .$i] ' .$b .' ' .round($time_end - $time_start,3).'s<br/>';

$time_start = microtime(true);
for($i=0;$i<$nb;$i++)
  $b= "Duree $a $i";
$time_end = microtime(true);
echo 'C ["Duree $a $i"] ' .$b .' ' .round($time_end - $time_start,3).'s<br/>';

donne les résultats suivants sur ma Smart

Nbre de boucles : 1000000
A ['Duree ' .$a .' ' .$i] Duree TEST 999999 0.823
B ["Duree " .$a ." " .$i] Duree TEST 999999 0.822s
C ["Duree $a $i"] Duree TEST 999999 0.58s

Pas de différence flagrante entre ’ et " quand il y a des concaténations.
Et dès qu’il y a une variable à insérer dans un message, entre " c’est plus rapide.
Donc pas besoin de faire un paragraphe parlant de lenteur, ni de rectifier mes PRs :wink:

Tu parle de quoi là ? :roll_eyes: :thinking:
Je vais pas fouiller le code des autres et rectifier des PRs, j’ai assez avec le core et mes plugins …

Ce n’est pas vous qui rectifiez mes PR

Merci pour ces rappels Kiboost.

Après recherche sur l’ancien forum et community, je ne trouve pas de réponse sur un bloc code : comment stopper un scénario :

  • sans bloc code : ok, j’écris stop dans une action
  • dans un bloc code : j’ai trouvé la synthèse suivante :
$scenario=scenario::byId(46);
$scenario->stop();

Mais elle n’arrête pas le scénario et le met en erreur.

De même, je souhaite le relance au début (il s’agit d’un scénario ask pour gestion avec télégram) et j’ai tenté dans le bloc code :

$scenario=scenario::byId(46);
$scenario->launch();

Mais rien n’y fait.
Avez-vous vu une idée ?

pour stopper un autre scenario que celui qui est actif :
$scenario_other = scenario::byId($ID);
$scenario_other->stop();

chez moi me permet de stopper un autre scénario actif …
si ca peut aider …

Merci Manu
Est-ce que tu peux stopper le scenario lui-même (celui qui exécute le bloc code) ?
La subtilité est peut être là.