alexylem / jarvis

Jarvis.sh is a simple configurable multi-lang assistant.
http://openjarvis.com
MIT License
810 stars 197 forks source link

Add program_exit hook on Stop Jarvis action #410

Closed Jean-Bernard-Hallez closed 7 years ago

Jean-Bernard-Hallez commented 7 years ago

Bonjour... suite à la mise à jour je n'ai pas d'amélioration des hooks:

Voici mes hooks pour vous expliquer le problème:

entering_cmd $verbose && jv_debug "DEBUG: entering_cmd hook" /home/pi/jarvis/plugins/jarvis-essai/essai.sh gpio mode 2 out
gpio mode 0 out gpio write 2 1 gpio write 0 1

sleep 0.2 gpio write 2 0 gpio write 0 0

sleep 0.2 gpio write 2 1 gpio write 0 1

sleep 0.2 gpio write 2 0 gpio write 0 0

sleep 0.2 gpio write 2 1 gpio write 0 1

exiting_cmd $verbose && jv_debug "DEBUG: exiting_cmd hook" gpio mode 2 out gpio mode 0 out gpio write 2 0 gpio write 0 0

program_exit $verbose && jv_debug "DEBUG: program_exit hook" (( $1 )) && say "J'ai rencontré une erreur, relancez-moi!" gpio write 0 0 gpio write 2 0 gpio write 3 0

program_startup $verbose && jv_debug "DEBUG: program_startup hook" gpio mode 3 out gpio write 3 1

Mon jarvis est composé de 2 leds pour les yeux et 1 pour le Nez, cette dernière doit resté allumé tant que jarvis fonctionne.

Mon soucis c'est que lorsque j'ai une commande dans mon crontab comme ceci: 7-21 * * 1-5 ~/jarvis/jarvis.sh -x "quelle heure est-il?"0 toutes les heures il m'annonce l'heure...

Mais dès que c'est fait... la led du nez s’éteint comme si jarvis ne fonctionnait plus alors qu'il tourne encore...

j'ai le plugin UI & API.

Jean-Bernard-Hallez commented 7 years ago

Problème N°2 dans entering_cmd il y un une exécution de /home/pi/jarvis/plugins/jarvis-essai/essai.sh qui tourne en boucle sans jamais s'arrêter....

alexylem commented 7 years ago

Bon alors suite à la discussion dans https://github.com/alexylem/jarvis/issues/335#issuecomment-271946644 tu verras que j'ai bien désactivé les hooks quand utilisé depuis l'API. Mais pas quand jarvis est lancé depuis le Shell. Dans ton crontab Jarvis est lancé depuis le shell. Donc c'est normal que le hook soit déclenché. En effet c'est un peu embêtant dans ton cas. Je te propose 2 possibilités:

  1. Je change le code pour ne pas déclencher le hook program_exit avec le flag "-x". Ca pourrait en embêter d'autres, mais pas sûr. On peut tester et voir si ca râle 😄
  2. Tu changes ton crontab pour utiliser l'API au lieu du programme directement:
    curl "http://localhost:8080?order=quelle heure"
trarizakaria commented 7 years ago

J'aimerais avoir les 3 scripts on.sh off.sh et blink.sh pour brancher une seule led et savoir l'état de jarvis comme l'exemple qu'a donné Alex. Je suis débutant et j'ai pas pu comprendre le lien qui parle d'une certaine kinect il y a 3 led. Si c'est possible de m'éclairer ou de me diriger ves un sujet qui parle de ça. Merci a tous.

Jean-Bernard-Hallez commented 7 years ago

bonjour @trarizakaria voir #376 ... Est-ce suffisant ??

Attention... moi je suis branché directement sur le port GPIO de mon raspberry !!!! ce n'est pas la même technique utilisé pour la kinnect.

trarizakaria commented 7 years ago

C'est ce que je veux moi aussi. Et je vais faire comme toi. 2 led branchée directement sur la raspberry. Une pour surveiller le programme et l'autre pour le mode commande. Je suis entrain de faire un peu de lecture car j'ai jamais utiliser les Gpio. J'ai juste une question. un script bash ou python ? Lequel est facile a mettre en oeuvre ?

Jean-Bernard-Hallez commented 7 years ago

Bon je t'envoie tout cela... quel est ton Email ???

trarizakaria commented 7 years ago

c'est trarizakaria@gmail.com. Merci infiniment

Jean-Bernard-Hallez commented 7 years ago

@alexylem je vient de modifier mon crontab avec la commande curl "http://192.168.0.1:8080?order=quelle%20heure" à la place de l'autre... je te tiens au jus...

le %20 est important !!!! sinon ca bug... curl ne supporte pas les espaces vide....

Jean-Bernard-Hallez commented 7 years ago

@trarizakaria comme promis voilà.... https://github.com/Jean-Bernard-Hallez/jarvis-testjb/blob/master/Jarvis%20de%20JB.pdf

alexylem commented 7 years ago

@Jean-Bernard-Hallez tu reviens vers moi pour les 2 possibilités proposées plus haut?

trarizakaria commented 7 years ago

@Jean-Bernard-Hallez excellent pdf. ton jarvis est mignon :) . le tuto est bien clair et devrai aider beaucoup d'utilisateurs comme moi. merci pour le partage

alexylem commented 7 years ago

Le jarvis de JB peut-être discuté sur le ticket dédié: #413

Jean-Bernard-Hallez commented 7 years ago

Oui bien sûr @alexylem ....

alexylem commented 7 years ago

@Jean-Bernard-Hallez tu reviens vers moi pour les 2 possibilités proposées plus haut? histoire d'avancer et cloturer le ticket? Merci!

