Check out my other Home Assistant related creations: Maintenance Tracker
A sleek Lovelace dashboard card for Dyson fans exposed through hass_dyson.
I built this because I dislike having to open the Dyson app just to make the fan face a certain direction. This card brings that daily control flow into Home Assistant, next to the rest of the dashboard.
This is a frontend card only. It does not replace the Dyson integration; it uses the fan, climate, switch, select, number, and sensor entities already exposed in Home Assistant.
The default Home Assistant entity cards can control a Dyson device, but the experience is scattered across many entities.
HA Dyson Card pulls the useful pieces into one mobile-friendly control surface: direction aiming, sweep presets, airflow speed, power, auto/night mode, heat controls, filter life, and air-quality readings.
The goal is to make the Dyson feel like a polished Home Assistant appliance control instead of a collection of separate toggles and sensors.
- Fully functional Dyson control surface for the main things you would normally open the Dyson app to do
- Save preset directions with a name and icon, then tap once to aim the fan back there
- Mobile-first layout with direction, sweep, airflow, timer, sensor, filter, heat, and mode controls in one card
- Direction wheel with drag-to-aim control
- Sweep dial presets for direct, 45°, 90°, 180°, and wide sweep
- Direction presets with custom name and MDI icon
- Vertical airflow speed control with power button
- Auto mode, night mode, airflow direction, and sleep timer controls
- Heat, fan-only, and target temperature controls when a climate entity exists
- Optional left or right placement for the airflow speed control
- Compact badges for temperature, humidity, AQI, and filter life
- Expandable air-quality details for AQI, PM2.5, PM10, VOC, and NO2
- AQI color coding when status/value can be mapped
- Same-device entity discovery from the selected Dyson fan entity
- Home Assistant theme-aware light and dark styling
Direction presets are for repeatable aiming positions such as Bed, Desk, or Door.
Each preset stores:
- name
- MDI icon
- center direction
Presets are saved in browser localStorage under a key scoped to the fan entity:
ha-dyson-card:direction-presets:<fan entity>
Direction presets are local to the browser/device. They do not sync automatically across phones, tablets, wall panels, or browsers.
- Home Assistant 2024.8.0 or newer
hass_dysoninstalled and configured- A Dyson
fan.entity fromhass_dyson - Related Dyson entities attached to the same Home Assistant device for the best experience
Install it from the default HACS catalog:
- HACS ->
Dashboard - Search for
HA Dyson Card - Install
HA Dyson Card - Refresh or reopen Home Assistant so the dashboard resource is loaded
HACS installs dashboard cards under www/community/ and serves them through /hacsfiles/.
Add the card to a dashboard:
type: custom:ha-dyson-card
entity: fan.my_dysonOptional configuration:
type: custom:ha-dyson-card
entity: fan.my_dyson
title: Bedroom Dyson
airflow_control_side: right| Option | Type | Default | Description |
|---|---|---|---|
entity |
string | required | Dyson fan. entity from hass_dyson. |
title |
string | empty | Optional card title. Empty titles do not render a header. |
airflow_control_side |
right or left |
right |
Places the vertical airflow speed control on the right or left side. |
language |
string | auto | Optional UI language override (en, de, or fr). If omitted, the card follows the Home Assistant/frontend locale. |
hide_unsupported |
boolean | false |
Hides controls and info chips that are unavailable on the selected device instead of showing them as disabled/empty. |
hide_empty_sensors |
boolean | false |
Hides sensor badges with empty values (unknown, unavailable, or missing values). |
sensor_more_button_threshold |
number | 4 |
Shows the More/Less sensor toggle only when the visible sensor item count is greater than this value. |
sensor_detail_layout |
inline or panel |
panel |
Forces where sensor details are rendered: inline in the top strip or in the details panel. |
Example with both cleanup options enabled:
type: custom:ha-dyson-card
entity: fan.purifier_cool_wohnung
title: Purifier Wohnung
airflow_control_side: right
language: de
hide_unsupported: true
hide_empty_sensors: true
sensor_more_button_threshold: 5
sensor_detail_layout: inline| Control | Entity or service |
|---|---|
| Power | fan.turn_on, fan.turn_off |
| Auto | fan.set_preset_mode |
| Night | same-device night mode switch. |
| Airflow direction | fan.set_direction |
| Airflow speed | fan.set_percentage |
| Sleep timer | hass_dyson.set_sleep_timer |
| Direction wheel | hass_dyson.set_oscillation_angles or oscillation number entities |
| Sweep dial | oscillation select entity or angle services |
| Heat / Fan only | climate.set_hvac_mode |
| Target temperature | climate.set_temperature |
The default badge row shows the values most useful at a glance:
| Badge | Meaning |
|---|---|
| Temperature | Ambient temperature reported by the Dyson device. |
| Humidity | Ambient relative humidity. |
| AQI | Air Quality Index or category exposed by the integration. |
| Filter life | Remaining HEPA/carbon filter life percentage. |
The More section expands air-quality details when matching sensors exist:
| Detail | Meaning |
|---|---|
| AQI | Air Quality Index. Higher values or worse categories usually mean poorer air quality. |
| PM2.5 | Fine particulate matter around 2.5 microns. |
| PM10 | Larger particulate matter around 10 microns. |
| VOC | Volatile Organic Compounds from sources like cooking, cleaning products, smoke, or materials. |
| NO2 | Nitrogen dioxide, commonly associated with combustion sources. |
The card adapts to the entities exposed by hass_dyson; it is not hard-coded to one Dyson model.
- Purifier-only models can use fan, speed, direction, sweep, sensor, filter, auto, and night controls when those entities exist.
- Heater models can also show heat, fan-only, and target temperature controls when a climate entity exists.
- Models without reverse airflow, heat, sleep timer, or specific air-quality sensors will have those controls hidden or disabled.
Download ha-dyson-card.js and place it in:
config/www/community/ha-dyson-card/ha-dyson-card.js
Then add this dashboard resource:
/local/community/ha-dyson-card/ha-dyson-card.js
Resource type:
JavaScript module
Refresh or reopen Home Assistant after installing the dashboard resource. If it still does not appear, use a Manual card with type: custom:ha-dyson-card.
Hard refresh the Home Assistant frontend. If you manually edited the file under www/community, remove the generated .gz copy so Home Assistant serves the updated JavaScript.
Check that the missing feature is exposed by hass_dyson as an entity or supported fan/climate feature. The card hides or disables controls that cannot be safely mapped.
Dyson models and hass_dyson entity sets vary. The card prefers same-device oscillation select/number entities when available and falls back to hass_dyson.set_oscillation_angles for angle commands.
Run the syntax check locally:
node --check ha-dyson-card.jsThe GitHub workflow runs:
- HACS plugin validation
- JavaScript syntax validation on Node 24
- Built for
hass_dyson - Distributed as a HACS Dashboard/plugin repository
This project was built with Codex, with me serving as project manager and overseeing the direction, review, and iteration process throughout.
Apache-2.0

0 comments
log in to comment.