Pages: [1]   Go Down
Author Topic: ftp client  (Read 1638 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Edison Member
*
Karma: 9
Posts: 1655
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour tout le monde,
je n'arrive pas a retrouver un topic à propos d'un ftp client assez light.
le but du jeu consiste dans un petit projet météo.

1- récupération dhcp pour se connecter de n'importe ou------>OK
2- récupération des données via des capteurs------>OK
3A- envoi des données vers une bdd si adsl ok------>OK
3B- écriture des données sur SD en cas de coupure adsl------>OK
4- envoi du fichier log si adsl retrouvé via FTP ou SCP vers le server apache qui va retraité les données vers la bdd

c'est pour le 4 ou je bloque

il y aurait bien une solution qui consisterait en la lecture du fichier de log, renvoyer les données une par une, mais trop long.
Logged

Offline Offline
Edison Member
*
Karma: 9
Posts: 1655
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour,
bon après quelques recherches et certaines heures, j'arrive a me connecter au ftp.
par contre la galère est toujours pour envoyer le fichier vers le ftp.
voici le code pour le moment

Code:
void FTP()
{
  if (clientftp.connect()) {
    Serial.println("Command connected");
    clientftp.write("USER login\r\n");
    clientftp.write("PASS mdp\r\n");
    clientftp.write("SYST\r\n");
    clientftp.write("PASV\r\n");
     File datafile = SD.open("datalog.csv", FILE_READ);
     if (datafile) {
         clientftp.write("STOR datalog.csv  /~pilote/datalog.csv\r\n"); 
     }  else{
     Serial.println("Erreur ecriture datalog.csv");
     }
  } else{
    Serial.println("echec");
  }
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

4- envoi du fichier log si adsl retrouvé via FTP ou SCP vers le server apache qui va retraité les données vers la bdd
Oublie tout de suite l'envoi par SCP, Secure Copy demande de crypter les données, avec un arduino c'est pas envisageable.

Pour le ftp c'est un peu comme du http, il faut envoyer les bonnes commandes pour s'auth puis celles pour envoyer réellement le fichier.
-> http://www.w3.org/Protocols/rfc959/4_FileTransfer.html
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Edison Member
*
Karma: 9
Posts: 1655
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

bon alors, je vois bien dans mes logs server, la connexion et deconnexion ftp.
par contre aucune trace de mon up de fichier.
 trouvé ca sur le forum, mais aucune différence aussi bien avec un print que write
Code:
    File datafile = SD.open("datalog.csv", FILE_READ);
     if (datafile) {

       while (datafile.available()) {
        Serial.write(datafile.read());
         clientftp.print("STOR  /~pilote/datalog.csv\r\n"); 
         //clientftp.print("RETR  /~pilote/datalog.csv\r\n"); 
       }
       clientftp.print("QUIT\r\n");
           datafile.close();
     }  else{
     Serial.println("Erreur envoi datalog.csv");
     }
  } else{
    Serial.println("echec");
Logged

Offline Offline
Jr. Member
**
Karma: 2
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

Déjà, après avoir envoyé une commande au serveur, il faut lire sa réponse et l'analyser (code retour, etc).

Le protocole FTP utilise deux connexions: une pour les commandes (ça tu l'as fait presque comme il faut), et une pour les données: pour envoyer un fichier, il faut effectuer une deuxieme connexion au serveur après avoir lu la réponse à la commande STOR, vers l'adresse et le port indiqués par le serveur dans sa réponse à la commande PASV (si on choisit le mode passif). Ensuite envoyer les octets du fichiers sur cette deuxieme connexion et la fermer quand tout est envoyé. le serveur répond ensuite sur la premiere connexion pour dire que tout s'est bien passé (ou pas).

Edit: dans ton dernier post, tu envoies le contenu du fichier vers la liaison série...
« Last Edit: March 24, 2012, 03:07:14 am by cbrandt » Logged

Offline Offline
Edison Member
*
Karma: 9
Posts: 1655
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

je sèche toujours pour récupérer le port que me renvoit mon server ftp  smiley-evil
le fichier est bien créé, les données partent, mais ou?
Logged

Offline Offline
Jr. Member
**
Karma: 2
Posts: 59
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le port que te renvoie le serveur est dans la réponse à ta commande PASV.

Donc il faut lire et analyser toutes les réponses qu'envoie le serveur.

Une réponses est une ou plusieurs lignes terminées par \r\n.
Chaque ligne commence par 3 caractères: le code retour numérique sue 3 chiffres.
Ensuite il y a un espace si c'est la dernière ligne de la réponse, sinon il y a un '-'.

Donc il te faut une fonction qui va lire les caractères reçus en les analysant au fur et à mesure pour:
- Récuperer le code numérique 
- Savoir si c'est la dernière ligne de la réponse et donc lire la réponse en entier.

Quelque chose comme ça:

- lire les trois premiers caractères
- les convertir en nombre
- lire le quatrième caractère et le mémoriser
- lire jusqu'à la fin de la ligne '\r' suivi de '\n'
- si le caractère mémorise est un '-', recommencer au début de la fonction
- sinon renvoyer le nombre converti précédemment

Cette fonction devra être appellée après chaque envoi d'une commande au serveur.
Et surtout elle devra être appellée dès la connexion au serveur établie, celui-ci commançant à cracher son essage de bienvenue smiley

Et aussi, à chaque caractère lu, l'écrire vers le port série pour voir en vrai la réponse brute du server.

Pour l'instant fais un petit programme de test qui se connecte simplement au serveur et lit le message de bienvenue à l'aide de la fonction ci-dessus que tu auras écrite.

Après on verra le séquencement des commandes et l'analyse de codes retour. Et pour la commande PASV, on fera une autre fontion pour analyser la réponse.

Bon courage !

PS: j'ai fais un client ftp pour mon boulot, donc on devrait s'en sortir  smiley
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4178
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

je sèche toujours pour récupérer le port que me renvoit mon server ftp  smiley-evil
le fichier est bien créé, les données partent, mais ou?
bonjour infobarquee
je n'ai pas descendu tout le topic, mais il doit y avoir un peu à manger pour tes canetons !  smiley-mr-green
http://arduino.cc/forum/index.php?topic=93502.0
Logged

Offline Offline
Edison Member
*
Karma: 9
Posts: 1655
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-mr-green
j'ai lu et re re re lu le topic que tu donne.
mais soit il manque des trucs, soit il faut passer par l'IDE 1.0 sous windaub, soit le script en bas de la page 1 est pas bon,  car même avec la lib UDP, ca ne fonctionne pas.
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4178
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

smiley-mr-green
j'ai lu et re re re lu le topic que tu donne.
mais soit il manque des trucs, soit il faut passer par l'IDE 1.0 sous windaub, soit le script en bas de la page 1 est pas bon,  car même avec la lib UDP, ca ne fonctionne pas.
a priori à partir de là
http://arduino.cc/forum/index.php/topic,93502.msg711743.html#msg711743

c'est du .ino donc 1.0
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

L'exemple du post n°14 de http://arduino.cc/forum/index.php/topic,93502.0.html fonctionne chez moi, pour du get
Attention, le code de ce post a changé il y a qque jours, car cela ne fonctionnait pas avec tous les serveurs FTP, y compris celui de la freebox V6.
Si tu n'y arrives pas, je peux te passer mon code complet.
« Last Edit: March 26, 2012, 06:52:52 am by cedric2 » Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4178
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

L'exemple du post n°14 de http://arduino.cc/forum/index.php/topic,93502.0.html fonctionne chez moi, pour du get
Attention, le code de ce post a changé il y a qque jours, car cela ne fonctionnait pas avec tous les serveurs FTP, y compris celui de la freebox V6.
Si tu n'y arrives pas, je peux te passer mon code complet.
bonjour cedric2
tu peux déjà passer ton code complet, ça peut même pour simple culture et curiosité,  intéresser d'autres contributeurs  smiley-mr-green
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Slt,

Je vais faire un post complet pour présenter mon projet quand j'aurais fini (Au moins quand il sera un peu "présentable")
Pour le moment, c'est encore du pre-Alpha, je touche encore le code tous les jours...

Je viens de sortir la partie FTP, qui prend le fichier "/Disque dur/A/conf.txt" sur une V6 et le copie sur la carte SD
http://code.google.com/p/arduino-domotique-cedric2/downloads/list -> ftp_freebox.ino

Vous devez juste modifier le password et l'ip de la freebox V6 pour que cela fonctionne chez vous.
Si vous voulez accéder à un serveur FTP distant, il faut mettre la default gateway, (ou ne pas mettre d'ip du tout dans le projet, comme cela tout sera appris en DHCP)

J'arrive à 20k de ROM, mais c'est surtout la partie gestion de la SDcard qui prend beaucoup.








Logged

Pages: [1]   Go Up
Jump to: