Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

Envoyer des données GPIO en HTTP vers mon serveur free
#1

Bonjour,

J'avance doucement mais j'avance.
J'ai utilisé un tuto pour récupérer une distance avec un capteur ultrason à partir des GPIO et d'un programme python.
Maintenant je souhaite envoyer le résultat "d"
dans le serveur free "xxxx.free.fr"
dans ma base mysql dans une table "mesure" que j'ai créé avec un champ "distance"
le programme php "rpimesure.php" situé dans "xxx.free.fr/php" permet de charger la table mysql
le programme donne les autorisations de connexion

J'ai fait comme cela avec ma box domotique zibase pour exporter des températures de sonde et cela marche sans problème.
http://xxxx.free.fr/php/rpimesure.php?distance=d

en utilisant un exemple du web j'ai créé une ligne dans un program python en remplaçant d par une valeur de 1 pour ne pas avoir la gestion de la variable ce qui donne
httprequest.get('http://xxxx.free.fr/php/rpimesure.php?distance=1')
mais cela ne marche pas

les autres exemples m'apparaissent bien compliqués pour un si petit besoin

pour le moment je souhaite centralisé mes données sur la base MySQL existante et plus tard dans le rpi ou un disque dur lié.
Répondre
#2

Pour ma culture, tu as utilisé quel script et quel capteur pour mesurer la distance ?

Pour ton problème, qu'est ce qui ne fonctionne pas ?
- Ta page n'est pas appelée ?
- Ou ta page n'a pas le bon paramètre ?

Histoire de situer le problème

Serial Organisateur d'aPIro
Bloggeur Bidouilleur
Ydle, domotique DIY basée sur un raspberry pi
Répondre
#3

Bah, je dirai surtout que les versions de php et sql fournies pour les pages perso de free sont antédiluviennes.

Perso, je tenterai d'abord de faire fonctionner ton script sur une machine php+mysql sur laquelle tu as la main (ton ordi principal ou le rpi (mais tu ne pourras pas tester l'envoi)), et tu teste. Et si ça marche pas, tu as des logs d'erreur qui sont en général parlants (/var/log/syslog ou /var/log/apache2/error.log et access.log).

Vouloir cash envoyer d'un raspberry vers un serveur freeperso, en passant par moultes firewall et autres machines sur le trajet, c'est optimiste ! Big Grin Déjà, en sortie de ton python, ça donne quoi, et ça envoie comment chez free ? Un POST web (port 80) avec un ajout de parametre ?distance=(valeur) dans l'url, c'est ça ?
Répondre
#4

Merci pour vos réponses.

D'abord effectivement j'avais omis de dire que httprequest n'était pas reconnu.

Pour info: le capteur ultra-son est le HC-SR04

Pour le php et MySQL de free les programmes php fonctionnent avec la zibase et les tables se chargent correctement, donc ce n'est pas un souci pour le moment, c'est uniquement l'appel http de python vers une table d'un serveur, distance est le champs de la table, et on veut enregistrer une nouvelle valeur d (pour commencer j'utilise la valeur 1 pour d)
http://xxxx.free.fr/php/rpimesure.php?distance=d

Entre temps j'ai utilisé cet exemple avec urllib et urllib2
import urllib,urllib2

//URL du formulaire
url = 'http://www.toto.com/sendjoke.php'

//Champ et valeur du formulaire
params = urllib.urlencode({'blague': 'toto va à l'école'})

//Envoi de la requête
req = urllib2.Request(url, params)

//Récupération de la réponse du serveur
response = urllib2.urlopen(req)
data=response.read()
html= etree.HTML(data)

pour le moment cela à l'air de bloquer à la ligne response = urllib2.urlopen(req)
urllib2.URLError; (urlopen error [errn0 -2] Name ou service not known)
si la requête s'est bien passé j'attends la réponse "200 ok"
je vais vérifier le programme php je vous tiens au courant.
Répondre
#5

Je viens de vérifier.
Si j'exécute le programme php à partir du navigateur
commande: http://xxxx.free.fr/php/rpimesure.php?distance=1
la table est bien alimentée
donc pas de souci de ce côté

si je supprime les 3 lignes pour la réponse
plus de message d'erreur
mais pas de table alimentée
Répondre
#6

voilà une réponse avec socket qui marche (ref :www.siteduzero.com)

import socket # on importe le module, TRES IMPORTANT !

#creation de la socket puis connexion
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("www.siteduzero.com",80))

# preparation de la requete
Request = "GET / HTTP/1.1\r\n"
Request+= "Host: www.siteduzero.com\r\n"
Request+= "Connection: Close\r\n\r\n"

# envoi puis reception de la reponse
s.send(Request)
data = s.recv(15)
print data # on affiche la reponse
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)