Decoding OWL CM130 wireless monitor signal

So, i have a OWL CM130 wireless energy monitor for keeping an eye on power consumption at home.
It’s a great little gadget, but also a very cheap one: i bought it a few years ago for around 30€ in eBay, but it won’t let me do anything with the data, other than display it.

The OWL CM130 kit
The OWL CM130 kit

These usually work in 433MHz band, and i happen to have a 433MHz AM receiver similar to this one:
http://ardumarket.com/en/transmisors/transmisor-rf-fs1000a-330-443mhz-arduino-pic-id19.html

And this is the pinout:

FS1000A 433MHz receiver and transmitter pinout
FS1000A 433MHz receiver and transmitter pinout

 

So, i thought “This is a no brainer”!

I grabbed my Arduino, hooked up the receiver, attached a 17cm wire serving as an antenna, and loaded up the DecodeOOK sketch from JeeLabs. Source: (http://jeelabs.net/projects/cafe/wiki/Decoding_the_Oregon_Scientific_V2_protocol)

Despite the image says 10 to 15cm antenna, 433MHz translates to a roughly 70cm wavelength. Since i wasn’t thinking about a groundplane for such a small setup, a 1/4L antenna is used. So, 70/4 is a bit north of the 17cm, and is never going to be 10 to 15cm.

And this was the result:

OOK Decoder - serial window results
OOK Decoder – serial window results

 

Yeap! A whole lot of nothing!
I checked wiring, then i put the receiver very close from the emitter, but still, no go.

Since these things communicate through AM or OOK i thought i could ear the transmission through a speaker so i could keep track of the signal.
So, on the breadboard, i set this up:

AM Receiver circuit
AM Receiver circuit

 

And it looked like this:

AM receiver on the breadboard
AM receiver on the breadboard

It’s only a voltage devider, and a couple of filtering caps, but it gets the job done. I adjusted resistor value to keep the volume at the desired level.

And… noise! Just a lot of plain old additive white gaussian noise.

Frustrated, i stepped away from the setup, when suddenly, the noise stopped, and i eared bits going through. Then, more noise.
Then i came back, and still, nothing. And again, more bits after a while.

I thought that there should be a pattern for this, so i timed the bits going through with my phone.

Timing the transmission
Timing the transmission

 

This was probably the only WIN on this project. Nevermind the portuguese mambo-jambo, i clearly had a 60 second heartbeat. Further experimentation showed me that when power consumption changed, new data was sent at the 12, 24 and 36 second mark. And then again, at every 60 seconds.

So, i grabbed the Packet Analyzer tool from http://wiki.nethome.nu/doku.php/analyzer/start
I didn’t had a 3,5mm jack available, so, i made the next best thing [don't cringe]: put the speaker on top of my macbook’s mic. Waited for the 60second mark, and started recording.

But first, dear reader, behold the typical AM signal:

Timing the transmission
The AM signal

 

Our signal (on top) is multiplied by an high frequency signal, giving the AM signal on the bottom. AM is very distinct because it oscilates around zero, with similar positive and negative values. So, white noise should be a lot of up’s with similar downs.

But notice the beginning of the sample:

Protocol Analyzer - fail
Protocol Analyzer – fail

Looks promissing!

Then, once again, i tried with OOKDecode. And no joy.

I need to get hold of a 3,5mm jack, and figure out why all the noise – the bits simply aren’t clear enough for decoding. It could be a defective board, or simply a badly designed one: i might add some shielding before trying again.

Some thoughts worth noting

  • Signal was sporadic, and i successfully managed to figure out when i should expect a signal to be transmitted;
  • There were too much noise for my taste on the receiving end, even very close to the transmitter. Ground lines were properly attached, and i tried with and without antenna without improvement. Probably the board needs shielding?
  • I experimented with the screw adjusting frequency. No improvement.
  • On the transmitter there are some signal taps, but i can’t figure out what they are. I can read GND1, VDD1, FLM, PCLK, REST, RX, TX
    This doesn’t look like SPI or I2C. Straight out serial? What are the other pins for? Since i don’t have an osciloscope, i haven’t bothered – yet – on soldering a header for further investigation.
OWL CM130 transmitter
Inside the OWL CM130 transmitter

 

Edit

There’s a lot of work done over here http://www.instructables.com/id/Arduino-Wireless-Weather-Station-Web-Server/

However, the code is optimized for the weather station, and there’s a lot of modules going on. I wasn’t going for anything that complex, so, i went my own route (with my own set of issues to go along).

10 thoughts on “Decoding OWL CM130 wireless monitor signal”

  1. Try looking up an arduino logic analyzer sketch (I’m sure there is one, but don’t want to bother looking at the moment) and tapping the dat signal to the transmitter board. That’ll at least tell you what to expect and you’ll know for sure whether it’s transmitting.

  2. might I suggest a few notes, firstly, you don’t need an oscilloscope, that’s just plain over-kill. Get a multimeter with a basic resistance setting and start poking after reading some reference sheets!

    Secondly on the noise when you were at the workbench, Do you work under florescent Lighting by chance? That may be the cause! Or perhaps your phone..

    Thirdly, the transmission noise may be some form of Obfuscation, Keying, or Send/Ack protocol.. though that seems far-fetched for such a cheap, simple device… It’s not out of the question!

  3. Look on the back of the units for FCC ID numbers. You can enter those numbers into the FCC website and view whatever public documents that the company submitted for FCC approval. Sometimes there are schematics and even some info on their protocol.
    If you have adjusted the coil, the the radio receiver is detuned. If the radio is not tuned correctly then the reception distance is greatly reduced. Bring the transmitter much closer to the radio until you get the protocol decoded. Then increase the distance slowly while readjusting the coil on the receiver. Since it only outputs data every minute or so, this is a tedious process.
    When using these radios, they are kind of sensitive to the input power supply voltage. Some seem to work better at the lower end of the operation range. Others work better at the higher end. Look at the data sheet and vary the input power supply.

Leave a Reply