IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Récupérations/ envois de données


Sujet :

Python

  1. #1
    Invité
    Invité(e)
    Par défaut Récupérations/ envois de données
    Bonjour à tous

    Je suis un terminale Ssi et je suis actuellement en train de finir mon PPE. Mes 2 collègues étant des fainéants, j'ai dû m'occuper moi-même de toute la partie électronique/info' du projet, et n'étant pas un crack' en python (j'en fais depuis à peine 1 an et quelques mois), je me retrouve maintenant vraiment bloqué... J'ai connecté un E-block à un raspberry Pi en bidouillant un port RS-232 (mais passons les détails sur ces bidouillages.. ) et le Rasberry Pi est connecté en Wifi à internet. L'E-block stock des données qu'ils récupère de certains capteurs et le Raspberry-pi est censé les récupéré pour les transmettre vers un serveur web/une base de données (bref, sur un internet en gros ).
    J'ai utilisé le logiciel flowcode pour la programmation et mes données sont envoyés vers le port RS232, et jusque là tout se passe bien (à prioris).

    Sauf que maintenant, mon problème est le suivant : comment récupéré automatiquement les données envoyés par l'E-block grâce à Python ? Je ne veux pas forcément les stockés sur le R-Pi (sauf si c'est vraiment nécéssaire), mais au moins les envoyés automatiquement sur un serveur/une base de données dès leur réception.
    L'idée sa serait d'ensuite récupéré ces données stockés sur le net grâce à une appli android (que mes chères camarades se feront un plaisir de programmer... normalement ) donc je pense que c'est obligatoire que ses données soit stockés sur internet (quelques part, je ne sais pas encore où, si vous avez des idées à me proposé...).

    En bref, pour ceux qui lise à travers les lignes ( ), il me manque les parties "Récupérations des données du port RS232" et "Envoie automatique de ces données vers....." ('....' car je ne sais pas encore où je pourrai les stockés sur le net et ensuite les récupéré via une appli' android)

    J'espère que quelqu'un aura des réponses (si il vous manque des détails n'hésitez pas à demandé, pour moi ca me parait clair mais peut être qu'avec un regard extérieur c'est plus compliqué)


    Merci d'avance !

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Par défaut Utiliser pyserial
    Bonjour,

    Si les données arrivent sur un port rs-232, il serait judicieux d'utiliser le package pyserial.
    Mais, auparavant, si vous ne maîtriser pas python, il serait bon de vous y mettre vraiment
    par exemple, en suivant les tutoriels.

    Python n'étant vraiment pas difficile à apprendre, vous devriez pouvoir en apprendre
    assez pour faire ce que vous envisagez au bout de quelque jours seulement.

  3. #3
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Si vous pensez devoir stocker vos données sur internet, je serais partisan d'installer filezilla sur le RPI, via pyserial, récupérer les datas et les stocker dans un des dossier partagé Filezilla.

    Apres depuis internet, vous avez alors accès aux données. Depuis un autre PC, eventuellement un autre soft Python pourra se connecter en FTP au RPI

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous

    Déjà, merci beaucoup pour vos réponses, ca m'a un peu éclairé

    Mais maintenant, je me retrouve toujours au même point : j'ai trouvé comment envoyé des données du Raspberry-pi jusqu'à internet, mais je ne trouve pas comment récupéré ses données du port RS232... J'ai déjà essayer 2-3 manipulations, sans succès, et j'ai même réussi à faire planter un des PC de mon lycée.. Ca vous montre bien à quel point je suis doué
    Donc est ce que quelqu'un saurait quelles lignes de codes (en python) utiliser pour récupéré des données venant d'un certains port ?
    Et pour le package Pyserial je n'y ai pas accès, mon prof nous en a pas donner l'accès sur nos sessions au lycée...

    Filezilla j'ai été me renseigner, c'est peut être une option envisageable, même si les screenshot du programme m'ont parut un peu compliqué (4-5 fenêtres affichés en même temps, c'est pas tout les jours que j'utilise un tel logiciel !) mais je n'ai juste pas compris le principe : une fois mes données récupérés (par l'opération du saint-esprit étant donné que pour le moment je n'ai pas réussi ) je vais devoir les envoyé sur ce logiciel qui va ensuite les envoyé sur internet ? Dans ce cas, est ce qu'il est capable de les envoyé automatiquement sur internet ou il faut que je créé une commande de répétition (python) ?

    Merci d'avance

  5. #5
    Expert confirmé

    Avatar de deusyss
    Homme Profil pro
    Expert Python
    Inscrit en
    Mars 2010
    Messages
    1 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Expert Python
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 659
    Par défaut
    Salut,

    Un des principes de bases de python c'est de ne pas reinventer la roue. Donc si ton prof ne te donne pas accès à Pyserial, tu lui demande gentiment . Tu n'a pas a reecrire un module qui est éprouvé et optimisé depuis des années. Sur raspberry pi ou sur PC, la com serie passe par pyserial. Cas echeant, demande lui l'accès à Pip et py-pi.

    Concernant filezilla, alors c'est un logiciel double usage. Le premier fait serveur, le second est le client. Je m'explique. Sur ton raspberry, imagine que tu stocke tes données dans des fichiers stockées dans un dossier dédiés. Sur ton raspberry, tu demarre le filezilla serveur, et tu stipule que ce dossier est le seul à être partagé, puis tu créé des users. Ces users auront le droit de se connecter, en ftp, via le client filezilla, le net, ou tout logiciel client FTP à ton raspberry.

    FILEZILLA SERVEUR ---------- NET ---------------------------- FILEZILLA CLIENT
    RASPBERRY ---------------------- DYNDNS (par ex) --------- Client FTP

    Donc en resumé tu stocke tes données dans de simple fichiers, et ce sont ces fichiers auxquels tu peux avoir accès à distance

    Suis je clair ou non? Si ce n'est pas le cas, n'hesite pas à le preciser. on est là pour s'entraider, aucun soucis.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Salut à tous

    Merci pour vos messages, grâce à vous on à très bien avancer !
    Là se pose le problème de communication avec le R-Pi :les données sont envoyé mais elles ne sont pas reçu ! Voiçi le code qu'on a pour la réception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import socket
     
    # Création d'un socket
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    data="0"
     
    port=3500 
    # Accepter les datagrammes UDP, à partir du port 3500
     
    s.bind(("", 3500))
    print ("waiting on port:"), port
     
    while True:
     
    # Reception des données de 1024 octets
        data,addr= s.recvfrom(1024)
        print(data)
    Est ce ce script est bon ?
    Si oui, une fois que le R-pi aura récupéré les données envoyés grâce à ce protocole, comment faire pour qu'il les stocks dans un document et comment les récupéré automatiquement avec filezilla après ?

    Merci d'avance !
    Dernière modification par Invité ; 01/04/2014 à 17h45.

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    Salut,

    tu disais précédemment que ton "E-Block" était connecté à ton Rasberry via une liaison RS232.
    là tu nous présentes un code qui écoute un port UDP dans l'espoir d'y recevoir des données.

    en gros tu envoie tes données sur une liaison série et tu t'attend à les recevoir sur une liaison ethernet.
    a priori, et à moins qu'il nous manque des infos, il n'y aucune chance pour que ça fonctionne.

    je dirai que 3 choix s'offre à toi:
    1 - tu envoies tes données via ethernet et tu garde ton code de base
    2 - tu continues à envoyer tes données sur la liaison série, mais il faut que ton Raspberry lise sur cette liaison série (avec pyserial par exemple, comme mentionné plus haut)
    3 - plus compliqué, mais c'est peut être ce que votre prof attend que vous fassiez:
    je suppose que tu as connecté ton E-Block via les GPIO du Raspberry. si c'est le cas, alors tu peux sans doute attaquer directement les GPIO pour lire ce qui arrive sur ta liaison série. en milieu pro, ça serait pas très malin, mais dans le cadre d'un exercice, ça ma parait pas forcément déconnant.
    y a un module python nommé RPi.GPIO qui sert justement à ça (attention, ça fonctionne sur Raspberry, mais pas moyen de l'utiliser sur un ordi), tu trouveras toutes les infos qu'il te faut à ce sujet sur internet.


    mais, au cas ou vous n'ayiez pas encore essayer, je pense qu'il est préférable de demander à votre prof de vous founir pyserial, ou de l'installer vous même

  8. #8
    Invité
    Invité(e)
    Par défaut
    Salut à tous

    Déjà merci beaucoup pour vos réponses, ça nous a fortement aider pour avancer dans notre projet ! Donc après plusieurs heures de travail et quelques pétages plombs (je vous passe les détails, en gros on a dû recommencer plusieurs fois certaines parties à cause de changement de matériel, de problème de réseaux etc. ) on à finalement réussi à faire 80% de ce qu'on a prévu
    Mise en contexte de la situation actuel : on reçoit donc les données (en l'occurence, des nombres) récolté par l'E-block sur notre Raspberry-pi, et notre programme python nous permet de recevoir ces données et de les stockés dans un fichier "bloc-note" (grâce à LeafPad du R-Pi, ce qui correspond à peu près au bloc note de windows je pense). Jusque là, tout va bien

    Les questions qui se posent maintenant sont les suivantes :
    - Comment faire, avec Python, pour démarrer Filezilla et lui dire de récupérer le fichier dans lequel python "écrit" les données qu'il recoit ?
    - Si python ne peut pas démarrer filezilla lui même, existe t'il une commande sur Filezilla pour que le logiciel récupère automatiquement ce fichier "bloc-note" quand on démarre le R-Pi et ainsi le rendre accessible en ligne (donc qu'on puisse récupéré ce fichier avec un smartphone, une tablette) ?
    - Sinon, si cela n'existe pas, comment avoir accès à toute ces données stockés dans le fichier texte à distance via internet ? (par exemple, si je veux récupéré ces données via mon smartphone, comment je pourrai m'y prendre ?) On avait pensé à un autre logiciel mais il est malheureusement payant, alors on est à court d'idée (et à court de temps également, il ne nous reste plus que 2 semaines et demi pour régler ce problème...ce qui est relativement court,surtout que nos profs nous laissent maintenant terminé tout nos projets en autonomie totale donc on ne peut plus leur demandé des renseignements)

    Merci d'avance !

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    Salut,

    si je comprends bien la demande, il s'agit maintenant de mettre à disposition un fichier sur le réseau.

    si c'est ça c'est assez simple: y a une bibliothèque python qui se nomme pyftpdlib qui peut te permettre de démarrer un serveur FTP depuis ton programme python. ça te permettra ensuite de récupérer ton fichier depuis n'importe quel machine qui dispose d'un client FTP (Filezilla ou autre) et qui est sur le même réseau que ton RasPi.

    après si tu veux encore moins t'embêter, tu peux installer un serveur FTP sur ton RasPi, le démarrer automatiquement au démarrage du RasPi et simplement mettre le fichier dans une arborescence mise à disposition par ce serveur FTP.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Salut !

    Effectivement c'est ce que je cherchais, merci ! J'ai juste dû trouver une alternative à FileZilla, car le logiciel faisant l'inverse de ce que je voulais faire et ne fonctionne pas sur Android
    Par contre, petite question : comment on lance une (ou plusieurs) bibliothèque(s) via Python ? C'est une commande particulière ou jen dois utiliser la commande "import" ?

    Et en ce qui concerne cette bibliothèque, comment je désigne le fichier que je veux mettre à disposition sur le serveur FTP ? Pour le récupéré j'utilise AndFTP qui était disponible sur l'Android Market, et j'ai déjà parcouru plusieurs forum, apparement ca marcherai bien

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Par défaut
    Salut,

    il suffit pas de lancer une bibliothèque, enfin je suis pas certain de ce que tu veux dire par là en même temps.

    dans un premier temps il faut déjà l'installer si elle ne fait pas partie des modules fournis de base avec Python (et pyftpdlib n'est pas fourni de base).
    ensuite il faut bien entendu importer les élément des la bibliothèque que tu compte utiliser.

    sur le lien de page que j'ai donné dans mon précédent post, il y a un exemple de script pour démarrer (paragraphe "Quick Start").
    le script en question se contente de créer un serveur FTP et 2 utilisateurs (un anonyme et un identifié) et de lancer le serveur qui écoute sur le port 21.


    plus généralement, et pour répondre à ta dernière question, un serveur FTP ne permet de mettre à disposition un fichier en particulier. il permet plutôt de partager un/des répertoire(s) et leur(s) contenu(s).
    ce serveur va gérer un ou des utilisateurs qui vont chacun se voir attribuer une récine. cette racine est le répertoire qui sert de racine à l'arborescence partagée, c'est à dire que l'utilisateur en question pourra se balader comme il le souhaite à l'intérieur de ce répertoire mais il ne pourra pas remonter plus haut dans l'arborescence système. par exemple si tu as un utilisateur toto dont le répertoire racine est /home/toto, un utilisateur qui se connecte avec le login toto pourra voir ce qu'il y a dans le répertoire /home/toto et ses sous répertoires, mais il ne pourra pas aller voir ce qu'il y a dans le répertoire /home.
    ensuite, tu as 2 types d'utilisateurs: anonyme et identifié. si tu ajoute à ton serveur serveur un utilisateur anonyme, n'importe qui pourra s'y connecter anonymement sans login ni mot de passe. un utilisateur identifié requiert un login et un mot de passe pour se connecter.
    enfin, tu peux définir les droits de chaque utilisateur de ton serveur FTP (changement de répertoire, récupération de fichier, suppresion, renommage, etc...).

    plus concrètement, pour ton besoin je ne pense pas que aies besoin d'authentification.
    dans ce cas tu pourras de contenter de créer un seul utilisateur anonyme pour ton serveur. comme tu as seulement besoin de récupérer un fichier, tu laisseras uniquement le droit de récupérer des fichiers à cet utilisateur (éventuellement aussi la possibilité de lister le fichiers). comme racine, tu lui mettras bien ce que tu veux, veilles seulement a ne pas lui spécifier un répertoire qui pourrait contenir des données qui ne sont pas censées être partagées. le mieux est encore de créer un répertoire spécifiquement pour ce partage. enfin il suffira d'écrire ton fichier de donnée directement dans le répertoire racine de ton utilisateur.
    tu pourras ensuite te connecter a ton RasPi anonymement via FTP et télécharger ton fichier.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Salut à tous !

    On s'approche enfin du but ! Seul petit problème (qui j'espère sera le dernier étant donné qu'on à déjà dû modifier plusieurs parties de notre projet, faute de budget ou par "trop grande" ambition) : l'avant dernière ligne de python du script "Quickstar" (donné en lien précédement) me mène à une erreur que je n'arrive pas à régler
    J'ai correctement entré l'adresse IP qui était indiqué, et cela m'a mener à une erreur... je l'ai donc remplacer par l'IP de mon R-pi, mais idem, même erreur... La voiçi :

    File "/home/pi/pyftpdlib-1.3.1/pyftpdlib/servers.py", line 146, in__init__
    self.af = self.bind_af_unspecified(adress_or_socket)
    File "/home/pi/pyftpdlib-1.3.1/pyftpdlib/ioloop.py", line 775, in bind_af_unspecified
    raise socket.error(err)
    error : [Errno 13) Permission denied
    Et là j'ai vérifié 2-3 fois les liens de téléchargement (pour vérifié si j'avais bien la bonne bibliothèque) et le script "Quickstar" (j'ai modifié ce qu'on devais modifié..) et tout me paraît bon ! Donc je ne comprend pas en quoi le script est faux
    Le "Permission denied" me faisais penser à une erreur d'autorisation, mais je suis connecté en tant qu'administrateur sur le R-Pi alors j'ai écarté cette piste assez vite

    Quelqu'un aurait déjà eu ce problème ? Ou quelqu'un à une idée pour régler le problème ?

    Merci d'avance !

    EDIT : et au fait ! Merci Tryph, tes explications m'ont énormément servit pour mon dossier écrit (que j'ai commencé à taper progressivement) et surtout à comprendre le principe de l'FTP

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/07/2010, 22h33
  2. envoi de données sur un même port
    Par manaboko dans le forum Développement
    Réponses: 7
    Dernier message: 05/10/2005, 15h53
  3. [PHP-JS] Envoi de données sur une même page...
    Par dudux dans le forum Langage
    Réponses: 8
    Dernier message: 14/09/2005, 13h51
  4. Réponses: 4
    Dernier message: 11/06/2004, 16h27
  5. [debutant]envoie de données
    Par miloux32 dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 14/08/2003, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo