Bonjour
J'ai prévu une option de compilation dans libTeleinfo.cpp pour le mode standard , je n'ai pas pus les essayer n'ayant pas encore le linky .
Je les met si ça peux aider.
Vous devez avoir le mode affiché sur votre compteur pour savoir si vous êtes en mode standard(9600 bds) ou historique(1200bds).
-----------------------------dans l'en-tête--------------------------------------
#define MODE_HISTORIQUE
-----------------------------dans le setup()---------------------------------------
#ifdef MODE_HISTORIQUE
Serial.begin(1200, SERIAL_7E1);
#else
Serial.begin(9600, SERIAL_7E1); //5.3.5. Couche physique document enedis Enedis-NOI-CPT_54E.pdf
#endif
-----------------------------dans TInfo::checkLine(char * pline) -----------
//5.3.6. Couche liaison document enedis Enedis-NOI-CPT_54E.pdf
#ifdef MODE_HISTORIQUE
if ( *p==' ' && ptok) {
#else
if ( *p=='\t' && ptok) { //reste a traiter les champs horodatés
#endif
--------------------------dans TInfo::calcChecksum------------------------
unsigned char TInfo::calcChecksum(char *etiquette, char *valeur)
{
uint8_t i;
#ifdef MODE_HISTORIQUE
uint8_t sum = ' '; // Somme des codes ASCII du message + un espace
#else
uint8_t sum = 0x09; // Somme des codes ASCII du message + un espace
sum+= 0x09;
#endif
// avoid dead loop, always check all is fine
if (etiquette && valeur) {
// this will not hurt and may save our life 😉
if (strlen(etiquette) && strlen(valeur)) {
while (*etiquette)
sum += *etiquette++;
while (*valeur)
sum += *valeur++;
#ifdef MODE_HISTORIQUE
return ((sum & 63) + ' ');
#else
return ((sum & 0x3f) + 0x20);
#endif
}
}
return 0;
}
}