0.8.0 — Platinum quality scale + boschshcpy 0.4.0
Platinum quality scale + full type annotations
This release delivers the Platinum quality scale milestone and significantly improves code robustness across the integration.
boschshcpy 0.4.0
py.typedmarker — full PEP 561 type annotations; mypy can now type-check against the librarySHCSessionAsync— async-first session class (foundation for future async migration)- All service + model classes exported from top-level
__init__ certificate.py:not_valid_after_utc(replaces deprecatednot_valid_after)- ruff + mypy CI gate in the library
- GitHub Release auto-creation after PyPI publish
Platinum quality scale
All cumulative quality scale rules (Bronze → Silver → Gold → Platinum) are done or exempt.
- Full mypy strict typing across the integration
- mypy gate now enforced in CI (was informational)
- 2915 tests passing, ≥95 % coverage gate
Bug fixes (since 0.7.25)
Stability / crash fixes
UserDefinedStatecrash on deleted states (#351) — Bosch API omits'deleted'/'state'keys whenFalse;.get()fallback preventsKeyErrorSwitchDeviceEventListenerduplicatehomeassistant_stoplistener — caused"Unable to remove unknown job listener"ValueError on every HA restart (4× per boot); removed sinceasync_unload_entryalready callsshutdown()SmokeDetectorSensor.is_on:try/except (KeyError, ValueError)guard onalarmstateClimateDevicesetup:KeyErrorguard onsession.room(room_id)config_flow:Noneguard inasync_step_reconfigure/async_step_credentials(preventedAttributeErroron pairing failure)rawscanservice: returnNone→ raiseServiceValidationError(required forSupportsResponse.ONLY)- 20
services_impldefensive guards for partial long-poll updates (KeyError/ValueError)
Sensor correctness
- Battery sensors: no longer show
unknown/lowerroneously —BatteryLevelService.warningLevelsafe fallback →NOT_AVAILABLE BatterySensor:self.name→self._device.namein logger calls (wasNoneduring polling callbacks)entity_iddeprecation fix (#296) —trigger_idnow uses stableunique_id- Climate
AUTOmode guard — prevents jumping back to auto on set_temperature - Number entity
Noneguard - Binary sensor unsubscribe +
ValueErrorguard - Event dedup +
ValueErrorguard - Switch
availableproperty fix
Device compatibility
- README: SHC I, SHC II, and SHC Classic all ✅ supported (corrected wrong claim)
CI hardening
quality.yml: pip install retry-with-backoff (self-heals when a just-released lib pin hasn't reached the CDN edge)scripts/local-ci.sh— mirrors Quality + Tests workflows locally for pre-push checks
Full Changelog: v0.7.25...v0.8.0