Script en python3

Bonjour,
Raspberry Pi 4B avec image officielle Jeedom.

J’ai un peu suivi ce fil: Directive #! /usr/bin/python3 ignorée - #29 par Arno70

Mais je suis conforté à des soucis.

Mon script python:

#!/usr/bin/env python3

from cellulariot import cellulariot
import time

node = cellulariot.CellularIoTApp()
node.setupGPIO()

time.sleep(0.5)
node.turnOnRelay()

Je suis avec le user jeedom. Mon script fonctionne très bien en cli avec:
python3 relay.py

Mais dans le plugin script, quand je clic sur tester:

Erreur sur /var/www/html/plugins/script/data/relay_on 2>&1 valeur retournée : 1. Détails : Sixfab Raspberry Pi Cellular IoT Application Shield Class initialized! Traceback (most recent call last): File "/var/www/html/plugins/script/data/relay_on", line 7, in node.setupGPIO() File "/usr/local/lib/python3.7/dist-packages/sixfab_cellulariot-1.2.0-py3.7.egg/cellulariot/cellulariot.py", line 693, in setupGPIO RuntimeError: Not running on a RPi! /usr/local/lib/python3.7/dist-packages/sixfab_cellulariot-1.2.0-py3.7.egg/cellulariot/cellulariot.py:125: RuntimeWarning: No channels have been set up yet - nothing to clean up! Try cleaning up at the end of your program instead!

J’ai installé les modules de cette manière:

sudo mkdir /var/www/.local
sudo mkdir /var/www/.cache
sudo chown www-data.www-data /var/www/.local
sudo chown www-data.www-data /var/www/.cache
sudo -H -u www-data pip3 install --user RPi.GPIO
sudo -H -u www-data pip3 install --user sixfab-cellulariot
sudo -H -u www-data pip3 install --user smnbus

Dans le plugin script, je n’ai pas précisé d’extension.
/var/www/html/plugins/script/data/relay_on

Je ne sais pas ce qu’il me manque pour que cela fonctionne.

Merci d’avance pour votre aide.
Et bonne soirée d’été avec l’apéro et tout et tout!

Déja renome ton script .py en .PY
etite ton script par l’éditeur du plugin-script et sauve le même si c’est le même ça te permettra d’avoir les bons droits …

/var/www/html/plugins/script/data/relay_on.PY

Merci de ta réponse rapide, malheureusement pas mieux.

-rwxrwx--- 1 www-data www-data 161 juil. 13 17:29 /var/www/html/plugins/script/data/relay_on.py
-rwxrwx--- 1 www-data www-data 162 juil. 13 17:29 /var/www/html/plugins/script/data/relay_off.py
-rwxrwx--- 1 www-data www-data 161 juil. 13 17:30 /var/www/html/plugins/script/data/relay_on.pyx
-rwxrwx--- 1 www-data www-data 161 juil. 13 17:32 /var/www/html/plugins/script/data/relay_on
-rwxrwx--- 1 www-data www-data 162 juil. 13 17:35 /var/www/html/plugins/script/data/relay_off
-rwxrwx--- 1 www-data www-data 161 juil. 13 19:35 /var/www/html/plugins/script/data/relay_on.PY
-rwxrwx--- 1 www-data www-data 162 juil. 13 19:36 /var/www/html/plugins/script/data/relay_off.PY

Et même en ajoute chmod +x cela provoque toujours la même erreur.

Snif…

La tes droits sont bon il te reste des extensions .py a évité ils sont exécuté en python2 par défaut.

Après tu a peut être un problème dans les scripts eux même

J’ai bien mis les .PY comme tu me l’avais dit, mais erreur.

Quand j’éxécute le script

jeedom@jeedom:~ $ sudo python3 /var/www/html/plugins/script/data/relay_on.py
Sixfab Raspberry Pi Cellular IoT Application Shield Class initialized!

Tout va bien. J’entends le relais s’enclencher dans ma machine de guerre.

essai maintenant que ton script est exécutable de faire

/var/www/html/plugins/script/data/relay_on.PY

sans le python3 devant

et ca c’est ce que renvoi ton script ?

Sixfab Raspberry Pi Cellular IoT Application Shield Class initialized!

Bonjour!

Effectivement, le script fonctionne quand je fais directement dans le terminal:
/var/www/html/plugins/script/data/relay_on.PY
ou
/var/www/html/plugins/script/data/relay_on.PY

J’ai bien en retour:
Sixfab Raspberry Pi Cellular IoT Application Shield Class initialized!

Et j’entends bien le relais s’enclencher.

Et si tu met ça dans le plugin script ça fonctionne ?

il est pas content

on dirait un problème de droits sur ta librairie …
sous ssh ca donne quoi:
python3 --version

Python 3.7.3

J’ai fait une installation pour le user www-data pour qu’il puisse avoir accès à la librairie.

Après je ne connais pas le fonctionnement si il y a besoin de faire des actions supplémentaires.

aprés connecte toi avec cet utilisateur
lance python3
et en ligne de commande tape ton script lignes par ligne …

de façon a vérifier si il y a pas un warning ou une erreur …

jeedom@jeedom:~ $ sudo -u www-data /var/www/html/plugins/script/data/relay_on.PY
Sixfab Raspberry Pi Cellular IoT Application Shield Class initialized!
Traceback (most recent call last):
  File "/var/www/html/plugins/script/data/relay_on.PY", line 7, in <module>
    node.setupGPIO()
  File "/usr/local/lib/python3.7/dist-packages/sixfab_cellulariot-1.2.0-py3.7.egg/cellulariot/cellulariot.py", line 693, in setupGPIO
RuntimeError: Not running on a RPi!
/usr/local/lib/python3.7/dist-packages/sixfab_cellulariot-1.2.0-py3.7.egg/cellulariot/cellulariot.py:125: RuntimeWarning: No channels have been set up yet - nothing to clean up!  Try cleaning up at the end of your program instead!

Est-ce qu’il n’y aurait pas aussi une histoire de droit d’accès au « matériel »?
Car pour faire fonctionner la carte, il faut activer dans raspi-config le I2C et le serial port hardware. Ce que j’ai déjà fait et qui fonctionne avec mon utilisateur jeedom.

non je pense pas

mais lorsque tu a paramétré il a peut être créer un fichier caché dans ton répertoire utilisateur qui n’est pas vu par www-data …

J’ai trouvé une solution: raspberry-gpio-python / Tickets / #171 "Not running on a RPi" message from GPIO.setup(id, GPIO.IN) on new RPi4B

Ce que j’ai fait:
sudo vim /etc/udev/rules.d/90-gpio.rules

avec dedans:

KERNEL=="gpiomem", OWNER="root", GROUP="gpio"

et

sudo groupadd -f --system gpio
sudo usermod -a -G gpio www-data

Je ne sais pas si c’est une bonne ou mauvaise solution, est-ce qu’il y a un risque?
Merci @olive !

1 « J'aime »

Ben a prioris ce ne sont que des droits …

et ça fonctionne maintenant ?

Oui, ça fait « clic » et « clic » sur la carte quand je clique sur tester dans le plugin script.

Bon super :+1: :+1: :+1:

Merci et bonne journée ensoleillée !

De rien pour le soleil je crois qu’aujourd’hui c’est raté :upside_down_face:

oublie pas de solutionner le sujet.