Téléinfo sans fil avec Arduino – Partie 1 : la théorie

Téléinfo sans fil avec Arduino – Partie 1 : la théorie

C’est quoi la Téléinfo ?

Les compteurs électroniques disposent de deux bornes nommées I1 et I2 qui permet au compteur de communiquer avec des équipements extérieurs. Le plus souvent, ce sont des gestionnaires de chauffage, qui permettent de couper les radiateurs en cas de forte consommation quand elle s’approche de la limite de l’abonnement pour éviter que ça disjoncte.

Il s’agit d’un bus UART-TTL mais avec un protocole d’encodage un peu particulier. Les informations sont envoyés en permanence de manière cyclique, on peut y trouver la puissance instantanée, la puissance souscrite, l’index d’heure pleine heure creuses, options tempo, la période tarifaire en cours…

Détail d’une trame

Caractéristiques physiques des signaux

  • Le signal est modulé avec une porteuse à 50kHz ± 3%
  • Transmission binaire unidirectionnelle à 1200 bauds
  • Logique de codage négative : présence de porteuse = bit à 0, pas de porteuse = bit à 1
Détail de la trame quand bit à 1 puis à 0

Il faudra donc convertir ce signal en trames TTL compréhensible par l’arduino.

De plus, l’impédance de l’entrée de l’appareil-récepteur doit être au minimum de 2000 ohms. On peut mettre plusieurs récepteurs en parallèle, tant qu’on respecte les normes d’impédances décrites dans la documentation téléinfo (ERDF-NOI-CPT_02E)

Caractéristiques logiques des signaux

  • Débit de 1200 bits/s
  • 7 bits par caractère
  • bit de poids faible en premier (LSB first)
  • 1 bit de parité, parité paire
  • 1 bit de stop

Dans un groupe d’information, les caractères sont transmis dans le sens de lecture (de la gauche vers la droite).

Détails d’une trame

Les caractères entre crochets sont ceux dont les valeurs ne correspondent pas à des caractères affichables.

[STX] = 0x02 (start of text)
[ETX] = 0x03 (end of text)
[LF] = 0x0A (new line)
[CR] = 0x0D (carriage return)
[SPACE] = 0x20 (espace) ou 0x09 (horizontal tab) selon le compteur.
[*] = Checksum, voir après.
[EOT] = 0x04 (end of transmission)

[STX]
[LF]ISOUSC[SPACE]45[SPACE][*][CR]
[LF]HCHC[SPACE]002369874[SPACE][*][CR]
[LF]HCHP[SPACE]002236954[SPACE][*][CR]
[LF]PTEC[SPACE]HP..[SPACE][*][CR]
[LF]IMAX[SPACE]044[SPACE][*][CR]
[LF]PAPP[SPACE]00550[SPACE][*][CR]
[ETX]

Chaque message à l’intérieur de la trame est composé de :

  • [LF]
  • L’étiquette du message (exemple : PTEC pour période tarifaire en cours)
  • [SPACE]
  • La valeur du message (exemple : HC.. pour les heures creuses)
  • [SPACE]
  • La clé de contrôle
  • [CR]

Durant un téléreport, la transmission téléinfo peut temporairement être coupée, dans ce cas la trame envoyée avant l’interruption sera :

[EOT]

Réception de trame dans putty. Ici, ADCO est tronqué, c’est le numéro d’identification du compteur.

Toutes les étiquettes et valeurs possibles dépendent de votre abonnement et sont disponibles dans la documentation téléinfo : ERDF-NOI-CPT_02E

La clé de contrôle

La clé de contrôle de chaque message  se calcule de la manière suivante : somme des valeurs des codes ascii du premier caractère de l’étiquette jusqu’au dernier caractère de la valeur (certains compteurs peuvent inclure le dernier séparateur entre la valeur et la clé de contrôle dans le calcul, mode n°2 dans la documentation erdf de la téléinfo).
On ne conserve que l’octet de poids faible. On ne conserve que les 6 bits de poids faible de cet octet et on ajoute la valeur 0x20.

sum = (sum & 0x3F) + 0x20

Si le résultat est différent de la clé de contrôle du message, on suppose que le message est erroné.

Exemple :

PTEC HC.. S

somme = 80 + 84 + 69 + 67 + 32 + 72 + 67 + 46 + 46 = 563
somme = (563 & 0x3F) + 0x20 = 0x33 + 0x20 = 0x53
Et 0x53.. c’est un S… donc le message n’est pas corrompu.

 

La suite dans la partie 2…

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *