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

Web & réseau Delphi Discussion :

Récupérer des données d'un traqueur GPS Via TCP


Sujet :

Web & réseau Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Electricien
    Inscrit en
    Juillet 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2013
    Messages : 67
    Points : 49
    Points
    49
    Par défaut Récupérer des données d'un traqueur GPS Via TCP
    Bonjour à tous,

    Je suis à la recherche d'une aide pour récupérer des données d'un traqueur GPS Via TCP.
    Le traqueur se connecte correctement mais je ne parviens pas à récupérer les données.
    La première donnée que je dois récupérer est IMEI et ensuite je dois lui transmettre la Valeur 0X01 pour recevoir le paquet de données AVL

    Je vous mets le lien du protocole utilisé par le traqueur =>https://wiki.teltonika-gps.com/view/Codec

    J'utilise IdTcpServer

    Je ne sais pas quel Read utiliser : Stream / Buffer ?? Je voudrais afficher l'IMEI dans un Edit.text

    Je ne suis pas un professionnel, si vous avez une solution simple pour que je puisse démarrer le projet je vous en serais très reconnaissant.

    Cordialement

    Oscar

  2. #2
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Bonjour

    Quelle version de Delphi utilises-tu ?

    Dans le cas qui t'occupe, ton programme n'est pas le serveur mais un client, ce n'est donc pas ce composant qu'il faut utiliser.

    Tu dois déjà te connecter au tracker (IP+port en TCP), puis une fois la connexion établie tu pourras lui envoyer des octets et recevoir ses réponses.

  3. #3
    Membre du Club
    Homme Profil pro
    Electricien
    Inscrit en
    Juillet 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2013
    Messages : 67
    Points : 49
    Points
    49
    Par défaut
    Bonjour et Merci pour votre interet à ma demande

    Je suis sur RadStudio 10

    Concernant le traqueur c'est bien lui qui se connecte automatiquement au serveur Via une URL

    La Première Chose Qu'il doit m'envoyer c'est IMEI avec le code ci dessous je ne reçois pas la totalité de IMEI

    J'ai beau changé la valeur (8) en Plus grande Valeur Pas plus de 8 Chiffres et il manque le Dernier et les Premier

    Exemple Si IMEI est 256379854875612 je reçois 85487561

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
    var
    AVL: TStringStream;
     
    begin
      AVL := TStringStream.Create;
      try
       AContext.Connection.IOHandler.ReadStream(AVL,8);
              Edit2.Text:= AVL.DataString ;
      finally
       AVL.Free;
      end;
    end;
    Merci pour Votre Aide

    Cordialement

    Oscar

  4. #4
    Membre du Club
    Homme Profil pro
    Electricien
    Inscrit en
    Juillet 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2013
    Messages : 67
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Petit avancement sur mon code, j'ai fait l'erreur de vouloir directement utilisé le Edit.text pour afficher mon résultat. Etant donner que je reçois pas tout mon IMEI en un seul bloc Edit ne pouvait pas l'afficher.
    En utilisant le Memo.lines.add je reçois bien tous le N° Chiffre par Chiffre en mettant la Valeur (1)

    Ensuite j'arrive bien à Envoyer mon 0x01 au client pour confirmer la réception

    et je reçois le Reste des Data Mais pas en Hexa Donc pour le moment Bloqué

    Je continue à Chercher

    Cordialement
    Oscar

  5. #5
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 931
    Points : 1 909
    Points
    1 909
    Par défaut
    Bonjour,

    Citation Envoyé par Oscar02 Voir le message
    et je reçois le Reste des Data Mais pas en Hexa Donc pour le moment Bloqué
    J'ai du mal à comprendre, tu dois recevoir des octets non ? De quelle taille : 8, 16 ou 32 bits ? Ensuite c'est une histoire de conversion ( binaire, décimal, hexa, etc )

  6. #6
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par free07 Voir le message
    J'ai du mal à comprendre, tu dois recevoir des octets non ? De quelle taille : 8, 16 ou 32 bits ? Ensuite c'est une histoire de conversion ( binaire, décimal, hexa, etc )
    euh... des octets de 16 ou 32 bits ? tu ne voulais pas parler de caractères plutôt ?

  7. #7
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Ok, donc si c'est toi le serveur et lui le client, c'était la bonne approche.

    Citation Envoyé par Oscar02 Voir le message
    et je reçois le Reste des Data Mais pas en Hexa Donc pour le moment Bloqué
    D'après ce que je comprends de la doc il n'envoie pas de l'hexagone mais bien des octets à interpréter ensuite. L'affichage en hexadécimal dans la doc est juste pour ceux comprendre ce qu'on reçoit.

    Par rapport au contenu des trames, tu peux t'en sortir en ajoutant un délai sur la réception pour t'assurer que tu as tout reçu mais c'est moche. Le mieux est d'interpréter les trames au fur et à mesure que tu reçois leur contenu et qu'une fois seulement tu as la trame complète, tu l'interprète.

    Ca a fait l'objet d'un exercice sur l'Advent of Code l'an dernier : https://adventofcode.com/2021/day/16

    C'était sur du traitement de données dans un fichier texte, mais avec une lecture caractère par caractère (ou plutôt octet par octet) tu dois pouvoir comprendre le fonctionnement de ma solution et t'en inspirer pour traiter les données que tu reçois. Ce sont les procédures Jour16_01 et Jour16_02 dans :
    https://github.com/DeveloppeurPascal...ee/master/2021

  8. #8
    Membre du Club
    Homme Profil pro
    Electricien
    Inscrit en
    Juillet 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2013
    Messages : 67
    Points : 49
    Points
    49
    Par défaut
    Bonjour à tous et merci pour votre aide.

    Avec le code ci-dessous, mon client se connecte correctement. Il m'envoie l'IMEI que je récupère Via Memo 1 chiffre par ligne.
    Ensuite j'envoie le 0X01 pour accepter la connexion et je reçois tout un paquet de données mais sous la forme ci -essous :

    ™íp6‹tKà ïïðPÈEqHµ ¶B/FCßDyñÇ&žƒ[™ñX6‹tKà ðïðPÈEqHµ ¶B/FCßDyñÇ&žƒ[šçp6‹tKà ïïðPÈEqHµ ¶B/DCéDyñÇ&ž¥²
    Peut-être que je n'utilise pas le bon protocole ? Dans mon premier message j'ai mis le lien correspondant au traqueur et il parle de Codec 8 Protocol FM (pouvez-vous m'en dire plus si vous connaissez ?).

    Encore merci pour vos retours.

    Oscar

    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
    21
    22
    23
    24
    25
    26
    27
    procedure TForm1.IdTCPServer1Connect(AContext: TIdContext);
    begin
         Edit1.Text :='Client Connecter';
         AContext.Connection.IOHandler.Write($01); // Reponse envoyer au Client 0x01
     
    end;
     
    procedure TForm1.IdTCPServer1Disconnect(AContext: TIdContext);
    begin
       Edit1.Text :='Client Deconnecter';
    end;
     
    procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
    var
    AVL: TStringStream;
     
    begin
      AVL := TStringStream.Create;
      try
              AContext.Connection.IOHandler.ReadStream(AVL,1,False);//lecture du Flux
             Memo1.Lines.Add(AVL.DataString) ; // Afffichage du Flux
     
     
      finally
          AVL.Free
      end;
    end;

  9. #9
    Membre chevronné
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 931
    Points : 1 909
    Points
    1 909
    Par défaut
    Citation Envoyé par pprem Voir le message
    euh... des octets de 16 ou 32 bits ? tu ne voulais pas parler de caractères plutôt ?
    Bien évidemment

  10. #10
    Membre du Club
    Homme Profil pro
    Electricien
    Inscrit en
    Juillet 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2013
    Messages : 67
    Points : 49
    Points
    49
    Par défaut
    Merci Merci

    Cela va Beaucoup m'aider

    Mais je pense que je ne récupère pas correctement les données du Socket je devrais peux être utilisé le TidBytes non?

    Quand pensez vous

    Cordialement

    Oscar

  11. #11
    Membre du Club
    Homme Profil pro
    Electricien
    Inscrit en
    Juillet 2013
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2013
    Messages : 67
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Résolu pour la récupération de données
    Merci à Tous pour votre intérêt à ma demande, il ne me reste plus qu'à traiter les données et optimiser le tout "Gros Boulot !!"

    @Bientôt
    Oscar

    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
    21
    22
    23
     
    procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
     
    var
     
    Size:Integer;
    Buffer:TidBytes;
    Data:LongInt;
    B:String;
     
    begin
     
      try
     
               Size:= AContext.Connection.IOHandler.RecvBufferSize.Size;
               AContext.Connection.IOHandler.ReadBytes(Buffer,Size);
               BytesToRaw(Buffer,Data,Size);
     
      finally
               Memo1.Lines.Add(BinTostr(Buffer));
     
      end;
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/06/2016, 16h37
  2. [Débuter] Récupérer des données sur un site Web via une requête HTTP
    Par sauvezmoi dans le forum Réseau
    Réponses: 1
    Dernier message: 29/04/2015, 16h03
  3. [MySQL] Récupérer des données MySQL via PHP
    Par Jeannot dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/01/2008, 13h10
  4. Récupérer des données via usb
    Par Palca dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 12/01/2006, 14h33
  5. Récupérer des données via le port usb
    Par matmuth dans le forum C++Builder
    Réponses: 12
    Dernier message: 11/05/2005, 16h34

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