Problème script lua avec script sh

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
loteran
Messages : 59
Inscription : 29 oct. 2017, 18:59

Problème script lua avec script sh

Message par loteran »

Bonjour,

J'ai fait un tuto permettant de contrôler sa freebox avec google home, jusque la tout va bien, sauf que mon script lua est trop gros et du coup pas facile à gérer lorsqu'on veut le modifier.

Pour faire simple, je lance une commande vocale par le biais d'ifttt, qui alimente une uservariable "freebox" dans domoticz, exemple de valeur "tf 1", puis le script lua va reconnaitre la valeur "tf 1" et me lancer un script sh (chg_chaine.sh) avec la valeur de la uservariable "freebox", qui aura été transmise à la variable "ifttt", une fonction "si" va me convertir "tf 1" en "0 0 1", ce qui déclanchera le script chg_chaine avec comme argument 0 0 1.

Code : Tout sélectionner

if ifttt=="tf 1" or ifttt=="la 1" then
        chaine="0 0 1"
        os.execute('/home/'..nom..'/domoticz/scripts/chg_chaine.sh '..chaine)
Donc cela fonctionne.

Mon autre script lua

Code : Tout sélectionner

commandArray = {}

nom="osmc"
ip="xxxxxx"
port="8080"


ifttt=uservariables["freebox"]
ifttt=string.lower(ifttt)


print("valeur d'ifttt au début du script : "..ifttt)

if ifttt=="vide" or ifttt== nil then
print("sortie du script")
return commandArray

else
print("lancement du script freebox.sh avec ifttt = "..ifttt)
os.execute('/home/'..nom..'/domoticz/scripts/freebox.sh '..ifttt)

end

raz="vide"
commandArray['Variable:freebox']=''..raz
return commandArray
, lui va, non pas me lancer le script chg_chaine.sh mais freebox.sh avec en argument la valeur d'ifttt, le print me confirme que l'argument ="tf 1".
Mais rien ne se passe quand je le lance et je ne sais pas comment je peux déboguer pour voir d'ou vient le problème, sachant que lorsque je lance mon script

Code : Tout sélectionner

freebox.sh tf 1
Celui ci fonctionne et me change la chaine, voici ce qu'il contient :
freebox.sh

Code : Tout sélectionner

#!/bin/bash

#########################declaration des variables#################################
ifttt="" #remise à zero d'ifttt
chaine="sh /home/"$USER"/domoticz/scripts/chg_chaine.sh"
touche="sh /home/"$USER"/domoticz/scripts/chg_touche.sh"

########################Recuperation de la valeur d'ifttt##########################

case $# in
        1) ifttt="$1";;
        2) ifttt="$1 $2";;
        3) ifttt="$1 $2 $3";;
        4) ifttt="$1 $2 $3 $4";;
        5) ifttt="$1 $2 $3 $4 $5";;
        6) ifttt="$1 $2 $3 $4 $5 $6";;
        7) ifttt="$1 $2 $3 $4 $5 $6 $7";;
        8) ifttt="$1 $2 $3 $4 $5 $6 $7 $8";;
        9) ifttt="$1 $2 $3 $4 $5 $6 $7 $8 $9";;
esac


######################################Changement de chaines######################################################


case "$ifttt" in
# Par nom de chaine
	"tf 1") $chaine 0 0 1;;
	"france 2") $chaine 0 0 2;;
	"france 3") $chaine 0 0 3;;
	"canal plus") $chaine 0 0 4;;
	"france 5") $chaine 0 0 5;;
	"m 6") $chaine 0 0 6;;
	"arte") $chaine 0 0 7;;
	"c 8") $chaine 0 0 8;;
	"w 9") $chaine 0 0 9;;
	"tmc") $chaine 0 1 0;;
	"nt1") $chaine 0 1 1;;
	"nrj 12") $chaine 0 1 2;;
	"lcp") $chaine 0 1 3;;
	"france 4") $chaine 0 1 4;;
	"bfm") $chaine 0 1 5;;
	"cnews") $chaine 0 1 6;;
	"cstar") $chaine 0 1 7;;
	"gulli") $chaine 0 1 8;;
	"france haut") $chaine 0 1 9;;
	"hd 1") $chaine 0 2 0;;
	"lquipe") $chaine 0 2 1;;
	"6 ter") $chaine 0 2 2;;
	"numro 23") $chaine 0 2 3;;
	"rmc") $chaine 0 2 4;;
