-
Notifications
You must be signed in to change notification settings - Fork 51
Description
After updating to v1.7.x of the HACS Dyson integration, my Dyson HP1 model that identifies as 527M no longer connects locally. The integration appears to treat the device as 527 without the M variant. This selects the wrong device profile and the library never receives the first MQTT payload. Result is a connection timeout. Rolling back the integration to v1.6.0 or below restores local control.
Possibly related to: #282
Impacted models
• Dyson HP1 variant 527M
• Likely other models where the product type includes a variant letter (M, E, K, etc.)
Symptoms
• Device works in MyDyson app and Google Home (cloud)
• Home Assistant with dyson_local fails to connect locally and disables the device or the automation that references it
Logs
ERROR (MainThread) [libdyson.dyson_device] Failed to receive first data from device
ERROR (MainThread) [custom_components.dyson_local.config_flow] Failed to connect to device serial=X3V-US-SGC1934A, device_type=527, host=192.168.0.249: DysonConnectTimeout ()
Note the device_type=527. The physical device reports as 527M.
Steps to reproduce
1. Update the HACS Dyson integration to v1.7.x
2. Set up a Dyson HP1 that reports product_type 527 and variant M
3. Restart Home Assistant or reload the integration
4. Observe connection attempt logs and timeout
Workarounds
• Downgrade the HACS integration to v1.6.0 (or earlier). Local control works again.
• Power cycling the fan does not fix the regression on v1.7.x.
Root cause hypothesis
During the v1.7.x refactor that changed model mapping and library usage, the code path that builds the device type stops carrying the variant letter. In practice, something like product_type="527" and variant="M" becomes device_type="527", which breaks model selection.
Proposed fix
Ensure the full type string is passed through whenever the device is constructed or mapped. Example sketch:
# Pseudocode illustrating the fix
product_type = device_info.product_type # e.g. "527"
variant = getattr(device_info, "variant", "") # e.g. "M"
full_type = f"{product_type}{variant}" if variant else product_type
# Pass full_type everywhere the device type is used to select the model
device = get_device(full_type)