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
requestslibrary withaiohttpthroughout. No more blocking the Home Assistant event loop. (aiohttp>=3.9.0is now required) - Mutable class state — Fixed a shared-state bug across
fan,climate,humidifier, andswitchplatforms where class-level dicts/lists were shared across all device instances, causing state corruption - Climate turn-on crash —
async_turn_onreferencedHVACMode.HEATINGwhich wasn't in the mode mapping, causing aKeyErrorat 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 returningNoneon failure, creating broken half-initialized entities; now raisesRuntimeError - Switch inheritance —
GoveeLifeSwitchwasn't inheriting fromSwitchEntity; fixed
🐛 Bug Fixes
💡 Lights
- RGBIC segment turn-off (Issue #134) — Devices with both
segmentedBrightnessandsegmentedColorRgbcapabilities (H60A4 and similar ceiling lights) could not fully turn off; segments clamped to ~1% brightness. Fixed by sending bothbrightness=0ANDrgb=0on turn-off - Brightness scale — Corrected from
(0, 100)to(1, 100)to match hardware turn_on()from dark — Now sendsrgb=0xFFFFFF(white) when turning on a dark RGB segment with no argscolor_temp_kelvin = 0crash (Issue #144) — Fixed HomeKit bridge crash when a light reports0Kelvin; now returnsNoneinstead- 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-Manualmode structures (nested options, range-based, defaultValue-based). RewrotemodeValueparsing 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 entities —
sensorHumidityandsensorTemperaturecapabilities 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 support —
oscillationTogglenow 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
workModedetection
⚙️ Config / Integration
- Deprecated
CONNECTION_CLASS— Removed fromconfig_flow.py(was causing deprecation warnings in recent HA versions)
🆕 New Features
🔔 Binary Sensor Platform
- New
binary_sensorplatform for event-based device capabilities waterFullEvent→ exposes as aproblembinary sensor (e.g. humidifier water tank full alert)- Capability-driven — any device exposing
devices.capabilities.eventautomatically 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.mdfor future re-implementation
🔧 Codebase / Housekeeping
- Replaced deprecated HA unload APIs with
async_unload_platforms() - Replaced third-party
importlib_metadatawith stdlibimportlib.metadata - Replaced deprecated
async_timeoutwithasyncio.timeout - Standardized all JSON payload building with
json.dumps() - Extracted
async_turn_on_entity()/async_turn_off_entity()intoutils.py - Full ruff lint + format pass across all platform files
- Fixed typos (
GooveAPI→GoveeAPI,entites→entities) - 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.0is now required (replacesrequests) — 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