Use esphome-comfoair to connect your ComfoAir to Home Assistant, then use this Lovelace card to visualize and control it.
Visualization inspired by TimWeyand/lovelace-comfoair (crossed airflows, temperature color scale, setpoint/fan controls, status chips) — English UI, entity IDs for esphome-comfoair.
- Crossed airflows (outside / extract / exhaust / supply) with a fixed temperature color scale (OKLCH: dark blue ≤ −20 °C → red ≥ 40 °C)
- Heat recovery % computed from the four temperatures (hidden when bypass is open)
- Setpoint (− / +) and fan modes (Auto / Off / Low / Medium / High; Auto can be hidden)
- Status row: Fan, Filter, Error, Bypass, Preheat, Summer/Winter
- Filter / error reset: click an active Filter or Error chip to confirm and press the matching HA button
- Optional service / test mode dialog (
enable_test_mode, default off) - Optional animated airflows and spinning fans
- Optional temperature legend
- Click a temperature / rpm / % value to open Home Assistant more-info history
- Auto-detected entity prefix from the climate entity (device siblings / object_id heuristics); optional
prefixoverride - Visual card editor in the dashboard UI (climate picker, animation/colors, advanced entity overrides)
- Missing entities are listed instead of throwing in the browser console
Screenshots from the TimWeyand visualization this card adopts (light/dark, static/animated):
| Static | Animated | |
|---|---|---|
| Light | ![]() |
![]() |
| Dark | ![]() |
![]() |
- Clone this repo into your
wwwfolder:config/www/lovelace-comfoair. - Register the resource:
resources:
- type: module
url: /local/lovelace-comfoair/comfoair-card.js- Add the card (see configuration below).
- Hard-refresh the browser (Ctrl+F5) after updating the JS.
- HACS → Custom repositories → add this repository as Dashboard / Lovelace.
- Download Comfoair ventilation lovelace component.
- Resource (usually added automatically):
url: /hacsfiles/lovelace-comfoair/comfoair-card.js type: module
- Edit dashboard → Add card → search for ComfoAir Card (or paste the YAML below).
- Pick the climate entity — the sensor prefix is filled automatically.
- Adjust animation / color scale as needed.
- Open Advanced / entity overrides only if individual sensors need remapping.
Minimal example — only the climate entity is required; the sensor prefix is auto-detected:
type: custom:comfoair-card
entity: climate.esphome_comfoair200_comfoair_200
# prefix: esphome_comfoair200 # optional override if auto-detect is wrongHow prefix auto-detection works:
- Explicit
prefixin config (if set) - Sibling entities on the same HA device as the climate entity
- Score candidate prefixes derived from the climate object_id against live
sensor.*states
(e.g.climate.esphome_comfoair200_comfoair_200→ tries…_comfoair_200, thenesphome_comfoair200, …) - Fallback
comfoair(legacy)
| Option | Required | Default | Description |
|---|---|---|---|
entity |
yes | — | Climate entity of the ComfoAir unit |
prefix |
no | auto | Prefix for sensor / binary_sensor IDs; auto-derived from the climate entity when omitted |
name |
no | ComfoAir |
Card title |
animation |
no | static |
static or animated (flow particles + spinning fans) |
animation_speed_source |
no | fixed |
fixed (%) or level (from supply/return air level) |
animation_speed |
no | 50 |
Speed when source is fixed (10–200; 100 = baseline) |
color_scale |
no | fixed |
fixed maps −20…40 °C (dark blue→red); auto stretches over current temps |
temp_min |
no | -20 |
Lower bound for fixed color scale (°C); at or below → dark blue |
temp_max |
no | 40 |
Upper bound for fixed color scale (°C); at or above → red |
show_legend |
no | false |
Show temperature color legend |
enable_test_mode |
no | false |
Show header button that opens the service/test dialog |
disable_auto_fan |
no | false |
Hide the Auto fan button so Auto cannot be selected from the card (status still shows Auto if the unit is already in Auto) |
With prefix: esphome_comfoair200 the card expects:
| Role | Entity |
|---|---|
| Outside temp | sensor.{prefix}_outside_air_temperature |
| Exhaust temp | sensor.{prefix}_exhaust_air_temperature |
| Extract / return temp | sensor.{prefix}_return_air_temperature |
| Supply temp | sensor.{prefix}_supply_air_temperature |
| Intake fan RPM | sensor.{prefix}_intake_fan_speed_rpm |
| Exhaust fan RPM | sensor.{prefix}_exhaust_fan_speed_rpm |
| Return air level | sensor.{prefix}_return_air_level |
| Supply air level | sensor.{prefix}_supply_air_level |
| Filter | sensor.{prefix}_filter_status |
| Errors | sensor.{prefix}_error_status |
| Filter reset | button.{prefix}_filter_reset |
| Error reset | button.{prefix}_error_reset |
| Bypass | binary_sensor.{prefix}_bypass_valve_open |
| Preheat | binary_sensor.{prefix}_preheating_state |
| Summer mode | binary_sensor.{prefix}_summer_mode |
Override any of those with a full entity ID using the same key name, e.g. outside_air_temperature: sensor.my_temp. TimWeyand-style aliases (tempSensor1…tempSensor4, fan_speed_supply, filterstatus, bypass_valve, preheat) are also accepted.
The status row shows fan, filter, error, bypass, preheat, and season.
- Filter chip is active when status is
Full. Click it to confirm and pressbutton.{prefix}_filter_reset(resets the unit’s filter timer). - Error chip shows active faults from
error_statusas human-readable text (e.g.A1 · Outside air sensor (T1)), orNonewhen clear. Hover the chip for the full installer-manual wording. Click when active to confirm and pressbutton.{prefix}_error_reset.
Fault wording follows Zehnder ComfoAir installer manuals §2.10.1 (350 Luxe primary; 550 / Standard 300–375 cross-check). Unknown protocol codes (not listed in those manuals) are shown as the raw code only. Mapping is card-side only; ESPHome still publishes codes such as A1, E2.
Requires esphome-comfoair with error_status, filter_reset, and error_reset configured under comfoair:.
Both sides are off by default:
- ESPHome:
enable_test_mode: trueundercomfoair:(auto-creates test entities). - Card:
enable_test_mode: truein the card config (shows a test-tube button in the header).
The dialog can enter/exit PC test mode, start self-test, drive bypass/preheat flaps, set supply/exhaust/post-heat %, and toggle relays/filter LED. Controls that require an active test mode session are dimmed until the master switch is on.
type: custom:comfoair-card
entity: climate.esphome_comfoair200_comfoair_200
name: Ventilation
animation: animated
animation_speed_source: level
show_legend: true
# enable_test_mode: true # optional service dialog- Original card: wichers/lovelace-comfoair
- Visualization design: TimWeyand/lovelace-comfoair
- ESPHome integration: wichers/esphome-comfoair



