Ce Forum passera en lecture seule en janvier 2020
Image
Merci de vous rendre sur https://community.jeedom.com maintenant pour vos prochains postes ;)

Du python dans les scripts ???

Réservé à l'utilisation et la programmation de scripts dans JEEDOM
Répondre
Laurent R
Timide
Messages : 222
Inscription : 01 août 2016, 03:46
Localisation : Alabama

Du python dans les scripts ???

Message par Laurent R » 28 janv. 2017, 06:59

Bonjour a tous,

J'ai cru comprendre que l'on pouvait faire des scripts en Python, et j'avais quelques questions a ce sujet. J'ai fait quelques recherches sur le net, mais il me manque des bouts d'informations pour arriver a un résultat quelconque. Ci-dessous mes questions, les commentaires, remarques et recommendations sont bienvenu:

- C'est possible de faire du Python avec Jeedom ?
- Quelle version de Python, 2 ou 3 ?
- Ou dois-je mettre le code ? Dans l'éditeur Jeedom, ou juste faire appel a un fichier Python?
- Si juste un raccourci vers un fichier, quel est l'emplacement ou chemin souhaitable ?
- Comment injecter des variables Jeedom dans le script Python ? Un exemple serai appréciable !
- Comment faire pour que Python retourne des valeurs vers Jeedom ? Un exemple serai appréciable !
- Des trucs et astuces a partager ??

Mon principal projet est pour la gestion des cameras, je souhaite faire un soft qui surveille un ftp pour activer une alarme, ainsi qu'un soft qui me permettent de nettoyer ce meme dossier ftp. Ensuite on verra !

D'avance merci
Larry

totovaauski
Actif
Messages : 1927
Inscription : 05 juil. 2014, 11:21

Re: Du python dans les scripts ???

Message par totovaauski » 28 janv. 2017, 08:21

