Sonoff Hydro Duo SWV-ZF2: cannot change values
Nobody has claimed this yet.
- Dominant language
- TypeScript
- Stars
- 15.7k
- Forks
- 2k
- Avg merge
- 18h 55m
- Merged PRs (30d)
- 35
Description
What happened?
Device paired successfully. None of the 'editable' values in manual default settings can be changed. I mean you can move sliders and input values, but when sending them to the device Z2M frontend and logs show this error:
[8/4/2026, 8:48:17 AM] z2m: Publish 'get' 'manual_default_settings' to 'Electrovalva irigatii' failed: 'RangeError [ERR_OUT_OF_RANGE]: ZCL command 0xa4c138bbf3bf745d/1 customClusterEwelink.read(["manualDefaultSettings"], {"timeout":10000,"disableResponse":false,"disableRecovery":false,"disableDefaultResponse":true,"direction":0,"reservedBits":0,"writeUndiv":false}) failed (The value of "offset" is out of range. It must be >= 0 and <= 21. Received 22)'
Using MQTT explorer with zigbee2mqtt/FRIENDLY_NAME/get with payload {"manual_default_settings": ""} returns no result.
If it is of any help, zigbee2mqtt/FRIENDLY_NAME/get with payload {"battery": ""} seems to return the full status of the device:
{ "180_days_records": null, "24_hours_records": null, "30_days_records": null, "battery": 100, "child_lock": "LOCK", "hour_irrigation_duration_1": 0, "hour_irrigation_duration_2": 0, "hour_irrigation_volume": 0, "irrigation_plan_removed_report_1": null, "irrigation_plan_removed_report_2": null, "irrigation_plan_report_1": null, "irrigation_plan_report_2": null, "irrigation_plan_settings_1": null, "irrigation_plan_settings_2": null, "irrigation_schedule_status_1": { "actual_end_time": "2026-08-03T21:04:28+03:00", "actual_irrigation_amount": 63, "expected_end_time": "2026-08-03T21:04:27+03:00", "expected_irrigation_amount": 0, "irrigation_amount_unit": "liter", "irrigation_mode": "duration", "schedule_index": 0, "schedule_status": "end", "schedule_type": "manual", "start_time": "2026-08-03T20:54:28+03:00" }, "irrigation_schedule_status_2": { "actual_end_time": "2026-08-03T21:47:53+03:00", "actual_irrigation_amount": 68, "expected_end_time": "2026-08-03T21:47:52+03:00", "expected_irrigation_amount": 0, "irrigation_amount_unit": "liter", "irrigation_mode": "duration", "schedule_index": 0, "schedule_status": "end", "schedule_type": "manual", "start_time": "2026-08-03T21:37:53+03:00" }, "linkquality": 76, "manual_default_settings": null, "rain_delay": null, "rain_delay_end_datetime": null, "read_swvzf_records": null, "real_time_irrigation_duration_1": 0, "real_time_irrigation_duration_2": 0, "real_time_irrigation_volume": 0, "seasonal_watering_adjustment": null, "state_1": "OFF", "state_2": "OFF", "update": { "installed_version": 4104, "latest_release_notes": null, "latest_source": null, "latest_version": 4104, "state": "idle" }, "valve_abnormal_state": "normal", "valve_alarm_settings": null }
One can see that manual_default_settings is empty.
What did you expect to happen?
To be able to change the values. For example, default fail_safe is 10mins, which means any automation that needs to keep the valve open for more than 10min will fail.
How to reproduce it (minimal and precise)
Nothing special. It was the default behavior after pairing.
Zigbee2MQTT version
2.13.0
Adapter firmware version
20230507
Adapter
Sonoff Dongle-E
Setup
HA add-on
Device database.db entry
{"id":18,"type":"EndDevice","ieeeAddr":"0xa4c138bbf3bf745d","nwkAddr":25327,"manufId":4742,"manufName":"SONOFF","powerSource":"Battery","modelId":"SWV-ZF2","epList":[1,2],"endpoints":{"1":{"profId":260,"epId":1,"devId":2,"inClusterList":[0,1,3,6,32,64599,64529],"outClusterList":[3,25],"clusters":{"64529":{"attributes":{"0":0,"20500":0,"20504":[0,0,0,0],"20509":[0,0,10,0,0,0,0,1,0,0,0,0],"20510":[10,10,10,10,10,10,10,10,10,10,10,10],"20512":[7,5,1,5]}},"genBasic":{"attributes":{"modelId":"SWV-ZF2","manufacturerName":"SONOFF","powerSource":3,"zclVersion":8,"hwVersion":0,"dateCode":"20260622","swBuildId":"1.0.8"}},"genPowerCfg":{"attributes":{"batteryPercentageRemaining":200,"batteryVoltage":31}},"genOnOff":{"attributes":{"onOff":0}},"genPollCtrl":{"attributes":{"checkinInterval":14400}},"customClusterEwelink":{"attributes":{"20495":353,"20506":23,"valveAbnormalState":0,"childLock":0,"realTimeIrrigationDuration":0,"realTimeIrrigationVolume":0,"hourIrrigationDuration":0,"hourIrrigationVolume":0,"irrigationScheduleStatus":[1,0,1,0,50,3,188,132,50,3,190,219,50,3,190,220,1,0,0,0,63]}}},"binds":[{"cluster":32,"type":"endpoint","deviceIeeeAddress":"0x00124b002390d3be","endpointID":1},{"cluster":6,"type":"endpoint","deviceIeeeAddress":"0x00124b002390d3be","endpointID":1},{"cluster":1,"type":"endpoint","deviceIeeeAddress":"0x00124b002390d3be","endpointID":1}],"configuredReportings":[{"cluster":1,"attrId":33,"minRepIntval":3600,"maxRepIntval":65000,"repChange":10}],"meta":{}},"2":{"profId":260,"epId":2,"devId":2,"inClusterList":[0,6],"outClusterList":[],"clusters":{"genOnOff":{"attributes":{"onOff":0}},"genBasic":{"attributes":{"appVersion":16}},"customClusterEwelink":{"attributes":{"20506":35,"realTimeIrrigationDuration":0,"hourIrrigationDuration":0,"irrigationScheduleStatus":[1,0,1,0,50,3,198,177,50,3,201,8,50,3,201,9,1,0,0,0,68]}}},"binds":[{"cluster":6,"type":"endpoint","deviceIeeeAddress":"0x00124b002390d3be","endpointID":1}],"configuredReportings":[],"meta":{}}},"appVersion":16,"hwVersion":0,"dateCode":"20260622","swBuildId":"1.0.8","zclVersion":8,"interviewCompleted":true,"interviewState":"SUCCESSFUL","meta":{"configured":"0.0.0"},"lastSeen":1785826347384,"checkinInterval":3600}
Debug log
No response
Notes
Device firmware id is 1.0.8 (20260622), with firmware version 4104.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the device's database.db entry for model SWV-ZF2 and reproduce the MQTT get request for manual_default_settings. Inspect the existing SWV-ZF2 and customClusterEwelink handling, then verify that manual default values can be changed without the reported RangeError and that the device returns manual_default_settings correctly.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- embedded-iot
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100