Skip to content

Add a Duco BOX mode select for timed ventilation states #23

Description

@ronaldvdmeer

Summary

Add a dedicated select entity for the Duco BOX so users can explicitly set the discrete ventilation modes, including the timed states, without overloading the fan entity.

Why this issue exists

The current direction in core#9 treats the stable Duco modes as fan presets. That no longer looks like the clearest model for the user experience we want.

A dedicated select keeps the mode choice explicit, while the fan entity can stay focused on airflow control.

Design direction to track

1. Add a BOX mode select

The BOX should expose a dedicated select entity for the discrete Duco control states:

  • AUTO
  • MAN1
  • MAN2
  • MAN3
  • CNT1
  • CNT2
  • CNT3
  • EMPT

The select should:

  • read from Ventilation.State
  • write through async_set_ventilation_state()
  • exist alongside the fan entity instead of replacing it

2. Keep the fan entity focused on airflow control

The fan entity should stay focused on percentage-style airflow control rather than becoming a second mode selector.

Open implementation question:

  • whether the displayed fan percentage should continue to be derived from the current reported state, or move to FlowLvlTgt

Current recommendation:

  • keep the fan percentage based on the effective reported state until real-device behavior shows FlowLvlTgt is more reliable for Home Assistant UX
  • do not switch to FlowLvlTgt just because it exists if it can lag behind the actual active mode

3. Keep timing semantics out of this issue

The installer-configurable duration problem should stay tracked separately.

Related timing work:

  • core#20 tracks removal of misleading fixed-duration assumptions like 15 min, 30 min, and 45 min

This issue is about adding an explicit mode select, not about how timed states are labeled internally.

Scope

In scope:

  • add a BOX mode select entity for the discrete Duco states
  • keep the fan entity and mode control responsibilities separate
  • decide how the fan percentage should be derived for BOX
  • update tests and snapshots to match the final entity model

Out of scope:

  • zonal valve select entities already tracked elsewhere
  • generic Duco label cleanup beyond the control-model implications
  • installer-configurable manual durations beyond linking to core#20

Acceptance criteria

  • BOX ventilation modes are exposed through a dedicated select entity
  • the select exists alongside the existing fan entity
  • writes use the existing Duco ventilation-state API path
  • the fan entity contract remains focused on airflow control
  • the chosen percentage read model is explicitly documented in code and tests

Related

  • Refines the direction described in core#9
  • Related label/timing follow-up: core#20
  • Related zonal select work: core#21

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    Status
    Ready

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions