ADR-0033: The − / + tile of the climate card adjusts a device chosen on the tablet — the climate, up to eight devices picked in the blueprint, or the tablet's volume¶
Status: Accepted (2026-10-06, asked for and decided by the author; not yet tried on a tablet) Date: 2026-10-06
Context¶
The climate card of the home page (top right, climate_card.yaml) shows the living-room and greenhouse temperatures and, under them, a glass tile « − / setpoint / + » that adjusts the blueprint's climate; touching the setpoint opens the climate popup. A home without a climate had nothing there, and a home with other things it adjusts often (the TV or soundbar volume, a light's brightness, a radiator, a water heater, a fan) had to open a room page or a popup for each.
The author asked for the − / + buttons to adjust other devices too — « the TV, soundbar or tablet volume, a light's brightness, various thermostats, or other devices I don't think of » — keeping the climate popup; the choice stays fixed, and the list unfolds when touching the living-room icon or temperature. The author then decided (2026-10-06):
- the chosen device stays until the next choice, even after a reboot;
- the devices of the list are picked in the blueprint, in a section of their own; the blueprint's climate comes first and the tablet's volume always last;
- touching the value between − and + opens the device's popup when it has one (climate → climate popup, a light or a shutter → its popup, the TV → the remote), otherwise nothing.
Constraints that hold: push-only and events-only (ADR-0001, ADR-0025): the firmware names no entity and calls no Home Assistant action; the blueprint only commands entities of its own lists (whitelist, origin guard); one source for icons (the tiles' palette, ADR-0023); no hardcoded colour (themes, ADR-0029); public HA files without a real entity (ADR-0024); an older firmware or an older blueprint keeps working.
Decision¶
- Name: « tuile − / + » (− / + tile), keys
rN. The keys of the list start withr(réglable, adjustable), N from 0 to 7: no collision witht…,h…,b…,cr…. - Picked in the blueprint « Tab5 — emplacements », in a collapsed section « Tuile − / + · − / + tile »: one entity list (
reglables, reorderable), domainsmedia_player,light,climate,water_heater,humidifier,fan,cover,valve,number,input_number. The variablereglableskeeps the first eight that exist, have a type, are not the blueprint's climate (already first), are not duplicates and are not « read only » in the tiles' customisation. It is the whitelist of the commands of anrNkey. - Types (
types_reglablesin the blueprint,kTypesintab5_reglables.cpp;tests/test_reglables.pycompares):
| Type | Domains | Value | − / + |
|---|---|---|---|
son |
media_player | volume in % | 5 % |
lum |
light | brightness in % (0 = off) | 10 %, or 100 without dimmer |
cli |
climate | setpoint | the device's step, °C/°F as for the climate (ADR-0026) |
eau |
water_heater | setpoint | the device's step, else 0.5 |
hum |
humidifier | target humidity in % | 5 % |
ven |
fan | speed in % (0 = off) | the device's step if ≥ 5, else 10 |
vol |
cover, valve | position in % | 10 % with a settable position, else 100 (closed / open) |
nbr |
number, input_number | the value | its step, min, max and unit |
- Definitions with the tiles' in
tab5_maj_tuiles(protocol 2):rN|type|icon|options|link|min|max|step|unit|name. Icon: the tiles' palette, chosen the same way (customisation,iconattribute, device class, domain). Optiont: the blueprint's TV (its value opens the remote). Link: the first tile carrying the same entity (tRT), whose popup the value opens. Unit: 7 bytes at most;|and;are replaced in the unit and the name, as for the tiles. - States in
tab5_maj_emplacements:rN|state|value, the value in its definition's unit (nanwhen Home Assistant has none: a player switched off, a shutter moving without position). Pushed with all states, and for one device when its state or the attribute carrying its value changes (triggersreglable,reglable_volume,reglable_luminosite,reglable_consigne,reglable_humidite,reglable_vitesse,reglable_position; never all attributes: a player changes them with every song). A device that appears redefines everything. - Commands. The tablet sends
esphome.tab5_actionwithrN/regler/ value, orrN/consigne/ value for a climate (it then takes the existing branch « Clim : consigne », with its bounds and its mode when off). The branch « Tuile − / + : régler » bounds the value to the definition and picks the action by domain:media_player.volume_set,light.turn_on(brightness_pct) orturn_offat 0,fan.set_percentageorturn_offat 0,humidifier.set_humidity,water_heater.set_temperature,cover/valve.set_*_position, otherwise open above 50 and close below (the shutter of the simulated-travel package through its script),number/input_number.set_value. AnrNkey out of the list, another command or a value that is not a number command nothing. - Firmware (
tab5_reglables.cpp, packagetab5-reglables.yaml,ui_components/reglables_liste.yamland itsreglables_ligne.yamltemplate): definitions in their own NVS record (REG1), so the tile shows the right device at boot; the choice in another (RGC1), recognised by type and name (FNV-1a; two devices of the same type and name are told apart by their rank), so reordering the blueprint's list keeps the device; a vanished choice falls back to the first entry. The list: the climate (when present), the blueprint's devices, the tablet. Climate chosen: − / +, the setpoint and its popup take exactly their former path (clim_target_temp,tab5_debounce_clim_temp). Another device:clim_targetis hidden,reglable_rangeeshows its icon and value; − / + move the value on the grid of its step, at once (optimistic), and one command leaves 250 ms after the last touch (tab5_debounce_reglable, as the climate); a state received during a gesture keeps the gesture's value. The tablet's volume goes throughtab5_volume_apply(the single entry point of the volume), step 5 %. - The list is a full-screen transparent catcher with a glass panel (520 px, right edge on the card's, top on its top), one 52 px row per device: icon, name, value; the chosen row in accent. Touching a row chooses it and closes the list; touching elsewhere closes it; it closes after the popups' inactivity delay. It is not a modal popup (no scrim, no header): registered as a
SUBWINDOW(closed with the popups),style_glass_card, notstyle_modal_card. It is the 17th window ofModalRegistry(MAX= 24). - The tile's visibility does not change: shown with a climate or at least one device of the blueprint; the tablet's volume alone does not show it.
Compatibility¶
- New blueprint, older firmware (3.6.0 and before): the
rkeys are unknown and ignored; the tile adjusts the climate as before. The new section only adds keys. - New firmware, older blueprint: no
rkey, so the list holds the climate and the tablet; with the climate chosen (default) the screen is the one of 3.6.0. - Section left empty: no
rkey, same as above. - Protocol 1 (firmware older than 3.2): neither definitions nor
rstates are sent.
Consequences¶
- One more package (twenty-three), C++ unit and two UI files.
climate_card.yamlgains the touch zonebtn_reglables_listeon the living-room row andreglable_rangeebetween − and +. The tiles' palette gains thetablettecode (mdi:tablet). Amended 2026-10-07 (discussion #278): the tablet's row is named « Son de la tablette » (Tablet volume) and shows the palette'senceintespeaker, crossed out at 0 % or when muted; « Tablette » with a tablet icon did not say it was the volume. Thetablettecode stays for Home Assistant tiles with a tablet icon. - The touch zone on the living-room temperature is new: before, touching it did nothing. Amended 2026-10-09 (ADR-0038): its tap now opens the climate carousel; the list unfolds with a long press on the value between − and + (
btn_clim_target_click), and still with that tap when the tablet knows no climate. tests/test_reglables.pyholds the types on both sides, the whitelist, the bounds, the definitions, the states, the triggers, the command per domain, the card and the list; the « Installation dans un HA neuf » job loads the blueprint in a real Home Assistant.
Update (2026-10-14)¶
ADR-0040, update of 2026-10-14 (discussion #278): the list's first line is the climate « here » — the only one of the home, else the room shown's, else the blueprint's — and may be missing on a room when the home has several climates and neither the room nor the blueprint has one. The tile is shown with a climate here or at least one device of the blueprint. A device chosen in the list stays chosen on every room.
Update (2026-10-16): the wheel of a shutter without a tile¶
Discussion #278 (husyildiz): a shutter of the list that is not a tile of any room had no link, so touching its value did nothing and only − / + moved it; it had neither the shutter popup nor the quick-action wheel (ADR-0036), and the Shutters popup (ADR-0046) lists room tiles only. Decided by the author: touching the value of a vol device (cover or valve) without a link and that is not the TV now opens an action wheel (tab5_reglables.cpp, roue_ouvrir() with its own callbacks): Ouvrir, Stop, Fermer, as on a shutter tile, and « Position ▸ » (25 / 50 / 75 %) when its position is settable and known (step < 100, the definition's own test). No « Maison », no « Détails »: it has no popup. The hub shows its icon, value, name and position gauge; it sits on the climate wheel's low anchor (clim_ancre_basse(), ADR-0048), the − / + tile being under the room temperature. Commands: rN / ouvrir, fermer, arreter — the blueprint branch « Tuile : ouvrir, fermer, arrêter » now accepts an rN key whose entity is a cover or a valve (same whitelist, reglables; the simulated-travel shutter through its script) — and rN / regler / position, the − / + command. A device with a link keeps opening its tile's popup. A wheel repaints only when it is its own (roue_ouverte_par()): a tile state pushed while this wheel (or the navigation wheel) is open no longer reopens that tile's wheel over it.
Not chosen: a page « Autres » in the Shutters popup (the popup is built on room tiles, a second source of rows for one device was not worth it), and the page of an « associated » room (nothing links an rN device to a room). Adding the shutter as a room tile still gives it everything (popup, wheel, Shutters page), with no change.
Compatibility: new firmware with an older blueprint, ouvrir / fermer / arreter on an rN key match no branch and do nothing (Position still works through regler); older firmware, nothing changes.