Comment utiliser une variable d'environnement dans le Action On d'un Groupe ou Scénario?

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 <\>.
Répondre
bebesnake
Messages : 10
Inscription : 01 juin 2020, 07:53

Comment utiliser une variable d'environnement dans le Action On d'un Groupe ou Scénario?

Message par bebesnake »

Bonjour,

J'ai un script.sh situé dans mes scripts qui prend en paramètre (l'argument $1) une variable d'environnement.

Si j’exécute ce script en ligne de commande dans un terminal je le lance de cette manière :

Code : Tout sélectionner

/home/pi/domoticz/scripts/monscript.sh $ENVIRONEMENT_VARIABLE_ARGUMENT
==> OK pas de souci ma variable d'environnement est bien interprétée par sa valeur.

Mon problème ici est que je souhaite simplement exécuter ce même script avec un paramètre qui est une variable d'environnement à interpréter donc (l'argument $1), dans le Action ON d'un Groupe ou d'un Scénario

J'ai donc tenté plusieurs choses :

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/monscript.sh ENVIRONNEMENT_VARIABLE_ARGUMENT
==> KO la variable n'est pas interprétée

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/monscript.sh $ENVIRONNEMENT_VARIABLE_ARGUMENT
==> KO la variable n'est pas interprétée

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/monscript.sh ${ENVIRONNEMENT_VARIABLE_ARGUMENT}
==> KO la variable n'est pas interprétée

Le seul truc qui fonctionne est si je mets la valeur de la variable $ENVIRONNEMENT_VARIABLE_ARGUMENT en paramètre à savoir :

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/monscript.sh valeur
==> OK mais j'utilise la valeur de la variable d'environnement et ce n'est pas ce que je souhaite faire.

Mon script est fonctionnel, ma variable d'environnement existe bien car j'en utilise d'autres dans ce même script... Je ne vois juste pas comment passer en paramètre dans le Action ON d'un scénario ou d'un groupe une variable d'environnement qui doit être interprétée par sa valeur pour pouvoir fonctionner.

Est-ce que quelqu'un pourrait m'éclairer?

Merci

bebesnake
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: Comment utiliser une variable d'environnement dans le Action On d'un Groupe ou Scénario?

Message par denis_brasseur »

Peut être passer par un autre script monscriptaveclavariable.sh que tu exécuteras ensuite depuis ACTION ON.

monscriptaveclavariable.sh

Code : Tout sélectionner

#!/bin/sh
/home/pi/domoticz/scripts/monscript.sh $ENVIRONEMENT_VARIABLE_ARGUMENT
Rendre ce script exécutable évidemment :

Code : Tout sélectionner

sudo chmod +x monscriptaveclavariable.sh
Puis dans le Action ON d'un Groupe ou d'un Scénario

Code : Tout sélectionner

script:///home/pi/domoticz/scripts/monscriptaveclavariable.sh
Mais cela n'est valable que si tu n'utilises que la même variable d'environnement.
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
bebesnake
Messages : 10
Inscription : 01 juin 2020, 07:53

Re: Comment utiliser une variable d'environnement dans le Action On d'un Groupe ou Scénario?

Message par bebesnake »

Bonjour.

Merci pour la réponse 🤩. En effet je peux le faire de cette manière! Un peu la tête dans le guidon je n' avais pas pensé.

Cependant, je reste preneur de la solution avec le passage de l'argument qui est une variable d'environnement en paramètre si jamais cela reste possible.

En tout cas, je vais déjà pouvoir me débloquer de cette manière.

Merci beaucoup

bebesnake
Chrominator
Messages : 1042
Inscription : 19 déc. 2015, 07:29
Localisation : France

Re: Comment utiliser une variable d'environnement dans le Action On d'un Groupe ou Scénario?

Message par Chrominator »

Domoticz s'exécute sous root ; ta variable d'environnement doit être positionnée pour cet utilisateur aussi si elle n'est pas définie au niveau système.
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
bebesnake
Messages : 10
Inscription : 01 juin 2020, 07:53

Re: Comment utiliser une variable d'environnement dans le Action On d'un Groupe ou Scénario?

Message par bebesnake »

Bonjour,

J'ai testé de la définir pour les 2 utilisateurs pi et root, mais depuis le Action On ce n'est quand même pas interprété la valeur de la variable d'environnement.

Merci, je vais rester sur le script intermédiaire

bebesnake
Flying Domotic
Messages : 772
Inscription : 10 mars 2020, 15:26

Re: Comment utiliser une variable d'environnement dans le Action On d'un Groupe ou Scénario?

Message par Flying Domotic »

Si j'ai bien tout compris, ça va être compliqué, étant donné que le service Domoticz tourne sans variables d'environnement (en standard pour tous les services).

Pour s'en convaincre, créer un test.sh et mettre dedans un echo $XXX (où XXX est le nom de la variable d'environnement souhaitée) et lancer le script depuis Domoticz.

