Page 1 sur 3

[RESOLU] Lecture sonde depuis interface php

Posté : mar. 20 janv. 2015 23:55
par lawfix
Bonjour à tous,

je commence un peu à comprendre le fonctionnement de notre petite bête et je suis en train de faire ma plateforme domotique... ( c'est un bien grand mot ).

J'ai essayé de lire ma sonde via la ligne de commande, celle ci fonctionne parfaitement.

Par contre, autant j'ai réussi à comprendre comment mettre en place un script pour faire le lien php en prenant sur un exemple, mais appliqué au miens ça ne passe pas...

Je m'explique. J'ai modifié, complété le code suivant :

Code : Tout sélectionner

<?php
	ob_start();

	define(LANGUAGE, "english");


	$temp = shell_exec('cat /sys/bus/w1/devices/28-00141312f0ff#');
	$temp = round($temp / 1000, 1);

	$uptimedata = shell_exec('uptime');
	$uptime = explode(' up ', $uptimedata);
	$uptime = explode(',', $uptime[1]);
	$uptime = $uptime[0].', '.$uptime[1];

	include 'localization/'.LANGUAGE.'.lang.php';

?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
		 <link rel="stylesheet" href="pi/style.css" />
        <title>Style du tableau de bord pour la temp & conso</title>
		
		<script src="javascript/raphael.2.1.0.min.js"></script>
	    <script src="javascript/justgage.1.0.1.min.js"></script>
		
		<script>
	    	function checkAction(action){
				if (confirm('<?php echo TXT_CONFIRM; ?> ' + action + '?'))
				{
					return true;
				}
				else
				{
					return false;
				}
	    	}

			window.onload = doLoad;

			function doLoad()
			{
			setTimeout( "refresh()", 30*1000 );
			}

			function refresh()
			{
			window.location.reload( false );
			}
	    </script>
    </head>
	
    <body>
        
		<div id="logo">
		<div id="contenu">
		<img id="logo" src="images/raspberry.png"><p>rasphome</p>
		
            <ul id="nav">
                <li><a href="#">Accueil</a></li>
                <li><a href="tempconso.php">Température et consommation</a></li>
				<li><a href="#">Statistiques</a></li>
                <li><a href="dashpi.php">Raspdashboard</a></li>
            </ul>

<?php if(isset($temp) && is_numeric($temp)){ ?>
					<div id="tempgauge"></div>
					<script>
						var t = new JustGage({
						    id: "tempgauge",
						    value: <?php echo $temp; ?>,
						    min: 10,
						    max: 29,
						    title: "<?php echo TXT_TEMPERATURE; ?>",
						    label: "°C"
					    });
					</script>
<?php } ?>
					</body>
</html>
Malheureusement la température reste à 0... et là je comprends pas trop pourquoi.

Si quelqu'un pouvait m'aiguiller :)

Merci par avance

Re: Lecture sonde depuis interface php

Posté : mer. 21 janv. 2015 08:00
par domi
Bonjour,

Déjà, sans entrer dans les détails, il faut savoir que lorsque PHP fait un "shell_exec", cette commande est effectuée par le USER "www-data".

Est-ce que ce USER à les droits pour faire le "cat /sys/bus/w1/devices/......." ?

Re: Lecture sonde depuis interface php

Posté : mer. 21 janv. 2015 08:14
par vague nerd
Bonjour.

Quel serveur utilisez vous ? Apache ?

Cdt.

Re: Lecture sonde depuis interface php

Posté : mer. 21 janv. 2015 08:18
par lawfix
Bonjour à tous

Alors le user www-data bénéficie des droits du root car je les avais mis à jour en suivant un tuto qui prévoyait le cas des droits d'utilisateurs.

Pour le serveur j'utilise nginx car après conseils auprès d'autres personnes j'ai fini par prendre nginx au lieu d'apache 2.

Merci pour vos aides respectives :)

Re: Lecture sonde depuis interface php

Posté : mer. 21 janv. 2015 08:20
par vague nerd
Le user www-data est celui utilisé par apache pour l'exécution des scripts.
Savez-vous quel user est utilisé par votre serveur web pour exécuter des scripts externes ? Cet utilisateur a-t-il les droits sur vos scripts ?

Edit : à priori, c'est ça, et ça se passe dans dans nginx.conf et php-fpm.conf, selon google.

Cdt.

Re: Lecture sonde depuis interface php

Posté : mer. 21 janv. 2015 08:26
par lawfix
En fait c'est le même utilisateur pour nginx si j'ai bien compris.

Donc je n'ai plus qu'à reverifier les droits d'utilisateur si j'ai bien saisi.

Je pensais que le soucis venait d'ailleurs, car j'ai même tenté un script python qui ne fait que afficher la température sur une ligne mais ça ne changeait rien.

Je regarde de nouveau ce soir et je vous tient au courant.

Merci

Re: Lecture sonde depuis interface php

Posté : mer. 21 janv. 2015 08:30
par vague nerd
En fait c'est le même utilisateur pour nginx si j'ai bien compris.
Je n'ai pas compris. Vous voulez dire que le user par défaut est aussi www-data ? A priori non...

Cdt.

Re: Lecture sonde depuis interface php

Posté : mer. 21 janv. 2015 08:37
par lawfix
J'ai suivi ce tuto http://raspbian-france.fr/installer-ngi ... raspberry/

Et il parle du même utilisateur que celui que vous avez cité, c'est en partie pour ça que j'ai répondu oui :/

Re: Lecture sonde depuis interface php

Posté : mer. 21 janv. 2015 10:05
par vague nerd
Si vous avez réussi a suivre le tuto, le site marche, votre page php s'affiche (merci de confirmer).
Par contre, le script

Code : Tout sélectionner

cat /sys/bus/w1/devices/28-00141312f0ff#
retourne '0'. C'est ça ?

Lancé en ligne de commande, que retourne votre script ?

Code : Tout sélectionner

cat /sys/bus/w1/devices/28-00141312f0ff#
Il affiche une chaine de caractère convertible en numérique ?

Le user www-data a-t-il le droit de lire dans /sys/bus/w1/devices ?
Dans /sys/bus/w1/devices/28-00141312f0ff# ?
(Sinon, même opération que dans le tuto pour changer les droits)

Cdt.

Re: Lecture sonde depuis interface php

Posté : mer. 21 janv. 2015 14:15
par lawfix
Alors je peux répondre à une partie des questions.

Pour le script il renvoi un zéro effectivement au lieu de la température.

Le site en php fonctionne bien autrement, chaque modification est bien prise en compte.

Si j'execute en ligne de commande cela me renvoi deux lignes de chaînes hexa convertible en valeur numérique effectivement sur la deuxième ligne.

J'ai créer un code python pour que ça n'affiche que la valeur numérique (j'avais remplacé le code par '' /var/python temp.py ''
Et pareil ça me renvoi un zéro.

Pour les droits je vais vérifier ce soir.

Merci de prendre du temps pour m'aider