hallard / LibTeleinfo

Librairie Universelle Teleinformation (TIC)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Troncage lors de la conversion

FredM67 opened this issue · comments


Serial.print(atol(me->value));

printf("%ld",atol(me->value));

SERIAL_DEBUG.print(atol(me->value));

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é