Exécuter un script dans le plugin en python 3.7

Bonjour à tous
Bien que plus débutant sous Jeedom, je le suis toujours avec Linux et encore plus avec le plugin script.
Je tourne en Debian 10.7 (installation de la semaine dernière) sur un NUC processeur Intel dédié à Jeedom et Jeedom 4.1.18
Je voudrais exécuter un script trouvé sur le forum Jeedom pour activer ou désactiver des caméras Eufycam. J’ai suivi les étapes d’installation, mais je bute sur l’exécution des scripts fournis avec le plugin script.

Voici un des scripts que je voudrais exécuter. Ils nécessitent à priori python 3.7.

import asyncio
import logging
import os

from aiohttp import ClientSession

from eufy_security import async_login
from eufy_security.types import GuardMode

logging.basicConfig(level=logging.DEBUG)

EUFY_EMAIL = "#monEmail#"
EUFY_PASSWORD = "#monMotDePasse#"

async def main() -> None:
    """Create the aiohttp session and run the example."""
    async with ClientSession() as websession:
        # Create an API client:
        api = await async_login(EUFY_EMAIL, EUFY_PASSWORD, websession)

        for station in api.stations.values():
            print("------------------")
            print(f"Station Name: {station.name}")
            print(f"Serial Number: {station.serial}")
            print(f"Station params: {station.params}")
            print(f"Station type: {station.device_type}")

            async with station.connect() as session:
                await station.set_guard_mode(GuardMode.AWAY, session)
                await asyncio.sleep(10)
             


asyncio.get_event_loop().run_until_complete(main())

Bien qu’ayant regardé la doc et un peu partout, et fait des essais en fonction de ce que j’ai trouvé à gauche à droite, je n’arrive pas à exécuter le script sans message d’erreur.
J’ai créé une commande de type script : script, type : Action, défaut, et ensuite j’ai essayé différentes formules dans « Requête »
Tout d’abord j’ai juste essayé : /home/eufy/Absent.py
Mais j’ai un message sur la ligne 15, async def main() → None:

Comme j’ai lu que par défaut Jeedom exécutait python en version 2, j’ai essayé de rajouter dans mon script à la première ligne :

!#/usr/bin/env python3.7

Mais j’ai le même message à la ligne 16 (normal j’en ai rajouté une).
Le tuto que j’ai suivi dit de mettre :

/usr/local/bin/python3.7 /home/Eufy/absent.py

Mais là j’ai le message non trouvé et effectivement je n’ai pas python3.7 à cet emplacement.
Une recherche Find sur ce nom me donne python 3.7 à ces emplacements.

/etc/python3.7
/usr/lib/python3.7
/usr/share/binfmts/python3.7
/usr/share/doc/python3.7
/usr/share/lintian/overrides/python3.7
/usr/local/lib/python3.7
/usr/bin/python3.7
/usr/include/python3.7

Je les ai essayés un par un sans succès, tant sur la 1ère ligne du script que dans la requête elle-même.
Pourtant, à ce que j’ai lu, python 3.7 est bien installé par défaut avec Debian 10.
Comme je ne sais pas du tout si le problème que j’ai vient de mon installation de python, de mon incapacité à l’utiliser correctement, ou à utiliser le plugin script, ou bien du script lui même, je ne sais plus quoi essayer ni comment…
Est-ce que python devrait obligatoirement se trouver dans /usr/local/bin/python3.7 ?
Est-ce que je dois créer ma commande autrement ?

Merci d’avance pour l’aide que vous pourrez m’apporter.

1 « J'aime »

Pour que la directive ci-dessus soit prise en compte dans le plugin script, il ne faut pas que le nom du fichier se termine par .py
Avec .py c’est python 2 qui est utilisé.
Renommer votre fichier en Absent.PY par exemple

On en a parlé dans ce fil: Directive #! /usr/bin/python3 ignorée

1 « J'aime »

Hello @jpty
Alors j’ai essayé de renommer Absent.py en absent.PY (avec mv) et maintenant j’ai un sh 1 1: /home/eufy/absent.PY: Permission denied
Pourtant j’ai créé le fichier avec un utilisateur standard. Et au cas où, j’ai fait un chmod 777 sur le répertoire.

