Page 1 sur 2
Extinction d'un pc
Publié : 17 janv. 2016, 22:36
par zapoc
bonjour je cherche a coder un lua pour eteindre mon pc à distance. J'ai quand même essayé tout seul mais évidement je galère avec lua.
Pour le moment j'ai un script (tout fait) qui me passe un switch "Pc Master" en On ou Off selon la réponse du ping. A ça je voudrait greffer une commande d'extinction du genre :
ping 192.xx.xx.xx
Si ping Ok et variable d'utilisateur = "linux" => Lancer la commande d'extinction Linux (stocker dans un script bash)
Si ping Ok et variable d'utilisateur = "dos" => Lancer la commande d'extinction Windows (stocker dans un script bash)
Sinon Ne rien faire
Mais je comprend pas comment scripter ça et impossible de me dépatouiller pas des if else if etc..
Merci pour votre aide
Re: Extinction d'un pc
Publié : 18 janv. 2016, 10:48
par rimram31
Appeler un script système a partir de LUA se fait via
os.execute (ou
io.popen pour du pipe récuperer le flux en sortie). Si tu as des scripts systèmes prêts pour faire les deux reboot (ça c'est un peu plus chaud par contre ...), les appeler de domoticz n'est pas trop compliqué.
Tu as une exemple de ping en LUA ici:
https://www.domoticz.com/wiki/Event_script_examples qui s'appuie d'ailleurs sur os.execute, ton script pourrait donner un truc comme ça:
Code : Tout sélectionner
ping_success=os.execute('ping -c1 xxx.xxx.xxx.xxx')
if ping_success then
variable = uservariables["..."]
if (variable == "linux") then
os.execute("... shutdown linux ...")
elseif (variable == "dos") then
os.execute("... shutdown dos ...")
elseif (variable == "MVS") then
:-) :-) :-)
end
end
Par contre ton "besoin" m'interpelle. Pourquoi n'exécute tu pas simplement un script action (edit switch) sur le on/off ?
Pour les scripts eux-même de shutdown par contre, je te laisse jouer, pas toujours simple.
Re: Extinction d'un pc
Publié : 18 janv. 2016, 13:23
par zapoc
En fait ce besoin spécifique est du au fait que j'ai un script qui commute l’interrupteur virtuel sur on ou off si le périphérique répond au ping (du coup ne m'affiche que l’état du périphérique)
Je voulais donc y ajouter une "Action Off" pour l'extinction et par la suite une "Action On" pour l'allumage avec un os.execute wake on lan.
Ceci dit il y a peut être vraiment plus simple et d’ailleurs en continuant mes recherches hier j'ai lu que si le script lua porte le nom du switch, il en connais déjà l’état peut être une autre piste plus simple.
En tout cas merci pour ta structure et ta syntaxe car c'est vraiment avec ça que je galère --' Et ça va grandement m'aider!
Je repasse ce soir pour donner le résultat.
Re: Extinction d'un pc
Publié : 18 janv. 2016, 14:18
par rimram31
zapoc a écrit :... et par la suite une "Action On" pour l'allumage avec un os.execute wake on lan....
Ca j'ai

et justement un script sur action On (+ un utilitaire wakeonlan). Dans mon cas c'est le serveur distant qui se met en veille lui-même.
Re: Extinction d'un pc
Publié : 18 janv. 2016, 21:42
par zapoc
Re
Alors en fait grace a toi je commence comprendre un peu comment fonctionne lua et le mécanisme de domoticz avec les script, donc j'avance mais j'ai encore une merdouille: J'ai voulue ajouter une vérification en plus du ping_succes mais la ça ne fonctionne plus :
Code : Tout sélectionner
script_device_PCMasterOff.lua
commandArray = {}
ping_success=os.execute('ping -c1 192.168.1.xx')
if (ping_success and devicechanged['Master PC']=='Off') then
variable = uservariables["osPcSalon"]
if (variable == "linux") then
print('coucou')
elseif (variable ~= "linux") then
print('whats up')
end
end
return commandArray
Ma double condition ne passe pas même ecrite comme cela : if ping_success and (devicechanged['Master PC']=='Off') then
Re: Extinction d'un pc
Publié : 18 janv. 2016, 22:20
par vil1driver
Salut,
Prends l'habitude de nommer ton script en début de script.
Ça évite de demander si tu l'as bien nommé...
En l'occurrence script_device_blabla.lua
Sinon +1 pour usage sur action On et action Off
J'ai du mal à comprendre ton usage de variable...
Ce que tu veux c'est un bouton pour allumer/éteindre ton pc avec une sorte de retour d'état (grâce au ping) ?
Re: Extinction d'un pc
Publié : 18 janv. 2016, 22:47
par zapoc
Prends l'habitude de nommer ton script en début de script.
Merci pour l'infos j'ai d'ailleur appris cette convention de nommage aujourd'hui seulement --'
Ce que tu veux c'est un bouton pour allumer/éteindre ton pc avec une sorte de retour d'état (grâce au ping) ?
C'est exactement ça, sachant que pour l'instant j'ai un script_time qui ping l'ensemble de mes périphériques et qui commute le switch correspondant
L'usage de variable est du au fait que j'ai un multiboot sur mon ordi et çà n'est pas la même commande d’extinction linux/windows. Donc une fois que mon script est fonctionnel j'ai 2 script à écrire pour balancer une requête JSON au démarrage du pc pour modifier la variable osPcSalon.
Re: Extinction d'un pc
Publié : 18 janv. 2016, 23:40
par vil1driver
Ahhh ok

Re: Extinction d'un pc
Publié : 19 janv. 2016, 00:27
par zapoc
Bon en fait comme d'habitude faute d’inattention: mon device s’appelle "PC Master" et non pas "Master PC". Une fois corrigé ça rentre dans l'ordre!
Merci merci et encore merci!
Re: Extinction d'un pc
Publié : 19 janv. 2016, 08:21
par rimram31
zapoc a écrit :...L'usage de variable est du au fait que j'ai un multiboot sur mon ordi ...
Tu pourrais aussi pourquoi pas déterminer dans ton script shell si il s'agit d'un linux ou d'un windows: ports rdp/ssh ouverts ou pas, wmi ... ou bien tenter systématiquement les deux commandes a distance sachant que l'une d'entre elle ne fonctionnera pas. Le tout dans le script shell, ton appel domoticz devient très light et tu n'as pas de "circuiterie" a faire dans l'autre sens.
C'est jamais une mauvaise idée en info de chercher a simplifier