# Par numéro de chaine
	"la 1") $chaine 0 0 1;;
	"la 2") $chaine 0 0 2;;
	"la 3") $chaine 0 0 3;;
	"la 4") $chaine 0 0 4;;
	"la 5") $chaine 0 0 5;;
	"la 6") $chaine 0 0 6;;
	"la 7") $chaine 0 0 7;;
	"la 8") $chaine 0 0 8;;
	"la 9") $chaine 0 0 9;;
	"la 10") $chaine 0 1 0;;
	"la 11") $chaine 0 1 1;;
	"la 12") $chaine 0 1 2;;
	"la 13") $chaine 0 1 3;;
	"la 14") $chaine 0 1 4;;
	"la 15") $chaine 0 1 5;;
	"la 16") $chaine 0 1 6;;
	"la 17") $chaine 0 1 7;;
	"la 18") $chaine 0 1 8;;
	"la 19") $chaine 0 1 9;;
	"la 20") $chaine 0 2 0;;
	"la 21") $chaine 0 2 1;;
	"la 22") $chaine 0 2 2;;
	"la 23") $chaine 0 2 3;;
	"la 24") $chaine 0 2 4;;
######################################Appuie sur une touche######################################################


esac
exit 0

Je ne comprends pas le problème, sachant que si dans le script lua je modifie

Code : Tout sélectionner

os.execute('/home/'..nom..'/domoticz/scripts/freebox.sh '..ifttt)
par

Code : Tout sélectionner

test="tf 1"
os.execute('/home/'..nom..'/domoticz/scripts/chg_chaine.sh '..test)
cela fonctionne.

C'est comme si le script freebox.sh ne recevait pas l'argument du script freebox.lua, alors que sur le script chg_chaine.sh celui-ci le recoit bien ...
Je sèche complet...

Merci de vos lumières ;)
Dernière modification par loteran le 16 nov. 2017, 19:22, modifié 1 fois.
rapinou
Messages : 119
Inscription : 17 nov. 2016, 01:44

Re: Problème script lua avec script sh

Message par rapinou »

Si tu fais un print(ifttt) juste avant os.execute, ça dit quoi ?
RPI 3 - Raspbian 8 (Jessie) - Domoticz V3.5877
loteran
Messages : 59
Inscription : 29 oct. 2017, 18:59

Re: Problème script lua avec script sh

Message par loteran »

rapinou a écrit :Si tu fais un print(ifttt) juste avant os.execute, ça dit quoi ?
je l'ai fait et les valeurs sont bonnes.
C'est pour ca que dans le doute j'ai testé avec la variable test="tf 1", ne donne rien et meme si je mets "la 1" en dur ca ne marche pas, mais si je lance mon autre script en remplaçant freebox.sh par chg_chaine.sh et en mettant la valeur 0 0 1 (attendu par le script) cela fonctionne et bien sur si je lance mon script "freebox.sh la 1" depuis la console, chg_chaine.sh se lance avec l'argument "0 0 1" et cela fonctionne, c'est pour cela que je ne comprends pas.

voici le script chg_chaine.sh

Code : Tout sélectionner

#!/bin/bash

centaine=$1
dizaine=$2
unite=$3

telecommande=21295999

