I’ve been running my QuietCool whole-house fans from Home Assistant over their
native 433.92 MHz radio for a while, and I’ve cleaned the firmware up into a
public ESPHome project:
There’s already a great thread and repo from Thadd Selden that reverse-engineered
this protocol with URH and a CC1101 — that’s what proved it was doable. This is
an independent implementation built from a firmware teardown of the OEM remote,
with a few things I wanted for my own install: a proper Semtech LoRa transceiver
instead of a CC1101, full bi-directional state, and self-service pairing so you
never have to sniff packets or hard-code a controller ID.
What it does
- A real Home Assistant
fanentity — Off / Low / Medium / High plus the
OEM 1/2/4-hour timers, transmitted as the exact frames the glass remote sends. - Bi-directional. This was the big one for me. The controller doesn’t just
transmit — it listens on the same channel. Press the physical glass remote
and the HA entity updates to match within a second. It strictly validates
received frames and mirrors them into the entity without ever
re-transmitting, so there’s no RF echo or feedback loop. HA and the wall
remote stay in sync no matter which one you use. - Learn-mode pairing. Every QuietCool remote has a unique 4-byte sender ID.
Instead of sniffing it or dumping firmware, the controller learns it over the
air: flash it, then press any button on your OEM remote twice (about a second
apart). The OLED showsLEARNED / ID SAVED, the ID persists to flash, and
you’re done. A two-burst guard means a neighbor’s remote on the same band
can’t accidentally pair itself. - On-device OLED — animated fan icon,
HH:MM:SStimer countdown, three
HA-relayed temperatures (indoor / outdoor / attic, configurable from the HA
UI without reflashing), and a Wi-Fi / API / battery status row. - Safety-first. It never transmits on its own — not at boot, after OTA, on
reconnect, or from a received frame. Only an explicit press or HA command
keys the radio.
Hardware
Two supported boards, both with an onboard OLED and a real Semtech FSK radio:
- LilyGO TTGO LoRa32 V2.1 (433 MHz, SX1278) — the board I built and verified
on real fans. - Heltec / HiLetgo ESP32 LoRa V3 (SX1262) — same radio profile, builds
clean; I’m still bringing it up on hardware.
Attach a 433 MHz antenna before you transmit.
How it was figured out
The 433.92 MHz carrier and 2-FSK modulation came from SDR captures; the exact
register profile, frame format, per-unit sender-ID mechanism, and command-byte
structure came from dumping and disassembling the remote’s STM32 firmware. One
useful finding for anyone chasing the “turns on High when you press Off from
Low” quirk and the 80 vs 90 Off byte: the decoder treats speed as a 2-bit
field ((command >> 4) & 0x03) and masks the 0x80 bit away, so both 80 and
90 are valid “Off.” That’s all written up here:
Protocol details (radio profile, frame layout, command table) are in
docs/protocol.md,
and there’s a full setup walkthrough in
INSTALL.md.
I don’t redistribute the OEM firmware image (it’s QuietCool’s copyright) — only
the independently derived facts about the protocol.
Happy to answer questions, and PRs welcome if you’ve got a different QuietCool
variant.
Note: the repo’s hardware links are Amazon affiliate links.