Page 1 sur 3

Lire dans une BDD distante depuis mon PI

Posté : mar. 12 sept. 2017 18:35
par estelle
Bonjour,

Je veux lire avec mon PI le contenu du premier enregistrement de ma base Echange (hébergé chez Free) qui contient deux champs (Camera, Eclairage)
Qui peut m'aider
Estelle

Re: Lire dans une BDD distante depuis mon PI

Posté : mar. 12 sept. 2017 20:21
par maxty01
Bonsoir,

Peux-tu nous donner plus de détails techniques.

Bonne soirée,

Re: Lire dans une BDD distante depuis mon PI

Posté : mer. 13 sept. 2017 08:10
par estelle
Plus de détails techniques:
Je suis apicultrice et je me sers du PI pour surveiller le poids des ruches (essaimage, vol de ruches, etc..) via des cartes d'entrées analogiques
Le PI écrit toute les 30mn dans la BDD et envoie des alertes sur mon site et un SMS
Le PI n'est pas serveur (je ne veux pas ouvrir de port sur ma Box Free)
Le PI est connecté sur ma Box par Ethenet
J'ai crée un site chez Free et un BDD (MySQL) http://ruches.montminoises.free.fr/index.php
Dans le sens PI => FREE pas de problème

En fait l'idée finale est de pouvoir piloter des sorties TOR, caméra du PI depuis mon site par l’intermédiaire des champs Camera, Eclairage que je mets à 1 par le site
Si le champ Caméra est à 1, le PI active la caméra nocturne et s'il y a effraction pouvoir activer une sortie (éclairage, message,etc...)

Il y a certainement plus simple ....
A+

Re: Lire dans une BDD distante depuis mon PI

Posté : mer. 13 sept. 2017 09:22
par nexen
Bonjour,

Miam le miel :)

ceci étant je ne comprends pas ou est ton problème : Tu arrive à écrire dans ta base de donnée Free (si j'ai bien compris) via ton Rasp. tu fait donc un 'Insert' SQL, et maintenant tu désire faire un 'Select'. La procédure est donc identique avec juste un appel à une fonction qui dépend de ton langage (PHP,Python, Perl ...)

Cordialement.
Nexen

Re: Lire dans une BDD distante depuis mon PI

Posté : mer. 13 sept. 2017 09:56
par Bud Spencer
On avait déja parlé de ca autrefois quand tu voulais recuperer d'autre valeur dans ta base.
La réponse que je t'avais proposé est identique a celle que je te ferais aujourd'hui, a savoir
utiliser un script php coté hebergeur de facon a recuper tes données au format json via une requete
http.

exemple de code php pour recuperer les valeur des champs Camera et Eclairage du premier enregistrement de la table Echange:

$cnx = mysqli_connect('ton_db_host','ton_db_user','ton_db_password','ton_db_dbname')
or die('erreur cnx !');

$qry = "SELECT Camera, Eclairage FROM Echange LIMIT 0, 1";
$res =mysqli_fetch_assoc(mysqli_query($cnx,$qry));
mysqli_close($cnx);
echo json_encode($res);

Re: Lire dans une BDD distante depuis mon PI

Posté : mer. 13 sept. 2017 14:00
par estelle
Bud Spencer a écrit :On avait déja parlé de ca autrefois quand tu voulais recuperer d'autre valeur dans ta base.
La réponse que je t'avais proposé est identique a celle que je te ferais aujourd'hui, a savoir
utiliser un script php coté hebergeur de facon a recuper tes données au format json via une requete
http.

exemple de code php pour recuperer les valeur des champs Camera et Eclairage du premier enregistrement de la table Echange:

$cnx = mysqli_connect('ton_db_host','ton_db_user','ton_db_password','ton_db_dbname')
or die('erreur cnx !');

$qry = "SELECT Camera, Eclairage FROM Echange LIMIT 0, 1";
$res =mysqli_fetch_assoc(mysqli_query($cnx,$qry));
mysqli_close($cnx);
echo json_encode($res);
Ok c"est la même technique que pour écrire avec un insert
Ce qui fonctionne bien pour récupérer une variable dans une page PHP
Sauf que je veux récupérer cette valeur dans le PI et dans un prg écrit en Python
C'est sympa de m'aider
A+

Re: Lire dans une BDD distante depuis mon PI

Posté : mer. 13 sept. 2017 20:50
par Bud Spencer
estelle a écrit :...
Ce qui fonctionne bien pour récupérer une variable dans une page PHP
Sauf que je veux récupérer cette valeur dans le PI et dans un prg écrit en Python
J'ai parfaitement compris ce que tu cherches à faire Estelle.

Si tu mets le code que je t'ais écrit dans une simple page php, quand tu l'appelleras depuis un navigateur, tu afficheras normalement une chaine de caractère structurée au format json qui contiendra tes données. La dessus on est d'accord. Par contre si tu fais l'appel depuis ton programme python (en utilisant de mémoire la lib requests) , tu vas pouvoir récupérer tes valeurs et les placer dans des variables pour ensuite en faire ce que tu veux.

Cela s'apparente à la fonction GET ce que l'on appelle un web service (en plus simple). Cela te permet de récupérer des données pour ton programme depuis ta database sans avoir a t'y connecter a distance et sans l'exposer.

Re: Lire dans une BDD distante depuis mon PI

Posté : jeu. 14 sept. 2017 09:11
par estelle
Comme pour écrire dans la base:

data = {"datealerte":Date_heure_sql, "alerte":'Batterie OK', "ruche":'0', "poidstension":Tension_batterie}
try:
r = requests.post("http://ruches.montminoises.free.fr/RajoutHisto.php", data = data)
print (r.text)
except:
print("Requests: probleme de transmission tension batterie vers serveur")

Sauf que là je doit récupérer les données....????,

Re: Lire dans une BDD distante depuis mon PI

Posté : jeu. 14 sept. 2017 21:37
par Bud Spencer
estelle a écrit :Comme pour écrire dans la base:

data = {"datealerte":Date_heure_sql, "alerte":'Batterie OK', "ruche":'0', "poidstension":Tension_batterie}
try:
r = requests.post("http://ruches.montminoises.free.fr/RajoutHisto.php", data = data)
print (r.text)
except:
print("Requests: probleme de transmission tension batterie vers serveur")

Sauf que là je doit récupérer les données....????,
Exactement le même modèle sauf que pour récupérer des données tu vas utiliser une requête du type request.GET sur ton url et non pas un request.POST

tu peux trouver un peu plus d'info ici -> http://docs.python-requests.org/en/mast ... uickstart/

Re: Lire dans une BDD distante depuis mon PI

Posté : ven. 15 sept. 2017 08:53
par estelle
Ok pour le GET j'avais compris

Par le GET je lance une page PHP avec interrogation de la BDD et résultat dans un ECHO
Au niveau du PI réponse dans r.text

J'ai juste ?
A+