sudo curl "http://hd1.freebox.fr/pub/remote_control?code=$telecommande&key=$centaine" 
sudo curl "http://hd1.freebox.fr/pub/remote_control?code=$telecommande&key=$dizaine" 
sudo curl "http://hd1.freebox.fr/pub/remote_control?code=$telecommande&key=$unite"
rapinou
Messages : 119
Inscription : 17 nov. 2016, 01:44

Re: Problème script lua avec script sh

Message par rapinou »

Ce ne serait pas une histoire d'echo ou de guillemets ?

Code : Tout sélectionner

case "$ifttt" in
# Par nom de chaine
   "tf 1") "$chaine 0 0 1";;
ou

Code : Tout sélectionner

case "$ifttt" in
# Par nom de chaine
   "tf 1") echo $chaine 0 0 1;;
ou

Code : Tout sélectionner

case "$ifttt" in
# Par nom de chaine
   "tf 1") echo "$chaine 0 0 1";;
Réponse au pifomètre car je n'ai pas encore eu l'occasion d'utiliser case, mais sait-on jamais ? ^^
RPI 3 - Raspbian 8 (Jessie) - Domoticz V3.5877
loteran
Messages : 59
Inscription : 29 oct. 2017, 18:59

Re: Problème script lua avec script sh

Message par loteran »

J'ai mis mon autre script sur le post justement pour vous montrer que j'utilise la même ligne de code avec un autre script et je n'ai pas de soucis et pour le case comme je le disais si j'utilise le script en ligne de commande cela fonctionne et pour les guillemets j'ai essayé dans tout les sens sans changement.

Ce qui me pertube, c'est que si je lance le script chg_change.sh, cela fonctionne. J'imagine que cela viens du script freebox.sh mais je ne vois pas où... Surtout que la commande ./freebox.sh tf 1 ou "tf 1" ou 'tf 1' fonctionne
rapinou
Messages : 119
Inscription : 17 nov. 2016, 01:44

Re: Problème script lua avec script sh

Message par rapinou »

On s'emmêle un peu avec les différents scripts ^^

Donc si je comprends bien, le script lua fonctionne bien si tu veux lancer "chg_change.sh", mais pas pour lancer "freebox.sh".
Cependant "freebox.sh" fonctionne si tu le lances manuellement dans la console.

Ce ne serait pas un problème de droit ?
RPI 3 - Raspbian 8 (Jessie) - Domoticz V3.5877
loteran
Messages : 59
Inscription : 29 oct. 2017, 18:59

Re: Problème script lua avec script sh

Message par loteran »

rapinou a écrit :On s'emmêle un peu avec les différents scripts ^^

Donc si je comprends bien, le script lua fonctionne bien si tu veux lancer "chg_change.sh", mais pas pour lancer "freebox.sh".
Cependant "freebox.sh" fonctionne si tu le lances manuellement dans la console.

Ce ne serait pas un problème de droit ?
Bien résumé, c'est bien cela.
Mon premier script lua envoi la valeur de la variable ifttt à chg_chaine.sh (aucun problème)
Mon nouveau script lua envoi la valeur d'ifttt à freebox.sh, mais pas de changement de chaine, en revanche en mode console un ./freebox.sh la 1 , me change bien la chaine.

une petit ls -l me donne

-rwxr-xr-x 1 root root 326 Nov 12 14:25 chg_chaine.sh
-rwxr-xr-x 1 root root 1926 Nov 12 14:25 chg_touche.sh
-rwxr-xr-x 1 root root 2165 Nov 16 19:03 freebox.sh

tout est identique :'(

Je viens de faire un test avec un script qui fait parler mon google home, j'ai modifié ma ligne
os.execute('/home/'..nom..'/domoticz/scripts/freebox.sh '..ifttt)
par
os.execute('/home/'..nom..'/domoticz/scripts/parle.sh '..ifttt)
google me dit bien "la 1", donc les variables sont bien envoyées au script en arguments, donc le problème ne viens pas du script lua mais du script freebox.sh qui pourtant je le répète fonctionne en mode console... j'ai mal à mes neuronnes ^^
Répondre