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…
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
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]
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…