I found this to be a good starting point: http://forum.arduino.cc/index.php?topic=155483.0 for both inspiration and measurement technique. The Serial Monitor changes too fast to be useful, but the Serial Plotter is great.
It appears that every minute, 6 identical packages are transmitted. Each package is 44 bits long. There are 3 types of bits:
- H (header bits), consisting of pulses of 950us followed by delays of 1650us;
- 0 (zeros), pulses of 300 us followed by delays of 700us;
- 1 (ones), pulses of 500 us followed by delays of 700us.
(pulse duration and delay are somewhat variable around the values above).
The protocol seems to be:
- Bits 0-3: header
- Bits 4-11: device ID, changes when replacing the batteries. Unlike in the post linked above, bit 11 does not appear to be a checksum.
- Bits 12-15: either 1111 for automatic transmission (once every 60 seconds) or 1011 for manual transmission (using the button in the battery compartment). Manual transmission does not update the weather station.
- Bits 16-27: encode the temperature. The system of encoding decimal digits seems to be ditched in favor of a more elegant one: apply a NOT (change 1 to 0 and 0 to 1), convert to base 10, divide by 10 (into a float), subtract 50, and the result is the temperature in C.
- Bits 28-35: encode the relative humidity. Apply a NOT, convert to base 10, and the result is the relative humidity in %.
- Bits 36-43: appear to encode a checksum (though I plan to double-check if this is not the dew point, also reported by the weather station).
HHHH 1000 0010 1111 1101 0010 1111 1101 0011 1010 0100
encoding T=22.0C and RH=44%
Attached, a slightly improved version of the raw dump from the link above.
dump_433_mhz.ino (790 Bytes)