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

JavaScript Discussion :

décodage variables / infos complexes


Sujet :

JavaScript

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut décodage variables / infos complexes
    Bonjour à tous,
    Je suis comme dans la série ... LOST !!!

    Je ne suis absolument pas dev, je commence à m'initier au js... niveau -10. C'est donc pas la peine d'essayer de me parler technique, avec des expressions consacrées. Inutile de prononcer le mot "volant" par exemple... ; vous pouvez aussi juste me dire "le truc rond, sur le tableau de bord, qui sert à faire tourner les roues de la voiture...". Je comprendrai mieux en admettant que je sache déjà où sont les roues ... et la voiture


    A/ Donc, je souhaite pouvoir décoder et récupérer les variables d'un message tcp suivant un pivot de flags (A ou else), et sur le principe suivant :

    // flag A : flag = A (valid datas) ... si datas valides, affiche ceci

    // flag else : flag = else (invalid datas)... si datas invalides, affiche ceci ... et aussi cela en +

    B/ J'ai également besoin de convertir certaines données en vitesse => km/h et en angle directionnel => °

    C/ comment enlever le "#" à la fin dans la réponse?

    D/ Pas besoin de toucher à la conversion texte/GPS decimal, ça fonctionne!!



    Évidemment, ce sont des variables... donc je ne souhaite pas spliter suivant les valeurs réellement affichées dans les messages joints, mais récupérer leur contenu... a convertir pour certaines. Pour infos, seuls IWAP01 et # sont des valeurs fixes...



    Le message en question avec les commentaires en rouge :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    // flag A
    //IWAP01080524A2232.9806N11404.9355E000.1061830323.8706000908000102,460,0,9520,3671#
    // flag else
    //IWAP01080524V0000.0000N00000.0000E000.1061830323.8706000908000102,460,0,9520,3671,Home|74-DE-2B-44-88-8C|97&Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97&Home3|74-DE-2B-44-88-8C|97#
    //
    // ON S'AMUSE A PARTIR D'ICI
    //
    let answer = {}
    let elements = msg.payload.split(",")                                                                               // array containing the bits
    // elements[0] is the long string starting IWAP01
    let dateStr = elements[0].substr(6,6)                                                                               // eg "190215" 15th Feb 2019
    answer.date = new Date(Number(dateStr.substr(0,2))+2000, Number(dateStr.substr(2,2))-1, dateStr.substr(4,2))                  // 080524 - date
    answer.valid = (elements[0].substr(12,1) === "A")                                                     // flag true or false - A or else
    if (answer.valid) {
        let degreesN = Number(elements[0].substr(13,2))
        let minutesN = Number(elements[0].substr(15,7))
        let ns = elements[0].substr(22,1)                                                                                 // N or S
        let degreesE = Number(elements[0].substr(23,3))
        let minutesE = Number(elements[0].substr(26,7))
        let ew = elements[0].substr(33,1)                                                                               // E or W
        node.warn(`${degreesN}  ${minutesN}  ${ns}  ${degreesE}  ${minutesE} ${ew}`)
        answer.latitude = degreesN + minutesN/60                                                                  // 2232.9806N
        if (ns === "S") answer.latitude = -answer.latitude
        answer.longitude = degreesE + minutesE/60
        if (ew === "W") answer.longitude = -answer.longitude                                                 // 11404.9355E
    } else {
        answer.latitude = 0
        answer.longitude = 0
    }
    
    answer.speedMoving = elements[0].substr(34,5)                                                                  // 000.1 ...a convertir en Km/h
    answer.angleDirection = elements[0].substr(45,6)                                                                // 323.87 a convertir  en ° (degrés)
    answer.GSMsignal = elements[0].substr(51,3)                                                                     // 060
    answer.satellites = elements[0].substr(54,3)                                                                        // 009
    answer.batteryLevel = elements[0].substr(57,3)                                                                  // 080
    // LBS datas
    answer.mcc = elements[1]                                                                                                // 460
    answer.mnc = elements[2]                                                                                                // 0
    answer.lac = elements[3]                                                                                                  // 9520       
    answer.cid = elements[4]                                                                                                  // 3671... Enlever le # 
    // WIFI bases : quand le flag est else (datas invalid), il faut pouvoir récupérer les bases wifi sur le modèle ssid|macAddress|WIFIsignal quelque soient leurs nombres... j'ai essayé et c'est pas bon du tout!!
    // let i;
    // answer.basesWIFI = []
    // for (i=6; i<6+answer.cid; i++) {
    //   let baseElements = elements[i].split(/[|]|[&]/)
    //  answer.basesWIFI.push({ssid: baseElements[0], macAddress: baseElements[1], WIFIsignal: baseElements[2]})      // Home|74-DE-2B-44-88-8C|97&Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97&Home3|74-DE-2B-44-88-8C|97
    //}
    msg.payload = answer
    return msg
    Je suis à votre dispo pour toute les questions, et il va y en avoir...

    merci!!!
    Dernière modification par SpaceFrog ; 19/02/2019 à 08h11.

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

Discussions similaires

  1. conjugue d'une variable aleatoire complexe loi
    Par boss89 dans le forum Probabilités
    Réponses: 0
    Dernier message: 21/04/2012, 15h17
  2. ibatis et infos complexes
    Par rikunter dans le forum Persistance des données
    Réponses: 2
    Dernier message: 10/11/2006, 16h43
  3. [Info]Modifier un ensemble de variable
    Par kaiser2003 dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 07/09/2005, 15h53
  4. Réponses: 3
    Dernier message: 24/02/2005, 15h48
  5. Récupération de variables dynamiques complexes
    Par ludoboy dans le forum ASP
    Réponses: 7
    Dernier message: 24/05/2004, 17h51

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