[ST Edge] SONOFF Hydro ONE (SWV-ZFE / SWV-ZFU)

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

  1. Open the driver channel invite link.
  2. Enroll your hub.
  3. Install the SONOFF Hydro ONE Water Valve driver.
  4. Remove and reset the Hydro ONE if it was previously joined with another driver.
  5. Pair the device again.
  6. 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;
  • 0x5020 read/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:

  1. SONOFF Hydro ONE official product page
  2. SONOFF Help Center: SWV-ZFU / SWV-ZFE
  3. Zigbee2MQTT device page for SWV-ZFE
  4. Zigbee2MQTT device page for SWV-ZFU
  5. ZHA / zigpy device-handler PR #4993
  6. ZHA / zigpy device-handler PR #4927
  7. SmartThings Edge driver components and structure
  8. SmartThings capability presentations
  9. 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.

Actually what I would do here is close an upstream valve and turn on irrigation to try and drain any remaining water in order to relive pressure in the system so that frost won’t burst a pipe or valve.

@Andreas_Roedl Kudos to you on what you have accomplished here - you made this driver function perfectly literally over night and do a full documentation, I’m stunned!

I was able to do a proper volume test now and I’m very happy to report that the driver also shows the volume numbers correctly, matching the volume settings for manual watering I made before in the eWeLink app. I first set 3 liters, started manual watering in eWeLink, then set it to 5 liters and turned the device on with your driver 2 times - after a little while your driver showed the correct 13 liters sum!

Speaking of the eWeLink app - previously, when I was using the generic switch driver, I didn’t manage to connect to the device via Bluetooth while it’s also connected to the SmartThings hub (unplugging my ST hub to “force” the Sonoff into BLE mode did the trick). All of a sudden I can now use the eWeLink app using the proximity BLE mode and Zigbee control at the same time - I’m not sure if this is a side effect of a “proper” valve driver, nevertheless, this is now perfect.

Hint to other Hydro One users - initially I didn’t get volume readings regardless of using the eWeLink app or the driver - I think this might have to do with the Gardena micro drip system I have it connected to - maybe the water flow was just too low for the device to recognise. An internet search also pointed me to a possible issue with the “turning wheel part” inside the Sonoff coming off and blocking. So if you don’t get volume readings be sure to do a test with proper water throughput and if that’s not working either check if it maybe is a hardware issue.

@Andreas_Roedl your driver is a godsend, so please make sure you leave an info on how one can donate you a coffee!

@Andreas_Roedl , this is great! I just helped @Pajacyk0v use my edge driver for the SWV-NH so it at least would look like a valve for that user. I’m so glad you published this, thank you.

@Pajacyk0v , please use this Edge driver, and not mine. I’ll remove the SWV-ZFE fingerprint from my driver very soon.

@Andreas_Roedl , I have the SWV-ZNE (I think basically the same valve minus flow information?) and would be happy to test your driver with it - if only to get access to battery data!

I’ll have a look at it.

@Andreas_Roedl Great job! Thanks for your contribution :heart_suit: I’ll be testing the driver on my valve over the next few weeks.