Page 4 sur 7

Re: ecrire dans une BDD distante depuis mon PI

Posté : lun. 5 déc. 2016 12:32
par estelle
Bonjour,

Pour l'instant, je ne modifie pas le programme qui tourne actuellement car je ne suis pas encore assez aguerrie ......

Par contre sur ma page "index" je reçois des posts du PI que j'aimerais afficher en temps réel
En fait c'est des alarmes
J'ai essayé un truc mais cela ne marche pas

Code : Tout sélectionner

<?php
$date=$_POST["datealerte"];
$alarme=$_POST["alerte"];
$num_ruche=$_POST["ruche"];
$pt=$_POST["poidstension"];
//if (($num_ruche==0)and($alarme!=0)){
    $message ="Alerte : $date $alarme : $pt V";//}
//else if (($num_ruche!=0)and($alarme!=0)){
//    $message ="Alerte : ,$date,' ',$alarme, ruche: ,$num_ruche, perte de poids: ,$pt,kg";}
//else {$message='Pas alarme';}
echo $date;
echo $alarme;
echo $num_ruche;
echo $pt;

?>

<!doctype html>
<html lang="en">
<head>
  <meta http-equiv="Refresh" content="5; url=index.html">
	<meta charset="utf-8" />
	<title>Rucher Montminois</title>
	<link rel="stylesheet" href="styles.css" type="text/css" media="screen" />
	<link rel="stylesheet" type="text/css" href="print.css" media="print" />  
	<!--[if IE]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
</head>
<body>
<div id="wrapper"><!-- #wrapper -->

	<header><!-- header -->
		<div id="headerlogo"><img src="images/abeille1.png" alt="" /></div>
		<h1>Rucher Montminois</h1>
		<h2>Bonjour et bienvenue sur le site du Rucher Montminois!</h2>
    <h2><?php echo $message ?></h2>
	</header><!-- end of header -->
Vous pouvez m'aider
Merci
Estelle

Re: ecrire dans une BDD distante depuis mon PI

Posté : lun. 5 déc. 2016 15:56
par destroyedlolo
Bonjour,

C'est la page que tu appele par ton webservice ?
Dans ce cas, les echo sont renvoyés vers le PI.
Si tu veux connaitre le resultat, je te conseillerai de les sortir dans un log ...
file_put_contents () sera ton amis (sinon, il y a une autre fonction qui va recopier la réponse a la fois sur stdout et sur un fichier, mais je ne l'ai plus sous la main).

A+

Re: ecrire dans une BDD distante depuis mon PI

Posté : lun. 5 déc. 2016 16:45
par estelle
non c'est ma page index

Je souhaite rafraîchir un message sur ma page index avec les variables post que m'envoyer le PI

En d'autre termes je veux que lorsque j'affiche une page et quelle reste affichée, si des variables viennent du PI, le message de la page évolue

$message ="Alerte : $date $alarme : $pt V";

<header><!-- header -->

<h2><?php echo $message ?></h2>

</header><!-- end of header -->

Je sais pas si je suis assez clair

Re: ecrire dans une BDD distante depuis mon PI

Posté : lun. 5 déc. 2016 18:00
par destroyedlolo
Si très ;)

Malheureusement, ca ne marche pas comme ca : tes $date, $alarme et $pt proviennent du tableau $_POST[] ... qui est local à la sessions du webservice provenant du PI.
Ici, tu n'est plus dans la même session, tu es dans celle issue de ton navigateur, donc $_POST[] ne correspondra pas.

Il faut donc que tu passes par un intermédiaire : soit par un table dédiée en BDD, soit (plus efficace), en mémoire partagée si ton hébergeur le permet.

Re: ecrire dans une BDD distante depuis mon PI

Posté : lun. 5 déc. 2016 18:17
par estelle
J'ai essayé cela

Image

J'ai bien compris que l'envoi post est sur unn tour de cycle c'est pour cela que je teste le contenu des post
S'il est null je ne rafraichie pas ma variable intermédiaire

Re: ecrire dans une BDD distante depuis mon PI

Posté : lun. 5 déc. 2016 18:23
par estelle
Dans le PI j'ai fait cela : r.text

Code : Tout sélectionner

data = {"datealerte":Date_heure_sql, "alerte":'Tension batterie', "ruche":'0', "poidstension":Tension_batterie}
      r = requests.post("http://ruches.montminoises.free.fr/RajoutHisto.php", data = data) 
      print (r.text)
      r = requests.post("http://ruches.montminoises.free.fr/index.php", data = data)
      print (r.text)
Justement pour afficher le passage dans index
Vu sur la recopie d'écran

Re: ecrire dans une BDD distante depuis mon PI

Posté : lun. 5 déc. 2016 20:19
par Bud Spencer
Un timer interval sur une commande ajax qui va chercher la dernière tension enregistrée dans les db_log ...

Re: ecrire dans une BDD distante depuis mon PI

Posté : lun. 5 déc. 2016 20:29
par estelle
oui j'ai lu un truc comme cela avec AJAX

Tu peux m'aider ?

Re: ecrire dans une BDD distante depuis mon PI

Posté : lun. 5 déc. 2016 20:31
par destroyedlolo
C'est exactement ce que je disais : les valeurs sont affichées sur le PI car le $_POST est rempli dans sa session, alors qu'il n'y a pas d'erreur sur page web car ce n'est pas la même session et donc $_POST est vide.
estelle a écrit :J'ai bien compris que l'envoi post est sur unn tour de cycle c'est pour cela que je teste le contenu des post
S'il est null je ne rafraichie pas ma variable intermédiaire
Ca ne marche pas non plus car les variables, même globales, restent dans la session courante.

Quelques réponses là avec des exemples de code : http://stackoverflow.com/questions/5605 ... -processes

Re: ecrire dans une BDD distante depuis mon PI

Posté : mar. 6 déc. 2016 08:50
par Bud Spencer
estelle a écrit :oui j'ai lu un truc comme cela avec AJAX

Tu peux m'aider ?

Le principe est très simple a mettre en œuvre. Il suffit d'écrire un script PHP qui récupère la dernière tension mesurée dans la base et si elle est inferieur a une valeur paramètre, ca retourne 'Alarme Batterie'.
Coté client, dans ta page d'index, juste un petit script en JS qui fait une requete httpRequest sur le script serveur avec un setinterval et tu rattaches le résultat dans l'élément DOM concerné pour l'affichage.

Tu peux aussi retourner simplement la tension depuis ton script php et faire la comparaison dans le script de la page d'accueil, ce qui ne change pas grand chose.

En fait c'est comme si tu incluais la lecture de la valeur dans ta page d'index pour gérer l'affichage de l'alarme, sauf qu'avec ajax, tu n'es pas obligé de recharger la page. C'est un script JS qui se charge d'aller récupérer périodiquement la valeur et il met a jour juste l'élément DOM concerné (un <div> ou un <p> par exemple)

Si personne ne le fait, je veux bien te faire un bout de code, mais perso, je n'ais plus de serveur php et ca m'obligerais à en réinstaller juste pour tester ca. Si j'en trouve le temps dans la semaine et que tu n'as pas la solution, je le ferais.