Meanwhile, Homey still has no support for this device while all other major home automation platforms have (just like many other devices) ![]()

eWeLink | Homey
Works with everything
Meanwhile, Homey still has no support for this device while all other major home automation platforms have (just like many other devices) ![]()
@Doekse said that official devs can ask Athom if they want to get paid for their apps.
.
If an official developer has to ask for donations and/or devices (or device interviews), it sounds like something is broken at the “official developer” side of Homey app development. I doubt that this is a money grab of any kind
€750 is just ridiculous for such a cheap device. You can get 15 units for that price (or even more in their case, since they’re a company so VAT doesn’t apply there). I doubt it actually costs that much to develop, especially with Claude also.
And Athom already mentioned that they can get funding if they would have asked.
Meanwhile, Homey still has no support for this device while all other major home automation platforms have
You can add it using eWeLink and a Sonoff ZBBridge as a Geneic Device probably, so it just needs a workaround
just like many other devices
I don’t know which devices you base this on, but many of the devices that I use aren’t supported by any other smart home platform (except for Google Home and Alexa then, since all devices support those obviously). Examples: HomeWizard Link, Zyxel Nebula, ThirdReality via the hub, Asustor NAS and more.
Also, for anyone looking for integrating the device: your money is better spent on a Sonoff ZBBridge instead of this crowdfunding campaign. You can connect it to eWeLink, then connect the Hydro DUO to it and integrate it into Homey via the eWeLink app:
homey.app

