[Problème ASCII] Hexadecimal to ASCII
Bonjour à tous,
J'essaye en ce moment de développer un programme Python 2.7 dans le but de faire communiquer un raspberry PI et une voiture via le port OBD-II. Pour ce faire j'utiliser l'ELM 327 qui me permet de communiquer avec la voiture. Mon raspberry est connecté à l'ELM 327 en bluetooth, et peut envoyer des requêtes et reçois des informations de la voiture.
Mon problème est le suivant : Les messages renvoyées par la voiture sont d'un certains format, et lorsque je veux connaître le VIN (Vehicle Identification Number) de la voiture, le message renvoyées est de la forme suivante :
"014
0: 49 02 01 xx xx xx xx
1: xx xx xx xx xx xx xx
2: xx xx xx xx xx xx xx"
Dans le message suivant, le 014 indique le nombre de message qui nous intéresse en hexadécimal, ici 17 (nombre de caractères du VIN).
Ensuite les 0: , 1: et 2: indique l'ordre dans lequel les informations sont envoyées et enfin, le 49 02 01 indique que le message qui suit est la réponse au message 09 02, celui qui donne le VIN.
L'information à décoder sont donc les xx. Ces derniers sont en hexadécimal et il me faut donc les traiter afin de décoder le message en ASCII.
Pour ce faire, la méthode que j'ai utiliser à été de traiter toutes les informations qui ne m’intéresse pas en utilisant la fonction .replace(). En enfin, ma variable code contient le message ci-dessus. J'effectue donc par exemple "code = code.replace("49 02 01", "")" pour supprimer de ma variable code le 49 02 01. J'effectue également pour le 014 ainsi que les "0:", "1:" et "2:". J'obtient donc une variable code de la forme suivante :
"526621
143DE4A263A31
1343525255834"
(j'ai volontairement changé les caractères pour ne pas mettre le VIN ne mon véhicule sur internet). Pour décoder ce message en ASCII, j'utilise la fonction :
"vin = bytearray.fromhex(code).decode()".
Le problème est que lorsque j'utilise cette fonction, j'obtient une erreur au changement de ligne (au 6 ème caractère de la première ligne). J'imagine que j'en obtiendrai une également au second changement de ligne mais le traitement du code ne va pas jusque là. L'erreur exacte est la suivante :
"ValueError : non-hexadecimal number found in fromhex() arg at position 6".
Je n'ai aucune idée de comment transformer ces valeurs hexadécimale en ASCII.
Toute aide ou indication serait fortement appréciée. Merci d'avance à tous.
Khoneb