Release v1.2.5
What's New
custom_states_on — Universal Priority
custom_states_on now has the highest priority across all domains. It overrides built-in logic for battery, climate, alarm_control_panel, vacuum, and all other domains. If defined, it always wins — no exceptions.
custom_states_labels — Major Upgrade
Numeric matching with operators and ranges
Labels can now be matched using comparison operators and ranges, not just exact text:
custom_states_labels:
"<10": Cold
"10-25": Comfortable
">25": HotSupported: >, <, >=, <= and min-max ranges (including wrap-around ranges like 22-0 for overnight hours).
Highest priority
custom_states_labels is now checked before any domain-specific labels (media_player, light, climate, fan, cover). If a match is found, it wins — name_on/name_off act as fallback.
Percentage-based matching
For domains where the state is always on/off but the "level" is in an attribute:
light— matches againstbrightnessconverted to % (0–100)fan— matches againstpercentagecover— matches againstcurrent_position
# Light brightness labels
custom_states_labels:
off: "Off"
"<10": Dim
"10-40": Low
"40-80": Bright
">80": MaxSecond value line (value2) for climate
When custom_states_labels is defined for a climate entity, a second smaller label appears below the current temperature. Matching priority: hvac_action → state (hvac_mode) → preset_mode.
custom_states_labels:
off: "Off"
heating: Heating
idle: Idle
eco: Eco
comfort: ComfortFont size defaults to state_size - 5px. Override with value2_size.
Second value line (value2) for weather
Same mechanism for weather entities — matches against the temperature attribute.
custom_states_labels:
"<5": "Cold: heavy coat"
"5-15": "Cool: jacket"
"15-25": "Comfortable: light layer"
">25": "Hot: light clothes"Greeting label for clock mode (entity: on.clock)
When custom_states_labels is defined for the built-in clock, a greeting label appears above the clock digits and updates live every second — no page reload needed.
entity: on.clock
custom_states_labels:
"0-5": "Night... 🌙"
"5-9": "Good morning! ☕"
"9-17": "Have a great day! 👋"
"17-22": "Good evening! 🌆"
"22-0": "Good night! ✨"Wrap-around ranges (e.g. 22-0)
Ranges where the lower bound is greater than the upper bound now work correctly — interpreted as "value ≥ lower OR value ≤ upper". Useful for overnight hour ranges.
Auto line-wrapping
Long labels now wrap automatically within the card boundaries — no need for manual <br> tags. Manual <br> still works if you want to force a break at a specific point.
max_watts — Accepts Entity ID
max_watts now accepts either a number or an entity ID (e.g. a sensor). The value is read live from the sensor state.
max_watts: sensor.socket_max_power
# or as before:
max_watts: 2000If the entity is unavailable or the state is not a valid number, falls back to 2000W.
Editor
- New Greeting section in the Text tab — visible only when
entity: on.clockis selected. - Fields: Greeting font size (px) and Greeting color.
Bug Fixes
22-0range returned null for hours 23:00–23:59 — fixed. Wrap-around ranges now work correctly for all values.- Negative number ranges (e.g.
"-5 - 5") — now parsed correctly. custom_states_onignored for battery/climate/alarm/vacuum — fixed. Custom list now always takes priority.custom_states_labelsignored formedia_player— fixed. Domain-specific labels no longer override custom ones.
Notes
- All changes are fully backward compatible — existing configurations work without any modifications.
custom_states_labelskeys using>or<must be quoted in YAML (e.g.">25","<10"), otherwise YAML will fail to parse.- For operator-based keys (
>,>=), list them highest to lowest — first match wins. - For
</<=keys, list them lowest to highest — same reason.