Repository navigation
feat: add support for Levoit Superior Studio Smart 450S (LEH-S451S) - #554
Open
jkriegshauser wants to merge 8 commits into
Open
jkriegshauser wants to merge 8 commits into
jkriegshauser wants to merge 8 commits into
Conversation
Adds a HumidifierMap entry for the Superior Studio Smart 450S evaporative humidifier (LEH-S451S-WUS and regional variants), reusing the VeSyncSuperior6000S class since the device shares the Superior family's bypassV2 protocol (getHumidifierStatus, setHumidityMode, setVirtualLevel, setDryingMode, etc.). Fields on Superior6000SResult that are not essential for state parsing (scheduleCount, timerRemain, errorCode, autoPreference, childLockSwitch, filterLifePercent, temperature) now default to 0 so a response that omits any of them still parses instead of dropping the device. Fixes webdjoe#540
Adds testing_scripts/dump_humidifier_status.py, which logs in, prints the raw device list, and calls getHumidifierStatus directly for any device type matching a filter, even one not in the device map. It writes a redacted JSON dump suitable for attaching to a device request issue. Documents the script in the testing_scripts README, the packet capturing guide, and the README device request section.
jkriegshauser
force-pushed
the
feat/superior-studio-450s
branch
from
October 9, 2026 18:45
afe2baa to
d263136
Compare
The LEH-S451S reports workMode 'fan' (fan only, no humidification). Add HumidifierModes.FAN and map it for this model so it no longer logs an unknown mode. Also accept the optional runningError and exceptionType status fields on the Superior result model.
jkriegshauser
force-pushed
the
feat/superior-studio-450s
branch
from
October 9, 2026 18:45
d263136 to
aae1c39
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds support for the Levoit Superior Studio Smart 450S evaporative humidifier (
LEH-S451S-WUS, plus-WUSR/-WEU/-WEURvariants). Fixes #540.Details
getHumidifierStatus,setHumidityMode,setVirtualLevel,setDryingMode,setAutoStopSwitch,setChildLock), so it reusesVeSyncSuperior6000Svia a newHumidifierMapentry. VeSync's own config module for it isVS_WFON_AHM_LEH-E601S-WUS_US.virtualLevelranges 1-34 on this model (maxFanLevel: 34), somist_levelsisrange(1, 35).mistLevel1-3 is the coarse fan band.autoPro,sleep,manual.errorCodes(a list) instead oferrorCode. The non-essential fields onSuperior6000SResult(scheduleCount,timerRemain,errorCode,autoPreference,childLockSwitch,filterLifePercent,temperature) now default to0so the model parses either device. Existing 6000S parsing is unaffected.Note
I added
testing_scripts/dump_humidifier_status.py, which logs the raw device list andgetHumidifierStatusresult for any device type, including ones not yet in the device map, to make capturing responses for issues easier. The README file also got updated to suggest usage. This was done as a separate commit that can easily be dropped or moved to a separate PR to keep this one clean.Testing
getHumidifierStatusresponse from a US 450S; the test fixture forLEH-S451Smirrors it field for field.