QuietCool ESPHome installer
Two paths: (1) replace OEM firmware with custom ESPHome via Web BLE (sections 1–6 below), or (2) open the local firmware page on a hub already running the ESPHome firmware (section at the bottom).
1. Browser check
Checking…
Web BLE works in Chrome / Edge on Android & desktop. Firefox, Safari, and all iOS browsers (including Web-BLE wrappers such as Bluefy) are not supported.
2. What do you want to install?
Both options use the same OEM OTA mechanism — you'll still pick auth, Wi-Fi, etc. below. Both assume the hub is still running OEM firmware. If it's already running the ESPHome firmware, use the device firmware page section at the bottom instead: that firmware still speaks OEM BLE (the stock app keeps working), but its Upgrade command refuses QuietCool's own firmware domains, so this Web-BLE flow can't roll it back to stock.
Flashes the custom ESPHome image hosted alongside this page. Home-Assistant-native, no cloud, and no QuietCool app needed afterwards. Preserves the OEM dual-OTA partition layout so you can still roll back via this same page.
Pushes the latest production OEM image (IT-BLT-ATTICFAN_V4.1) from QuietCool's own server. Useful if you want a fresh OEM install or if the hub picked up a buggy update.
Note: this only rewrites the app partition. Wi-Fi creds, pair-ids, and Smart Mode thresholds in NVS are kept. For a real reset-to-defaults, the OEM still requires the KEY1 5-second long-hold on the hub itself.
Source: http://myquietcool.com/.../IT-BLT-ATTICFAN_V4.1_*.bin. Verified byte-perfect identical to the image delivered by the QuietCool Smart Control app.
3. How will you authenticate?
The hub rejects every command except Login until a valid pair-id authenticates the session. Pick the path that matches your hub's current state — read this before connecting, because once this page grabs the BLE link, the QuietCool Smart Control app can't talk to the hub at the same time.
Once the QuietCool Smart Control app on Android or iOS pairs with a hub, the factory test ID stops working and the real pair-id isn't user-visible. This path side-steps that by putting the hub into pair mode so we can register a fresh ID.
Pick whichever is easier for you — both end with the hub advertising as pairable for ~tens of seconds:
- Find the Pair button (KEY2) on the hub. It's the same button used during initial setup.
- Press and hold it for 3 or more seconds, then release. LED4 (the pair LED) will change to indicate the hub is pairable.
- Come back here and press the Connect & flash button in step 6 below — quickly, the window is short.
- On a phone with the QuietCool Smart Control app (available on Android and iOS — it needn't be the device running this installer), tap your hub, then tap Pair Mode.
- Wait until the app confirms pair mode is active.
- Force-close the OEM app (swipe it away in the recents view). The hub only allows one BLE central at a time — leaving the app open will block this page from connecting.
- Come back here and press the Connect & flash button in step 6 below.
When you press Connect & flash, this wizard will register a fresh random pair-id with the hub and save it in this browser so you can retry without re-running pair mode if anything goes wrong.
A factory-fresh hub accepts the OEM's built-in test pair-id with no button press — just keep the default below. This also works if you saved a pair-id from a previous run of this wizard in this browser.
Default 1234567dsad8wqw9asasd is the OEM's factory test ID — it stops working the first time the QuietCool Smart Control app on Android or iOS pairs with the hub.
4. Wi-Fi for the hub
The hub will join this network after we connect, then download the new firmware. Fill these in before hitting the button below — once Bluetooth connects, the pair-mode window starts ticking and you want to move fast.
The last-used Pair ID, Wi-Fi SSID, and Wi-Fi password are saved in this browser for future visits when you start a connection. The password is stored unencrypted in this browser profile.
If the hub is offline and advertising an Improv setup device, use this recovery action. It only sends the Wi-Fi credentials above—it does not use an OEM pair ID or flash firmware.
5. Firmware URL
6. Flash
Hub must be powered and within ~10 m. If you chose put it into pair mode above, make sure pair mode is active (LED4 indicates this) and the OEM app is force-closed first. The button below opens the Bluetooth device picker, connects, then runs the whole flash sequence without prompting again.
≈3-5 minutes. The hub will disconnect from Bluetooth as soon as flashing begins — that's expected.
Already running the ESPHome firmware?
Open the firmware page served by the hub itself. It can flash a compatible firmware URL or upload a locally saved OEM application .bin. Running the forms on the hub avoids browsers blocking an HTTPS installer from posting to a plain-HTTP LAN device.
For normal project releases, use the Firmware update shown in Home Assistant or at the hub's root page. Shared builds check this site's release manifest automatically. Hubs taken over in ESPHome Device Builder should be updated from Device Builder instead.
No download is required to restore the known OEM V4.1. On the device page, click Use known OEM V4.1, then Download and flash URL; the hub downloads the verified image itself. The local-file form is the version-independent fallback if the vendor URL disappears.
Enter the mDNS name the device announces, or its LAN IP. A port is optional. Do not add a path.
How does this work? / troubleshooting
The button navigates directly to http://<host>/restore-stock. That page uses same-origin requests to the device's /api/flash_url and /api/restore_stock_file endpoints, shows upload progress, and disables its controls while a flash is active.
No auth on this endpoint by default — this is an intentional LAN-trust tradeoff. Home Assistant adoption secures ESPHome API/OTA but does not add web-server authentication. To protect these HTTP endpoints, add auth: { username, password } under web_server: in your build or adopted wrapper.
Common failure modes:
- Page doesn't open → device hostname doesn't resolve; try the LAN IP instead. The full mDNS name is required, including the MAC suffix (e.g.
quietcool-atticfan-abcdef.local, not justquietcool-atticfan). - "404 Not Found" → device firmware doesn't have
web_server+http_flash_handlerwired. Re-flash with a current build that includes them. - Update is rejected → the device page shows the endpoint's validation reason. Correct it there and retry.
Caveats
- The OEM firmware does not verify signatures on OTA images — anything reachable at the firmware URL gets flashed. Only point this at images you trust.
- If the hub has been paired with the QuietCool Smart Control app on Android or iOS, the factory test pair ID stops working — use the put it into pair mode option instead.
- Wi-Fi password is transmitted in cleartext over BLE (an OEM trait, not ours). Acceptable for a one-shot bootstrap; BLE range is ~10 m.
- The last-used Wi-Fi password is stored unencrypted in this browser profile for convenient retries. Use Forget saved Pair ID and Wi-Fi on a shared device.
- If the host serving the firmware uses HTTPS, the hub trusts standard public CAs. If your cert isn't trusted, fall back to plain
http://.
Source & design: quietcool-esphome-native · OEM device QuietCool IT-AF-SMT