Page 1 sur 2
variable utilisateur trop lente
Publié : 29 nov. 2016, 14:44
par gawel3164
Salut,
j'ai fait un script dans lequel un message vocal est délivré à la détection d'un PIR. Pour n'avoir le message vocal qu'un fois dans la journée, je déclenche l'action à condition que le pir détecte et que la variable reset_vocal soit à 0. Une fois l'action déclenchée, je repasse la variable à 1. La variable ensuite est remise a zéro à minuit. ça fonctionne presque mais j'ai remarqué que la variable mettait du temps a passer à 1 et le pir me détectant plusieurs fois dans ce laps de temps, le message vocal est envoyé plusieurs fois. Avez vous une astuce pour contourner le problème??
merci
Code : Tout sélectionner
if (devicechanged['PIR'] == 'On' and uservariables["reset_vocal"]==0 )
then
one=tostring(1)
commandArray['Variable:reset_vocal']= (one) --on met la variable à 1 pour n'avoir le message qu'une fois par jour
message = " blablabla "
os.execute('/home/pi/domoticz/scripts/izsynth -e naturalreaders -v Bruno -t "'..message..'" -r')
end
Re: variable utilisateur trop lente
Publié : 29 nov. 2016, 15:11
par vil1driver
Salut,
Pour commencer au lieu de faire un tostring(1), tape simplement '1'
Pareil pour ton test, une 'variable utilisateur' étant toujours une chaîne teste == '0' c'est mieux...
Pour ton souci à tu vérifié les heures de mise à jour de ta variable par rapport à celle de détection de mouvement ?
Car ce n'est pas normal du tout que ce soit long à ce point..
Tu peux également tenter de passer par l'api json pour la mettre à jour.
Mais je pense que le soucis vient de ta commande os.execute qui doit durer trop longtemps.
Le script attend la fin de cette commande pour mettre ta variable à jour... voir même pas du tout si ça dépasse les 10 secondes..
Essai de terminer ta commande par un &, ça devrait aller nettement mieux
Code : Tout sélectionner
os.execute('/home/pi/domoticz/scripts/izsynth -e naturalreaders -v Bruno -t "'..message..'" -r &')
Re: variable utilisateur trop lente
Publié : 29 nov. 2016, 16:28
par ganq
peux-tu mettre des prints entre les lignes pour vérifier que le script s'exécute jusqu'à la fin et mettre les logs pour faire le résultats ? (log de domoticz et du PIR)
Re: variable utilisateur trop lente
Publié : 29 nov. 2016, 17:08
par gawel3164
Merci pour vos réponses
Mon message vocal pouvant être parfois assez long, je pense que tu as raison Vil1driver, c'est le os.execute qui traine en longueur. Je pensais que le script mettait la variable à 1 avant la fin de l'instruction....Bêtement, je pensais qu'il exécutait les instructions dans l'ordre et au fur et à mesure....j'ai encore beaucoup de choses a apprendre!

Bon, je retravaille tout ça et je vous dis si mon rasp a fini de bégayer !
Re: variable utilisateur trop lente
Publié : 29 nov. 2016, 18:12
par thier
Ton os.execute peut aussi être long si tu passe par internet pour ton tts.
Re: variable utilisateur trop lente
Publié : 29 nov. 2016, 18:21
par ganq
Si c'est cela, il faut lancer une commande externe (directement en sh) dans le lua qui se terminera plus vite
(peut-être besoin de mettre un & à la fin de la commande...)
Re: variable utilisateur trop lente
Publié : 29 nov. 2016, 20:08
par gawel3164
Je n'ai pas eu trop le temps d'approfondir ce soir, mais grâce a vos lumières, j'ai testé la chose suivante:
- Création d'un script lua qui détecte le passage à ON du PIR et qui met une première variable à 1 (je supprimerai les tostring(1), je le promets!

)
Code : Tout sélectionner
commandArray = {}
time = os.date("*t")(devicechanged['PIR'] == 'On' and uservariables["reset_variable"]==0)
then
one=tostring(1)
commandArray['Variable:reset_variable']= (one)
end
return commandArray
- Dans mon script principal j'ajoute la nouvelle variable comme condition d'exécution
Code : Tout sélectionner
if (devicechanged['PIR'] == 'On' and uservariables["reset_vocal"]==0 and uservariables["reset_variable"]==0)
then
one=tostring(1)
commandArray['Variable:reset_vocal']= (one) --on met la variable à 1 pour n'avoir le message qu'une fois par jour
message = " blablabla "
os.execute('/home/pi/domoticz/scripts/izsynth -e naturalreaders -v Bruno -t "'..message..'" -r')
end
Testé rapidement, ça ne délivre le message qu'une seule fois. Le passage à 1 de la variable dans le premier script étant rapide, ça laisse le temps au reste de dérouler. Peut être à peaufiner ou à mettre sous une autre forme...mais ça fonctionne ! Merci!!

Re: variable utilisateur trop lente
Publié : 29 nov. 2016, 20:12
par vil1driver
Tu sais tu avais juste à ajouter à ton script le & comme je te l'ai indiqué

et c'était réglé
Mais content que ça fonctionne pour toi maintenant
Re: variable utilisateur trop lente
Publié : 29 nov. 2016, 20:17
par gawel3164
En fait j'avais simplifié mon script pour vous expliquer...

En effet, j'ai plusieurs messages vocaux qui se suivent....et avec le &, ils se marchaient sur les pieds. Sinon, effectivement, avec une seul message ça marchait bien.
Re: variable utilisateur trop lente
Publié : 29 nov. 2016, 20:19
par vil1driver
Ah d'accord
Mais méfie toi, tout script lua dépassant 10 secondes est killé par domoticz..