variable utilisateur trop lente

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 <\>.
gawel3164
Messages : 325
Inscription : 07 janv. 2016, 19:51

variable utilisateur trop lente

Message 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
Domoticz 2022.1/RFlink V1.1_R48/ prises: DIO, SCS/caméras IP/station météo Auriol/sondes Oregon/PIR/ZK1PA/Relevé compteur Gaz/téléinfo EDF/Mysensors:RGB-3D,Temp.,IR/Arrosage autonome/Google home/ ESP: IR,Temp.,relai,distance,OLED/Withings Ws30
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: variable utilisateur trop lente

Message 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 &')
Dernière modification par vil1driver le 29 nov. 2016, 16:51, modifié 3 fois.
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
ganq
Messages : 385
Inscription : 01 avr. 2015, 14:20

Re: variable utilisateur trop lente

Message 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)
domoticien amateur option bidouille
gawel3164
Messages : 325
Inscription : 07 janv. 2016, 19:51

Re: variable utilisateur trop lente

Message 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! :lol: Bon, je retravaille tout ça et je vous dis si mon rasp a fini de bégayer !
Domoticz 2022.1/RFlink V1.1_R48/ prises: DIO, SCS/caméras IP/station météo Auriol/sondes Oregon/PIR/ZK1PA/Relevé compteur Gaz/téléinfo EDF/Mysensors:RGB-3D,Temp.,IR/Arrosage autonome/Google home/ ESP: IR,Temp.,relai,distance,OLED/Withings Ws30
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: variable utilisateur trop lente

Message par thier »

Ton os.execute peut aussi être long si tu passe par internet pour ton tts.
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
ganq
Messages : 385
Inscription : 01 avr. 2015, 14:20

Re: variable utilisateur trop lente

Message 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...)
domoticien amateur option bidouille
gawel3164
Messages : 325
Inscription : 07 janv. 2016, 19:51

Re: variable utilisateur trop lente

Message 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!! :)
Dernière modification par gawel3164 le 29 nov. 2016, 20:13, modifié 1 fois.
Domoticz 2022.1/RFlink V1.1_R48/ prises: DIO, SCS/caméras IP/station météo Auriol/sondes Oregon/PIR/ZK1PA/Relevé compteur Gaz/téléinfo EDF/Mysensors:RGB-3D,Temp.,IR/Arrosage autonome/Google home/ ESP: IR,Temp.,relai,distance,OLED/Withings Ws30
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: variable utilisateur trop lente

Message 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
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
gawel3164
Messages : 325
Inscription : 07 janv. 2016, 19:51

Re: variable utilisateur trop lente

Message 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.
Domoticz 2022.1/RFlink V1.1_R48/ prises: DIO, SCS/caméras IP/station météo Auriol/sondes Oregon/PIR/ZK1PA/Relevé compteur Gaz/téléinfo EDF/Mysensors:RGB-3D,Temp.,IR/Arrosage autonome/Google home/ ESP: IR,Temp.,relai,distance,OLED/Withings Ws30
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: variable utilisateur trop lente

Message par vil1driver »

Ah d'accord :D

Mais méfie toi, tout script lua dépassant 10 secondes est killé par domoticz..
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Répondre