[RESOLU]ecrire dans une BDD distante depuis mon PI

Paramétrer le Raspberry Pi B/B+ pour se connecter via Ethernet ou une clé WiFi USB

Modérateurs : Francois, maxty01

Bud Spencer
Raspinaute
Messages : 906
Enregistré le : lun. 15 août 2016 21:38

Re: ecrire dans une BDD distante depuis mon PI

Message par Bud Spencer » sam. 26 nov. 2016 12:59

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
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

estelle
Raspinaute
Messages : 141
Enregistré le : jeu. 24 déc. 2015 17:14

Re: ecrire dans une BDD distante depuis mon PI

Message par estelle » lun. 28 nov. 2016 19:02

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

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

Re: ecrire dans une BDD distante depuis mon PI

Message par destroyedlolo » lun. 28 nov. 2016 20:55

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 ?
  • 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.

estelle
Raspinaute
Messages : 141
Enregistré le : jeu. 24 déc. 2015 17:14

Re: ecrire dans une BDD distante depuis mon PI

Message par estelle » mar. 29 nov. 2016 06:31

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

estelle
Raspinaute
Messages : 141
Enregistré le : jeu. 24 déc. 2015 17:14

Re: ecrire dans une BDD distante depuis mon PI

Message par estelle » ven. 2 déc. 2016 10:26

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

Bud Spencer
Raspinaute
Messages : 906
Enregistré le : lun. 15 août 2016 21:38

Re: ecrire dans une BDD distante depuis mon PI

Message par Bud Spencer » ven. 2 déc. 2016 19:10

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.
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

estelle
Raspinaute
Messages : 141
Enregistré le : jeu. 24 déc. 2015 17:14

Re: ecrire dans une BDD distante depuis mon PI

Message par estelle » ven. 2 déc. 2016 19:40

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 ?

estelle
Raspinaute
Messages : 141
Enregistré le : jeu. 24 déc. 2015 17:14

Re: ecrire dans une BDD distante depuis mon PI

Message par estelle » ven. 2 déc. 2016 19:52

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 !

Bud Spencer
Raspinaute
Messages : 906
Enregistré le : lun. 15 août 2016 21:38

Re: ecrire dans une BDD distante depuis mon PI

Message par Bud Spencer » ven. 2 déc. 2016 20:25

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 ...
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

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

Re: ecrire dans une BDD distante depuis mon PI

Message par destroyedlolo » ven. 2 déc. 2016 20:53

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+
Modifié en dernier par destroyedlolo le ven. 2 déc. 2016 21:22, modifié 2 fois.
  • 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.

Répondre

Retourner vers « Le réseau sur le Raspberry Pï »