Comment passer des paramètres à un script bash?

Salut à tous,

Malgré des recherches sur le forum, je bloque sur un truc. Je suis sûr que c’est simple, mais à je tourne en rond :frowning:

Sous Jeedom v4, je cherche à passer un ou plusieurs paramètres à un script bash :

Script actuel,
fonctionne, mais tout est « en dur » :

#!/bin/bash
#LED ON
echo 1 > /mnt/1wire/05.D42B2A000000/PIO
echo ON

Script cible,
J’aimerais passer 05.D42B2A000000 et ON en paramètre :

#!/bin/bash
#LED ON
echo 1 > /mnt/1wire/$1/PIO
echo $2

J’ai lancé le script via un virtuel, mais je ne sais ou renseigner les paramètres :

Est-ce la bonne démarche, ou faut-il faire via un scénario par exemple ?
Pourriez-vous m’expliquer, ou me renvoyer vers un tuto ?

Merci d’avance !

bonsoir @dvb

nom_du_script param1 param2 param3 paramX

Dans scénario ?

Si oui peux-tu me préciser où ?
J’ai essayé de ces deux manières mais cela ne fonctionne pas :

La tu n’est pas dans un plugin script si non ca ferait ca :

https://jeedom.github.io/plugin-script/fr_FR/#tocAnchor-1-8

ou alors on a pas la même version …

1 « J'aime »

Je vous. Dans un scénario, tu veux executer un script (du plugin script) qui exécute un script Bash.
Tu peux utiliser #message# et #title# dans le plugin script pour passer des paramètres.

@olive
Vu, je n’y étais pas du tout, j’étais dans la partie scénario …
Cela fonctionne merci !

@fwehrle,
C’est bien cela, avec deux situations :

Cas 1
Le scénario appelle le script générique avec un paramètre pour piloter un des périphériques. Exemple :

#!/bin/bash
echo 1 > /mnt/1wire/$1/PIO

Le scénario appelle le script générique avec un paramètre pour piloter un des périphériques puis remonte une valeur du périphérique.. Exemple :

Cas 2

#!/bin/bash
cat /mnt/1wire/uncached/$1/sensed

Dans les deux cas, je ne vois pas ou mettre les paramètres et comment lire les valeurs en retour avec #message# et #title#. Help :slight_smile:

Bonjour,

Si tout est résolut pour toi pense à cocher la case “solution” sur le message qui répond à ta demande, cela fermera automatiquement la sujet et fera remonter la réponse sur le 1er post pour que ceux qui auraient la même demande visualisent immédiatement la solution.

@iPapy ,
Pas tout à fait finalisé, je penserai à flaguer en résolu à la fin.
@+

Tu peux passer une commande en variable de ton script.
Exemple un de mes script pour transformer de l’hexa en rgb pour mes yeelight

#!/bin/bash
hexa="$1"
#echo "$hexa"
hexinput=`echo $1 | awk -F "#" '{print $2}' |tr '[:lower:]' '[:upper:]'`  # uppercase-ing
a=`echo $hexinput | cut -c-2`
b=`echo $hexinput | cut -c3-4`
c=`echo $hexinput | cut -c5-6`

r=`echo "ibase=16; $a" | bc`
g=`echo "ibase=16; $b" | bc`
b=`echo "ibase=16; $c" | bc`

echo $r,$g,$b
exit 0

Dans le plugin script j’appelle une commande d’un virtuel ( qui est $1)

Avec ça tu peux tout faire…
Mettre des commandes, des variables jeedom, c’est à la guise de l’imaginaire :slight_smile:

1 « J'aime »

@bartounet
Merci, très clair pour ce qui concerne le paramétrage vers le script, et c’est puissant en effet…

