Reading your smart meter?

For the last year or so I have been wanting to do a power monitor for my house but have always thought reading the smart meter would be a good way to go. My meter is an Itron remoter readable RF smart meter. So why not get the usage from it since it is always broadcasting it. This same thing can also be done for my gas and water meter... My water company last year started having all water meters read by satellite!

So has anayone done this yet?

I did find this guy who has a lot of info, but does not look like he ever finished.

No comments on this?

I have been wanting to do a power monitor for my house

Sometimes you can get a password from the power company and go online to check your usage.

It's not easy to build an RF receiver or transmitter. Do you have a frequency counter and an oscilloscope?

Maybe it's WiFi. I'm sure there's a receiver/trranslator on a nearby pole. The meters are not directly communicating with the satellite.

You'd have to know the frequency and the protocol. And, I'm sure it's encrypted... They can't have you transmitting your own made-up data for your meter or your neighbor’s meter. :smiley:

I built a setup to read data from my Iltron meter. All the details are here:

http://1474orchard.ca/projects/?x=entry:entry101227-004301
http://1474orchard.ca/projects/?x=entry:entry101225-004920
http://1474orchard.ca/projects/?x=entry:entry110131-003600

Nothing fancy though. I just count the IR pulses.

It's not easy to build an RF receiver or transmitter.

Do you have a frequency counter and an oscilloscope?
Who said I was going to build the RF part. :wink:
I have a bunch of 900Mhz radios that will receive the broadcast.

Do you have a frequency counter and an oscilloscope?

Yes, and no...

Maybe it's WiFi. I'm sure there's a receiver/trranslator on a nearby pole. The meters are not directly communicating with the satellite.

They are using satellites..
Have a look at http://www.sfgate.com/cgi-bin/article.cgi?f=/g/a/2012/01/18/prweb9113298.DTL

You'd have to know the frequency and the protocol. And, I'm sure it's encrypted... They can't have you transmitting your own made-up data for your meter or your neighbor’s meter. :smiley:

Apparently you did not look at the first link I provided. The frequency(s) and protocol are known. The data is NOT encrypted.

I don't have an oscilloscope but arrived at a solution through trial
and error for my Itron CL200 meter. The CL200 seems to output an
unmodulated infrared pulse of about 10ms width. I used the infrared
sensors from Sparkfun (SEN-00241) successfully for this. Don't use
the Sparkfun IR Receiver Diode SEN-10266, it is for modulated IR
signals, such as from TV remotes, and will not work with pulses from
the Itron CL200.

The nature of the SEN-00241 sensor, and probably any other sensor as
well, is such that it is sensitive to ambient IR radiation, so you
have to shield it. I just masked a good area of the IR emitter on the
CL200 with black electrical tape. The ambient light drives the output
voltage down. So additionally, I route output from the IR sensor
through a LM339 comparator to clean up the output to good high and low
levels to count the pulses accurately on my Arduino. Even though my
meter gets sunlight, the masking and the processing seems to be
adequate.

I verified the correct pulse count by comparing it tothe kWH display
on the CL200, the kWH increments by 1 excatly 1000 pulses counted on
the Arduino.

I have the same meter cl200

I got a simple IR from radio shack and used software to filter - mine is in direct sunlight - used duck tape to make a shield.

been running for 2 years - total error rate is .25% over that time rate - varies month to month most of the time about .5% and max about 3.5% - as I don't know what time the read it I always use 12 noon from my readings.

on a side topic - this month it all got discounted as I had to pull my meter to replace a main breaker that was over heating (and not tripping) and filling the house with a dead squirrel/fish type of smell. I'm guessing the anti what ever works because the power company came out and pulled all my stuff off the meter. When I pulled the meter it all came a part on me - the clear plastic twists off and the gray cover is only held on with some tabs also came off with out trying. I didn't push the (what looked like a reset) button under it all.... i should have taken't pictures but at the time was only trying to get the power off to replace the meter so my home wouldn't burn down

anyways here's my code - the odd filtering is to try and account for different sunlight levels then reading the meter.

unsigned long powerCount = 0;
unsigned long powerCountLast = 0;
unsigned long powerLastBlink = 0;
unsigned long powerK5count =0;
unsigned long powerW1=0;
unsigned long powerW2=0;
unsigned long powerW3=0;
unsigned long powerW4=0;
unsigned long powerW5=0;

float powerBlinkLength = 80;
float powerBlinkRate = 200;
int powerBlinkFlag = 1;
float powerFilterR = 600;
float powerFilterH = 600;
float powerFilterC = 600;
float powerMaxL = 1;
float powerMaxH = 0;
int powerReading = 0;

void PowerLoop() {
  
  powerReading = analogRead(power_input);
  powerFilterR += .55 * (powerReading-powerFilterR);
  powerFilterH += .01 * (powerReading-powerFilterH);
  powerFilterC += .9 * (powerReading-powerFilterC);
  
  if (powerFilterC/powerFilterH < powerMaxL) powerMaxL = powerFilterC/powerFilterH;
  if (powerFilterC/powerFilterH > powerMaxH) powerMaxH = powerFilterC/powerFilterH;
  
  serialPrint();
  
  if ((powerFilterC/powerFilterH <.9 && powerBlinkFlag ==1 && millis()-powerLastBlink > 50) || powerLastBlink > millis())
  {
      powerBlinkFlag = 0;
      powerCount++;
      float rate = millis()-powerLastBlink;
      if(rate>0) powerBlinkRate += .05 *(rate-powerBlinkRate);
      powerLastBlink = millis();   
  }
  else if (powerFilterC/powerFilterH > 1.01 && powerBlinkFlag == 0)
  {
    if ( millis()-powerLastBlink > 30|| powerLastBlink > millis()){
      float rate = millis()-powerLastBlink;
      if (rate>0) powerBlinkLength +=  .05*(rate-powerBlinkLength);
      powerBlinkFlag = 1;
    }
  }
 unsigned long w = millis() - lastconnect;
 
 if ( w < 60000) { powerW1 = powerCount; }
 else if (w < 120000) { powerW2 = powerCount; }
 else if (w < 180000) { powerW3 = powerCount; }
 else if (w < 240000) { powerW4 = powerCount; }
 else if (w < 300000) { powerW5 = powerCount; }
}