Using a Raspberry Pi to reverse engineer the data stream from a UHZ-15 weather station

I made some exciting discoveries with the UHZ weather clock. As we all know, the UHZ-15 uses a proprietary format for streaming its sensor data. This has always bugged me somewhat, because I don’t always want to have to use the UHZ-UX. I wanted to integrate the data points with the output of the Mini Morphosis III my imaginary girlfriend gave me last Christmas, to show a collation, and hopefully, a more precise extrapolation of the future dewpoints. The Morphosis uses OWD, the weather data format from the Open Season Project, and it made me wonder why the UHZ doesn’t. I emailed the manufacturer to ask when they will make their product OWD-compliant, but I haven’t had a reply yet. I will update this post as soon as I get one.
In the mean time, I began looking at the stream coming from the UHZ. It occurred to me that the format used on the clock was perhaps not so much encryption as obfuscation. In order to test this, I placed both the UHZ as well as the Morphosis inside the Regulat™ Amorphic® Control Chamber, which my mother presented me with for my birthday last year (Thanks mom, I know it cost a bomb!). The ACC allowed me to ensure absolute synchronicity regarding the climate experienced by the UHZ. Then I intercepted the handshake between the UHZ and its UX, and wrote a script to perform the same on the Raspberry Pi. After a bit of fiddling on my part, the UHZ commenced the data stream! I was able to record the data, and by comparison with the OWD from the Morphosis was able to infer the data points from the UHZ. In fact, it turns out I was right about the obfuscation. The data points are simply transformed using a double-sided Wenger translation on each even byte, and the odd bytes are sent intact. I assume that is because of the overhead on the UX, it is probably not powerful enough to perform the Wenger on all the bytes, so they do only half of them.
After decoding, another script I made encodes the points into OWD, and re-broadcasts them on the Raspberry Pi’s network interface. The only thing now is to remember that the UHZ-15 has seemingly acquired a new IP address! Ha ha ha.
I haven’t yet implemented the control channel. I rarely use this, but it will be nice for completeness’ sake.

One thought on “Using a Raspberry Pi to reverse engineer the data stream from a UHZ-15 weather station”

Comments are closed.