Page 2 sur 7

Re: ecrire dans une BDD distante depuis mon PI

Posté : sam. 26 nov. 2016 12:59
par Bud Spencer
estelle a écrit : Apparemment je pourrais utiliser un service WEB REST/JSON mais je ne vois pas trop comment créer cette liaison PI/BDD
Le principe est simple. Tu appelles ton script (page) php via une requête HTTP POST en lui passant tes données en paramètres et c'est ton script php se charge des contrôles de cohérence et de l'écriture des données dans la base. En retour tu reçois une valeur de statut qui te permet de gérer les éventuelles erreurs coté client. Si tu veux récupérer des données, c'est le même principe via une requête HTTP GET et tu reçois en réponse toujours une valeur de statut ainsi que tes données au format JSON (très facile a traiter en python).

En python il y a plein de librairie pour utiliser des requêtes http. Une simple recherche google avec les termes 'python http rest' et 'php http rest' devrais t'aider

Re: ecrire dans une BDD distante depuis mon PI

Posté : lun. 28 nov. 2016 19:02
par estelle
Merci pour vos réponses
Dés que j'ai l’accès à FREE, je vais tester vos exemples
J'aurais certainement quelques questions....lol
A+
Estelle

Re: ecrire dans une BDD distante depuis mon PI

Posté : lun. 28 nov. 2016 20:55
par destroyedlolo
Si j'ai bien compris, tu as déjà un compte chez OVH et j'imagine qu'il dispose déja d'une base MySQL.
Dans ce cas, pourquoi en changer ?

Re: ecrire dans une BDD distante depuis mon PI

Posté : mar. 29 nov. 2016 06:31
par estelle
Je n'ai pas encore de BDD chez OVH
Pour l'instant j'ai la version la version Start10M
J'ai développé et testé mon appli avec BDD en Localhost (WAP)
Si FREE me donne satisfaction je resterai chez eux compte tenu que c'est gratuit
Autrement je prendrait une extension avec la BDD qui est payante
A+
Estelle

Re: ecrire dans une BDD distante depuis mon PI

Posté : ven. 2 déc. 2016 10:26
par estelle
Bonjour,

Voilà j'ai eu l’accès à FREE
Le site est chargée et la BDD également
Un peu galère car free n'accepte pas les PDO
Je vais utiliser Requests pour transférer mettre à jour ma BDD
Essai ce jour
A+
Estelle

Re: ecrire dans une BDD distante depuis mon PI

Posté : ven. 2 déc. 2016 19:10
par Bud Spencer
Les pdo dans le cadre de gros sites ou d’appli pro ou l’on peut avoir des centaines voire milliers de requêtes complexe et des connexions à des sgbd différents, ça peut s’avérer très utile et intéressant, mais pour des petites applis de stockage chez les hébergeurs 'low coast', c’est un peu de la branlette d’intello totalement futile. A mon sens, vouloir faire l'abstraction du type de SGBD sur lequel on travail et une énorme erreur quand on est en phase d'apprentissage.

Re: ecrire dans une BDD distante depuis mon PI

Posté : ven. 2 déc. 2016 19:40
par estelle
Coté PI cela à l'air de fonctionner:

Code : Tout sélectionner

 data = {"dateheure":Date_heure_sql, "tensionbatterie":Tension_batterie, "temperature":TT_RTC, "balance1":Poids[2],"balance2":Poids[3],"balance3":Poids[4],"balance4":Poids[5],"balance5":Poids[6],"balance6":Poids[7],"balance7":Poids[8]}
    r = requests.post("http://ruches.montminoises.free.fr/Rajout.php", data = data) 
    print ("Envoi mise à jour BDD: ",r.status_code) 
Réponse : Envoi mise à jour BDD: 200
Il y a bien accès au programme Rajout.php car j'avais oublié de mettre le point virgule aprés $balanc8=0
Il m'a bien remonté une erreur en ligne 27 dans R.text

Image

Coté PHP:

Code : Tout sélectionner

<?php
include("Connection.php"); 
$link=Connect();

$date=$_POST["dateheure"];
$batterie=$_POST["tensionbatterie"];
//for ($i=1; $i<25; $i++){
//  $balanc[$i]=$_POST["balance'$i'"];
//}
$balanc1=$_POST["balance1"];
$balanc2=$_POST["balance2"];
$balanc3=$_POST["balance3"];
$balanc4=$_POST["balance4"];
$balanc5=$_POST["balance5"];
$balanc6=$_POST["balance6"];
$balanc7=$_POST["balance7"];
$balanc8=0 //$_POST["balance8"];
$balanc9=0 //$_POST["balance9"];
$balanc10=0 //$_POST["balance10"];
$balanc11=0 //$_POST["balance11"];
$balanc12=0 //$_POST["balance12"];
$balanc13=0 //$_POST["balance13"];
$balanc14=0 //$_POST["balance14"];
$balanc16=0 //$_POST["balance15"];
$balanc16=0 //$_POST["balance16"];
$balanc17=0 //$_POST["balance17"];
$balanc18=0 //$_POST["balance18"];
$balanc19=0 //$_POST["balance19"];
$balanc20=0 //$_POST["balance20"];
$balanc21=0 //$_POST["balance21"];
$balanc22=0 //$_POST["balance22"];
$balanc23=0 //$_POST["balance23"];
$balanc24=0 //$_POST["balance24"];