Si on veut vraiment utiliser une variable d'environnement, il fait lancer le démon Domoticz avec la variable (un duckduckgo "linux service environment variable" donne plein d'exemples).

Cependant, il devrait y avoir d'autres façon plus simples d'arriver au même résultat, peut être en utilisant une fonction LUA. On peut avoir une idée de ce que contient la variable d'environnement, et comment elle change ?
bebesnake
Messages : 10
Inscription : 01 juin 2020, 07:53

Re: Comment utiliser une variable d'environnement dans le Action On d'un Groupe ou Scénario?

Message par bebesnake »

C'est un script que je souhaitais générique qui va appeler différents Id et pour que ce soit plus parlant, j'ai mis des variables d'environnement avec un nom intelligible qui est égale à la valeur de la variable d'environnement qui doit être passé au script.

J'aurais eu un truc du genre

Code : Tout sélectionner

script///home/pi/domoticz/scripts/execute-script $OUVRE_CA
dans le action ON

Code : Tout sélectionner

script///home/pi/domoticz/scripts/execute-script $FERME_CA
dans le action OFF
...
Le truc c'est que j'ai pleins d'ID et j'aurais voulu ne pas dupliquer mes scripts mais pouvoir appeler le même script avec une variable d'env avec un nom compréhensible en paramètre du script qui fait toujours la même chose mais en appelant des ID différents.

Finalement, en essayant de passer par un script intermédiaire, pas mieux...le seul truc qui marche est quand je définis tout (mes variables d'env et mon script) dans le même fichier. Dés qu'on change de fichier il perd le contexte avec ses variables d'environnement.

Je vais retenter en lançant domoticz avec var d'env bien que ce ne soit pas idéal, sinon peut-être lua aussi je vais voir.

En tout cas, merci pour les astuces

bebesnake
bebesnake
Messages : 10
Inscription : 01 juin 2020, 07:53

Re: Comment utiliser une variable d'environnement dans le Action On d'un Groupe ou Scénario?

Message par bebesnake »

Bon finalement je m'en suis sorti avec mon script intermédiaire. C'est un moindre mal.

Je dois quand même définir autant de scripts que d'ID que je récupère (une vingtaine) mais je garde tout de même une généricité pour pouvoir changer les ID au besoin et autres sans changer mes scripts.

En ayant défini au niveau global mes variables d'environnement :

Code : Tout sélectionner

sudo su && echo "export VAR="value"" >> /etc/environment && source /etc/environment
et en ajoutant ceci au début de mes petits scripts intermédiaires

Code : Tout sélectionner

source /etc/environment
ça fonctionne bien.

Pour le coup je vais devoir créer une vingtaine de scripts sh qui ressembleront à

Code : Tout sélectionner

#!/usr/bin/env bash
source /etc/environment
/home/pi/domoticz/scripts/exec-script.sh $OUVRE_CA

Code : Tout sélectionner

#!/usr/bin/env bash
source /etc/environment
/home/pi/domoticz/scripts/exec-script.sh $FERME_CA
Et je les appelerai depuis mes Action ON et Action OFF

Merci beaucoup à tous

bebesnake
Flying Domotic
Messages : 772
Inscription : 10 mars 2020, 15:26

Re: Comment utiliser une variable d'environnement dans le Action On d'un Groupe ou Scénario?

Message par Flying Domotic »

Ok, si je pige bien, c'est une série de "constantes" qui permet de désigner un device par un nom intelligible plutôt qu'un numéro.

Dans ce cas, il doit être possible de charger ces variables au lancement du service Domoticz, sachant que pour une modif, il faudra relancer le service.

Pour ça, il faut définir les variables à passer par :

Code : Tout sélectionner

sudo systemctl edit domoticz
Donner les variables à définir dans le fichier :

Code : Tout sélectionner

[Service]
Environment="BOUTON_1=123"
Environment="BOUTON_2=456"
Environment="BOUTON_3=789"
Relancer Domoticz :

Code : Tout sélectionner

sudo service domoticz restart
Pour tester :

Créer un fichier test /home/pi/test/sh

Code : Tout sélectionner

#!/bin/bash
echo $*
Ajouter le code suivant sur "Action on" d'un bouton de test :

Code : Tout sélectionner

script:///home/pi/test.sh $BOUTON_1 $BOUTON_2 $BOUTON_3 > /home/pi/test.log
Après avoir cliqué sur le bouton, on aura une trace /home/pi/test.log :

Code : Tout sélectionner

123 456 789
Enjoy!
bebesnake
Messages : 10
Inscription : 01 juin 2020, 07:53

Re: Comment utiliser une variable d'environnement dans le Action On d'un Groupe ou Scénario?

Message par bebesnake »

Ah super!!! C'est ce que je voulais :) Merci beaucoup!!!
Répondre