Decoding an old SkyScan wireless weather sensor
Many years ago, I was given one of those massive radio clocks that also reported indoor/outdoor temperature and humidity. They were apparently sold at Costco under the "SkyScan" brand, and had two parts: the (very large) indoor display which stood upright with a little plastic foot in the back, and a small sensor which was intended to be placed outside.
It was never quite 100%. It had issues receiving the 60 kHz WWVB clock signal and so it would get out of sync. It also apparently had its own rules for DST baked in, so when the US changed them in 2007, it would go stupid twice a year for a couple of weeks.
It had other problems. I once caught it saying that it was the 9th day of the 14th month, and oh hey, it's a Tuesday. Lousy Smarch weather or no, that's so unbelievably wrong I just had to stop using it.
However, I kept the sensor more of a curiosity. In recent years I got into the whole business of tracking temperatures in certain interesting places, and this old sensor kept bugging me. The usual tools can see it doing its 433 MHz announcements but nobody seems to have decoded it, or at least, documented it. I've been taking a whack at it every now and then, and finally got it to a usable spot.
So, for the sake of the dozen or so people out there who might have one of these things nearly 20 years later and who want to use just the remote sensor, here's what I've learned about it.
The encoding is no frills: on is 1, off is 0. The on pulse or the off gap lasts about 3900 us (curiously close to 1 sec / 256, for what it's worth).
Transmissions are sent twice, twelve seconds apart. The first one has a particular bit set to 0, and the second one has it set to 1, so I've called it the transmission number. The whole process restarts every 60 seconds.
There appears to be some kind of preamble or sync which is just 10.
Bits 2-33 are followed by inverted versions of themselves in bits 34-65.
Humidity is BCD: 4 bits and another 4 bits, so [4] [7] for 47%.
The channel seems to be 3 bits but is only ever 1, 2, or 3.
Temperature is also BCD with 3 groups of 4 bits: [3] [2] [7] == 32.7C.
All of this has been determined empirically. There are timing diagrams for this and other similar devices on the usual "fccid" sites, but none of them match this scheme exactly.
So, from the top, 2 preamble bits (10), then...
4 + 4 humidity bits (BCD)
1 transmission bit
3 channel bits
1 sign bit (1 = negative temperature)
1 battery bit (1 = battery is low)
6 id bits
4 + 4 + 4 temperature bits (BCD)
... and then the part past the preamble repeats, inverted. This can be used to detect errors.
For the sake of grep bait: the SkyScan 81690 with a sensor bearing the FCC ID of OQH-000000-05-002, or perhaps OQH-CHUNGS-05-002. It might be a "C-8102" model, but again, all of the FCC stuff I've been able to find is not quite right.