Extraire plusieurs variables d'un script python dans un virtuel et/ou scénario

Bonjour à tous,

Je galère sur un truc surement basique et simple en python (pour les pro python) mais je n’y parviens pas.

J’utilise le code source en python de l’UPS HAT de chez Waveshare que j’utilise dans un script à l’aide du plugin Script, j’ai ajouter en début de fichier la commande :

#! /usr/bin/env python2

J’ai également du changer le

import smbus

par

import smbus2

Pour éviter l’erreur

Erreur sur python /var/www/html/plugins/script/data/INA219.py 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File "/var/www/html/plugins/script/data/INA219.py", line 2, in import smbus ImportError: No module named smbus

En réalisant ces modifications, le script me sort encore l’erreur suivante :

Erreur sur python /var/www/html/plugins/script/data/INA219.py 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File "/var/www/html/plugins/script/data/INA219.py", line 195, in ina219 = INA219(addr=0x42) File "/var/www/html/plugins/script/data/INA219.py", line 62, in __init__ self.bus = smbus2.SMBus(i2c_bus); File "/usr/local/lib/python2.7/dist-packages/smbus2/smbus2.py", line 280, in __init__ self.open(bus) File "/usr/local/lib/python2.7/dist-packages/smbus2/smbus2.py", line 310, in open self.fd = os.open(filepath, os.O_RDWR) OSError: [Errno 13] Permission denied: '/dev/i2c-1'

Pour résoudre ce problème, j’ai autoriser l’accès

sudo chmod 666 /dev/i2c-1
sudo chgrp i2c /dev/i2c-1

Le paramétrage du script

Il est en mode action pour lancer le script, en revanche, je ne parviens pas récupérer et extraire les infos en faisant un return des variables…à la sortie du code via un Virtuel.

Erreur sur python /var/www/html/plugins/script/data/INA219.py 2>&1 valeur retournée : 1. Détails : File "/var/www/html/plugins/script/data/INA219.py", line 197 return bus_voltage SyntaxError: 'return' outside function

Merci pour votre aide.
INA219.txt (8,3 Ko)

Finalement en faisant un script en mode Info.
et en réalisant un print de la variable, je parviens à la récupérer.

en revanche si je souhaite utiliser un seul script pour remonter plusieurs variables ?

ina219 = INA219(addr=0x42)
        bus_voltage = ina219.getBusVoltage_V()             # voltage on V- (load side)
        print bus_voltage
        shunt_voltage = ina219.getShuntVoltage_mV() / 1000 # voltage between V+ and V- across the shunt
        print shunt_voltage

tension_ina

Salut, Regarde directement avec un bloc code dans un scénario voir doc
Tu pourras facilement envoyer dans virtuel ce que tu as besoin …
@+Dom

Merci pour ton retour, je suis partie sur ce principe

$script = 'INA219.py';        //Nom du fichier python
$chemin = '/var/www/html/plugins/script/data'; // Dossier à utiliser

$response = shell_exec('python2 '.$chemin.'/'.$script);  // execution du script 
echo $response;

En retour j’ai

0002|7.736
0003|-227.7

Comment puis-je dissocier mes deux variables?

Edit :

$script = 'INA219.py';        //Nom du fichier python
$chemin = '/var/www/html/plugins/script/data'; // Dossier à utiliser

// exécution du script
$response = shell_exec('python2 '.$chemin.'/'.$script);  // execution du script 

// décomposer
$decomposition = explode(" ", $response);

echo '\nTension : '.$decomposition[0].''; // bus_voltage
echo '\nCourant : '.$decomposition[1].''; // current

A continuer…

Merci d’avance

1 « J'aime »

Salut skitzz,

Perso je met tout dans un array du coté python, puis je fait print le json

print(json.dumps(datas))

(datas étant l’array en question)

que je récupère dans un bloc code de scénario :

$output = shell_exec($command);

$dataJson=json_decode($output,true);

$command étant l’url du script python avec les variables.

puis traite le json pour valoriser des infos dans un virtuel

1 « J'aime »

Je voulais finir avec mon petit bout de code en utilisant un event ou quelque chose pour mettre à jour un virtuel contenant deux infos (tension et courant) mais je n’y parviens pas…

dans un script, tu peux stocker la variable dans une commande d’un virtuel avec ce code

cmd::byId(99999)->event($nbr_xxx);

99999 = ID de la commande dans le virtuel

1 « J'aime »

En effet, merci à toi…
je me prenais la tête.

$script = 'INA219.py';        //Nom du fichier python
$chemin = '/var/www/html/plugins/script/data'; // Dossier à utiliser

// exécution du script
$response = shell_exec('python2 '.$chemin.'/'.$script);  // execution du script 

// décomposer
$decomposition = explode(" ", $response);

echo '\nTension : '.$decomposition[0].''; // bus_voltage
echo '\nCourant : '.$decomposition[1].''; // current

cmd::byId(276)->event($decomposition[0]);
cmd::byId(278)->event($decomposition[1]);

ups_infos

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.