Salut
Tu peux lire la doc du plugins script (et l'installer le cas échéant), le 3/4 des réponses a tes questions s'y trouve.

Envoyer avec mon pouce ...
RPI3 + Dongle Aeon
Jeedom sur : Raspberry Pi + Raspberry compute
Mysensors , z-wave, xiaomi ...

https://www.youtube.com/watch?v=-bjbUg9d64g
https://www.youtube.com/watch?v=GPj1ozB ... _b-Toq47NQ

Avatar de l’utilisateur
mbuffat69
Timide
Messages : 389
Inscription : 02 févr. 2016, 21:25
Localisation : Lyon

Re: Du python dans les scripts ???

Message par mbuffat69 » 28 janv. 2017, 15:52

Bonjour
effectivement jeedom n'a pas d'interpréteur python intégré (dommage :( ) (mais uniquement php et java-script)
Par contre on peut exécuter des scripts python (2 ou 3) avec le plugin script:
  • type de script: script
  • type : action
  • requete: on écrit le nom (avec le répertoire) du script python
On doit spécifier l'interpréteur python si le script n'est pas exécutable et ne spécifie pas l'interpréteur sur la 1ere ligne:
#! /usr/bin/env python3

Si on met le script dans le répertoire du plugin:
plugins/script/core/ressources
on n'a pas besoin de spécifier le répertoire.

On peut aussi écrire des scripts python en interaction avec jeedom en utilisant l'API jeedom
Voir la documentation https://jeedom.com/doc_old/documentatio ... _http.html pour l'API la plus simple

Voici un petit exemple de programme python qui exécute une commande Jeedom (spécifier par son id)

Code : Tout sélectionner

#! /usr/bin/env python3
import requests
import json

# interface JEEDOM
URL_JEEDOM = "http://xxxxxx/jeedom";
API_KEY    = "xxxxxx";
# connection
URL=URL_JEEDOM+'/core/api/jeeApi.php'
DATA={'apikey' : API_KEY , 'type' : 'cmd' , 'id' : '323'}

print "Test commande "
response = requests.post(URL, params=DATA)
print("texte: ",response.text)
print("json: ",response.json())
print("url: ",response.url)
Attention l'ID de la commande est propre à mon système et j'utilise une installation avec nginx donc avec un préfix jeedom dans l'URL.

pour une utilisation plus sophistiquée, il faut utiliser l'API jeedom JSON
https://jeedom.com/doc_old/documentatio ... c_api.html
Système DIY 2 PI3 avec SSD (voir mon profil pour le détail)

Laurent R
Timide
Messages : 222
Inscription : 01 août 2016, 03:46
Localisation : Alabama

Re: Du python dans les scripts ???

Message par Laurent R » 30 janv. 2017, 05:35

Je pense que ça va bien m'aider, merci mbuffat69.

Je vais pouvoir "chier du code" a présent !!!
Larry

Laurent R
Timide
Messages : 222
Inscription : 01 août 2016, 03:46
Localisation : Alabama

Re: Du python dans les scripts ???

Message par Laurent R » 02 mars 2017, 06:06

Je suis également a la recherche d'une astuce, est-il possible de stopper un script long en python qui prend du temps ?

J'ai fait un générateur d'aube (augmente l’intensité de la lumière toutes les 5 secondes).

En lançant plusieurs fois le script, la lumière fait n'importe quoi. Ma solution a été de redémarré jeedom pour tout stopper.

D'avance merci pour votre aide.

Larry
Larry

Alex80
Timide
Messages : 1
Inscription : 18 mars 2018, 18:36

Re: Du python dans les scripts ???

Message par Alex80 » 18 mars 2018, 18:43

Bonjour tout le monde,
Je souhaite intégrer mon Dyson Purelink dans Jeedom pour le piloter / récupérer les stats des capteurs et me passer de l'app Dyson à terme.
Pour cela j'ai trouvé une lib python https://github.com/CharlesBlonde/libpurecoollink qui fonctionne super bien en python3.x et souhaite l'appeler dans le script Plugin. Jusque là tout va bien mais l'execution du script depuis le plugin utilise visiblement le bin python2.7 alors que j'ai bien spécifié #! /usr/bin/env python3.4 au début de mon script.
Avez vous une idée pour forcer l'utilisation du bin python3.4 ? J'aimerais éviter d'avoir à désinstaller le2.7 avec tous les effets de bord que cela peut supposer?
Merci

Avatar de l’utilisateur
delavitoune
Timide
Messages : 82
Inscription : 22 janv. 2015, 23:32

Re: Du python dans les scripts ???

Message par delavitoune » 13 oct. 2018, 14:24

Bonjour à tous,

@Alex80 : je vais bientôt être dans la même situation que toi. Est-ce que tu es parvenu à trouver une solution ?

Merci pour ton retour !

papabert
Timide
Messages : 160
Inscription : 29 mai 2016, 08:30

Re: Du python dans les scripts ???

Message par papabert » 01 déc. 2018, 11:14

Bonjour,

Avez-vous une réponse à cette question ?
Malgré le

Code : Tout sélectionner

#! /usr/bin/env python3
au début du script, il exécute par défaut avec python2.7 :x :(
RPI3 - RFLink pour prises Dio et sonde température DIY - Legrand inOne pour volets, chauffage et alarme - EnOcean pour détecteurs d'ouverture...

Avatar de l’utilisateur
mbuffat69
Timide
Messages : 389
Inscription : 02 févr. 2016, 21:25
Localisation : Lyon

Re: Du python dans les scripts ???

Message par mbuffat69 » 15 déc. 2018, 14:04

attention, il existe plusieurs façon d'exécuter un script python monscript.py
  • soit en spécifiant l'interpréteur

    Code : Tout sélectionner

    python monscript.py
    
    dans ce cas si l'interpreteur par defaut est 2.7, c'est effectivement celui ci qui est utiliser malgré la ligne (env python3 )en debut de script
  • dans ce cas pour forcer l'interpreteur python3

    Code : Tout sélectionner

    python3 monscript.py
  • soit en rendant le script exécutable (chmod +x sous unix)

    Code : Tout sélectionner

    monscript.py
    dans ce cas c'est bien l'interpréteur spécifié sur la 1ere ligne qui est utilisé
Système DIY 2 PI3 avec SSD (voir mon profil pour le détail)

papabert
Timide
Messages : 160
Inscription : 29 mai 2016, 08:30

Re: Du python dans les scripts ???

Message par papabert » 26 déc. 2018, 13:16

Bonjour et merci mbuffat69 pour ces retours.
Je parle d'un script Python3 lancé par Jeedom avec le plugin Script.
J'ai vérifié le chown www-data (comme indiqué sur la doc du plugin) ainsi que le chmod +x sur mon script comme tu me le proposais. C'était déjà OK.
Vous avez une autre idée ?
RPI3 - RFLink pour prises Dio et sonde température DIY - Legrand inOne pour volets, chauffage et alarme - EnOcean pour détecteurs d'ouverture...

bipemn26
Timide
Messages : 22
Inscription : 31 oct. 2018, 17:31

Re: Du python dans les scripts ???

Message par bipemn26 » 15 mars 2019, 09:04

Bonjour,
Dans le cas ou on veut lancer un script python. En ce qui me concerne, je n'ai trouvé que cette solution.
1. Créer un script en lui donnant un nom d'équipement, etc
2. Ajouter une commande script en action-défaut. Lui mettre un nom. Cliquer sur le dossier vert et inscrire le nom de la commande script (ex. : test.sh). après validation taper son code dans le fenêtre qui s'affiche.

Code : Tout sélectionner

#!/bin/bash
inscrire le chemin où se trouve le fichier python (ex. : cd /home/pi/.......
sudo python test.py (le fichier python à lancer)
et oui, il ne faut pas inscrire comme je m'y suis fait prendre

Code : Tout sélectionner

#!/usr/bin 
ou
#!/usr/bash
le chemin va s'inscrire dans la requête du script avec pour terminaison le fichier .sh à lancer qui lancera lui-même le script python.

Thibault92Caen
Timide
Messages : 10
Inscription : 01 mai 2019, 15:28

Re: Du python dans les scripts ???

Message par Thibault92Caen » 08 mai 2019, 09:23

Bonjour,

J'essaie de commander ma tv avec le plugin script
/home/pi/.local/bin/samsungctl --host 192.168.1.65 --method websocket KEY_POWER
Rien se passe depuis tv sauf message : Action exécutée avec succès
Du coups j'ai vu que c'était un script python mais sans extension
Comment je peux programmer un fichier .sh
Qui exécuterai le fichier python (samsungctl) avec les arguments qui suit ( --host 192.168.1.65 --method websocket KEY_POWER )
J'ai essayé ce que dit bipemn26 mais étant novice je ne suis pas sur de bien comprendre

Thibault92Caen
Timide
Messages : 10
Inscription : 01 mai 2019, 15:28

Re: Du python dans les scripts ???

Message par Thibault92Caen » 20 mai 2019, 19:49

En faite j'ai juste installé le plugin SSH, je ne sais pas si c'est la meilleur solution mais ça marche ;)

California44
Timide
Messages : 4
Inscription : 29 mai 2019, 15:11

Re: Du python dans les scripts ???

Message par California44 » 29 mai 2019, 15:34

Bonjour

J’ajoute ma “pierre” à ce post car je me pose les mêmes questions que Thibault.
En fait j’ai un script python qui fonctionne parfaitement si je l’exécute sur mon raspberry en mode terminal. Ce script appelle une librairie IOPi de abelectronqiue (carte IO Pi zero) qui contrôle une carte à relais sainsmart.
Le code de test Relais1.py est le suivant :

Code : Tout sélectionner

#! /usr/bin/env python
from IOPi import IOPi
import time

delay = 0.5
close = 0
open = 1
bus = IOPi(0x20)
bus.set_port_direction(0, 0x00)
bus.write_port(0, 0xFF)
bus.write_pin(1,close)
time.sleep(delay)
bus.write_pin(1, open)
il active simplement la pin1 de IO pi pendant 1 seconde et donc active le relais de la carte sainsmart
bref ce code si je l’utilise directement dans le plugin « script » se lance bien mais me jette avec une erreur de librairie :

Erreur dans l'exécution du terminal, la valeur retournée est : 1. Détails : Traceback (most recent call last): File "/var/www/html/plugins/script/core/ressources/Relais1.py", line 8, in bus = IOPi(0x20) File "/usr/local/lib/python2.7/dist-packages/IOPi/IOPi.py", line 118, in __init__ self.__bus = self.__get_smbus() File "/usr/local/lib/python2.7/dist-packages/IOPi/IOPi.py", line 171, in __get_smbus raise 'Could not open the i2c bus' TypeError: exceptions must be old-style classes or derived from BaseException, not str

Par contre si je lance le bash suivant:

Code : Tout sélectionner

#!/bin/bash
sudo python /var/www/html/plugins/script/core/ressources/Relais1.py
Il fonctionne sans erreur, appelle bien mon script python et le relais est actionné.
N"étant pas expert linux, le fait de lancer le bash par sudo change t'il la donne ?
Pourquoi dans l'environnement jeedom uniquement le script pose t'il des problèmes avec cette librairie

SI je reste sur l'utilisation du bash, comme thibault je ne sais pas comment passer des variables à mon script et prendre en compte une valeur de retour. Y a-t-il des exemples?

Avatar de l’utilisateur
tomdom
Actif
Messages : 925
Inscription : 14 nov. 2016, 05:46

Re: Du python dans les scripts ???

Message par tomdom » 01 juin 2019, 10:57

Bonjour,

Ton script a besoin de privilège pour accéder au bus i2c. C'est sudo qui lui donne ce privilège.

Pour les paramètres, soit dans le plugin script, tu ajoutes sudo avant l'appel de ton script, soit tu modifies ton script bash comme ceci :

Code : Tout sélectionner

#!/bin/bash
echo $(sudo python /var/www/html/plugins/script/core/ressources/Relais1.py $@)
et tu passes tes paramètres comme si tu le faisais directement à ton script python.

Explications :
$@ : passe tout les paramètres que reçoit le script bash à ton script python
echo $(....) : te permet de récupérer ce que retourne ton scrypt python, si il retourne quelque chose
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.

California44
Timide
Messages : 4
Inscription : 29 mai 2019, 15:11

Re: Du python dans les scripts ???

Message par California44 » 12 juin 2019, 10:04

Merci tomdom
Désolé pour mon feedback tardif.
Je vais suivre tes conseils

California44
Timide
Messages : 4
Inscription : 29 mai 2019, 15:11

Re: Du python dans les scripts ???

Message par California44 » 12 juin 2019, 11:23

Résultat de mes tests sur les conseils de tomdom

Pour éviter d'utiliser un bash j'ai passé la commande suivante directement dans la zone script du plugin script:

Code : Tout sélectionner

sudo python /var/www/html/plugins/script/core/ressources/Relais1.py
et j'ai en retour : Erreur dans l'exécution du terminal, la valeur retournée est : 2. Détails : python: can't open file 'sudo': [Errno 2] No such file or directory

Je ne vois pas quelle syntaxe doit être utilisée ?

En plus de controler des relais je dois collecter des statut de contacts sec. De nouveau une carte IO pi configurée en input me permet de faire cela.
Pour le code voici l' exemple de collecte du contact sur la pin 1 (fichier python Read_P1.py)

Code : Tout sélectionner

from IOPi import IOPi
import time

bus = IOPi(0x21)
bus.set_port_direction(0, 0xFF)
bus.set_port_direction(1, 0xFF)
bus.set_pin_direction(1, 1)  # set pin 1 as an input
bus.set_pin_pullup(1, 1)  # enable the internal pull-up resistor on pin 1
bus.invert_pin(1, 1)  # invert pin 1 so a button press will register as 1
val = bus.read_pin(1)
print  val
ce code fonctionne parfaitement si on le lance en ligne de commande dans le shell.

de même un bash pour le lancer dans jeedom (en attendant une solution au problème évoqué précédemment qui permettrait de lancer le script python directemen)t)
fichier RunRead_P1 en respectant la syntaxe recommandée par tomdom

Code : Tout sélectionner

#!/bin/bash
echo $(sudo python /var/www/html/plugins/script/core/ressources/Read_P1.py)
Ces scripts s'executent bien et retournent 0 si le bouton est off et 1 si le bouton est on

Dans jeedom la configuration est la suivante:
Type Script: script
Type: Information Numérique
Requête: /var/www/html/plugins/script/core/ressources/RunRead_P1

Helas la valeur retournée est toujours 0. Il semble que la valeur de retour ne soit pas passée correctement à jeedom.
Est ce encore une erreur de syntaxe ? Comme ce que je cherche à faire me semble trivial, y a t'il une documentation jeedom qui explique en détail l'utilisation du plugin script?

California44
Timide
Messages : 4
Inscription : 29 mai 2019, 15:11

Re: Du python dans les scripts ???

Message par California44 » 12 juin 2019, 11:37

Je complete mon post précédent.

Le bouton "Tester" dans le plugin script ne fonctionne pas et renvoit toujours 0 mais dans le dashboard, la tuile présentant l'état de mon bouton, elle, est fonctionnelle !

J'ai aussi changé le Type du script en Info Binaire

Répondre

Revenir vers « [Plugin officiel] Scripts »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités