Lecture du Linky via le port série de l'esp8266 .. des particularités ?



  • Bonjour,

    Je me suis fait il y a un moment un système équivalent (bien que beaucoup .. beaucoup plus simple) à base d'esp8266 :

    compteur => optocoupleur => port série de l'esp8266

    Le code de l'esp8266 me copie simplement les lignes en entrée et me les renvoie en syslog sur mon serveur ou un programme les traite pour les intégrer dans une base grafana.

    Bref il à fonctionné sans soucis sur mon ancien compteur jusqu'au changement vers le linky, depuis impossible de récupérer les données de téléinfo, j'ai vu qu'il fallait changer la résistance d'entrée de l'optocoupleur pour une 10K .. mais rien n'y fait .. je ne récupère plus rien, j'ai tenté en 1200Bauds, en 9600 Bauds .. pareil, j'ai testé la téléinfo au travers d'un arduino ou je n'ai pas pu règler correctement la configuration série mais à priori le linky envoi bien des datas ..

    La question est donc : y a-t-il un truc particulier à respecter pour le linky ??

    Merci



  • Bonjour,

    Je suis la partie électronique d'un montage linky vers esp8266 avec alimentation via la borne A, qui ne marche pas pour l'instant.
    mais l'article Démystifier le décodage Téléinformation et l’optocoupleur SFH620 parle du choix des résistances pour brancher sur un esp8266, il y a peut être l'info qu'il te manque...



  • 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;
    }
    }