Protocol of the Teleinfo home sensor |
Each frame is 71 bits long. It is composed of:
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 |
When extracting data from the 3 examples, we get:
Example 1
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
The 1st bit of each word is LSB, so we have to reverse the 4 bits of each word.
The active values of the sensor is coloured in [green] in the following tables:
Example 1
1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | ||||||||||||
C | 7 | 9 | 5 | 1 | 9 | C | 6 | 1 | 1 | 5 | 9 | ||||||||||||||||||||||||||||||||||||||||||||||||
Check Xor : (C ^ 7 ^ 9 ^ 5 ^ 1 ^ 9 ^ C ^ 6 ^ 1 ^ 1 ^ 5) = 0 Check Sum : (const5 + C + 7 + 9 + 5 + 1 + 9 + C + 6 + 1 + 1 + 5) and F = 9 |
1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | ||||||||||||
C | 7 | 0 | 9 | 4 | 9 | 0 | 3 | 2 | 1 | F | 3 | ||||||||||||||||||||||||||||||||||||||||||||||||
Check Xor : (C ^ 7 ^ 0 ^ 9 ^ 4 ^ 9 ^ 0 ^ 3 ^ 2 ^ 1 ^ F) = 0 Check Sum : (const5 + C + 7 + 0 + 9 + 4 + 9 + 0 + 3 + 2 + 1 + F) and F = 3 |
1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | ||||||||||||
C | 7 | B | 1 | 3 | 9 | 3 | B | 1 | 1 | 3 | 3 | ||||||||||||||||||||||||||||||||||||||||||||||||
Check Xor : (C ^ 7 ^ B ^ 1 ^ 3 ^ 9 ^ 3 ^ B ^ 1 ^ 1 ^ 3) = 0 Check Sum : (const5 + C + 7 + B + 1 + 3 + 9 + 3 + B + 1 + 1 + 3) and F = 3 |
Sensor type is C | |
Sensor Address 7 | |
Data values | |
CheckXor | |
Checksum |
The full value of the power counters is not transmitted, only the 16 LSB bits are transmitted in Hex.
To get the intensity value, the received Hex data has to be divided by 16.
The first block is the LSB, so the values are repectively:
Nibble definition in case Hex [8] is FF:
the power data is the one of the rate given by rate_p power = Hex [5,4,3,2] rate_p = Hex [6] rate = Hex [9]
Nibble definition in case Hex [8] is 00..FE:
the power data matches the rate power = Hex [5,4,3,2] intens = Hex [8,7,6] * 16 rate = Hex [9]
rate Values:
the current rate is given by Hex [9] 1: BASE (Base) 2: HC (Heures creuses) 3: HP (Heures pleines) 4: EJP HN (EJP normal) 5: EJP HPM (EJP plein tarif) 8: TEMPO HC B (Tempo Bleu Heures creuses) 9: TEMPO HP B (Tempo Bleu Heures pleines) A: TEMPO HC W (Tempo Blanc Heures creuses) B: TEMPO HP W (Tempo Blanc Heures pleines) C: TEMPO HC R (Tempo Rouge Heures creuses) D: TEMPO HP R (Tempo Rouge Heures pleines)