Page 1 sur 2
[résolu] Scripts LUA non exécutés
Publié : 21 nov. 2016, 21:33
par domdom
Bonjour à tous,
Je n'arrive pas à faire fonctionner les scripts lua dans la dernière version de Domoticz. Ca a fonctionné à une époque, mais j'ai laissé les choses en plan quelques semaines, et j'ai maintenant l'impression que Domoticz n'exécute aucun script.
Pour le vérifier, j'ai créé le script /home/pi/domoticz/scripts/lua/script_device_test.lua dans lequel j'ai juste copié la ligne :
Si j'ai bien compris, ce script devrait être exécuté à chaque changement d'état d'un capteur distant, et devrait sortir une erreur car il ne retourne pas le commandArray.
Dans le log, rien ne se passe, j'ai juste la ligne suivante qui s'affiche à chaque fois que je passe la main devant le capteur :
2016-11-21 21:19:11.747 (MySensors) Lux (capteurLuminosite)
Dans l'interface web, dans le menu paramètre/autres, j'ai essayer de cocher/décocher le paramètre
Systèmes évènements sans que résultat.
Si quelqu'un a une idée, ça m'aiderait énormément, j'ai passé un bout de la nuit d'hier à tourner en rond et je ne vois plus dans quelle direction chercher.
Merci d'avance et bonne soirée
dom
Re: Scripts LUA non exécutés
Publié : 21 nov. 2016, 22:23
par thier
voir le script_device_demo pour comprendre comment ça fonctionne.
"Always, and I repeat ALWAYS start by checking for the state of the changed device." -> toujours, je répète toujours commencer par vérifier l'état du device qui change.
Je pense que tu n'as pas saisie que tous les scripts_devices sont lus quand un device change d'état par contre seul celui correspondant à ton changement va s'exécuter. Il faut en début de script une condition du type if (devicechanged['MyDeviceName'] etc....
Re: Scripts LUA non exécutés
Publié : 21 nov. 2016, 22:51
par domdom
Bonsoir thier,
Merci pour ta réponse.
J'avais crû comprendre que lorsqu'un device changeait, tous les scripts device étaient exécutés, raison pour laquelle il fallait commencer chaque script par un test sur le(s) device(s) devant déclencher l'exécution du script.
Suite à ta remarque, j'ai testé le script suivant qui devrait, si j'ai bien compris, afficher les devices dont l'état a changé.
Mais ça ne fonctionne pas, j'ai l'impression que Domoticz n'exécute pas les scripts sur évènements...
Code : Tout sélectionner
commandArray = {}
print("Test script device LUA")
for deviceName,deviceValue in pairs(devicechanged) do
print ("Device based event fired on '"..deviceName.."', value '"..tostring(deviceValue).."'");
end
return commandArray
Bonne soirée
Re: Scripts LUA non exécutés
Publié : 21 nov. 2016, 23:04
par thier
commence super simple
Code : Tout sélectionner
Local MyDeviceName = 'le device que tu veux surveiller'
commandArray = {}
if (devicechanged['MyDeviceName'] ) then
print('Test script device LUA')
end
return commandArray
J'avais crû comprendre que lorsqu'un device changeait, tous les scripts device étaient exécutés -> non, ils sont tous lus mais l'exécution dépend des conditions.
Attention dans tes print tu te trompes dans les " et les '.
Re: Scripts LUA non exécutés
Publié : 21 nov. 2016, 23:13
par vil1driver
Salut,
domdom a écrit :
Si j'ai bien compris, ce script devrait être exécuté à chaque changement d'état d'un capteur distant, et devrait sortir une erreur car il ne retourne pas le commandArray.
Tout à fait.
thier a écrit :
J'avais crû comprendre que lorsqu'un device changeait, tous les scripts device étaient exécutés -> non, ils sont tous lus mais l'exécution dépend des conditions.
C'est jouer sur les mots. . exécutés/lus. . Ce sont les actions qui sont ou non conditionelles. .
Domdom, quelle version as tu au juste car une derniere stable est sortie il y a peu et corrige ce soucis.
Re: Scripts LUA non exécutés
Publié : 21 nov. 2016, 23:16
par domdom
Ok, merci pour tes explications, je comprends mieux.
J'ai essayé ton script, en modifiant le nom de mon device :
Code : Tout sélectionner
Local MyDeviceName = 'capteurMouvementGarage'
commandArray = {}
if (devicechanged['MyDeviceName'] ) then
print('Test script device LUA')
end
return commandArray
Dans le log, j'ai bien la ligne suivante qui s'affiche lorsque le capteur change d'état, mais le script n'affiche rien :
2016-11-21 23:12:53.859 (MySensors) Lighting 2 (capteurMouvementGarage)
Re: Scripts LUA non exécutés
Publié : 21 nov. 2016, 23:28
par thier
Je ne sais pas ce que tu as comme ordi mais ton script est bien enregistré dans le dossier scripts/lua et sous le nom script_device_XXX ?
Pas de demo dans le nom sinon il n'est pas exécuté.
Re: Scripts LUA non exécutés
Publié : 21 nov. 2016, 23:44
par domdom
Mon domoticz tourne sur un raspberry pi 2.
Le nom de mon script est script_device_dvs.lua
Dans le même répertoire, j'ai un script de type time qui est bien exécuté, je pense donc être dans le bon répertoire.
Autre truc qui n'a peut-être rien à voir mais comme ça tourne autour des évènements système, on ne sait jamais, c'est peut-être une piste : quand je vais dans la page
réglages/plus d'options/évènements, lorsque je clique sur le bouton
show current states, j'ai le message d'erreur suivant
Error getting current states, Is the Eventsystem Enabled?
Est-ce normal ?
Encore merci pour ton aide. Si ça continue, je vais reformater mon PI pour repartir d'une installation clean, je ne vois pas quoi faire d'autre...

Re: Scripts LUA non exécutés
Publié : 21 nov. 2016, 23:52
par thier
Le script est au bon endroit.
Pour ton erreur je regarderai dans reglages/paramètre/autre que la case Système événement (Lua/Blockly/Scripts):desactiver est décochée. Elle doit l'être puisque tu dis que tu as un script time qui s'exécute.
As-tu vu la question de vill1driver? Avant de tout réinstaller j'essaierai au moins un reboot.
Re: Scripts LUA non exécutés
Publié : 22 nov. 2016, 00:12
par domdom
Oui, la case est bien décochée.
Oups, en effet, j'étais passé à côté de la question de vil1driver...
Ma version est celle-ci :
Version: 3.5974
Build Hash: 4641441
Compile Date: 2016-11-20 12:18:27
Lorsque je vérifie les mises à jour via l'interface, aucune nouvelle version n'est disponible.