Il reste la partie remontée du script qui coince ici (j 'ai essayé de remonter via écho en vain).

Exemple concret :

Via un terminal, je lis sans problème le statut (0 ou 1) d’un périphérique comme ceci :

cat /uncached/05.D42B2A000000/sensed

Via un script, aucune de ces deux syntaxes ne remontent la valeur :

#!/bin/bash
cat /mnt/1wire/uncached/05.D42B2A000000/sensed
exit 0

#!/bin/bash
memoire='cat /mnt/1wire/uncached/05.D42B2A000000/sensed'
echo $memoire
exit 0

Ai-je loupé (gros…) un truc ?

Tu peut faire varié le type d’info selon ce que tu récupere
dans mon exemple je recup un binaire
cela peut être un numérique
ou autre si c’est plusieurs infos ( à traité au retour bien sur)

comme dans l’exemple de @bartounet

echo $r,$g,$b

peut etre un caractère mal échappé.
Tu remarques que j’ai mis un \ avant ma commande pour échapper
essaie plusieurs syntaxes en echappant ou avec des guillemets

@bartounet
@olive

Noté !

Pas trouvé, donc pour lever la difficulté des caractères spéciaux, je suis passé en script php, en me basant sur la doc Jeedom ici :

8) Exemple SCRIPT

Le plus sympa mais pas le plus simple à expliquer.

Pré-requis : savoir développer un script en php, python ou ruby.

IMPORTANT

L’extension de votre script doit absolument correspondre à son type. Ex .php pour un type php. En effet Jeedom se base sur l’extension du script pour l’executable à lancer (php si .php, python si .py….)

Ceci est un script php qui peut tout à fait être réutilisé hors Jeedom !

 <?php
    $temp = shell_exec("cat /sys/class/thermal/thermal_zone0/temp");
    $temp = $temp / 1000;
    $temp = round($temp,1);
    echo $temp
 ?>

Note : concrètement, c’est la fonction php “echo” qui va donner la valeur à Jeedom

J’ai donc créé ce scipt :

que je lance comme ça :

Mais pas mieux :frowning:

php ou bash c’est pareil, si il y a des caractères qu’il interpete comme du code, il va l’intrepréter.

@bartounet
OK. Donc la doc de référence qui cite " " ne serait pas à jour ?

?php
$temp = shell_exec(" cat /sys/class/thermal/thermal_zone0/temp ");
$temp = $temp / 1000;
$temp = round($temp,1);
echo $temp
?>

J’ai testé en vain ta syntaxe et celle de la doc " " en vain.
Le \ est refusé (message d’erreur).

Je ne comprends plus.

Je comprend pas tu a un \ dans ta valeur de retour ?

Décompose … commence pas a pas a déjà faire fonctionner ton script a la main dans une console
n’oublie pas de vérifier ses droit aussi
puis regarde ce qu’il te retourne
puis complique l’affaire avec des variables etc …

L’exemple de la doc ne fonctionne pas.
Il manque un ; à la fin de la ligne echo $temp

Cette erreur est signalée lors de la sauvegarde de la commande dans Jeedom:

@olive

Ce que je veux dire c’est que testé plusieurs syntaxes en vain.

sous bash :

#!/bin/bash
memoire= `cat /mnt/1wire/uncached/05.D42B2A000000/sensed`
echo $memoire

puis

#!/bin/bash
memoire=« cat /mnt/1wire/uncached/05.D42B2A000000/sensed »
echo $memoire

puis

#!/bin/bash
cat /mnt/1wire/uncached/05.D42B2A000000/sensed

sous php
Idem avec ajout de \ devant les ’ (recommandation de @bartounet).

C’est bien ce que j’ai fait… Le script de test minimaliste est celui-ci.
En console c’est OK :

#!/bin/sh
echo « Statut PIO: »
cat /mnt/1wire/uncached/05.D42B2A000000/sensed
echo

Là je ne vois pas comment faire, car Jeedom m’oblige à éditer le script dans son environnement plugin, donc je n’ai pas la main.

Quand je lance dans l’environnement plugin, il me renvoie une valeur pas à jour (0 ou 1).

Vu la simplicité du script et la différence de comportement terminal vs environnement Jeedom, je pense de plus en plus à une problématique Jeedom.

Sauf miracle :slight_smile: , j’ouvrirai un ticket ce soir…

Merci pour votre aide en tous les cas !

Vous avez choisi un type Binaire.
Et vous n’avez pas vu ma réponse au dessus sur le script php

@jpty
Oui bien vu, j’avais ajouté mais cela règle pas le pb.
J’ai retesté à l’instant : pas d’erreur mais affiche 0 au lieu de 1
Alors que via le terminal est OK.

[EDIT]
Binaire est OK puisque c’est le statut de la sortie d’un PIO.