Levoit Classic 300s Humidifier local control with ESPHome

Hey all,

I’ve been working (with the help of Claude) on a custom ESPHome external component that replaces the stock WiFi module firmware on the Levoit Classic 300S humidifier, giving you full local control in Home Assistant with zero VeSync/cloud dependency. Wanted to share it here in case it’s useful to anyone else with this unit sitting on their “someday” pile.

How it works: the Classic 300S has two separate MCU on the appliance board. One “control” MCU for sensors, mist output, front-panel buttons/display and a small WiFi daughterboard (eith an ESP32-SOLO-1C or ESP32-C3-SOLO-1, depending on when yours was made) that talks to the “control” MCU over a proprietary UART protocol (A5) and to VeSync’s cloud over WiFi. This project only replaces the WiFi module’s (ESP32) firmware, the control MCU is untouched, still gets the exact same UART commands it always expected, and the front panel keeps working exactly as before. It’s a straight firmware swap: no modificiation on the appliance board, no wiring changes to the mist/sensor hardware, no 3D-printed parts.

What you get:

  • Sensors: current humidity, target humidity, temperature, night light level, output level
  • Binary sensors: power, tank removed, water empty, mist active, display, target-stop-active, needs cleaning, replace water
  • Switches: power, display, stop-at-target, plus two independent Night Light notification switches
  • Numbers: manual mist level (1-9), auto target humidity, sleep target humidity
  • Select: mode (auto / manual / sleep)
  • Light: Night Light as a real dimmable light entity, which can also double as a status indicator: flashing on Water Empty/Tank Removed, slow breathing pulse while misting, fully configurable/optional/experimental
  • A restart button, a cleaning-reminder button, and automation triggers for the physical power button’s long-press events

Since the raw entities land as separate select/number/switch (HA core has no humidifier platform for templates), I also built a small companion HACS integration, levoit-classic300s-humidifier-bridge, that combines them into one native humidifier card, set up entirely through the UI (auto-detects your device’s entities, no YAML). Totally optional, the raw entities work fine on their own.

Before you dive in: this requires opening the unit and soldering temporary wires to 6 unpopulated pads on the WiFi module (3V3, GND, EN, IO0, RX, TX) to flash it over serial the first time, after that, updates are OTA. Not a beginner-friendly weekend project if you’ve never done UART flashing before, but nothing about it is destructive to the appliance board, and the README walks through backing up the stock firmware first so you always have a way back to stock.

Full credit for the A5 protocol itself (the hard part) goes to @MaxPi / Maxim Pivovarov / (“Taxom”), who reverse-engineered it here through live UART sniffing. My project is the ESPHome component built on top of that documented protocol, not a copy of his work.

Repo + install guide (soldering/wiring photos, flashing steps, backup procedure): alray31/levoit-classic300s-esphome

Happy to answer questions if anyone’s got one of these units and wants to give it a try.





Have you requested to get this page listed here? Not sure exactly how but there probably is a link there to request changes. DIY Examples - ESPHome - Smart Home Made Simple