Fonction exec() html

Au programme la régulation de température, la climatisation, les chauffe-eau...

Modérateur : Francois

Répondre
Yves4378
Messages : 6
Enregistré le : jeu. 27 oct. 2016 17:10

Fonction exec() html

Message par Yves4378 » jeu. 27 oct. 2016 17:15

Bonjour,
j' un capteur DS18b20 qui me donne bien la valeur de température en terminal :
python DS_1820.py
24.5
J'affiche bien la même température dans une page html en utilisant la fonction
<?php
exec("python DS_1820.py", $tp);
echo("température :".$tp[0]):
?>
J'ai un MCP3008 qui me renvoie bien une valeur analogique en terminal :
python MCP3008.py
5.0
Je fais la même chose en page html :
<,php
exec("python MCP3008.py", $va);
echo("Tension". $va[0]);
?>
Et là pas de valeur affichée, uniquement :tension
Une idée, j'ai dû oublier quelque chose ?
Cordialement
Yves

destroyedlolo
Raspinaute
Messages : 1583
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: Fonction exec() html

Message par destroyedlolo » jeu. 27 oct. 2016 20:17

Salut,

Alors avant toutes chose, ce n'est pas du HTML mais du PHP ;)
Et là pas de valeur affichée, uniquement :tension
Vérifie ce que renvoie ton script python en avec le code suivant :
<?php
exec("python MCP3008.py", $va);
var_dump($va);
?>

Ensuite on verra ce qui cloche :)

A+
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

Yves4378
Messages : 6
Enregistré le : jeu. 27 oct. 2016 17:10

Re: Fonction exec() html

Message par Yves4378 » jeu. 27 oct. 2016 21:00

Merci de ta réponse rapide.
Effectivement je me suis mal exprimé, c'est du php dans une page html.

En mettant un peu plus de détail :
<?php
exec("python MCP3008.py", $va);
var_dump("Tension :".$va[0]." volts");
?>
l'affichage est :
string(15)"Tension : Volts"
la valeur de $va[0] ne semble pas être renvoyée ?

Yves4378
Messages : 6
Enregistré le : jeu. 27 oct. 2016 17:10

Re: Fonction exec() html

Message par Yves4378 » jeu. 27 oct. 2016 21:31

Pour répondre précisément à ta demande :

<?php
exec("python MCP3008.py", $va);
var_dump($va[0]);
?>
affichage :
NULL

<?php
exec("python MCP3008.py", $va);
var_dump($va);
?>
réponse :
array(0) {}

Voilà.

destroyedlolo
Raspinaute
Messages : 1583
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: Fonction exec() html

Message par destroyedlolo » jeu. 27 oct. 2016 21:55

Yves4378 a écrit : <?php
exec("python MCP3008.py", $va);
var_dump($va);
?>
réponse :
array(0) {}
Ton script ne renvoie donc rien : vu qu'il te donne une valeur lorsque tu le lance dans un shell, je pense donc qu'il y a un pb avec l'environnement qu'il recoit.

Pour le vérifier, tente un

Code : Tout sélectionner

<?php
exec("python MCP3008.py", $va,$rc);
var_dump($va);
var_dump($rc);
?>
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

Yves4378
Messages : 6
Enregistré le : jeu. 27 oct. 2016 17:10

Re: Fonction exec() html

Message par Yves4378 » ven. 28 oct. 2016 14:41

La réponse est :
array(0) {} int(1)

Le problème vient du MCP3008.py, avec tout autre fonction en python ça fonctionne.
Incompatibilité en SPI ??

destroyedlolo
Raspinaute
Messages : 1583
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: Fonction exec() html

Message par destroyedlolo » ven. 28 oct. 2016 17:08

Yves4378 a écrit :La réponse est :
array(0) {} int(1)
Donc ca prouve bien qu'il y a une erreur car en cas de succes, un script renvoie un code retour de 0.
Si le script est bien foutu, il devrait retourner un code erreur différent en fonction du problème qu'il rencontre : il faut donc où il y aurait un exit(1) (ou qq chose du genre).
Yves4378 a écrit :Le problème vient du MCP3008.py, avec tout autre fonction en python ça fonctionne.
Incompatibilité en SPI ??
J'avais cru comprendre que ton MCP3008.py fonctionnait depuis le shell non ?

Dans tout les cas, le SPI n'a rien a voir la dedans, c'est soit :
  • soit le code ne trouve pas les variables d'environnements qui lui sont nécessaires
  • soit (et y'a de grande chance que ce soit ton problème), c'est par ce que l'utilisateur qui fait tourner ton serveur web n'a pas les droits d'accèder aux GPIO.
Ton Apache devrait tourné avec un utilisateur nommé www-data qui a moins de droit que ton utilisateur a toi.
Tu peux le voir en faisant avec la commande id.
Dans mon cas, ça donne :

Code : Tout sélectionner

laurent@torchwood ~ $ id
uid=1000(laurent) gid=1001(laurent) groupes=1001(laurent),10(wheel),14(uucp),16(cron),18(audio),19(cdrom),27(video),33(www-data),70(postgres),80(cdrw),85(usb),100(users),250(portage)
laurent@torchwood ~ $ id www
uid=33(www-data) gid=33(www-data) groupes=33(www-data),70(postgres)
Donc mon utilisateur perso appartient à 13 groupes alors que www-data à seulement 2. Par exemple, il est incapable d'accéder à un service audio car il ne fait pas parti du groupe du même nom.
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

Yves4378
Messages : 6
Enregistré le : jeu. 27 oct. 2016 17:10

Re: Fonction exec() html

Message par Yves4378 » ven. 28 oct. 2016 22:30

Bonsoir,
D'abord désolé pour la double transmission de mes réponses !
Je teste le serveur web en local et bien sûr j'ai tous les droits.
Le MCP3008.py fonctionne parfaitement en terminal.
Avec cette méthode, je n'ai aucun problème de passage de valeur dans une page html avec l'interface Onewire.
Avec SPI cela ne passe pas quelque soit le script.
Je laisse tomber pour le moment.
En tous cas merci de m'avoir répondu et donné des pistes.
Bonne soirée

Yves4378
Messages : 6
Enregistré le : jeu. 27 oct. 2016 17:10

Re: Fonction exec() html

Message par Yves4378 » mar. 1 nov. 2016 23:40

Bonsoir,
La piste des permissions était la bonne.
www-data n'avait pas les droits de spidev(0.0) et spidev(0.1) d'où l'impossibilité d'exécuter la fonction SPi.
En terminal pas de pb puisque j'ai les permissions !
Merci de tes conseils, bonne soirée.

mic78000
Messages : 3
Enregistré le : sam. 7 janv. 2017 10:16

Re: Fonction exec() html

Message par mic78000 » sam. 7 janv. 2017 10:21

Pour une prochaine fois : j'ai déjà eu ce genre de pb. un sudo devant "python truc.py" fonctionne. Sans doute pas terrible mais permet de débuger.

Répondre

Retourner vers « Gestion de la température »