D’autre part, je ne sais toujours pas quel endroit il faut indiquer pour l’emplacement de python3.7 dans la liste donnée, sur la 1ère ligne de code.
Merci d’avance

edite le sans modifier et resauvegarde le par l’editeur de script

Pas besoin de préciser comment lancer python3. S’il est correctement installé, il doit s’exécuter avec juste python3 ou python3.7
Pour vérifier, vous pouvez aller sur cette page http://jeedom/index.php?v=d&p=system et taper python3 -V
Vous devriez avoir :
image
La directive !#/usr/bin/env python3.7 sera à adapter en fonction du résultat peut-etre juste !#/usr/bin/env python3

La page ci-dessus est accessible par le menu Réglages / Système / Configuration puis Onglet >_OS/DB puis clic sur le bouton >_Ouvrir à coté de >_Administration Système

@olive
Désolé, je pense que mon mal est profond, du moins mon incompétence
Impossible de sauvegarder le fichier existant via l’éditeur de script .
Du coup, je l’ai copié collé dans une nouvelle commande, et sous un autre nom. Il est mintenant sauvegardé dans : /var/www/html/plugins/script/data/absentv2.PY
Et j’ai une magnifique erreur d’exécution :

Erreur exécution de la commande [Caméras][Eufy-Desarme][absent2] : Erreur sur /var/www/html/plugins/script/data/absentv2.PY 2>&1 valeur retournée : 2. Détails : /var/www/html/plugins/script/data/absentv2.PY: 1: /var/www/html/plugins/script/data/absentv2.PY: !#usr/lib/python3.7: not found /var/www/html/plugins/script/data/absentv2.PY: 2: /var/www/html/plugins/script/data/absentv2.PY: import: not found /var/www/html/plugins/script/data/absentv2.PY: 3: /var/www/html/plugins/script/data/absentv2.PY: import: not found /var/www/html/plugins/script/data/absentv2.PY: 4: /var/www/html/plugins/script/data/absentv2.PY: import: not found from: too many arguments from: too many arguments from: too many arguments /var/www/html/plugins/script/data/absentv2.PY: 11: /var/www/html/plugins/script/data/absentv2.PY: Syntax error: word unexpected (expecting « ) »)

Comme je le disais, je ne sais même pas si le script peut fonctionner (bien qu’il fonctionne chez certains), ni surtout quel chemin de répertoire je dois indiquer pour python3.7
Pour cet essai j’ai mis : !#usr/lib/python3.7

Merci d’avance

@jpty, merci mais je suis probablement encore plus idiot que je ne le pensais.
J’ai suivi les directives, et quand je tape python3 -V, j’ai juste : Python 3.7.3
Idem si je le tape en ligne de commande dans Putty.
Du coup, ça ne me donne pas le chemin comme je le pensais.

Alors qu’est ce que je dois mettre comme chemin en 1ère ligne de script ?
Merci

Yapa besoin du chemin si python3.7.3 se lance en tapant python3
Mettez la directive #!/usr/bin/env python3 à la 1ère ligne de votre fichier .PY

Pour que l’éditeur de script fonctionne, il faut que les scripts soient dans un répertoire sous /var/www/html
/var/www/html/plugins/script/data/absentv2.PY est correct.

2 « J'aime »

@jpty
Merci
Donc j’ai modifié le script créé directement par le plugin au bon endroit en mettant sur la 1ère ligne : !#/usr/bin/env python3

