Open mzealey opened 4 years ago
Looks somewhat like the CM180 or CM160. I might take a look at this in a few days.
@mzealey Can you check out the feat-cm130
branch, run for some time and note the codes along with the expected readings?
Should be something like e.g.:
CM130(orig) {97} 00 c8 bf 00 00 00 00 00 00 00 00 69 10 : id 1234, power 42W, energy 9kWh
CM130(orig) {97} 00 c4 0f 00 00 00 00 00 00 00 00 4c 10 : id 1234, power 41W, energy 11kWh
CM130(orig) {97} 00 cc fd 00 00 00 00 00 00 00 00 9d 10 : id 1234, power 0W, energy 17kWh
Apologies for the delayed response. Here is some output compared with rflink (r48):
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 d2 00 21 7f 50 00 00 00 85 10
20;03;OWL_CM130;ID=0085;WATT=02d1;KWATT=0000006d;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 a2 00 e0 10 60 00 00 00 b5 10
20;08;OWL_CM130;ID=0085;WATT=02a0;KWATT=0000006d;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 82 00 6b 31 60 00 00 00 be 10
20;10;OWL_CM130;ID=0085;WATT=028b;KWATT=0000006f;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 a2 00 60 72 60 00 00 00 fd 10
20;1B;OWL_CM130;ID=0085;WATT=027f;KWATT=00000070;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 72 00 2a 03 60 00 00 00 c1 10
20;1C;OWL_CM130;ID=0085;WATT=027a;KWATT=00000071;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 a2 00 8f c4 60 00 00 00 46 10
20;2A;OWL_CM130;ID=0085;WATT=02ad;KWATT=00000074;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 a2 00 0d 65 60 00 00 00 b4 10
20;2C;OWL_CM130;ID=0085;WATT=027f;KWATT=00000074;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 72 00 21 06 60 00 00 00 5c 10
20;2F;OWL_CM130;ID=0085;WATT=0271;KWATT=00000074;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 a2 00 89 3a 60 00 00 00 9c 10
20;4D;OWL_CM130;ID=0085;WATT=09d7;KWATT=00000079;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 79 00 c1 9e 60 00 00 00 57 10
20;55;OWL_CM130;ID=0085;WATT=0971;KWATT=0000007e;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 0b 00 ad c0 70 00 00 00 fb 10
20;5A;OWL_CM130;ID=0085;WATT=09e8;KWATT=00000081;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 e9 00 4c 13 70 00 00 00 7d 10
20;5D;OWL_CM130;ID=0085;WATT=09ec;KWATT=00000083;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 d9 00 c9 65 70 00 00 00 a3 10
20;60;OWL_CM130;ID=0085;WATT=09d9;KWATT=00000086;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 59 00 ae a7 70 00 00 00 c8 10
20;65;OWL_CM130;ID=0085;WATT=095e;KWATT=00000088;
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 a2 00 a3 d9 70 00 00 00 51 10
20;6D;OWL_CM130;ID=0085;WATT=02a3;KWATT=0000008b;
(so i make that:
data = data_make(
"brand", "", DATA_STRING, "OS",
"model", "", DATA_STRING, _X("Oregon-CM130","CM130"),
"id", "House Code", DATA_INT, (msg[2]&0x0F << 4) | msg[2] >> 4,
but can't figure out how it obtains the watt/kwatt calcs from the raw data...
Raw data is likely to be current...
oregon_scientific_v3_decode: CM130(orig) {97} 00 83 58 [a2] 00 a(3) d9 70 00 00 00 51 10 20;6D;OWL_CM130;ID=0085;WATT=02a3;KWATT=0000008b;
[a2] (3) -> 2a3 => WATT=02a3
feat-cm130 updated with this info
But I think we need more messages with matching readings to create a complete decoder.
If it's any help, I'm using the feat_cm130 branch code at the moment, the version that gives power1_W. The value being returned is 16 times higher than the measured power in Watts, or 16000 times higher than the kW value shown on the Owl display unit.
Can you record transmissions with matching readings? Then we can figure out the encoding of values.
I may be able to do that but I've a few obstacles to overcome. What is the best format/method of doing this, please? At the moment the readings are very close. When displaying 0.25kW on the OWL I log 0.26kW with rtl_433 (after dividing power1_W by 16,000). At 3kW they are similarly close. I would like to give it a few days to see if any unexpected numbers appear, I have already seen a single reading that was much higher than expected, as there's no checksum currently this could be just corrupted data because of interference.
Well the code is written based on 1 sample. We really need more samples and readings to verify the code and to figure out the checksum. After we have done that we can merge the code in the main branch.
And we are missing energy. For that we need readings that correspond to values on the meter.
Here's the output of stdout and stderr mashed up with a csv of "Energy (kW)" and "Total (kWh)" below. Created by taking a webcam snapshot of the display after rtl_433 decoded a CM130 message. There may be a problem that the OWL display doesn't update quickly enough. There was about a second delay after the message was received as a result of my ancient laptop taking a while to start ffmpeg each time. A few of the times when I'd expect the highest powers seem to be reading very low powers so possibly a byte/nibble missing somewhere? Hope this is of some use. I've since found ssocr, so may have another go with fully automating this if I can get a better webcam… I will add a few seconds delay before taking the photo if I try again.
I looked into the payload and I found this:
36 d0 07 00 = 27.47 55 d0 07 00 = 27.48 ab d0 07 00 = 27.49
If we swap this we get something that increases as the kWh increases. The conversion factor is unknown. I'll export the raw value and we'll see if we can figure out the rest.
Status and plans?
Did a couple of captures while hitting the reset button on this - sister of the CM160 I guess? Do you need anything more to help debug this thing?