Bonjour
Je constate que j'ai un gros problème avec un bon de code qui a fonctionner pendant quelques année: Il n'accepte pas les nombres néatif.
Et pourquoi je ne l'ai jamais vu? ben parce que cet hiver je mesure la température extérieur alors qu'avant mon projet ne tournait qu0en été

Le problème est le suivant. Les données sont envoyés avec LoRaWAN sous ce format

Code : Sélectionner tout - Visualiser dans une fenêtre à part
6B343138702D313573313839
ce qui donne
k418p-15s189
Les lettres servent à définir le capteur et les valeurs sont, ben les valeurs des capteur.
On voit que le capteur p à une valeur négative.

J'utilise ce code pour "décortiquer" ma ligne
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
 
function Decoder(bytes, port) {
  var str=String.fromCharCode.apply(null,bytes);
  var astr = str.split(",");
 
  var regex = /([a-z]+)(\d+)/g;
 
  //var resultats = [];
	var paire;
 
  var decoded = {}
  var te,pr,hu,lu,w1,w2,w3,da,ts,ga,ba,ar,an,it,wr,b1,b2,b3,b4;
  while (null !== (paire = regex.exec(astr[0]))) {
		//console.log(paire[1]);
		switch(paire[1]){
		  case 'a':
		    //console.log("te",paire[2]);
		    te=paire[2];
		    break;
		  case 'b':
		    //console.log("pr",paire[2]);
		    pr=paire[2];
		    break;
		  case 'c':
		    //console.log("hu",paire[2]);
		    hu=paire[2];
		    break;
		  case 'd':
		    //console.log("lu",paire[2]);
		    lu=paire[2];
		    break;
		  case 'e':
		    //console.log("w1",paire[2]);
		    w1=paire[2];
		    break;
		  case 'f':
		    //console.log("w2",paire[2]);
		    w2=paire[2];
		    break;
		  case 'g':
		    //console.log("w3",paire[2]);
		    w3=paire[2];
		    break;
		  case 'h':
		    //console.log("da",paire[2]);
		    da=paire[2];
		    break;
		  case 'i':
		    //console.log("ts",paire[2]);
		    ts=paire[2];
		    break;
		  case 'j':
		    //console.log("ga",paire[2]);
		    ga=paire[2];
		    break;
		  case 'k':
		    //console.log("ba",paire[2]);
		    ba=paire[2];
		    break;
		  case 'l':
		   // console.log("ar",paire[2]);
		    ar=paire[2];
		    break;
		  case 'm':
		   // console.log("an",paire[2]);
		    an=paire[2];
		    break;
		  case 'n':
		    //console.log("it",paire[2]);
		    it=paire[2];
		    break;
		  case 'o':
		    //console.log("wr",paire[2]);
		    wr=paire[2];
		    break;
		  case 'p':
		    //console.log("wr",paire[2]);
		    b1=paire[2];
		    break;
		  case 'q':
		    //console.log("wr",paire[2]);
		    b2=paire[2];
		    break;
		  case 'r':
		    //console.log("wr",paire[2]);
		    b3=paire[2];
		    break;
		  case 's':
		    //console.log("wr",paire[2]);
		    b4=paire[2];
		    break;
 
		}
		//resultats.push(paire);
	}
 
  return {
    te:te,
    pr:pr,
    hu:hu,
    lu:lu,
    w1:w1,
    w2:w2,
    w3:w3,
    da:da,
    ts:ts,
    ga:ga,
    ba:ba,
    ar:ar,
    an:an,
    it:it,
    wr:wr,
    b1:b1,
    b2:b2,
    b3:b3,
    b4:b4,
  }
 
}
Si p est positif, soit 15, J'ai ce résultat avec cet hex (6B 34 31 38 70 31 35 73 31 38 39)
{
"b1": "15",
"b4": "189",
"ba": "418"
}
Par contre si p est négatif, j''ai ceci

{
"b4": "189",
"ba": "418"
}
alors que je devrais évidemment avoir
{
"b1": "-15",
"b4": "189",
"ba": "418"
}
Je pense que c'est parce qu'il considere que - est un caractère, alors b, n'a plus de valeur.

Je me demande alors comment je pourrais modifier mon regex pour le - fasse partie du nombre qui précède la lettre. Voyez vous?

Je connais rien avec les regex. On m'avait aidé pour y arriver-

Milles mercis pour vos lumières