Skip to content

SWV-ZFE: documented control payloads are unreliable / incomplete on real hardware, need correct device-specific docs #32479

Description

@SyncM1972

What happened?

We are trying to control a real SONOFF SWV-ZFE valve via Zigbee2MQTT.

The current SWV-ZFE documentation suggests that normal switch control should work via:
{"state":"ON"}

and that timed control might work via:
{"state":"ON","on_time":300}

optionally with:
{"state":"ON","on_time":300,"off_wait_time":120}

On our real hardware, these documented paths were not reliable enough to build a safe integration.

Direct local observations from repeated MQTT tests against the real valve:

  • {"state":"ON","on_time":1} did not start the valve.
  • {"state":"ON","on_time":5,"off_wait_time":1} did not start the valve.
  • {"state":"ON","on_time":30} did not start the valve.
  • plain {"state":"ON"} was also not reliably sufficient from state=OFF / schedule_status=end.
  • {"state":"TOGGLE"} did not reliably start the valve either.

The only repeatedly observed positive control path on our device was:

  1. first write manual_default_settings
  2. then immediately send plain {"state":"ON"}

Example of a working sequence we observed:

{
"manual_default_settings": {
"irrigation_duration": 1,
"irrigation_mode": "duration",
"irrigation_amount_unit": "liter",
"irrigation_amount": 0,
"fail_safe": 2
}
}

followed by:

{"state":"ON"}

That sequence produced a real transition to:

  • irrigation_schedule_status.schedule_status = "start"
  • state = "ON"

We also observed another successful run with:

{
"manual_default_settings": {
"fail_safe": 2,
"irrigation_amount": 1,
"irrigation_amount_unit": "liter",
"irrigation_duration": 1,
"irrigation_mode": "capacity"
}
}

followed by a start reaching:

  • schedule_status = "start"
  • state = "ON"

Additionally, the documentation seems incomplete or at least unclear around irrigation_mode:

  • The current SWV-ZFE docs list manual_irrigation_mode values as duration and capacity.
  • On our real device, we also observed duration_with_interval in runtime data.

That makes it unclear which modes are actually supported for SWV-ZFE, which are user-settable, and which command combinations are expected to work.

We also repeatedly observed confusing runtime data during tests, for example:

  • year-2000 timestamps
  • extremely large real_time_irrigation_duration
  • extremely large real_time_irrigation_volume

That made it harder to distinguish valid state reporting from stale/corrupted-looking telemetry.

What did you expect to happen?

We expected the SWV-ZFE documentation to provide a correct and device-specific way to:

  • start the valve manually
  • start it for a bounded time
  • stop it again
  • understand which payload combinations are actually supported

More concretely:

  • if {"state":"ON","on_time":N} is documented for this device, it should either work on supported firmware or the docs should clearly state limitations
  • if manual_default_settings must be written before state=ON, that should be documented explicitly
  • if duration_with_interval is a real SWV-ZFE mode, that should be documented explicitly
  • if some control methods only work on some firmware/hardware revisions, that should also be documented explicitly

How to reproduce it (minimal and precise)

Use a real SWV-ZFE device in Zigbee2MQTT.

Start from a state where the valve reports:

  • state: "OFF"
  • irrigation_schedule_status.schedule_status: "end"

Then send the following payloads to:

zigbee2mqtt/<friendly_name_or_ieee>/set

Non-working examples we observed

{"state":"ON","on_time":1}

{"state":"ON","on_time":5,"off_wait_time":1}

{"state":"ON","on_time":30}

{"state":"ON"}

{"state":"TOGGLE"}

Observe that the device may remain on:

  • state = "OFF"
  • irrigation_schedule_status.schedule_status = "end"

Working sequence we observed

First send:

{
"manual_default_settings": {
"irrigation_duration": 1,
"irrigation_mode": "duration",
"irrigation_amount_unit": "liter",
"irrigation_amount": 0,
"fail_safe": 2
}
}

then immediately:

{"state":"ON"}

On our device, that produced a real start with:

  • schedule_status = "start"
  • state = "ON"

Zigbee2MQTT version

2.10.1

Adapter firmware version

{"meta":{"maintrel":1,"majorrel":2,"minorrel":7,"product":1,"revision":20210708,"transportrev":2},"type":"ZStack3x0"}

Adapter

zstack

Setup

Local Docker Compose setup.

Relevant local evidence:

  • compose image: ghcr.io/koenkk/zigbee2mqtt:latest
  • frontend port mapping: 8099:8080
  • Zigbee2MQTT data directory: /app/data
  • MQTT broker used by Zigbee2MQTT: mqtt://mosquitto:1883
  • startup log showed: "Starting Zigbee2MQTT version 2.10.1"

Device database.db entry

