Script pour controller caméra TpLink

Tags: #<Tag:0x00007f75340c4418>

Bonjour,

Je souhaite ajouter des actions sur ma camera TpLink avec des scripts python.

En ssh, lorsque je lance le fichier ( python3 moveRight.py) il fonctionne bien.
Mais, depuis le plugin script il me lève une erreur de retour, je ne comprend pas
Voici le retour
Erreur sur python /var/www/html/plugins/script/data/moveRight.py 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File "/var/www/html/plugins/script/data/moveRight.py", line 3, in from pytapo import Tapo File "/usr/local/lib/python2.7/dist-packages/pytapo/__init__.py", line 12, in from .media_stream.session import HttpMediaSession File "/usr/local/lib/python2.7/dist-packages/pytapo/media_stream/session.py", line 30 ip: str, ^ SyntaxError: invalid syntax

je l’ai configuré comme dans l’image Capture d’écran 2021-09-14 à 11.05.49

et mon script est le suivant :

# !/usr/bin/env python3

from pytapo import Tapo
user="XXXXX"
password="XXXX"
host="192.168.1.XX"
tapo2=Tapo(host, user, password)
res=tapo2.moveMotor(50,0)

Avez-vous une idée ?

Cordialement,

Bonjour,

Comme tu peux le voir dans le message d’erreur, ton script est exécuté avec python2. Il faut que tu le lances avec la commande suivante :

/usr/bin/python3 /var/www/html/plugins/script/data/moveRight.py

Édit :
ou en corrigeant le shebang, il ne doit pas y avoir d’espace entre # et !

Bonjour,

Merci de ton retour @tomdom,
Depuis j’ai changé le python utilisé par mon jeedom, je l’ai fait pointer sur python3
j’arrive à lancer mon script en ssh. :
jeedom@jeedom:/var/www/html/plugins/script/data$ python moveRight.PY

mais depuis le plugin script, toujours une erreur de module :

Erreur sur /var/www/html/plugins/script/data/moveRight.PY 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File « /var/www/html/plugins/script/data/moveRight.PY », line 4, in from pytapo import Tapo ModuleNotFoundError: No module named ‹ pytapo ›

quand je regarde les modules importer en python sur jeedom je l’ai bien :
jeedom@jeedom:/var/www/html/plugins/script/data$ pip list
*Package Version *
------------- ---------
*asn1crypto 0.24.0 *
certifi 2020.12.5
*chardet 4.0.0 *
*configparser 3.5.0b2 *
*construct 2.10.54 *
*cryptography 2.6.1 *
*entrypoints 0.3 *
*enum-compat 0.0.3 *
*enum34 1.1.6 *
*future 0.18.2 *
*gpg 1.12.0 *
*idna 2.10 *
*ipaddress 1.0.17 *
*keyring 17.1.1 *
*keyrings.alt 3.1.1 *
*olefile 0.46 *
*Pillow 5.4.1 *
*pip 18.1 *
*pycrypto 2.6.1 *
*pycryptodome 3.10.1 *
*PyGObject 3.30.4 *
*pyserial 3.5 *
***pytapo 2.0 ***
*pyudev 0.22.0 *
*pyxdg 0.25 *
*requests 2.25.1 *
*RPi.GPIO 0.7.0 *
*SecretStorage 2.3.1 *
*setuptools 40.8.0 *
*six 1.12.0 *
*urllib3 1.26.3 *
wheel 0.32.3

je ne comprends pas pourquoi il ne trouve pas le module

c’est normal. Ce n’est pas le même utilisateur. Lorsque ton script s’exécute via jeedom, il s’exécute avec le l’utilisateur www-data.

Et si tu as installé tes dépendances python avec l’utilisateur que tu utilises pour ta connexion ssh, seul cet utilisateur a accès à ces modules python.

Une solution serait de faire (via ssh et en root) :

su -l -s /bin/bash -c 'pip3 install tes_dependances' www-data 

Édit :
autre solution (sans doute plus propre), utiliser un virtual env python pour l’exécution de ton script

Ok,
Je vais essayer comme ca,
su c’est l’utilisateur Root ?

une fois, je passerai sur un venv

Non. Il faut que tu sois déjà root ou tu ajoutes sudo avant la commande que je t’ai donné.

Dans le cas de ce que je t’ai indiqué su est utilisé pour exécuter la commande pip en tant qu’utilisateur www-data

Édit :
Donc :

sudo su -l -s /bin/bash -c 'pip3 install tes_dependances' www-data 

Ah yes ,

bon je n’ai pas les droits, je vais chercher pour me les mettre

Could not install packages due to an EnvironmentError: [Errno 13] Permission non accordée: ‹ /var/www/.local ›

Check the permissions.

En faisant la commande ci-dessous ?

Oui avec cette ligne de commandeCapture d’écran 2021-09-17 à 16.13.45

que donne la commande :

ls -ld /var/www/.local

jeedom@jeedom:/var/www/html/plugins/script/data$ ls -ld /var/www/.local

ls: impossible d’accéder à ‹ /var/www/.local ›: Aucun fichier ou dossier de ce type

et :

ls -ld /var/www

jeedom@jeedom:/var/www/html/plugins/script/data$ ls -ld /var/www
drwxrwxr-x 3 root root 4096 mars 2 2021 /var/www

C’est ça le problème. Chez moi /var/www appartient à www-data:root et non root:root

C’est quoi ton installation, une box jeedom, une installation à partir d’une image jeedom, une installation debian puis installation jeedom en ligne de commande, autre … ?

depuis une image jeedom sur un raspberry

on va aller au plus simple :

sudo pip3 install pytapo

je l’ai refait,

j’avais déjà fait

du coup c’est bon merci

par défaut j’installe mes paquets en sudo pour les rendre accessible à tout le monde ?

oui. autrement ce n’est accessible qu’à l’utilisateur qui fait l’installation

parfait merci,

je peux abuser de vos compétences ?

mon script a besoin d’un argument (un entier) comment je peux le passer dans le plugin ? je peux mettre un input sur le widget ?