os.execute Vs cli

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 <\>.
Goa_From_Gaia
Messages : 14
Inscription : 15 févr. 2020, 22:00

os.execute Vs cli

Message 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! :D

Pourtant si je la lance en cli elle marche impec.

Une idée, du pourquoi du comment?

Merci beaucoup de votre aide
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: os.execute Vs cli

Message par denis_brasseur »

Et si tu affiches dans les logs :

Code : Tout sélectionner

print(from..' '..cmd..' '..globalvariables['Security'])
qu'obtiens tu ?
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: os.execute Vs cli

Message 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 :

Code : Tout sélectionner

which lua
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.
Un bon frein vaut mieux que deux sparadraps.

Ubuntu 24.04.3 LTS - Domoticz 2025.1 (build 16782)
Pentium G3220T 2.6GHz - 4Go DDR3
RFXtrx433 USB Ver Pro1/1043
Z-Stick GEN5 Version: 1.6-1136-g07ea22bb
Rtl433 RTL-SDR receiver
RFLink Gateway
Zigbee SLZB-06
Goa_From_Gaia
Messages : 14
Inscription : 15 févr. 2020, 22:00

Re: os.execute Vs cli

Message 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 :

Code : Tout sélectionner

os.execute('lua caca.lua')
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?
Goa_From_Gaia
Messages : 14
Inscription : 15 févr. 2020, 22:00

Re: os.execute Vs cli

Message par Goa_From_Gaia »

denis_brasseur

j'ai les params sont bien valorisés :

+33612345678 OFF Armed Away
Goa_From_Gaia
Messages : 14
Inscription : 15 févr. 2020, 22:00

Re: os.execute Vs cli

Message 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! :D

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
Goa_From_Gaia
Messages : 14
Inscription : 15 févr. 2020, 22:00

Re: os.execute Vs cli

Message par Goa_From_Gaia »

Une idée quelqu'un?

Merci pour votre aide, je bloque là.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: os.execute Vs cli

Message par vil1driver »

Il doit être dans les dispositifs utilisés
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
Goa_From_Gaia
Messages : 14
Inscription : 15 févr. 2020, 22:00

Re: os.execute Vs cli

Message 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 ?
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: os.execute Vs cli

Message 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

Image

https://www.domoticz.com/wiki/Applicati ... rity_Panel
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