{"id":4,"type":"EndDevice","ieeeAddr":"0xa4c138145043ffff","nwkAddr":9176,"manufId":4742,"manufName":"SONOFF","powerSource":"Battery","modelId":"SWV-ZFE","epList":[1],"endpoints":{"1":{"profId":260,"epId":1,"devId":2,"inClusterList":[0,1,3,6,32,64599,64529],"outClusterList":[3,25],"clusters":{"genBasic":{"attributes":{"modelId":"SWV-ZFE","manufacturerName":"SONOFF","powerSource":3,"zclVersion":8,"appVersion":16,"hwVersion":0,"dateCode":"20260317","swBuildId":"1.0.7"}},"genOnOff":{"attributes":{"onOff":0}},"genPowerCfg":{"attributes":{"batteryPercentageRemaining":200,"batteryVoltage":0}},"customClusterEwelink":{"attributes":{"20495":0,"20504":[0,0,0,0],"20506":0,"childLock":0,"realTimeIrrigationDuration":10,"realTimeIrrigationVolume":85,"hourIrrigationDuration":0,"hourIrrigationVolume":0,"manualDefaultSettings":[1,0,1,0,1,0,10,1,0,1,0,2],"rainDelayEndDatetime":0,"valveAlarmSettings":[7,5,1,5],"seasonalWateringAdjustment":[10,10,10,10,10,10,10,10,10,10,10,10],"irrigationScheduleStatus":[1,0,1,1,0,3,203,206,0,3,204,70,0,3,203,132,0,1,0,0,0],"valveAbnormalState":0}},"genPollCtrl":{"attributes":{"checkinInterval":14400}}},"binds":[{"cluster":6,"type":"endpoint","deviceIeeeAddress":"0x00124b0039df8b5d","endpointID":1},{"cluster":1,"type":"endpoint","deviceIeeeAddress":"0x00124b0039df8b5d","endpointID":1},{"cluster":32,"type":"endpoint","deviceIeeeAddress":"0x00124b0039df8b5d","endpointID":1}],"configuredReportings":[{"cluster":1,"attrId":33,"minRepIntval":3600,"maxRepIntval":65000,"repChange":10}],"meta":{}}},"appVersion":16,"hwVersion":0,"dateCode":"20260317","swBuildId":"1.0.7","zclVersion":8,"interviewCompleted":true,"interviewState":"SUCCESSFUL","meta":{"configured":"0.0.0"},"lastSeen":1783106029569,"checkinInterval":3600}

Debug log

Relevant local startup log excerpt:

[2026-06-30 17:05:54] info: z2m: Starting Zigbee2MQTT version 2.10.1 (commit #94751abaacb66989e688f21d8ac3773cf5d754a9)
[2026-06-30 17:05:54] info: z2m: Starting zigbee-herdsman (10.0.7)
[2026-06-30 17:05:54] info: zh:adapter:discovery: Matched adapter=zstack path=/dev/ttyUSB0, score=4
[2026-06-30 17:05:56] info: z2m: Coordinator firmware version: '{"meta":{"maintrel":1,"majorrel":2,"minorrel":7,"product":1,"revision":20210708,"transportrev":2},"type":"ZStack3x0"}'
[2026-06-30 17:05:56] info: z2m: 0xa4c138145043ffff (0xa4c138145043ffff): SWV-ZFE - SONOFF Zigbee smart water valve (EndDevice)

Relevant live-error excerpts during our control tests:

[2026-07-03 20:54:56] error: z2m: No converter available for 'valve_abnormal_state' on '0xa4c138145043ffff': ("")
[2026-07-03 20:54:59] error: z2m: No converter available for 'valve_abnormal_state' on '0xa4c138145043ffff': ("")
[2026-07-03 20:55:27] error: z2m: No converter available for 'valve_abnormal_state' on '0xa4c138145043ffff': ("")
[2026-07-03 20:55:32] error: z2m: No converter available for 'valve_abnormal_state' on '0xa4c138145043ffff': ("")

Relevant observed examples from our local testing include:

  • failed on_time attempts from OFF/end
  • successful manual_default_settings + plain state=ON
  • observed runtime telemetry containing stale/corrupted-looking values

Notes

This issue is specifically about SWV-ZFE, not SWV.

That distinction matters because:

  • SWV and SWV-ZFE have different documented capabilities
  • related reports for SWV should not automatically be assumed to apply to SWV-ZFE

Relevant docs:
https://www.zigbee2mqtt.io/devices/SWV-ZFE.html

Possibly related issue for a different device (SWV, not SWV-ZFE):
#27465

The main request is better and correct SWV-ZFE documentation for real-world manual valve control.

Metadata

Metadata

Assignees

No one assigned

    Labels

    problemSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions