Bonjour à tous,
Actuellement, je recois des données sou ce format
séparées par des virgules, et je les récupèrent ainsi:24,966,60,0,200,0,0,0,24,0,429
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.
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], }; }
Dans le but d'optimiser ceci, j'aimerais envoyer mes données ainsi
et pour faire mieux, je supprime les valeurs des capteurs inactifsa24b966c60d0e200f0g0h0i24j0k429
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'a24b966c60e200i24k429
La première question que j'ai c'est ceci:
Est-ce que ceci va me convertir des byte en String?
Code : Sélectionner tout - Visualiser dans une fenêtre à part String.fromCharCode.apply(null,bytes);
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:
Je vous avoue ne pas savoir comment faire! Masi pas du tout
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, };
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!!
Partager