Règle générale, avec le plugin Scripts dans Jeedom, il faut éviter de lancer des scripts qui contiennent une boucle sans fin.
Parfois, cependant, la tâche à réaliser nécessite une telle boucle, par exemple pour faire clignoter une DEL branchée au GPIO.
Rappelez-vous que lorsqu'on lance le script Python à la ligne de commande, il faut appuyer sur Ctrl+C pour l'arrêter. Mais quand c'est Jeedom qui le lance, ceci n'est pas possible.
Ceci pose problème dans un système domotique qui doit démarrer ou arrêter le clignotement à l'aide d'un scénario. En effet, tant que le scénario qui a lancé le clignotement est en cours d'exécution, aucun autre script ne peut travailler avec la broche utilisée. Sans les précautions présentées plus bas, il serait impossible d'arrêter le clignotement dans Jeedom.
En effet, si vous lancez un autre script Python qui travaille avec la même broche alors que le script Python précédent est encore en cours d'exécution, vous obtiendrez une erreur du genre « ... File "/home/pi/mon_script.PY", line 34, in GPIO.setup(del, GPIO.OUT) ... lgpio.error: 'GPIO not allocated'».
Quand un script Python est lancé, il est associé à un processus dans le système d'exploitation. Pour arrêter un script avec une boucle sans fin, il faut tuer le processus.
Pour tuer un processus au terminal, vous pouvez utiliser la commande pkill suivie de -f puis du nom du script Python.
sudo pkill -f clignoter.PY
Il est possible de faire de même directement dans Jeedom. Il suffit d'ajouter une commande de type action dans le plugin Script et d'entrer dans la case pkill complète.
la commandeQuand vous lancez cette commande, il peut arriver que Jeedom affiche un message disant que la commande a retourné un code 15. Vous pouvez ignorer ce message.
Dans le cas d'un script qui fait clignoter une DEL, il peut arriver que la DEL demeure allumée après que le processus ait été tué.
Pour l'éteindre, vous avez deux choix :
ou
Si vous faites afficher dans le Dashboard le scénario qui a lancé le clignotement, vous verrez une animation qui indique que le scénario est toujours en cours d'exécution et ce, même si vous avez pris soin de tuer le processus en charge du clignotement.
Le fait de tuer le processus n'arrête pas le scénario. Par contre, il est possible de demander au scénario qui doit arrêter le clignotement de commencer par arrêter le scénario précédent.
Pour qu'un scénario arrête un autre scénario, il faut choisir
plutôt que .Dans la liste déroulante qui apparaît, sélectionnez
. Ceci permet d'avoir un scénario qui agit sur un autre scénario.À partir de là, vous pourrez sélectionner le scénario qui contient la boucle sans fin et choisir l'action
.Si on met bout-à-bout les concepts expliqués plus haut, le scénario qui arrête le clignotement doit :
▼Publicité