Et maintenant j’ai un violent message (qui ressemble furieusement à celui posté tout à l’heure :

Erreur sur /var/www/html/plugins/script/data/absentv2.PY 2>&1 valeur retournée : 2. Détails : /var/www/html/plugins/script/data/absentv2.PY: 1: /var/www/html/plugins/script/data/absentv2.PY: !#/usr/bin/env: not found /var/www/html/plugins/script/data/absentv2.PY: 2: /var/www/html/plugins/script/data/absentv2.PY: import: not found /var/www/html/plugins/script/data/absentv2.PY: 3: /var/www/html/plugins/script/data/absentv2.PY: import: not found /var/www/html/plugins/script/data/absentv2.PY: 4: /var/www/html/plugins/script/data/absentv2.PY: import: not found from: too many arguments from: too many arguments from: too many arguments /var/www/html/plugins/script/data/absentv2.PY: 11: /var/www/html/plugins/script/data/absentv2.PY: Syntax error: word unexpected (expecting « ) »)

Ca veut dire que le script n’est pas bon ?Je l’ai pourtant copié collé et il semble fonctionner chez d’autres personnes.
Merci d’avance

Avez-vous essayé d’exécuter votre fichier en ssh pour vérifier s’il fonctionne sans erreur ?

@jpty

Non, désoé, même ça je ne sais pas le faire.
J’ai esssayé python3 /var/www/html/plugins/script/data/absentv2.PY mais il me dit ne pas avoir les droits.
Alors j’ai essayé en root, et là j’ai erreur de syntaxe sur la ligne 1 :

File « /var/www/html/plugins/script/data/absentv2.PY », line 1
!#/usr/bin/env python3
^
SyntaxError: invalid syntax

Merci

Oups my bad c’est #! /usr/bin/env python3
Le # au début pour que ce soit un commentaire

1 « J'aime »

@jpty
Alors, toujours en SSH et en root :
IndentationError: unindent does not match any outer indentation level

Merci

Là je laisse les pros du python. Je n’y connais rien.
C’est un pb de désindentation dans le fichier.

Je vous ai juste montré comment exécuter un fichier avec python3 dans le plugin script

En python l’identation fait partie du langage
elle dois être composée de 4 espaces
Capture d’écran du 2021-01-27 18-08-13
Vérifiez votre code ce ne sont pas des tabulations

@olive
J’avais déjà dû lire ça quelque part, mais vu que c’était un copier/coller…

On change de message, sans doute plus embêtant.

Erreur sur /var/www/html/plugins/script/data/absentv2.PY 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File « /var/www/html/plugins/script/data/absentv2.PY », line 8, in from eufy_security import async_login File « /usr/local/lib/python3.7/dist-packages/eufy_security/init.py », line 2, in from .api import async_login # noqa File « /usr/local/lib/python3.7/dist-packages/eufy_security/api.py », line 9, in from .camera import Camera File « /usr/local/lib/python3.7/dist-packages/eufy_security/camera.py », line 5, in from async_generator import asynccontextmanager ModuleNotFoundError: No module named ‹ async_generator ›

Je ne sais pas à quoi correspond le async generator… Il semble que ce soit dans les modules téléchargés ?
Suivant le tuto du forum, j’ai récupéré une bibliothèque python eufy security avec la commande:

wget https://github.com/keshavdv/python-eufy-security/archive/p2p.zip

Extrait le zip, et lancé l’install

sudo pip3 install python-eufy-security
sudo pip3 install -r requirements_test.txt

Puis dans le dossier /usr/local/lib/python3.7/dist-packages/ j’ai remplacé le dossier eufy_security par celui de l’archive extraite. J’ai également fait une copie de ce même dossier dans /usr/local/lib/python3.7/site-packages/ (dossier que j’ai créé).

Alors j’imagine bien que sans avoir le détail des fichiers récupérés, je n’aurai pas de réponse, mais est-ce que ça pourrait être un problème de droits ou de chemin ?

Encore une fois d’autres y sont arrivés avec les mêmes infos que moi. Mais peut être sur Pi alors que je suis en debian
Qu’est ce que je peux vérifier ?

Merci d’avance

L’installation de librairies en python se fait juste avec le pip3 et ne nécessite pas d’aller recopier de fichiers.

verifie juste que ton pip3 pointe bien dans le bon python3

pip3 --version

donne quoi ?

@olive
En root :

root@Jeedom:~# pip3 --version
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)

EDIT
Mais pour l’installation, il ne faut pas indiquer où la faire ?
Je suis allé voir sur le forum américain Domoticz où les informations que j’ai récupérées sur le forum Jeedom ont été copiées. C’est expliqué comme ça…

Merci

Normalement c’est ton environnement python qui sais ou il habite.


/usr/lib/python3/dist-packages/pip (python 3.7)

@olive OK, donc, il sait où il habite, est-ce que ça m’aide pour l’erreur à l’exécution du script ?
Est-ce que je dois refaire mes installs au cas où ? Et dans ce cas, comment désinstaller proprement ?
Merci

1 « J'aime »