Execution script comme .bat windows

Bonjour

Est-il possible d’executer une commande ( un .bat) comme on le fait sous windows avec cmd.exe?
En effet je voudrais lancer cette commande pour envoyer une info à ma VMC
modpoll -m tcp -a 180 -t4:hex -r 1 -0 -1 -o 2.0 192.168.1.51 0x7630 0x3031 0x3034 0x0000
modpoll -m tcp -a 180 -t4:hex -r 1 -c 8 -0 -1 -o 2.0 192.168.1.51

Je n’y connais pas grand chose en programation

Merci d’avance pour votre aide
J’imagine que modpoll doit être installé sur le même débian que Jeedom?

1 « J'aime »

Bonjour,

Oui c’est possible et pour vous aider dans cette tâche, vous avez le plugin Script qui permet de mettre en place facilement des scripts.
Et c’est effectivement plus facile de le mettre en place sur le Jeedom, encore une fois, le plugin Script vous aide pour cela.

Un script en « linux » est nommé de cette façon : script.sh
Un script sur Windows est nommé de cette façon : script.cmd (cmd remplace le .bat depuis des années).

Celà peut être aussi fait dans un scenario a l’aide d’un bloc de code

il suffit simplement d’utiliser la commande suivante :

$retour = shell_exec('commande argument1 argument2 argumentx');

Hello
Merci pour le retour rapide
J’ai donc créé un script, mis mon script dans le dossier ressources
Et lorsque je le teste j’obtiens une erreur « acces denied » ci dessous

Concernant le contenu du script, j’ai simplement renommé le .bat en .cmd
il contient :

echo off

rem Variable V00104 Außenluft Temperatur
modpoll -m tcp -a 180 -t4:hex -r 1 -0 -1 -o 2.0 192.168.1.51 0x7630 0x3031 0x3034 0x0000
modpoll -m tcp -a 180 -t4:hex -r 1 -c 8 -0 -1 -o 2.0 192.168.1.51

salut,
par rapport à ce que tu as fait :

  • petit rappel: depuis la mise à jour du 14 mai dernier du plugin script, les scripts sont localisés dans le répertoire /var/www/html/plugins/script/data.
  • l’access denied est lié aux droits existants sur le fichier. Pour qu’il soit utilisable sous jeedom, il faut qu’il appartienne à www-data.
    pour cela, se connecter en ssh sur ton jeedom, et dans le repertoire ou se trouve ton script, tapes la commande suivante :
    chown www-data:www-data 'nom de ton fichier'
  • enfin, si tu es sous linux, les fichiers bat ou cmd ne sont pas compris par ce dernier (fichiers de commandes fonctionnant uniquement sous windows). Il faut que tu le transformes en script bash -ou python- (en vérifiant au préalable que la commande modpoll fonctionne sous ton linux)

Le CMD n’est exécutable que sur Windows (Jeedom ne tourne que sur du Linux).

Si le script est sur le Linux, il faut le nommer en .sh
Et il faut le rendre exécutable.
En ssh, il faut faire :
sudo chmod +x ./emplacementduscript/script.sh

Et il faut que la commande :
modpoll
Existe bien sur votre Linux, si c’est une commande Windows, cela ne va pas fonctionner.

normalement si l’on passe par l’éditeur du plugin-script a la sauvegarde les droits sont ok …

1 « J'aime »

Pour info modpool sous linux et Raspberry n’est pas par défaut mais existe on peut donc l’installer:

Hello
Merci pour l’info
Du coup j’ai téléchargé le fichier, dézippé et j’obtiens
image
et là je suis ( déja !) bloqué, en lancant ma commande qui marche sous windows j’obtiens le message commande introuvable…
j’ai l’impression que modpoll n’est pas réellement installé

Ba… vous n’avez manifestement pas lu l’explication sur le site qui indique comment cela fonctionne !

Il faut faire un cd modpoll
Puis :
./linux_i386/modpoll -h
Car, bien que votre profil ne l’indique pas (???) vous semblez être sur une VM et pas sur un Pi.

