Page 1 sur 2
os.execute Vs cli
Publié : 27 avr. 2020, 00:14
par Goa_From_Gaia
Hello à tous.
Débutant sur Domoticz et lua, j'implémente des scripts custom et j'ai un soucis concernant une commande.
Sur l'un d'eux :
l'une des fonctions balance :
Code : Tout sélectionner
os.execute('lua /etc/domoticz/scripts/lua/script_device_panel_security.lua '..from..' '..cmd..' '..globalvariables['Security']..'')
ce qui correspond à grossomodo :
Code : Tout sélectionner
os.execute('lua /etc/domoticz/scripts/lua/script_device_panel_security.lua +33123456789 OFF Armed Away)
Cette ligne n'atteint pas le script en question. Je n'ai aucune erreur dessus. Le print de la ligne suivante est bien exécuté
Comme si le os.execute atterrissait dans un trou noir!
Pourtant si je la lance en cli elle marche impec.
Une idée, du pourquoi du comment?
Merci beaucoup de votre aide
Re: os.execute Vs cli
Publié : 27 avr. 2020, 06:48
par denis_brasseur
Et si tu affiches dans les logs :
qu'obtiens tu ?
Re: os.execute Vs cli
Publié : 27 avr. 2020, 08:49
par Chrominator
Question de chemin d'accès ?
Dans ce que tu appelles ton CLI qui est sans doute ton shell, il y a un chemin d'accès qui est défini et qui inclut certainement le répertoire où est lua. C'est la variable PATH de ton shell.
Ce n'est pas forcément le cas au niveau système global, ce qui fait que l'interpréteur lua n'est pas trouvé par os.execute.
Le plus simple serait de ne pas modifier les chemin d'accès (PATH) mais de spécifier dans ta ligne dans quel répertoire le système doit trouver ton lua.
Tu peux le déterminer, même si ce n'est pas parfait, en entrant :
S'il est trouvé, il t'affichera le chemin d'accès vers lua, dans le style /bin/lua et tu n'auras qu'à l'inclure dans ta commande.
Re: os.execute Vs cli
Publié : 27 avr. 2020, 16:16
par Goa_From_Gaia
Hello Chrominator
Merci pour ta réponse.
Malheureusement cela n'a rien changé de mettre le chemin absolu du binaire.
J'ai essayé de debugger en changeant de procédure, pensant que cela puisse venir des arguments passés
J'appelle donc directement un autre script :
et ce script en question comprends cela :
Code : Tout sélectionner
local date = os.date( "%Y-%m-%d %H:%M:%S" )
file = io.open("log.txt", "a")
file:write(''..date..' Sa mère le script')
file:close()
malgré cela, rien à faire, la commande os.execute() ne shoote pas le script. Bien que cela marche en cli
J'ai du mal à voir le bin's
Any idea?
Re: os.execute Vs cli
Publié : 27 avr. 2020, 17:34
par Goa_From_Gaia
denis_brasseur
j'ai les params sont bien valorisés :
+33612345678 OFF Armed Away
Re: os.execute Vs cli
Publié : 27 avr. 2020, 22:37
par Goa_From_Gaia
Bon après quelques investigations infructueuses au sein du bousin. Je n'ai pas de plus de réponse à ma question.
La version du Lua domoticz est une 5.2 et celle en local est une 5.1.5. Peut être s'agit-il d'une incompatibilité sur la version lors des appels/imports/syntaxe. Je ne sais pas..
Cela dit, j'ai contourné le problème.
Pensant vouloir bien faire en construisant un module d’écriture de log et l'important au sein d'un script appelé, ce qui visiblement ne marche pas de mon coté (très certainement par manque de connaissance). Je me suis orienté plutôt vers une fonction utilitaire dans un fichier logger.lua appelé avec dofile().
bref.. desfois qu'on se s'e***erde!
Mais bon, j'en suis loin avec mes soucis, car comme on le sait : "Une merdouille n'arrive jamais seule!"
Voila que je suis incapable d'affecter la valeur au Panel de sécurité.
Voyez vous quelque chose qui cloche?
Code : Tout sélectionner
local from = arg[1]
local cmd = arg[2]
local securityStatus = arg[3]
commandArray = {}
-- Vérification de l'état de l'alarme
logToFile(debug.getinfo(1).currentline, 'Checking for Panel status : '..securityStatus..'')
if cmd == 'OFF' then
logToFile(debug.getinfo(1).currentline, 'Command OFF called')
if securityStatus == 'Disarmed' then
logToFile(debug.getinfo(1).currentline, 'FAIL - Alarm still desactivate')
os.execute ('sudo -u gammu gammu-smsd-inject TEXT "'..from..'" -text "L\'alarme est déjà désactivée, est ce normal?"')
end
if securityStatus == 'Armed' then
logToFile(debug.getinfo(1).currentline, 'SUCCESS - Alarm desactivated')
commandArray['Domoticz Security Panel'] = 'Disarm'
os.execute ('sudo -u gammu gammu-smsd-inject TEXT "'..from..'" -text "alarme désactivée"')
end
end
if cmd == 'ON' then
logToFile(debug.getinfo(1).currentline, 'Command ON called')
if securityStatus == 'Armed' then
logToFile(debug.getinfo(1).currentline, 'FAIL - Alarm still activated')
os.execute ('sudo -u gammu gammu-smsd-inject TEXT "'..from..'" -text "L\'alarme est déjà allumée, est ce normal?"')
end
if securityStatus == 'Disarmed' then
logToFile(debug.getinfo(1).currentline, 'SUCCESS - Alarm activated')
commandArray['Domoticz Security Panel'] = 'Arm Away'
os.execute ('sudo -u gammu gammu-smsd-inject TEXT "'..from..'" -text "alarme activée"')
end
end
return commandArray
Re: os.execute Vs cli
Publié : 30 avr. 2020, 17:46
par Goa_From_Gaia
Une idée quelqu'un?
Merci pour votre aide, je bloque là.
Re: os.execute Vs cli
Publié : 30 avr. 2020, 18:05
par vil1driver
Il doit être dans les dispositifs utilisés
Re: os.execute Vs cli
Publié : 30 avr. 2020, 19:03
par Goa_From_Gaia
Tu voudrais dire que le param passé (securityStatus) sur le script en amont (récupéré par globalvariables['Security']) bloquerai la possibilité de setter le Panel dans ce script ?
Re: os.execute Vs cli
Publié : 30 avr. 2020, 20:04
par vil1driver
Par le passé on ne pouvait pas lui passer de valeur tant qu'il était dans les "inutilisés"
le device doit donc être dans ceux "utilisés"
Si ce n'est pas le cas, clic sur la flèche verte
https://www.domoticz.com/wiki/Applicati ... rity_Panel