OWL CMR119 Power Meter Decode - Oregon V3 Protocol

Hey All,

I am looking to receive and process the data from my OWL CMR119 wireless power meter.

Using an Uno hooked up with a XY-MK-5V 433MHz receiver I am able to get a steady stream of data in what appears to be Oregon Scientific V3 format, the output looks like this :-

OSV3 1A00343D0020990B0000
OSV3 1A00343D0070A30B0000
OSV3 1A00343D00C0AD0B0000
OSV3 1A00343D0010B80B0000

The first character is the channel, this changes from 1 to 3 if I change the channel on the transmitter unit, the A always remains the same and the next two characters are a bit random, but if I force an update by holding the check button down on the transmitter these two characters form a countdown, this is 100% repeatable.

Now decoding the rest is where the fun begins, I thought I had it at one point where a calculation matched what I was seeing on the CMR119 display unit, the issue then arose where I increased the monitored current and the calculation broke down.

I believe the transmitter module and clamp are only monitoring amps, sadly the display unit doesn't have an option to display amps, I was using a separate meter alongside the Owl to check / confirm amp usage.

With a 0.3A load I was able to see a 3 in the datastream that drops to zero when the load is removed, this again is 100% repeatable, the issue is when the load is increased to something else the values no longer match.

Using the below calculation I was able to take the 0.3A figure and arrive at the same displayed kW on the CMR119 display unit :-

 pF x A x V / 1000 = kW

 0.7 x 0.3 x 240 / 1000 = 0.0504

The display unit only has voltage options for 110,230,240 and 250, hence me using 240.

Anyone have any further information on these units that might help?

I finally got round to capturing more data, hopefully someone can see a pattern I might be missing.

This first capture shows the data with a load, then switching the load off and then back on.

Load ON
OSV3 1A 00 41 36 00 70 18 03 00 00 
OSV3 1A 00 41 36 00 C0 22 03 00 00 
OSV3 1A 00 41 36 00 10 2D 03 00 00 

Load Switched OFF
OSV3 1A 01 41 06 00 50 35 03 00 00 
OSV3 1A 00 41 06 00 50 35 03 00 00 
OSV3 1A 00 41 06 00 50 35 03 00 00 
OSV3 1A 00 41 06 00 50 35 03 00 00 

Load Switched Back ON
OSV3 1A 09 41 36 00 80 35 03 00 00 
OSV3 1A 00 41 36 00 B0 3E 03 00 00 
OSV3 1A 00 41 36 00 00 49 03 00 00 
OSV3 1A 00 41 36 00 E0 52 03 00 00

This second capture is when I hold down the check button on the CMR119 transmitter unit, you can see the countdown, this was done with the load on.

OSV3 1A 00 41 36 00 80 67 03 00 00
OSV3 1A 2F 41 36 00 C0 6C 03 00 00 
OSV3 1A 2E 41 36 00 20 6D 03 00 00 
OSV3 1A 2D 41 36 00 80 6D 03 00 00 
OSV3 1A 2C 41 36 00 E0 6D 03 00 00 
OSV3 1A 2B 41 36 00 40 6E 03 00 00 
OSV3 1A 2A 41 36 00 A0 6E 03 00 00 
OSV3 1A 29 41 36 00 00 6F 03 00 00 
OSV3 1A 28 41 36 00 60 6F 03 00 00 
OSV3 1A 27 41 36 00 C0 6F 03 00 00 
OSV3 1A 26 41 36 00 20 70 03 00 00 
OSV3 1A 25 41 36 00 80 70 03 00 00 
OSV3 1A 24 41 36 00 E0 70 03 00 00 
OSV3 1A 23 41 36 00 40 71 03 00 00 
OSV3 1A 22 41 36 00 A0 71 03 00 00 
OSV3 1A 21 41 36 00 00 72 03 00 00 
OSV3 1A 00 41 36 00 60 72 03 00 00

Well, I see an ETX character in each message, 0x03, so you only care about the stuff to the left of the ETX.

Paul

Paul_KD7HB:
Well, I see an ETX character in each message, 0x03, so you only care about the stuff to the left of the ETX.

Paul

Hey Paul,

Sadly its not always there, here is another capture with greater load, this was approx 2.9A and 0.722KW.

OSV3 1A 05 41 A6 02 70 BC 05 00 00 
OSV3 1A 00 41 B6 02 E0 06 06 00 00 
OSV3 1A 00 41 B6 02 70 99 06 00 00 
OSV3 1A 08 41 36 00 C0 B1 06 00 00 
OSV3 1A 00 41 B6 02 D0 23 07 00 00

Don't know if you got any further with this?

I capture somethnig like this:

OSV3 2A 08 01 C1 03 20 16 DA 1C 00 00 60 A4

Which is longer than your captures.

These bytes:16 DA 1C if reversed to 1C DA 16 gradually increment. Not sure if this is time or total power.

OK, got as far as I can now.

This is a reading:

OSV3 2A0101410230DBA322000050E3

Which decodes

OSV3 2A 01 01 4102 30DBA322 000050E3

first nibble is channel. second is fixed at 0xA.

Next byte 0x01 is the counter. This drops from 9 to 0 every 6 seconds regardless of if a reading is actually sent. The transmitter won't send a reading is it hasn't changed until it gets to 60 seconds since the last send.

So you can work out the time between readings and check actual to see if you have missed one due to noise etc.

Next 2 bytes 0x4102 is the instananeous power in little endian, so actually 0x0241. in watts. I found this to be displayed slightly higher for some reason. At low powers, say 500w the display shows 3 watts higher. At 3kw power, the display is showing about 17w higher. I assume this is a fudge factor to allow for transducer losses etc. Not sure why it's applied in the display unit and not in the transmitter though.

Next 4 bytes 0x30DBA322 is accumulated enrgy in watt seconds. again little endian so actually 0x22a3db30. divide by 3600 to get wh and then divide by 1000 to get kwh. This also reads slightly different on the display. at the time I took the reading the display was showing 1.023kwh higher. Presumably this will gradually increase is there is a fudge factor in the power readings? I check again after a day or so.

Rest of bytes unsure but last 4 is probably checksum or CRC.