Electricity meter monitoring with Raspberry Pi

26 Mar 2014

This article is a short translation of It describes how to monitor electricity consumption with a Raspberry Pi and simple electronics, on a french meter.

Table of contents

  1. La sortie téléinfo
  2. Previous works
  3. Architecture
    1. BOM
    2. Assembly
  4. Software
  5. Graphs
    1. RRD graph
    2. Javascript graph

La sortie téléinfo

All recent french meters by EDF have a teleinfo hardware output. Mine looks like that: "Compteur A14C5". The screw opens a door to two contacts labelled I1 and I2. Those contacts carry a signal with a documented protocol (in French) The meter reports information through that interface every second. This information includes, but isn’t limited to:

This protocol is standard, but it’s not compatible with typical computer (or electronics) protocols, so conversion is needed. Luckily, the teleinfo protocol was designed to be close enough to RS-232 that the job is not very hard.

The signal is as follows: a 0 is a 50kHz sine from -12V to 12V, a 1 is a constant +0V. I’ve designed a circuit that converts that into TTL-level RS-232, as required by the Raspberry Pi.

Previous works

Detecting the light pulse on the meter is a common solution, but it’s inferior to this protocol both in terms of reliability and exhaustivity. I’m ignoring these. Many people have also realized a system similar to mine, but they went for a more expensive solution than I liked, by working with USB UARTs and real RS-232 signal levels, neither of which are needed if you’re using a R-Pi. The simplest circuit is that (in French) described at the following webpage, but it makes use of a hard-to-find and expensive optocoupler:

My solution uses more components, but they’re much easier to find and less expensive overall.


I’m skipping the details as they really only pertain to EDF meter users, who read French. The circuit is a simple rectifier with a basic filter and optocoupler at the output.

This is the input from the meter: Meter input

This is the output with full-wave rectification: Full wave rectifier output



Assembled device in its cardboard case


The device will send data to the Pi’s serial port. C programs I wrote read the data, accumulate it over one minute, and pass it on to a web application for storage into a rrdtool database.

The programs are on my Github account:


RRD graph

RRD electricity consumption over a week

Interesting information is present on this graph, with fairly large granularity. I spent a lot of time cooking on Friday night - both the oven and the induction stove were on at the same time. You can also see that I cooked on Tuesday at noon in addition to the evening, while I usually only cook in the evening (I don’t remember what I ate and that unfortunately isn’t on the graph). On Wednesday I unplugged the system to take the pictures on this very page.

Energy total and associated cost are computed by RRD as part of

Javascript graph

Day consumption

This is an interactive Highcharts-based graph, created from the same data exported by rrdtool. On this screenshot, data over a single day is visible. The fridge’s compressor started up at 1AM and ran until 2AM, then again at 4AM until 5AM. I got up at 8.50AM and powered on my computer (which stays in suspend to RAM overnight). Right before noon, there is the typical consumption curve of one induction plate used to cook pasta: booster mode for a few minutes at 3.2kW (until the water boils), then 1.75kW (80% load) for the rest of the time. Then there is the electric water boiler for tea, vacuum cleaner, hair dryer… with a baseline of about 300W (computers, mechanical ventilation, fridge) during the day, and about 600W in the evenings (incandescent lighting).