I have been working on a dedicated SmartThings Edge driver for the SONOFF Hydro ONE, a Zigbee smart water valve with an integrated flow meter. I don’t have this device, so @Chris74 did the real-world tests and provided a massive amount of logs.
The supported models are:
| Model | Region / thread type |
|---|---|
| SWV-ZFE | EU / UK / many regions, G 3/4 / BSP thread |
| SWV-ZFU | North America, NH 3/4-11.5 thread |
From the driver’s point of view, both models use the same Zigbee behaviour. The important difference is the physical thread standard, so please do not buy the wrong one unless you enjoy adapter archaeology.
This driver is intended for the Hydro ONE models SWV-ZFE and SWV-ZFU.
It is not intended for the older SONOFF Zigbee Smart Water Valve model SWV / SWV-BSP / SWV-NH. That device is related, but not identical, and should be treated as a separate compatibility target.
What is the SONOFF Hydro ONE?
The SONOFF Hydro ONE is a battery-powered Zigbee 3.0 irrigation valve with an integrated flow meter. It is designed for garden watering, balcony irrigation, greenhouse setups, drip systems, raised beds, lawns and similar outdoor watering use cases.
The device can open and close the valve, run timed watering, measure irrigation duration and volume, detect abnormal valve states, and expose safety-related settings such as child lock, shortage alarms, leakage alarms and auto-close behaviour. SONOFF also documents the Hydro ONE models and their specifications in the official help center page for SWV-ZFU / SWV-ZFE.
SONOFF’s own ecosystem also supports more advanced irrigation features such as schedules, rain delay, seasonal adjustment and history records. Some of those features are implemented through manufacturer-specific Zigbee payloads, so they are not automatically available through a generic SmartThings Zigbee driver.
That is why this custom driver exists.
SmartThings can treat the valve as a basic switch or valve, but the Hydro ONE is more than that. It is a water-control device, and water-control devices deserve slightly more respect than “turn mysterious switch on and hope the garden does not become a lake”.
Why a custom Edge driver?
The goal of this driver is to expose the Hydro ONE as a proper SmartThings irrigation device:
- locally controlled through a SmartThings hub;
- usable in SmartThings routines;
- readable as a valve, switch and irrigation device;
- able to expose SONOFF’s private irrigation/status data;
- able to configure the important safety settings through device preferences;
- conservative enough for a sleepy battery-powered Zigbee end device.
The driver does not try to recreate the full eWeLink irrigation planner inside SmartThings. That would be possible only after much more reverse engineering and testing, and it would also make the first public driver unnecessarily fragile. SmartThings’ daily routines are the way to go.
The current driver focuses on the useful and validated core.
Driver features
Basic valve control
The driver maps the standard Zigbee On/Off cluster to SmartThings valve and switch behaviour.
In practice:
| Action | Result |
|---|---|
| Switch on | Valve opens |
| Switch off | Valve closes |
| Valve open | Valve opens |
| Valve close | Valve closes |
The normal SmartThings switch and valve capabilities are both exposed so the device remains easy to use in routines and in the app.
Timed watering
The driver includes a custom Hydro timed watering capability.
This allows the valve to be opened for a selected number of minutes using the device’s timed-open behaviour. The device then closes automatically after the requested time.
The UI exposes:
- timed watering state;
- last requested timed duration;
- “Open valve for minutes” control.
This is probably the most useful everyday feature of the driver. A manual valve is fine until someone forgets it. A timed valve is much better. The plants get water; the garden does not apply for wetland status.
Battery reporting
The Hydro ONE is battery-powered and uses the standard Zigbee Power Configuration cluster for battery reporting.
The driver exposes this through the normal SmartThings battery capability.
Child lock
Child lock is supported through SONOFF’s private Zigbee cluster.
In the current driver, child lock is configured through device preferences, not as a custom dashboard tile. This is intentional: child lock is a configuration setting, not something most users need on the main device screen every day.
Irrigation status
The custom Hydro irrigation status capability exposes several useful runtime values:
- valve work state;
- current irrigation duration;
- current irrigation volume;
- hourly irrigation duration;
- hourly irrigation volume.
The driver handles a SONOFF-specific quirk where the same duration value can arrive in different byte order depending on whether it is received as a read response or as a report. The driver therefore uses adaptive decoding for the private uint32 values instead of assuming one fixed byte order.
This is one of those small details that makes Zigbee reverse engineering such a relaxing hobby.
Valve alerts
The custom Hydro valve alerts capability exposes abnormal valve states decoded from SONOFF’s private bitmask:
- water shortage;
- water leakage;
- frost protection;
- fail-safe.
Water leakage is also mapped to the standard SmartThings waterSensor capability where appropriate, so it can be used more naturally in routines.
Example routine ideas:
- If water shortage is detected, notify me.
- If water leak is detected, close another upstream valve.
- If frost protection is active, stop watering routines.
- If fail-safe is active, send a high-priority notification.
Device settings in Preferences
The current driver deliberately keeps the valve configuration in the Settings menu instead of cluttering the main device screen.
Available settings include:
- child lock;
- water shortage alarm;
- water leak alarm;
- frost protection alarm;
- water shortage auto-close;
- water leak auto-close;
- shortage alarm duration;
- leak alarm duration;
- frost threshold;
- timed-open scaling;
- real-time duration unit;
- debug logging;
- private-status reads on refresh.
The alarm and auto-close settings are stored in SONOFF’s private 0x5020 payload. The driver reads the current payload first, modifies only the requested part, writes it back, and then reads it again.
That read-before-write behaviour is important. Blindly overwriting a water valve’s safety settings would technically be automation, but only in the same way that kicking a ladder is “height adjustment”.
0x5020 fallback parser
One of the more interesting parts of the driver is the fallback parser for SONOFF’s 0x5020 settings payload.
On real hardware, SmartThings can receive the 0x5020 read response as a generic body because the returned ZCL Array shape is unusual enough that the normal parser may fail with a “buffer too short” error.
The driver therefore includes a defensive GenericBody fallback for the SONOFF 0xFC11 private cluster. It manually extracts the four settings bytes from the raw Zigbee frame and feeds them into the normal settings logic.
This was the key fix that made the alarm and auto-close preferences actually save correctly during testing.
Clean SmartThings UI
The current release uses only three custom capabilities in the visible profile:
| Capability | Purpose |
|---|---|
oceancircle09600.hydroTimedWatering |
timed watering state and timed-open command |
oceancircle09600.hydroIrrigationStatus |
runtime irrigation status and measured values |
oceancircle09600.hydroValveAlerts |
shortage, leak, frost and fail-safe states |
Earlier development builds exposed valve settings as a custom capability. That was useful for debugging, but it was not the right long-term UI design. These settings now live where they belong: in device preferences.
The main device screen is therefore focused on actual device state, while configuration lives in the settings menu.
Installation
- Open the driver channel invite link.
- Enroll your hub.
- Install the SONOFF Hydro ONE Water Valve driver.
- Remove and reset the Hydro ONE if it was previously joined with another driver.
- Pair the device again.
- Confirm that it joins with the custom driver.
If the device already exists in SmartThings, switching the driver may work, but for a private-cluster device I recommend a clean pairing during the first test.
Supported devices
Currently supported:
| Manufacturer | Model |
|---|---|
| SONOFF | SWV-ZFE |
| SONOFF | SWV-ZFU |
Not currently supported:
| Device | Reason |
|---|---|
Older SONOFF SWV / SWV-BSP / SWV-NH |
different device family and protocol details |
| Dual-channel Hydro models | not tested in this SmartThings driver |
| Hydro ONE Lite variants | not tested in this SmartThings driver |
The fingerprints are intentionally strict. It is better to support two devices correctly than to accidentally claim a whole family of similar valves and discover the difference one flooded planter later.
Technical details
Zigbee endpoint
The Hydro ONE exposes its main functionality on endpoint 1.
Expected signature:
| Item | Value |
|---|---|
| Endpoint | 0x01 |
| Profile | 0x0104 Home Automation |
| Device type | 0x0002 On/Off Output |
| Manufacturer | SONOFF |
| Models | SWV-ZFE, SWV-ZFU |
Standard clusters
Relevant standard clusters include:
| Cluster | Purpose |
|---|---|
0x0000 Basic |
identity information |
0x0001 Power Configuration |
battery |
0x0003 Identify |
identify support |
0x0006 On/Off |
valve open/close |
0x0020 Poll Control |
sleepy-device behaviour |
0x0019 OTA |
OTA output cluster |
Manufacturer-specific clusters
The important private cluster is:
| Cluster | Purpose |
|---|---|
0xFC11 |
SONOFF / eWeLink private cluster |
0xFC57 |
present in signature, currently unmapped |
Manufacturer code used by the private cluster:
| Value | Meaning |
|---|---|
0x1286 |
SONOFF manufacturer-specific code, decimal 4742 |
Important private attributes
| Attribute | Meaning |
|---|---|
0x0000 |
child lock |
0x5006 |
real-time irrigation duration |
0x5007 |
real-time irrigation volume |
0x500C |
abnormal valve state bitmask |
0x5010 |
valve work state |
0x501B |
hourly irrigation volume |
0x501C |
hourly irrigation duration |
0x5020 |
valve alarm/settings payload |
Abnormal-state bitmask
The driver decodes 0x500C into separate user-facing states:
| Bit | Meaning |
|---|---|
| Bit 0 | water shortage |
| Bit 1 | water leakage |
| Bit 2 | frost protection |
| Bit 3 | fail-safe |
0x5020 settings payload
The driver handles the 0x5020 valve settings as a compact four-byte payload.
It currently uses this layout:
| Byte | Meaning |
|---|---|
| Byte 0 | alarm / auto-close bit flags |
| Byte 1 | water-shortage alarm duration |
| Byte 2 | water-leak alarm duration |
| Byte 3 | frost threshold |
The driver reads the current payload first, updates only the relevant bits or values, then writes the modified payload back.
What is currently not implemented
The following features are known from SONOFF / eWeLink / Zigbee2MQTT / ZHA research, but are intentionally not implemented in this release:
- full irrigation plan creation;
- cyclic timed irrigation plans;
- cyclic quantitative irrigation plans;
- rain delay;
- seasonal watering adjustment;
- 24-hour / 30-day / 180-day history record retrieval;
- full weather-based scheduling;
- dual-channel model support;
- older SONOFF SWV model support.
Those features require larger private payloads and more real-hardware validation. They are possible future targets, but they are not needed for the first clean SmartThings release. Most of it could be done in routines anyway.
Current status
The driver is currently at release version v1.0.1.
Confirmed during external testing:
- pairing;
- on/off valve control;
- battery reporting;
- timed watering UI;
- child lock setting;
- shortage detection;
- duration decoding;
- valve work state;
- alarm/settings preferences;
0x5020read/write path through the fallback parser;- cleaner SmartThings UI using preferences for configuration.
Still pending:
- volume / flow validation with a normal-flow bucket test.
During early testing with a Gardena Micro-Drip setup, the device continued to report 0 L. Logs showed that the device itself was returning zero for the volume attributes, so this may be a low-flow measurement issue rather than a SmartThings decoding issue. A bucket test with normal flow is the next sensible check.
Troubleshooting
The device joins as a generic switch
Remove the device from SmartThings, reset it, make sure the custom driver is installed on the hub, then pair again.
The valve settings do not appear on the main device screen
That is intentional. Valve settings are in the device settings menu.
Volume stays at 0 L
Use a normal-flow bucket test before assuming a driver problem. Very low-flow drip irrigation may not be enough for reliable metering.
Debug logging
Debug logging can be enabled in device preferences. When enabled, the driver logs additional private-cluster read/write details, including the decoded SONOFF 0xFC11 payloads.
Sources and references
This driver was built by combining official device information, public Zigbee integration work, SmartThings Edge documentation, and real hardware feedback.
Main references:
- SONOFF Hydro ONE official product page
- SONOFF Help Center: SWV-ZFU / SWV-ZFE
- Zigbee2MQTT device page for SWV-ZFE
- Zigbee2MQTT device page for SWV-ZFU
- ZHA / zigpy device-handler PR #4993
- ZHA / zigpy device-handler PR #4927
- SmartThings Edge driver components and structure
- SmartThings capability presentations
- SmartThings device profiles
Final note
This driver exists because the Hydro ONE is not just a switch.
It is a Zigbee irrigation valve with safety states, timed watering, private settings, flow-related attributes and a few very SONOFF-specific quirks. SmartThings can handle that nicely, but only if the driver does a little more work than simply mapping On/Off.
And with a water valve, “a little more work” is usually preferable to discovering that the tomatoes have entered their rice-paddy era.




