Fabriquer un objet connecté

Accueil  Nouvelles  Liens  Forum
Programme Web

Ce programme en PHP est à déposer sur le serveur sous le nom foc.php.

Il permet de traiter les requêtes effectuées par la carte ESP8266 (GET et/ou PATCH).

Dans le cas d'une requête PATCH, le programme met à jour les informations en provenance d'un capteur dans le fichier data.json également sur le serveur Web.

Pour une requête GET, le programme retourne la valeur lue dans le fichier data.json vers la carte ESP8266.

Dans les deux cas, si la variable à écrire ou à lire n'est pas encore dans le fichier data.json, elle est créée dans le fichier.

La requête peut également provenir d'un navigateur pour la consultation des données (fournies par une requête PATCH) ou pour la modification des valeurs (destinées à une requête GET).

Les boutons "DEL" permettent de supprimer une variable qui n'est plus utilisée

Le bouton "Mise à jour des données" permet la mise à jour de la valeur des données de la dernière requête PATCH.

<?php
//nom du programme foc.php
if ($_SERVER["HTTP_USER_AGENT"]=="ESP8266HTTPClient")
// Client ESP8266
{	
	if ($_SERVER['REQUEST_METHOD']=="GET")
	{
	//lecture du flux d'entrée
	$data = file_get_contents('php://input');
	$gtab=json_decode($data,true);//création du tableau du GET
	$file = fopen("data.json", "r") or die("can't open file");//création du tableau des données du fichier data.json
	$ligne = fgets($file); // On lit la ligne du fichier
	fclose($file);
	$dtab=json_decode($ligne,true);//création du tableau data.json
	//ajout des deux tableaux (avec + la valeur du premier tableau est conservée)
	$newtab=$dtab + $ptab;
	//création du JSON
	$newdata=json_encode($newtab);

	echo $newdata;// valeur en retour de la requette (l'ensemble du json)
	}
	if ($_SERVER['REQUEST_METHOD']=="PATCH")
	{
	$data = file_get_contents('php://input');//flux dans $data
	$ptab=json_decode($data,true);//création du tableau associatif donné par le PATCH
	$file = fopen("data.json", "r") or die("can't open file");//création du tableau des données du fichier data.json
	$ligne = fgets($file); // On lit la ligne du fichier
	fclose($file);
	$dtab=json_decode($ligne,true);//création du tableau associatif du fichier data.json
	$newtab=$ptab + $dtab;//ajout des deux tableaux (avec + la valeur du premier tableau est conservée
	$newdata=json_encode($newtab);//création du JSON
	//ecriture des données 
	$file = fopen("data.json", "w") or die("can't open file");
	fwrite($file, $newdata);// ecriture de la donnée dans le fichier
	fclose($file);
	}
	exit();
}//fin ESP

/*
elseif ($_SERVER["HTTP_USER_AGENT"]=="Java/1.8.0_92")
// Client Java
{	
	if ($_SERVER['REQUEST_METHOD']=="GET")
	{
	$file = fopen("data.json", "r") or die("can't open file");
	$ligne = fgets($file); // On lit la première ligne 
	fclose($file);
	header("Location: data.json");
//	echo $ligne;// valeur en retour de la requette
	}
	if ($_SERVER['REQUEST_METHOD']=="PATCH")
	{
	$file = fopen("data.json", "w") or die("can't open file");
	$data = file_get_contents('php://input');
	fwrite($file, $data);// ecriture de la donnée
	fclose($file);
	}
}
*/
else
{
// Client navigateur
if (!empty($_POST))// modification par le navigateur
	{
	$ligne=$_POST['Json'];
	// Le nouveau JSON est dans le $_POST => savegarde
    $file = fopen("data.json", "w") or die("can't open file");
	fwrite($file, $ligne); 
	fclose($file);
	} 
	else //première execution du fichier (pas de $_POST => affichage du JSON)
	{
		if (file_exists("data.json"))
		{
		$file = fopen("data.json", "r") or die("can't open file");
		$ligne = fgets($file); // On lit la ligne du fichier
		fclose($file);
		}
	}
}//fin client navigateur
?>
<!doctype html>
<html lang="fr">
<head>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<title>Echanges avec ESP8266</title>
</head>
<style type='text/css'>
.del{font-size:22px;text-align: center;color:red;width: 60px;height: 40px;}
input{font-size:22px;text-align: center;width: 200px;height: 40px;}
input#position{width: 60px;}
input#idjson2{width: 400px;}
#texte{font-size:22px;margin-top: 5px; text-align:center}
</style>
<body>
<div id ='texte'>
OBJET CONNECTÉ<br><br>
<span id="cible"></span>
</div>
</body>
</html>

<script type="text/javascript">
//recuperation du tableau en js
var stJson = '<?php echo $ligne; ?>';
tab=JSON.parse(stJson);

texte="";
for (var key in tab)
{
if ((tab[key]=="on") || (tab[key]=="off"))
	{
	texte +='<input type="text"  value="'+key+'"> ';
	texte +='<input id="id'+key+'" type="button"  name="'+key+'" value="'+tab[key]+'" onclick="modif(this.name);"> ';
	texte +='<input class="del" type="button"  name="'+key+'" value="DEL" onclick="sup(this.name)"><br>';
	}
if ((tab[key]!="on") && (tab[key]!="off"))
	{
	texte +='<input type="text"  value="'+key+'"> ';
	texte +='<input  type="text"  value="'+tab[key]+'" > ';
	texte +='<input class="del" type="button" name="'+key+'" value="DEL" onclick="sup(this.name)"><br>';
	}
}
texte +='<form id="Form1" method="post" action="../"><input id="idjson1" type="hidden" name="Json"></form>';
texte +='<input id="idjson2" type="button" value="Mise à jour des données " OnClick="newDoc()">';
document.getElementById("cible").innerHTML=texte;

function modif(cle)// modif des valeurs et sauvegarde
{
	if (tab[cle]=="off")tab[cle]="on"; else tab[cle]="off";//change dans le tableau
document.getElementById("id"+cle).value=tab[cle];//change la valeur à l'écran
document.getElementById("idjson1").value=JSON.stringify(tab);//change dans le formulaire form1 
document.getElementById("Form1").submit();//pour réexecuter la page avec POST pour sauvegarde dans fichier
}
function newDoc() {
window.location.assign(window.location.href);//recharge la page sans POST
}
function sup(cle)//supprime un élément du tableau
{
delete(tab[cle]);
document.getElementById("idjson1").value=JSON.stringify(tab);//change dans le formulaire form1 
document.getElementById("Form1").submit();//pour réexecuter la page avec POST pour sauvegarde dans fichier
}
//-->
</script>


Date de création : 04/03/2017 @ 16:01
Dernière modification : 04/03/2017 @ 16:01
Catégorie : Projet 2
Page lue 6235 fois
Haut
freeguppy.org © 2004-2017 En savoir plus ...

Document généré en 0.03 seconde