github disforw/goveelife v4.1.0
v4.1.0 — Major Stable Release

latest release: v4.1.1
6 hours ago

goveelife v4.1.0 — Release Notes

This is the full stable release of the v4.x series, incorporating all changes from pre-releases 4.B1 through 4.B4 plus post-beta fixes landed since then.


🔴 Critical Fixes

  • Async HTTP — Replaced blocking requests library with aiohttp throughout. No more blocking the Home Assistant event loop. (aiohttp>=3.9.0 is now required)
  • Mutable class state — Fixed a shared-state bug across fan, climate, humidifier, and switch platforms where class-level dicts/lists were shared across all device instances, causing state corruption
  • Climate turn-on crashasync_turn_on referenced HVACMode.HEATING which wasn't in the mode mapping, causing a KeyError at runtime for all heater/kettle devices
  • Humidifier current_humidity — Was returning "on"/"off" strings instead of a float; fixed to query the correct capability
  • Silent entity failures__init__ was silently returning None on failure, creating broken half-initialized entities; now raises RuntimeError
  • Switch inheritanceGoveeLifeSwitch wasn't inheriting from SwitchEntity; fixed

🐛 Bug Fixes

💡 Lights

  • RGBIC segment turn-off (Issue #134) — Devices with both segmentedBrightness and segmentedColorRgb capabilities (H60A4 and similar ceiling lights) could not fully turn off; segments clamped to ~1% brightness. Fixed by sending both brightness=0 AND rgb=0 on turn-off
  • Brightness scale — Corrected from (0, 100) to (1, 100) to match hardware
  • turn_on() from dark — Now sends rgb=0xFFFFFF (white) when turning on a dark RGB segment with no args
  • color_temp_kelvin = 0 crash (Issue #144) — Fixed HomeKit bridge crash when a light reports 0 Kelvin; now returns None instead
  • Segment entity removal (Issue #142) — Removed per-segment light entities that were generating excessive/unwanted entities in HA; segmented devices now use the parent light entity only

💧 Humidifier / Dehumidifier

  • H7151 / H7140 setup crash (Issues #143, #8) — KeyError: 'value' on setup for devices with non-Manual mode structures (nested options, range-based, defaultValue-based). Rewrote modeValue parsing to handle all four option structures generically — no more SKU-specific workarounds
  • Manual speed naming — Speed levels without API names now correctly appear as Speed 1, Speed 2, etc.
  • Sensor entitiessensorHumidity and sensorTemperature capabilities now correctly create HA sensor entities with proper device class and units

🌀 Fan

  • H7106 speed cap (Issue #127) — Unnamed gear speed options were being silently dropped; speeds now correctly named Speed 1, Speed 2, etc. when the API provides no name
  • Oscillation supportoscillationToggle now exposed as a proper HA oscillate control; affects H7102, H7106, H7120 and any future fan with this capability
  • SKU hardcoding removed — Removed all H7120-specific hardcoding; replaced with generic capability-driven flat workMode detection

⚙️ Config / Integration

  • Deprecated CONNECTION_CLASS — Removed from config_flow.py (was causing deprecation warnings in recent HA versions)

🆕 New Features

🔔 Binary Sensor Platform

  • New binary_sensor platform for event-based device capabilities
  • waterFullEvent → exposes as a problem binary sensor (e.g. humidifier water tank full alert)
  • Capability-driven — any device exposing devices.capabilities.event automatically gets a binary sensor entity
  • Easily extensible: adding new event types requires only a one-line mapping entry

💡 Per-Segment Light Entities (added in beta, removed before stable)

  • Per-segment entities were added and removed during the beta cycle (Issues #134, #142)
  • Full implementation notes preserved in docs/segmented-lights-removed.md for future re-implementation

🔧 Codebase / Housekeeping

  • Replaced deprecated HA unload APIs with async_unload_platforms()
  • Replaced third-party importlib_metadata with stdlib importlib.metadata
  • Replaced deprecated async_timeout with asyncio.timeout
  • Standardized all JSON payload building with json.dumps()
  • Extracted async_turn_on_entity() / async_turn_off_entity() into utils.py
  • Full ruff lint + format pass across all platform files
  • Fixed typos (GooveAPIGoveeAPI, entitesentities)
  • Removed leftover debug utilities (ProgrammingDebug, async_ProgrammingDebug)
  • Removed unnecessary await asyncio.sleep(0) yield points
  • Dead code removed from sensor.py
  • README completely rewritten with installation, configuration, entity types, and troubleshooting docs

Issues Closed in This Release

#134, #142, #143, #144, #128, #124, #129, #8, #127


⚠️ Upgrade Notes

  • aiohttp>=3.9.0 is now required (replaces requests) — HACS installs handle this automatically
  • Per-segment light entities from 4.B2/4.B3 have been removed; if you had automations targeting segment entities, update them to use the parent light entity

Full Changelog: v4.B4...v4.1.0

Don't miss a new goveelife release

NewReleases is sending notifications on new releases.