// on sélectionne la base 
mysql_select_db('ruches_montminoises',$link); 
// on crée la requête SQL
$sql = "INSERT INTO Poids(id, dateheure, tensionbatterie, temperature, balance1, balance2, balance3, balance5, balance6, balance7, balance8, balance9, balance10, balance11, balance12, balance13, balance14, balance15, balance16, balance17, balance18, balance19, balance20, balance21, balance22, balance23, balance24) 
        VALUES('','".$date."','".$batterie."','".$temp."','".$balanc1."','".$balanc2."','".$balanc3."','".$balanc4."','".$balanc5."','".$balanc6."','".$balanc7."','".$balanc8."','".$balanc9."','".$balanc10."','".$balanc11."','".$balanc12."','".$balanc13."','".$balanc14."','".$balanc15."','".$balanc16."','".$balanc17."','".$balanc18."','".$balanc19."','".$balanc20."','".$balanc21."','".$balanc22."','".$balanc23."','".$balanc24."')";

// on envoie la requête 
mysql_query($sql,$link);
 // on ferme la connexion 
mysql_close($link); 
echo 'mise à jour BDD'
?>

Coté BDD, il ne se passe rien
La BDD n'évolue pas avec le nle enregistrement

Les champs de la base:
id
dateheure
tensionbatterie
temperature
balance1 balance2 balance3 balance4 balance5 balance6 balance7 balance8 balance9 balance10 balance11 balance12 balance13 balance14 balance15 balance16 balance17 balance18 balance19 balance20 balance21 balance22 balance23 balance24

Qu'en pensez vous ?

Re: ecrire dans une BDD distante depuis mon PI

Posté : ven. 2 déc. 2016 19:52
par estelle
Bud Spencer a écrit :Les pdo dans le cadre de gros sites ou d’appli pro ou l’on peut avoir des centaines voire milliers de requêtes complexe et des connexions à des sgbd différents, ça peut s’avérer très utile et intéressant, mais pour des petites applis de stockage chez les hébergeurs 'low coast', c’est un peu de la branlette d’intello totalement futile. A mon sens, vouloir faire l'abstraction du type de SGBD sur lequel on travail et une énorme erreur quand on est en phase d'apprentissage.
En localhost cela fonctionner bien !

Re: ecrire dans une BDD distante depuis mon PI

Posté : ven. 2 déc. 2016 20:25
par Bud Spencer
Fais un echo de ta var $sql dans ton script php pour voir la tète de la requête avant de l'exécuter ...

Re: ecrire dans une BDD distante depuis mon PI

Posté : ven. 2 déc. 2016 20:53
par destroyedlolo
Salut,

Content de voir que ca avance :)

Le problème est que tu ne testes pas si ca fonctionne et dans le cas contraire, la cause des échecs.

Ainsi, on devrait avoir

Code : Tout sélectionner

// on sélectionne la base 
if( !mysql_select_db('ruches_montminoises',$link) )
	die ('Sélectionner la bdd : ' . mysql_error());
Idem avec l'ouverture de la base (mais on ne l'a pas dans ton code) et mysql_query().

De plus, ton schéma de base de donnée serait à mon avis a revoir :
  1. j'ai l'impression que le type de donnée n'est pas tip top : je veux dire, les poids des valeurs ... là tu insères du texte.
  2. Tu insères les poids de toutes tes ruches dans un unique enregistrement. Ce n'est pas une bonne idée car va falloir que tu modifie ton schema si rajoute une ruche : ca sera pire si tu en enleve une car il faudra aussi bidouiller le contenu de la base.
    Perso, je ferais plutot une table qui contient l'id de la ruche et son poids, et un webservice du genre :

    Code : Tout sélectionner

    InsertPoids(int id_ruche, poids)
    L'avantage est que tu es asynchrones par rapport aux mesures ... donc les ruches peuvent envoyer leurs mesures quand elles veulent et tu peux en ajouter/supprimer autant que tu veux.
    L'inconvénient est que tu as pas mal d'appel de WS, mais vu le nombre réduit de ruches, ca ne gène pas à mon avis.
Pour les PDO, je suis d'accord, c'est dommage car ... autant prendre les bonnes habitudes dès le début ;)

A+