Works with everything
Add it as a Generic Device, then you can connect it to an virtual device using Flowcards.
I don’t know which devices you base this on, but many of the devices that I use aren’t supported by any other smart home platform (except for Google Home and Alexa then, since all devices support those obviously). Examples: HomeWizard Link, Zyxel Nebula, ThirdReality via the hub, Asustor NAS and more.
They also weren’t supported by Homey and you had to write your own apps for them
I guess @deejayreissue should just write their own app to implement support for the Hydro DUO too, I’m sure Athom wouldn’t have issues with another Sonoff app given the amount of brand duplicates in the app store already.
I’m sure Athom wouldn’t have issues with another Sonoff app given the amount of brand duplicates in the app store already
You can also just name it differently, e.g. “SonWater”. Then name the device “Hydro Dual”. Generate the device and app image with ChatGPT and design an icon that does actually look like the real device. Then it will get approved, since Athom thinks it’s another device, and then users who add the Hydro DUO as Generic Zigbee device will automatically be prompted to install your app.
Great tips!
@deejayreissue: when can we expect your app for this device?
Can anyone who owns the device please send a device interview? @Quakerix maybe?
You can create these here:
tools.developer.homey.app
Add it as a Generic Zigbee device first before sending a device interview
“ids”: {
“modelId”: “SWV-ZF2”,
“manufacturerName”: “SONOFF”
},
“endpoints”: {
“ieeeAddress”: “a4:c1:38:69:31:c8:87:3e”,
“networkAddress”: 54132,
“modelId”: “SWV-ZF2”,
“manufacturerName”: “SONOFF”,
“endpointDescriptors”: [
{
“status”: “SUCCESS”,
“nwkAddrOfInterest”: 54132,
“_reserved”: 26,
“endpointId”: 1,
“applicationProfileId”: 260,
“applicationDeviceId”: 2,
“applicationDeviceVersion”: 0,
“_reserved1”: 0,
“inputClusters”: [
0,
1,
3,
6,
32,
64599,
64529
],
“outputClusters”: [
3,
25
]
},
{
“status”: “SUCCESS”,
“nwkAddrOfInterest”: 54132,
“_reserved”: 12,
“endpointId”: 2,
“applicationProfileId”: 260,
“applicationDeviceId”: 2,
“applicationDeviceVersion”: 0,
“_reserved1”: 0,
“inputClusters”: [
0,
6
],
“outputClusters”:
}
],
“deviceType”: “enddevice”,
“receiveWhenIdle”: false,
“swBuildId”: “1.0.7”,
“capabilities”: {
“alternatePANCoordinator”: false,
“deviceType”: false,
“powerSourceMains”: false,
“receiveWhenIdle”: false,
“security”: false,
“allocateAddress”: true
},
“pollControl”: {
“checkInInterval”: 14400,
“longPollInterval”: 6480,
“shortPollInterval”: 1,
“shortPollWritten”: false,
“longPollWritten”: true
},
“extendedEndpointDescriptors”: {
“1”: {
“clusters”: {
“basic”: {
“attributes”: [
{
“acl”: [
“readable”
],
“id”: 0,
“dataTypeId”: 32,
“name”: “zclVersion”,
“value”: 8
},
{
“acl”: [
“readable”
],
“id”: 1,
“dataTypeId”: 32,
“name”: “appVersion”,
“value”: 16
},
{
“acl”: [
“readable”
],
“id”: 3,
“dataTypeId”: 32,
“name”: “hwVersion”,
“value”: 0
},
{
“acl”: [
“readable”
],
“id”: 4,
“dataTypeId”: 66,
“name”: “manufacturerName”,
“value”: “SONOFF”
},
{
“acl”: [
“readable”
],
“id”: 5,
“dataTypeId”: 66,
“name”: “modelId”,
“value”: “SWV-ZF2”
},
{
“acl”: [
“readable”
],
“id”: 6,
“dataTypeId”: 66,
“name”: “dateCode”,
“value”: “20260428”
},
{
“acl”: [
“readable”
],
“id”: 7,
“dataTypeId”: 48,
“name”: “powerSource”,
“value”: “battery”
},
{
“acl”: [
“readable”
],
“id”: 16384,
“dataTypeId”: 66,
“name”: “swBuildId”,
“value”: “1.0.7”
},
{
“acl”: [
“readable”
],
“id”: 65533,
“dataTypeId”: 33,
“name”: “clusterRevision”,
“value”: 3
}
],
“commandsGenerated”: “UNSUP_GENERAL_COMMAND”,
“commandsReceived”: “UNSUP_GENERAL_COMMAND”
},
“powerConfiguration”: {
“attributes”: [
{
“acl”: [
“readable”
],
“id”: 32,
“dataTypeId”: 32,
“name”: “batteryVoltage”,
“value”: 31
},
{
“acl”: [
“readable”,
“reportable”
],
“id”: 33,
“dataTypeId”: 32,
“name”: “batteryPercentageRemaining”,
“value”: 200,
“reportingConfiguration”: {
“direction”: “reported”,
“attributeDataType”: 32,
“minInterval”: 30,
“maxInterval”: 900,
“minChange”: 1,
“status”: “SUCCESS”
}
},
{
“acl”: [
“readable”
],
“id”: 65533,
“dataTypeId”: 33,
“name”: “clusterRevision”,
“value”: 3
}
],
“commandsGenerated”: “UNSUP_GENERAL_COMMAND”,
“commandsReceived”: “UNSUP_GENERAL_COMMAND”
},
“identify”: {
“attributes”: [
{
“acl”: [
“readable”,
“writable”
],
“id”: 0,
“dataTypeId”: 33,
“name”: “identifyTime”,
“value”: 0
},
{
“acl”: [
“readable”
],
“id”: 65533,
“dataTypeId”: 33,
“name”: “clusterRevision”,
“value”: 2
}
],
“commandsGenerated”: “UNSUP_GENERAL_COMMAND”,
“commandsReceived”: “UNSUP_GENERAL_COMMAND”
},
“onOff”: {
“attributes”: [
{
“acl”: [
“readable”,
“writable”
],
“id”: 0,
“dataTypeId”: 16,
“name”: “onOff”,
“value”: false
},
{
“acl”: [
“readable”
],
“id”: 65533,
“dataTypeId”: 33,
“name”: “clusterRevision”,
“value”: 2
}
],
“commandsGenerated”: “UNSUP_GENERAL_COMMAND”,
“commandsReceived”: “UNSUP_GENERAL_COMMAND”
},
“pollControl”: {
“attributes”: [
{
“acl”: [
“readable”,
“writable”
],
“id”: 0,
“dataTypeId”: 35,
“name”: “checkInInterval”,
“value”: 14400
},
{
“acl”: [
“readable”
],
“id”: 1,
“dataTypeId”: 35,
“name”: “longPollInterval”,
“value”: 4
},
{
“acl”: [
“readable”
],
“id”: 2,
“dataTypeId”: 33,
“name”: “shortPollInterval”,
“value”: 1
},
{
“acl”: [
“readable”,
“writable”
],
“id”: 3,
“dataTypeId”: 33,
“name”: “fastPollTimeout”,
“value”: 40
},
{
“acl”: [
“readable”
],
“id”: 65533,
“dataTypeId”: 33,
“name”: “clusterRevision”,
“value”: 3
}
],
“commandsGenerated”: “UNSUP_GENERAL_COMMAND”,
“commandsReceived”: “UNSUP_GENERAL_COMMAND”
}
},
“bindings”: {
“identify”: {
“attributes”: [
{
“acl”: [
“readable”,
“writable”
],
“id”: 0,
“dataTypeId”: 33,
“name”: “identifyTime”,
“value”: 0
},
{
“acl”: [
“readable”
],
“id”: 65533,
“dataTypeId”: 33,
“name”: “clusterRevision”,
“value”: 2
}
],
“commandsGenerated”: “UNSUP_GENERAL_COMMAND”,
“commandsReceived”: “UNSUP_GENERAL_COMMAND”
},
“ota”: {
“attributes”: [
{
“acl”: [
“readable”
],
“id”: 0,
“dataTypeId”: 240,
“name”: “upgradeServerID”,
“value”: “5c:c7:c1:ff:fe:9b:66:97”
},
{
“acl”: [
“readable”
],
“id”: 1,
“dataTypeId”: 35,
“name”: “fileOffset”,
“value”: 4294967295
},
{
“acl”: [
“readable”
],
“id”: 2,
“dataTypeId”: 35,
“name”: “currentFileVersion”,
“value”: 4103
},
{
“acl”: [
“readable”
],
“id”: 3,
“dataTypeId”: 33,
“name”: “currentZigBeeStackVersion”,
“value”: 2
},
{
“acl”: [
“readable”
],
“id”: 4,
“dataTypeId”: 35,
“name”: “downloadedFileVersion”,
“value”: 4294967295
},
{
“acl”: [
“readable”
],
“id”: 5,
“dataTypeId”: 33,
“name”: “downloadedZigBeeStackVersion”,
“value”: 65535
},
{
“acl”: [
“readable”
],
“id”: 6,
“dataTypeId”: 48,
“name”: “imageUpgradeStatus”,
“value”: “normal”
},
{
“acl”: [
“readable”
],
“id”: 7,
“dataTypeId”: 33,
“name”: “manufacturerID”,
“value”: 4742
},
{
“acl”: [
“readable”
],
“id”: 8,
“dataTypeId”: 33,
“name”: “imageTypeID”,
“value”: 65535
},
{
“acl”: [
“readable”
],
“id”: 9,
“dataTypeId”: 33,
“name”: “minimumBlockPeriod”,
“value”: 0
},
{
“acl”: [
“readable”
],
“id”: 65533,
“dataTypeId”: 33,
“name”: “clusterRevision”,
“value”: 1
}
],
“commandsGenerated”: “UNSUP_GENERAL_COMMAND”,
“commandsReceived”: “UNSUP_GENERAL_COMMAND”
}
}
},
“2”: {
“clusters”: {
“basic”: {
“attributes”: [
{
“acl”: [
“readable”
],
“id”: 0,
“dataTypeId”: 32,
“name”: “zclVersion”,
“value”: 8
},
{
“acl”: [
“readable”
],
“id”: 1,
“dataTypeId”: 32,
“name”: “appVersion”,
“value”: 16
},
{
“acl”: [
“readable”
],
“id”: 3,
“dataTypeId”: 32,
“name”: “hwVersion”,
“value”: 0
},
{
“acl”: [
“readable”
],
“id”: 4,
“dataTypeId”: 66,
“name”: “manufacturerName”,
“value”: “SONOFF”
},
{
“acl”: [
“readable”
],
“id”: 5,
“dataTypeId”: 66,
“name”: “modelId”,
“value”: “SWV-ZF2”
},
{
“acl”: [
“readable”
],
“id”: 6,
“dataTypeId”: 66,
“name”: “dateCode”,
“value”: “20260428”
},
{
“acl”: [
“readable”
],
“id”: 7,
“dataTypeId”: 48,
“name”: “powerSource”,
“value”: “battery”
},
{
“acl”: [
“readable”
],
“id”: 16384,
“dataTypeId”: 66,
“name”: “swBuildId”,
“value”: “1.0.7”
},
{
“acl”: [
“readable”
],
“id”: 65533,
“dataTypeId”: 33,
“name”: “clusterRevision”,
“value”: 3
}
],
“commandsGenerated”: “UNSUP_GENERAL_COMMAND”,
“commandsReceived”: “UNSUP_GENERAL_COMMAND”
},
“onOff”: {
“attributes”: [
{
“acl”: [
“readable”,
“writable”
],
“id”: 0,
“dataTypeId”: 16,
“name”: “onOff”,
“value”: false
},
{
“acl”: [
“readable”
],
“id”: 65533,
“dataTypeId”: 33,
“name”: “clusterRevision”,
“value”: 2
}
],
“commandsGenerated”: “UNSUP_GENERAL_COMMAND”,
“commandsReceived”: “UNSUP_GENERAL_COMMAND”
}
},
“bindings”: {}
}
}
}
Hi everyone,
I’ve been closely following the recent discussions here regarding the limitations of the official SONOFF Zigbee driver and the community’s search for stable, local alternatives.
Since @smarthomesven and @SunBeech recently highlighted the benefits of running eWeLink CUBE OS (via iHost or local VMs) to manage and update SONOFF hardware independently, I wanted to share a local solution I’ve been developing to bridge this exact gap.
I have built a Homey app called eWeLink-CUBE (currently in the Test channel) designed to bring your eWeLink CUBE-managed devices locally into Homey Pro:
App Test Link: eWeLink CUBE | Homey
This local integration allows you to leverage the stability of eWeLink CUBE’s local API while bypassing native Homey Zigbee limits or official driver paywalls entirely. It’s fully compliant with Athom’s guidelines, open for testing, and I’d love to get your feedback to improve it further for the community.
Feel free to give it a try if you are looking for a reliable, completely local workaround!
I’m also building an app to connect it directly, I hope it gets approved by Athom.
As mentioned earlier, we’d like to keep the number of apps for individual products to a minimum. We generally don’t allow separate apps for single devices when there’s already an existing app in the Homey App Store for that brand, such as SONOFF.
What I can do is help get the code for this device over to StyraHem so it can be integrated into the existing app. Feel free to send it to partners@athom.com, and I’ll be happy to help coordinate that.
I just want to add a +1 for wanting an integration of the SONOFF Hydro duo to the official application. Not looking for extra apps where it is not needed.
@StyraHem_Sweden I own one right know. If I can help you get more details or test something for you please get in touch.