Skip to content

S6000S/Evap humidifiers [LEH-*]: Dry mode: water shortage and filter_reset() #522

Description

@baudneo

First, thanks for your work!

The app allows toggling this new option alongside the power off dry mode, it will dry the filter when the water level is low. This lib does not expose this ability yet and I was hoping to add this ability (waterShortageDryingSwitch).

Response Body: 
 {
  "traceId": "1780869952",
  "code": 0,
  "msg": "request success",
  "module": null,
  "stacktrace": null,
  "result": {
    "traceId": "1780869952",
    "code": 0,
    "result": {
      "powerSwitch": 0,
      "humidity": 38,
      "targetHumidity": 30,
      "virtualLevel": 0,
      "mistLevel": 0,
      "workMode": "sleep",
      "waterLacksState": 0,
      "waterTankLifted": 0,
      "autoStopSwitch": 1,
      "autoStopState": 0,
      "screenSwitch": 1,
      "screenState": 0,
      "scheduleCount": 0,
      "timerRemain": 0,
      "errorCode": 0,
      "totalWorkTime": 9485700,
      "supportCalibrationSensors": [
        "humidity"
      ],
      "autoPreference": 1,
      "childLockSwitch": 0,
      "filterLifePercent": 100,
      "temperature": 708,
      "maxLevelNotify": 0,
      "waterShortageDryingSwitch": 0,
      "humidityPreference": 1,
      "dryingMode": {
        "dryingLevel": 2,
        "autoDryingSwitch": 1,
        "dryingState": 2,
        "dryingRemain": 1635
      },
      "isSupportSensor": 1,
      "sensorContent": {
        "sensorStatus": "noDevices"
      },
      "waterPump": {
        "cleanStatus": 0,
        "remainTime": 0,
        "totalTime": 65
      },
      "lastDryingCompletedTime": 1780867576,
      "afterDryLastHumidityTime": 0
    }
  }
}

I tested a bit but couldnt find the right method to set the new switch state in vesync API:

2026-06-07 17:41:13.283 DEBUG (MainThread) [custom_components.vesync.switch] Attempting to set the water low drying mode switch to: False
2026-06-07 17:41:13.680 DEBUG (MainThread) [pyvesync.vesync] ==================API CALL==================
Caller: VeSyncSuperior6000S.call_bypassv2_api [devices.vesynchumidifier]
API CALL to endpoint: /cloud/v2/deviceManaged/bypassV2
Host: smartapi.vesync.com
Full URL: https://smartapi.vesync.com/cloud/v2/deviceManaged/bypassV2
Response Status: 200
Method: POST
---------------Request-----------------
Request Headers: 
 {
  "Content-Type": "application/json; charset=UTF-8",
  "User-Agent": "okhttp/3.12.1"
}
Request Body: 
 {
  "acceptLanguage": "en",
  "accountID": "##_REDACTED_##",
  "appVersion": "5.6.60",
  "cid": "##_REDACTED_##",
  "configModule": "VS_WFON_AHM_LEH-S601S-WUS_US",
  "debugMode": false,
  "method": "bypassV2",
  "phoneBrand": "pyvesync",
  "phoneOS": "Android",
  "traceId": "1780875639",
  "timeZone": "##_REDACTED_##",
  "token": "##_REDACTED_##",
  "userCountryCode": "CA",
  "deviceId": "##_REDACTED_##",
  "configModel": "VS_WFON_AHM_LEH-S601S-WUS_US",
  "payload": {
    "data": {
      "waterShortageDryingSwitch": 0
    },
    "method": "setWaterShortageDryingSwitch",
    "source": "APP"
  }
}
---------------Response-----------------
Response Headers: 
 {
  "Date": "Sun, 07 Jun 2026 23:41:13 GMT",
  "Content-Type": "application/json;charset=UTF-8",
  "Transfer-Encoding": "chunked",
  "Connection": "keep-alive",
  "Content-Encoding": "gzip"
}
Response Body: 
 {
  "traceId": "1780875639",
  "code": 0,
  "msg": "request success",
  "module": null,
  "stacktrace": null,
  "result": {
    "traceId": "1780875639",
    "code": -1
  }
}

Also, it would be good for the evap humidifiers to expose a dedicated reset_filter() method, the same empty payload as air purifier filter reset works (tested using call_bypassv2_api("resetFilter", {}). It seems evap style are LEH-* while ultrasonic are LUH-*.

Edit: Have also tried the following methods without luck:

  • setWaterShortageDryingMode
  • setWaterDryingMode
  • setDryingMode

With the "data": { "waterShortageDryingSwitch": 0 } payload

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions