🤠 New Sheriff in Town
This release brings a comprehensive overhaul of the goveelife integration — a lot has changed under the hood.
🔴 Critical Fixes
- Async HTTP — Replaced blocking
requestslibrary withaiohttpthroughout. No more blocking the Home Assistant event loop. - Mutable class state — Fixed a nasty shared-state bug across
fan,climate,humidifier, andswitchplatforms where class-level dicts/lists were shared across ALL device instances, causing state corruption. - Humidifier humidity sensor —
current_humiditywas returning"on"/"off"strings instead of a float. Fixed to query the correct capability. - Climate turn-on crash —
async_turn_onreferencedHVACMode.HEATINGwhich wasn't in the mode mapping, causing aKeyErrorat runtime for all heater/kettle devices. - Silent entity failures —
__init__was silently returningNoneon failure, creating broken half-initialized entities. Now raisesRuntimeErrorproperly. - Switch platform —
GoveeLifeSwitchwasn't inheriting fromSwitchEntity. It is now.
🟡 Improvements
- Deprecated HA APIs — Replaced old per-platform unload loop and manual entity registry removal with
async_unload_platforms() - Stdlib cleanup — Replaced third-party
importlib_metadatawith stdlibimportlib.metadata; replaced deprecatedasync_timeoutwithasyncio.timeout - JSON payloads — Standardized all JSON payload building with
json.dumps() - Shared helpers — Extracted
async_turn_on_entity()/async_turn_off_entity()intoutils.py - Dead code removed — Cleaned up unused state-fetch-and-discard in
sensor.py
🟢 Housekeeping
- Fixed typos (
GooveAPI→GoveeAPI,entites→entities) - Removed leftover debug utility functions (
ProgrammingDebug,async_ProgrammingDebug) - Removed unnecessary
await asyncio.sleep(0)yield points throughout - Full ruff lint + format pass — all checks clean
⚠️ Notes
aiohttp>=3.9.0is now a requirement (replacesrequests)- The
sensorHumiditycapability name used for the humidifier fix follows the Govee OpenAPI spec — please report if your device uses a different instance name