Bonjour à tous,
Je profite de ce confinement pour résoudre mes dysfonctionnements wifinfo depuis passage en compteur linky.
Je suis reparti de la dernière version que j'ai trouvé 1.0.7 (https://github.com/theGressier/LibTeleinfo).
Je pense avoir trouvé quelques coquilles dans le code (pas liées aux dernières modifs v1.0.7) que je vous remonte donc :
- problème fonction Debug et agresse ip
- problème fonction Debug si le message dépasse la taille de logbuffer => reset par watchdog hard
- problème fonction jeedompost qui n'envoie pas le premier label
- checksum dans la libraire mise en défaut par les caractères ascii minuscules
Voici plus en détail les différents problèmes :
1/ problème fonction Debug et agresse ip :
En activant l'option syslog, j'ai une erreur à la compilation
"call of overloaded 'Myprintln(IPAddress)' is ambiguous"
le problème vient de la ligne suivante. j'ai résolu ça en convertissant l'adresse ip en texte d'abord.
DebugF("IP address : "); Debugln(WiFi.softAPIP());
2/ problème fonction Debug si le message dépasse la taille de logbuffer => reset par watchdog hard
Le problème apparaît dans l'appel Debug(data); dans la fonction jeedomPost (webclient.cpp)
} // While me
// Json end
data += "}}}";
Debug(data);
ret = httpPost( config.jeedom.host, config.jeedom.port, (char *) url.c_str(), (char *) data.c_str()) ;
J'ai sécurisé la fonction myprint et myprintln pour qu'elle tronque le message si il est trop long
3/ problème fonction jeedompost qui n'envoie pas le premier label
Au début de la boucle while on fait me= me->next
// Loop thru the node
while (me->next) {
// go to next node
me = me->next;
if( ! me->free ) {
Il faudrait soit le faire à la fin soit ne pas le faire la première fois comme c'est fait dans la fonction build_emoncms_json
while (me->next) {
if(! first_item)
// go to next node
me = me->next;
if( ! me->free ) {
4/ checksum dans la libraire mise en défaut par les caractères ascii minuscules
j'ai de mon côté des anomalies de nom ou de valeur d'étiquette qui remonte sur la page wifinfo ou sous jeedom. Les dernière modifs de Dombrain ne couvrent pas les valeurs qui contiennent des lettres au lieu de chiffres. Je pense que le problème de base vient du fait que le checksum dans la librairie teleinfo est mis en défaut par les lettres en minuscule.
voici un exemple concret que j'ai :
Nom : ADCO
Data=811961841v61
Checksum =75
L'ADCO normal vaut 811961841661
si je recalcul le checksum :
ADCO =65+68+67+79=279
Data nok=811961841v61=56+49+49+57+54+49+56+52+49+118+54+49=692
Data ok =811961841661=56+49+49+57+54+49+56+52+49+54 +54+49=628
ADCO+Data +espace = 279+32+692=1003 = Bin 001111101011
ADCO+Data ok+espace = 279+32+628=939 = Bin 001110101011
on ne conserve que les 6 bits de poids faible + 32 (espace)
ce qui donne :
cas data NOK=>Bin 101011=43 =>43+32=75
cas data OK =>Bin 101011=43 =>43+32=75
la lettre v et le chiffre 6 ont les mêmes 6 premiers bits
'6'=dec 54=bin 0110110
'v'=dec 118=bin 1110110
le checksum ne semble pas compatible de caractère ASCII à 7 bit