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

Programmation et administration système Perl Discussion :

Script pour capteur Raspberry


Sujet :

Programmation et administration système Perl

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2018
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Script pour capteur Raspberry
    Bonjour,

    Je débute dans la programmation et j’essaye de m’entraîner avec des projets motivant et intéressant. Je me suis lancé le défi de crée une station météo connectée avec un Raspberry.
    J’ai différent capteurs (température, hygrométrie, vent). Ils ont chacun leurs fichiers où sont enregistrés leurs données toute les 10 seconde. Mon problème est que je n’arrive pas à crée un scripte PERL pour copier les dernières lignes de ces fichiers toute les 10 minutes pour les réunir dans un autre dossier sur une ligne de 12 octets pour pouvoir les envoyer sur mon réseau.
    Merci d’avance pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    il faudrait plus de détails sur la façon dont tu t'y prends et sur ce que tu n'arrives pas à faire. Comme ça, je ne vois pas de difficulté majeure, mais peut-être que quelque chose m'échappe sur ton besoin, ou peut-être que tu t'y prends de façon compliquée. Montre ton code et explique ce qui ne marche pas comme tu le voudrais.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2018
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Tout compte fait j'ai fait le script en BASH:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    *********************************************************************************
    #!/bin/bash
     
    n=0
     
    while [ $n -le 5 ]
    do
     
            tail -1 ~/projet/final/TemperatureRelevee.txt | tail -1 >> ~/projet/final/lecture_capteurs.txt;
            sleep 10;
            n=$(( n+1 ))
     
    done
    *********************************************************************************
    Maintenant il faut que je compète ce script pour copier la dernière ligne d'un autre fichier (hygrométrie) et de la copier sur la même ligne (a la suite) que le capteur précédant.
    Pour écrire dans le fichier "lecture_capteurs.txt":

    Temperature1 hygrométrie1
    Temperature2 hygrométrie2
    Temperature3 hygrométrie3
    Temperature4 hygrométrie4
    .........

    Petit a petit, je crée mon premier script.

  4. #4
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    tu fais comme tu veux, mais, pour moi, Perl est incomparablement plus puissant (et plus pratique) que bash, surtout pour manipuler des données textuelles.

    Pour lire les dernières lignes d'un fichier texte, tu peux éventuellement faire un tail système, mais il existe un module Perl permettant de lire un fichier à l'envers: http://search.cpan.org/~uri/File-Rea...adBackwards.pm.

    Pour le reste, tant que tu ne donnes pas des exemples des fins de fichiers que tu lis et du résultat que tu désires obtenir, on aura du mal à t'aider.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2018
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Je bloque sur mon script:

    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
    18
    19
    20
    #!/use/bin/perl
     
    use warnings;
    use strict;
     
    my $fichier_src_t = "/home/Bureau/donneessource1.txt;
    my $fichier_src_b = "/home/Bureau/donneessource2.txt;
    my $fichier_dst = "/home/Bureau/donneesfinal.txt;
    my $var = 1;
     
    while ($var < 5)
    {
        tail -f $fichier_src_t $fichier_src_b;
        my $fichier = <>;
        chomp $fichier;
        open ($fichier, '>>', $fichier_dst) or die "erreur";
        sleep 60;
        ++$var;
    }
    close $fichier_dst;
    Que pensez-vous de ce script?
    merci

  6. #6
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    déjà, ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tail -f $fichier_src_t $fichier_src_b;
    n'est pas du code Perl et ne peut donc marcher tel quel dans un script Perl. Mais, depuis un script Perl, tu peux éventuellement appeler une commende système comme tail, moyennant une syntaxe d'appel adéquate, comme par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $result = `tail -e $fic1`;
    ce qui mettra le texte renvoyé par la commande taildans la variable $result.

    Au vu de ton code, j'essaie de deviner ce que tu veux faire et je peux proposer quelque chose comme ceci (testé de façon très incomplète, car ne j'ai pas de données de test en entrée):

    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
    #!/usr/bin/perl
    use warnings;
    use strict;
     
    my $fichier_dst = "/home/Bureau/donneesfinales.txt";     # ouverture fichier de sortie
    open my $OUT, ">", $fichier_dst or die "Ouverture impossible de $fichier_dst $!";
     
    my @fich_in = qw { /home/Bureau/donneessource1.txt /home/Bureau/donneessource2.txt };   # 2 fichiers en entrée
    for (1..5) {                                             # procéder à la lecture 5 fois
        my @result;
        push @result, `tail -1 $_ ` for @fich_in;            # lecture de la dernière ligne de chacun des fichiers en entrée
        chomp @result;                                       # retirer les caractères de fin de ligne
        print $OUT "@result \n";                             # imprimer une ligne sur le fichier de sortie
        sleep 60;
    }
    close $OUT;

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2018
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Merci pour vos conseils. Ça va m'aider à comprendre comment fonctionne la commande "tail" dans perl.
    Je vais étudier ces lignes afin de faire marcher mon script.

  8. #8
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Il n'y a pas de commande tail en Perl. Le code que j'ai présenté utilise la commande tail du système d'exploitation.

    Sinon, comme je l'ai déjà dit, il y a un module Perl permettant de simuler la commande tail en Perl: http://search.cpan.org/~uri/File-Rea...adBackwards.pm.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2018
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    J'ai essayer sans utiliser "tail" qui n'existe pas sur PERL:

    Code PERL : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     
    #!/usr/bin/perl
     
    use strict;
    use warnings;
     
    my $fichier_src_t = "/home/pi/projet/final/TemperatureRelevee.txt";
    my $fichier_src_b = "/home/pi/projet/final/donneessource2.txt;
    my $fichier_dst = "/home/pi/projet/final/lecture_freq_temp.txt;
     
    my $fichier_e;
    my $fichier_s;
    my $ligne;
    my $var = 1;
     
    open ($fichier_s, '>>', $fichier_dst) or die "erreur";
     
    while ($var < 10)
    {
            open ($fichier_e, '<', $fichier_src_t) or die "erreur : $!\n";
     
                    while($ligne = <$fichier_e> )
                    {
                            chomp($ligne) ;
     
                    }
            close $fichier_dst;
     
            sleep 10;
            ++$var;
     
    }
    close ($fichier_s)

  10. #10
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    ligne 28, tu as:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    close $fichier_dst;
    Or, $fichier_dst n'est pas un descripteur de fichier, donc tu ne peux pas le fermer. De plus, logiquement, c'est plutôt le fichier en entrée que tu viens de lire que tu veux sans doute chercher à ferme à cet endroit, donc plutôt $fichier_e.

    Par ailleurs, ton code ne fait rien d'utile pour l'instant, il li des fichiers en entrée, crée des fichiers en sortie, mais n'écrit rien dans les fichiers de sortie (ni à l'écran).

    Enfin, si tes fichiers en entrée deviennent volumineux, lire l'intégralité du fichier à chaque fois n'est sans doute pas très efficace.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2018
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Je n'ai toujours pas trouvé la commande qui me manque pour réaliser mon script.
    Je n'arrive pas a lire la dernière ligne d'un fichier (dommage que la commande "tail" ne fonctionne pas sur PERL).

  12. #12
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je t'ai déjà donné (à deux reprises) l'adresse d'un module qui lit les fichiers à l'envers, donc récupère en premier la dernière ligne d'un fichier.

    Sinon, je t'ai aussi fourni(post # 6) un script qui utilise le taildu système d'exploitation dans un script Perl.

Discussions similaires

  1. Script pour back up database
    Par jeff37 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/09/2004, 15h57
  2. script pour ajouter des utilisateurs postgres
    Par xopos dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 16/08/2004, 10h49
  3. [langage] cherche script pour formater une chaine
    Par MASSAKA dans le forum Langage
    Réponses: 7
    Dernier message: 12/11/2003, 12h18
  4. [pgaccess] Script pour formulaire
    Par garou51 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 13/06/2003, 08h30
  5. Script pour envoyer des info a mysql
    Par rhum1 dans le forum Linux
    Réponses: 6
    Dernier message: 15/04/2003, 16h19

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