Jean-Bernard-Hallez commented 7 years ago

Désolé je suis parti pour 1semaine en formation... le problème de l'api direct est que si jarvis est arrêté forcément ça ne marche plus pour cette option... je suis ok peux-tu essayer la version 1 sachant que je ne pourrais pas la tester desuite... d'ici mon retour si il y a eu des retours négatif je garderai l'option 2... je clôture le ticket ???

alexylem commented 7 years ago

J'en ai profité pour créer une nouvelle variable:

$jv_api # Boolean: indicates if called using API else normal usage

if $jv_api; then
   echo "from api"
else
   echo "normal usage"
fi

J'attends tes retours avant de fermer le ticket.

Jean-Bernard-Hallez commented 7 years ago

Ouai Merci @alexylem Ca marche super bien... et.... il y a t'il possibilité de détecter aussi lorsque je suis en mode keyboard ?

Jean-Bernard-Hallez commented 7 years ago

En fait non @alexylem... il y a toujours un os... il n'y a plus de hooks Program exit... lorsque l'on quitte jarvis par la fonction Stop Jarvis quand il est déja lancé.... les commandes ne se lancent plus. Aïe... lol Ce qui fait que dans mon cas je ne sais pas si il tourne en tache de fond ou pas... ma led reste toujours allumée.

Actuellement le point positif c'est lorsque l'on fait ~/jarvis/jarvis.sh -x "quelle heure est-il?" à la fin, ma led principale M/A ne s’éteint plus.

alexylem commented 7 years ago

il y a t'il possibilité de détecter aussi lorsque je suis en mode keyboard ?

Oui:

$keyboard # Boolean: indicates if using keyboard mode

if $keyboard; then
   echo "using keyboard"
else
   echo "using voice"
fi

il n'y a plus de hooks Program exit... lorsque l'on quitte jarvis par la fonction Stop Jarvis quand il est déja lancé

Il n'y en a jamais eu sur le "kill" Jarvis. Mais je peux le rajouter 😄 Ca t'intéresse?

Jean-Bernard-Hallez commented 7 years ago

Super Merci... ca fonctionne le keyboard... et oui STP peux tu me rajouter lorsque l'on quitte jarvis un hook

alexylem commented 7 years ago

@Jean-Bernard-Hallez en fait j'ai testé et chez moi le Stop Jarvis déclenche déjà le program_exit hook:

# Terminal 1
$> ./jarvis.sh -nv
# Jaris now started and running

# Terminal 2
$> ./jarvis.sh
# Jarvis is already running
# je sélectionn Stop Jarvis
Jarvis has been terminated

# Terminal 1
# program_exit hook
Jean-Bernard-Hallez commented 7 years ago

Si je le lance comme toi ok: ./jarvis.sh -nv ma led s'allume, je quitte ok ca fonctionne mais Le certifie qu'en faisant ceci: ./jarvis.sh puis dans le menu "start as service" et quand je quitte en faisant ./jarvis.sh puis "stop jarvis" Ma led reste allumée... Et Jarvis est bien arrêté !

$verbose && jv_debug "DEBUG: program_exit hook" (( $1 )) && say "J'ai rencontré une erreur, relancez-moi!" gpio write 0 0 gpio write 2 0 gpiowrite 3 0

alexylem commented 7 years ago

Ok en effet ca ne marche pas si je lance Jarvis en mode service. J'ai modifié le code pour lancer Jarvis en mode troubleshooting et ainsi tout sortir dans la log jarvis.log lorsqu'il est lancé en mode service. Et quand je l'arrête je n'y trouve pas le hook program_exit. J'essaye de trouver une solution plus propre que celle que j'ai en tête 😄

Jean-Bernard-Hallez commented 7 years ago

Ok Merci beaucoup....

alexylem commented 7 years ago

Vas-y mets à jour et réessaye.

Jean-Bernard-Hallez commented 7 years ago

20/20 !!! Merci je clôture...

Jean-Bernard-Hallez commented 7 years ago

Coucou @alexylem Aie... Tu as fais un modif qui lance Jarvis " Start as a service " en mode "Troubleshooting"... C'est à dire que j'ai le retour de ma voix.... même si je le lance par ./jarvis.sh -b

./jarvis.sh -v ne fonctionne peut-être pas comme il le faut vérife

Et si Jarvis est arrêté avec ./jarvis.sh -s "Bonjour" il me dit: ERROR: Jarvis is not running Ce qui ne me gène pas personnellement mais on pouvais le forcer avant même quand il était arrêté...

Merci merci !!!!

alexylem commented 7 years ago

Oups!!! C'est corrigé pour le mode troubleshooting... désolé 😞 Pour l'autre erreur maintenant c'est normal, c'est lié à l'implémentation de #440.

Jean-Bernard-Hallez commented 7 years ago

Ok Merci... je teste...

Jean-Bernard-Hallez commented 7 years ago

CA fonctionne... Merci super... Il y a t-il une variable qui me permets de savoir si jarvis a été lancé par la commande externe jarvis -x .....

alexylem commented 7 years ago

Il y a t-il une variable qui me permets de savoir si jarvis a été lancé par la commande externe jarvis -x

if [ "$just_execute" != false ]; then
    # started with -x, "$just_execute" contains the order in argument
fi
alexylem commented 7 years ago

Mais je te conseille quand même d'utiliser $jv_api qui sera plus pérenne dans le temps. $jv_api est à true si Jarvis est utilisé en mode API, que ce soit via Jarvis-API ou simplement avec le flag -x.

Jean-Bernard-Hallez commented 7 years ago

Ok super je teste.... ;-) et ca marche... ;-)