Skip to content

feat(humidifier): Add support for Levoit NeoClassic 450S (LUH-N451S-WEU) - #541

Open
HaruIjima-kun wants to merge 2 commits into
webdjoe:devfrom
HaruIjima-kun:add-neoclassic-450s-support
Open

feat(humidifier): Add support for Levoit NeoClassic 450S (LUH-N451S-WEU)#541
HaruIjima-kun wants to merge 2 commits into
webdjoe:devfrom
HaruIjima-kun:add-neoclassic-450s-support

Conversation

@HaruIjima-kun

Copy link
Copy Markdown

Summary

Adds support for the Levoit NeoClassic 450S humidifier (device type LUH-N451S-WEU), which was previously silently dropped by the device map — see #172743.

Details

  • The NeoClassic 450S uses the same bypassV2 protocol and workMode values (autoPro/sleep/manual) as the Sprout Humidifier (LEH-B381S), so it reuses the VeSyncSproutHumid class via a new HumidifierMap entry rather than being added to the Sprout's existing dev_types.
  • A separate entry was used (instead of extending Sprout's dev_types) because the NeoClassic 450S does not have drying mode, HEPA filter, child lock, or an external humidity sensor — so its features list only includes NIGHTLIGHT, NIGHTLIGHT_BRIGHTNESS and AUTO_STOP.
  • SproutHumidifierResult required several fields the NeoClassic 450S does not report (autoModePreference, waterShortageDryingSwitch, childLockSwitch, filterLifePercent, hepaFilterLifePercent, lampType, dumpedState, roomSize, supportLampAct, lastDryingCompletedTime, afterDryLastHumidityTime). These are now optional with = 0 defaults, which should not affect existing Sprout parsing.

Testing

Verified against a real NeoClassic 450S account (EU region) using debug logging — confirmed the raw deviceType (LUH-N451S-WEU) and the full getHumidifierStatus response. Added LUH-N451S-WEU fixtures to call_json_humidifiers.py and generated the recorded API response via --write_api. Full test suite passes (391 passed, 3 skipped).

Fixes #172743

Jose A. Martin and others added 2 commits August 11, 2026 11:12
Adds a new HumidifierMap entry using the VeSyncSproutHumid class, as
the NeoClassic 450S shares the same bypassV2 protocol and workMode
values (autoPro/sleep/manual) as the Sprout Humidifier. A separate
entry is used instead of adding the dev_type to the existing Sprout
entry, since the NeoClassic 450S lacks drying mode, HEPA filter,
child lock and external sensor support.

Makes several SproutHumidifierResult fields optional with sensible
defaults (autoModePreference, waterShortageDryingSwitch,
childLockSwitch, filterLifePercent, hepaFilterLifePercent, lampType,
dumpedState, roomSize, supportLampAct, lastDryingCompletedTime,
afterDryLastHumidityTime), since the NeoClassic 450S does not report
these Sprout-specific fields.

Adds test fixtures for LUH-N451S-WEU in call_json_humidifiers.py and
the corresponding recorded API responses.

Fixes #172743
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant