Troncage lors de la conversion
FredM67 opened this issue · comments
LibTeleinfo/examples/ESP32/ESP32.ino
Line 244 in 5ed8e32
Il faut utiliser 'atoll' à la place de 'atol'
Bonjour
la taille max d'un long (unsigned) est de 4294967295, quelles étiquettes ont des nombres pouvant être supérieurs ?
Ok je comprend mieux.
En fait l'ADSC (ex ADCO) ne doivent pas être traités en numérique car ce sont des numéro de série.
Idem pour le PRN si on traite en numérique au final on tronque des 0 devant et les ID ne seront plus les mêmes (longueur)
Ce qu'il faut faire c'est en fonction de tes besoins les traiter avant envoi par exemple dans Teleinfo_DenkyD4.ino
ajouter la comparaison suivante pour ne pas traiter en number
, le numero de série doit faire 16 caractères et à l'arrivée aussi sinon ce n'est plus le même (même si mathématiquement parlant c'est la même valeur)
// we have at least something ?
if (me->value && strlen(me->value))
{
boolean isNumber = true;
char * p = me->value;
if ( strcmp(me->value, "ADCO") || strcmp(me->value, "ADSC") || strcmp(me->value, "PRM") ) {
isNumber = false;
}
// check if value is number
while (*p && isNumber) {
if ( *p < '0' || *p > '9' )
isNumber = false;
p++;
}
// this will add "" on not number values
if (!isNumber) {
SERIAL_DEBUG.print(F("\"")) ;
SERIAL_DEBUG.print(me->value) ;
SERIAL_DEBUG.print(F("\"")) ;
}
// this will remove leading zero on numbers
else
SERIAL_DEBUG.print(atol(me->value));
}
Comme ça les valeurs sont passée en mode string
dans le JSON
Oui mais je dois mettre à jour les exemples en conséquence quand même, soit en string soit en atoll tout dépend de l'usage souhaité