2026.8
⚠️ Breaking change: swing/fan mode state values renamed to snake_case
Builds on top of the 2026.7 bugfix release (everything in that release is included here too), plus one breaking fix that had to ship separately: fan_mode, swing_mode, and swing_horizontal_mode used human-readable strings with spaces/slashes as the actual entity state values, not just display labels - Home Assistant's own hassfest validation requires state/translation keys to match [a-z0-9-_]+, and the old values were never actually valid. Fixed by renaming to snake_case:
Vertical swing (swing_mode):
| Old | New |
|---|---|
Up/Down Auto |
up_down_auto |
Highest |
highest |
Middle |
middle |
Normal |
normal |
Lowest |
lowest |
3D Auto |
3d_auto |
Horizontal swing (swing_horizontal_mode):
| Old | New |
|---|---|
Left/Right Auto |
left_right_auto |
Left-Left |
left_left |
Left-Center |
left_center |
Center-Center |
center_center |
Center-Right |
center_right |
Right-Right |
right_right |
Left-Right |
left_right |
Right-Left |
right_left |
3D Auto |
3d_auto |
Fan mode (fan_mode): Quiet → quiet (the others were already lowercase)
If you have automations, scripts, or dashboards calling climate.set_fan_mode, select.select_option, or the set_horizontal_swing_mode/set_vertical_swing_mode services with the old capitalized strings, update them to the new lowercase values before updating - otherwise those calls will silently stop matching after this update. See the README migration note for the same info.
Also included in this fix: set_fan_speed (a dead service definition with no registered handler anywhere in the codebase) was removed, and set_horizontal_swing_mode/set_vertical_swing_mode's service schema was corrected from target: device to target: entity (they're entity-registered services, the device target was never valid).
Note on versioning
This release was briefly published as v2.0.0 under an attempted switch to Semantic Versioning. That was reverted: HACS/Home Assistant use the awesomeversion library for update comparisons, which parses 2026.7 as CalVer and 2.0.0 as SemVer and ranks CalVer higher purely by the leading number (2026 > 2) - so v2.0.0 was never actually offered as an update to anyone on 2026.7, and existing v2.0.0 installs got a bogus downgrade prompt back to 2026.7. Staying in the project's established CalVer scheme (YYYY.M) keeps update detection correct for everyone. Sorry for the churn if you already updated to v2.0.0 - functionally it's identical to this release, just correctly named.