Bonjour à tous,

Actuellement, je recois des données sou ce format

24,966,60,0,200,0,0,0,24,0,429
séparées par des virgules, et je les récupèrent ainsi:

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
 
function Decoder(bytes, port) {
  var str=String.fromCharCode.apply(null,bytes);
  var astr = str.split(",");
 
  return{
    te:astr[0],
    pr:astr[1],
  //  al:astr[2],
    hu:astr[2],
    //mo:astr[5],
    lu:astr[3],
    w1:astr[4],
    w2:astr[5],
    w3:astr[6],
    da:astr[7],
    //aq:astr[11],
    ts:astr[8],
    ga:astr[9],
    ba:astr[10],
    //wi:astr[14],
  };
}
Ca fonctionne bien mais ce qui m'ennuie c'est que j'envoie des données de capeurs inactifs. Ceux qui ont une valeur de 0.

Dans le but d'optimiser ceci, j'aimerais envoyer mes données ainsi

a24b966c60d0e200f0g0h0i24j0k429
et pour faire mieux, je supprime les valeurs des capteurs inactifs

a24b966c60e200i24k429
Comme vous l'avez surement compris, la lettre sert à identifier la valeur du capteur. Si le capteur 'j 'est activé, il y aura en plus 'j34'

La première question que j'ai c'est ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
String.fromCharCode.apply(null,bytes);
Est-ce que ceci va me convertir des byte en String?

L'autre question plus importante, comment je peut utiliser split pour qu'il ne tienne plus en compte des ',' (soit toujours le même caractères, mais des lettres différentes

L'idée est "de dire" au code:
"dès que tu rencontre une lettre, prends la valeur qui suit jusqu'à la prochaine lettre. Puis prend la prochaine lettre pour retenir la valeur qui la suit. Ainsi de suite"

pour ensuite faire un switch pour récupérer la lettre et donner sa valeur à la variable correspondante. Un peu du genre:
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
51
52
 
switch(lettre) {
    case a:
        te:[valeru de a]; // temperature
        break;
    case b:
        pr:[valeru de b]; //pression
        break;
    case c:
        hu:[valeru de c]; // humidité air
        break;
    case d:
        lu:[valeru de d]; // Luminosité
        break;
    case e:
        wi:[valeru de e]; // humidité sol 1
        break;
    case f:
        w2:[valeru de f]; // humidité sol 2
        break;
    case g:
        w3:[valeru de g]; // humidité sol 3
        break;
    case h:
        da:[valeru de h]; // date
        break;
    case i:
        ts:[valeru de i]; // temperature sol
        break;
    case j:
        ga:[valeru de j]; // Pluviometre
        break;
    case k:
        ba:[valeru de k]; // Batterie
        break;
    default:
 
}
// retourne les valeurs
  return{
    te,
    pr,
    hu,
    lu,
    w1,
    w2,
    w3,
    da,
    ts,
    ga,
    ba,
  };
Je vous avoue ne pas savoir comment faire! Masi pas du tout
Donc, avoir le même résultat mais faire une split sur une lettre différente
et un switch sur la lettre.

Voyez-vous l'idée?

Milles mercis pour vos lumières!!