This is an automated archive made by the Lemmit Bot.
The original was posted on /r/homeassistant by /u/Educational-Algae782 on 2026-07-09 05:40:49+00:00.
I've got an older Ökoboiler (https://oekoboiler.com/) heat-pump water heater. No WiFi, no app, no official Home Assistant support — it's just a box in the garage with a little display on the front. I wanted the water temperature in HA, and there was no clean way to get it, so I ended up going down a bit of a rabbit hole.
Turns out the display panel and the main control board talk to each other over a single-wire UART. I tapped that bus with an ESP32 and started logging. The frames were obfuscated — each one is XOR-masked with a per-frame key, and there's a CRC-16 on the end — but once I figured out the masking and started validating frames, actual values started falling out.
The water temperature was the tricky one. It's split across two bytes, and the fine byte wraps around every ~6.4 °C, so at first it just looked like noise. The way I finally pinned it down was pointing a camera at the physical display, OCR-ing the number, and correlating that against every byte in the stream over a full heating-and-cooling cycle until one of them lined up. After sorting out the wrapping, it decodes to about 0.3 °C accuracy.
From there it kind of snowballed — I could identify the other temperature sensors (evaporator coil, ambient intake, exhaust) by watching which bytes moved when the compressor kicked in, and I even managed to unlock the PV/solar-surplus mode that my model technically wasn't sold with.
I wrote the whole thing up as a blog-style repo: the process, the dead ends, the graphs, a full protocol reference, and a ready-to-flash ESPHome config if anyone happens to have the same unit.
https://github.com/splattner/oekoboiler-uart-reverse-engineering
A big thanks to claude, which helps finnaly cracking this after multiple years!