Effectivement je suis sur une VM
J’avais bien fait un cd modpoll mais je ne savais pas quelle commande taper ensuite !
Désolé je suis un vrai débutant
Pour mon info à quoi sert le « ./ »?
En tout cas j’arrive déja à communiquer, :sweat: Merci


je vais regarder pour transformer la commande en script maintenant!

1 « J'aime »

Passer par un scénario peut -il m’éviter un script?

C’est surement simple pour des initiés mais pour moi c’est la galere!!
Pour moi simple serait ca:
$retour = shell_exec(‹ modpoll -m tcp -a 180 -t4:hex -r 1 -0 -1 -o 2.0 192.168.1.51 0x7630 0x3031 0x3034 0x0000 ›);
Et evidement ca ne donne rien!!
Comment faire pour pour « pointer » vers modpoll
Merci pour votre patience

Il faut commencer par le début que donne la commande passé a la main dans un terminal ?
merci d’utiliser l’icone </> dans une ligne neuve quand tu copie du texte de code
ça permet de ne pas déformer la syntaxe d’écriture.

si modpool n’est pas dans le chemin du path il faut donner son chemin complet.

$retour = shell_exec('/home/utilisateur/repertoire/modpool argument1 argument2 argumentx');

pour voir si cela se passe bien dan le bloc code il faut voir ce que répond la commande
celà va être contenu dans la variable $retour que l’on peut visualiser dans le log par exemple
avec une ligne en plus dans le bloc code:

$scenario->setLog('DEBUG RETOUR : '.$retour);

Aprés avoir executer le scénario
examiner le log
Capture d’écran du 2020-06-30 02-29-21

(1er icône à droite de Ajouter bloc )

ps: vérifier aussi les droits et les honneurs de modpool

ls -al /home/utilisateur/repertoire/modpool

il faut que l’utilisateur www-data du groupe www-data puisse l’executer

1 « J'aime »

salut @nhi,
quand tu veux lancer un executable (ici modpoll) sous linux, il faut indiquer le chemin de ce dernier dans la commande (comme sous windows)
le ./, au début de la commande, indique que tu lances la commande depuis le répertoire ou tu te situes. Etant donné que l’executable modpoll est dans le sous-sous-dossier modpoll/linux_i386, pour le lancer, tu taperas :
./modpoll/linux_i386/modpoll -m tcp .....etc.
NB : si tu es dans le repertoire linux_i386, tu auras juste à mettre ./modpoll -m tcp ....

2 « J'aime »

Bonsoir
la commande dans le terminal fonctionne ( ma VMC réagit)


Voici le code dans le scenario

J’ai juste un doute sur la partie entourée en rouge
Le log est vide et la VMC ne réagit pas
image

La commande ls -al sur la commande me renvoie
image

J’ai donc essayé de changer les droits pour le dossier et j’obtiens
image

Mais malheureusement la VMC ne réagit pas et le log est toujours vide

Franchement, pour débuter je vous conseil d’utiliser le plugin Script, c’est plus simple.

Il y a un . en trop dans la partie du code et en SSH aussi.

Le ./ c’est à placer une seule fois et tout au début de la ligne de commande

1 « J'aime »

@Fabrice

Le ./ c’est à placer une seule fois et tout au début de la ligne de commande
non pas si l’on part de la racine

@nhi
c’est un chemin complet donc on de met pas le point (celui entouré en rouge)

et tu a gommer les honneurs sur les ls -all …

1 « J'aime »

il est la le chemin complet de ta commande (en vert)

@olive, entre les chemins relatifs ou chemins absolus qu’on lui indique, je pense que l’on va perdre nhi

Hello
@Fabrice et @olive
Ca marche sans le « . » ma VMC réagit
Un grand merci à tous les 2

@Fabrice
je n’ai pas de connaissances en programmation, je viens d’essayer de créer un script mais ca plante
Pourrais-tu m’indiquer quoi mettre dans ce script pour réaliser la même chose que la commande ci dessous