[APP][PRO] Dyson Fans

Unfortunately, same issue here with “Dyson Fans” on a Homey Pro 2023 as mentioned in last posts.

My fan (Dyson Purifier Cool PC1) was correctly found at (fixed) IP-address, port 1883.
After finishing the steps to add the device to Homey, the status immediately changes to ‘not available’ .
Tried the “Repair” option (with correct IPv4 address and port), which seems to be successful (repair_test: result (“ok”; true)).

Powercycling both Homey and Dyson didn’t solve this.
The native (iOS) My Dyson app works well.

Any idea / suggestions how to fix this, so I can start making Homey flows for this Dyson.?

Thanks in advance!

I have sent the developer a message, and hopefully he replies.

In the meantime, it seems that his applet may not be correctly authenticating the devices or communicating properly with Dyson’s servers (who knows what was changed), and I wrote a simply python script to pull the device credentials directly from your Dyson Cloud account upon authentication, similar to what this app attempts to do.

If anyone wants to take a crack at a new Community App for this, here’s my rudimentary python script:

from getpass import getpass

from libdyson.cloud import DysonAccount
from libdyson.cloud.account import DysonAccountCN
from libdyson.exceptions import DysonOTPTooFrequently

print(“Please choose your account region”)
print(“1: Mainland China”)
print(“2: Rest of the World”)
region = input("Region [1/2]: ")

if region == “1”:
account = DysonAccountCN()
mobile = input(“Phone number: “)
verify = account.login_mobile_otp(f”+86{mobile}”)
otp = input("Verification code: ")
verify(otp)
elif region == “2”:
region = input("Region code: ")
account = DysonAccount()
email = input("Email: ")
verify = account.login_email_otp(email, region)
password = getpass()
otp = input("Verification code: “)
verify(otp, password)
else:
print(f"Invalid input {region}”)
exit(1)

devices = account.devices()
for device in devices:
print()
print(f"Serial: {device.serial}“)
print(f"Name: {device.name}”)
print(f"Device Type: {device.product_type}“)
print(f"Credential: {device.credential}”)

This will output your connected devices, their names, serials, and credential keys. With this information, we should be able to start pairing these devices again.

I suspect if Mark had exposed login fields for the credentials that we could fix this issue and bypass whatever is causing these problems. However, given that they’re possibly busy or MIA, it might be a good idea for someone to consider carrying the torch if they’re able to.

Here’s hoping we can resolve this either way. I hope this info was helpful.