Skip to content

Releases: eman/quilt-hp-python

v0.4.0

16 May 21:10

Choose a tag to compare

chore: bump version to 0.4.0

v0.3.2

14 May 16:09

Choose a tag to compare

Added

  • LouverAngle.label property and __str__ with human-readable position names:
    ANGLE1"Horizontal", ANGLE2"Slightly Down", ANGLE3"Down",
    ANGLE4"Mostly Down", ANGLE5"Straight Down"

v0.3.1

14 May 15:34

Choose a tag to compare

Fixed

  • RST_STREAM with error code 0 (HTTP/2 NO_ERROR, a normal server-side graceful reset) is now logged at DEBUG instead of WARNING to reduce log noise
  • CANCELLED (server closed the stream normally, e.g. keepalive timeout or server rotation) is now logged at INFO instead of WARNING
  • UNAUTHENTICATED reconnects handled by the automatic token refresh are now logged at INFO instead of WARNING

v0.3.0

13 May 00:42

Choose a tag to compare

Added

  • NotifierStream health properties: is_connected, last_event_at, stream_state
  • NotifierStream debounce_s parameter to coalesce rapid update bursts
  • MetricBucketStatus enum exposed on EnergyBucket.status (was untyped int)
  • grpc_call() context manager in services for consistent gRPC error translation and optional retry
  • Structured logging.getLogger(__name__) across all modules (auth, client, transport, services, CLI)
  • QuiltStreamError re-exported from the top-level quilt_hp package
  • Shared model helpers (_helpers.py) for WiFi signal parsing and hardware lookup

Changed

  • ScheduleEvent.hvac_mode is now typed as HVACMode (was int)
  • Token temp file created with os.open(..., 0o600) so permissions are secure from creation (no transient world-readable window)
  • Signature cache in transport layer uses weakref.WeakKeyDictionary instead of dict[int, bool] — prevents unbounded growth and id-reuse bugs after GC
  • login() clears the token cache so a re-login always fetches fresh credentials
  • _GrpcCallContext avoids self-chaining when re-raising a QuiltError unchanged

Fixed

  • EnergyBucket.has_missing_energy_value now treats None (absent proto field) as missing, not just NaN; prevents TypeError in SpaceEnergyMetrics.total_kwh
  • MetricBucketStatus() conversion in get_energy_metrics catches ValueError for unknown server values and falls back to UNSPECIFIED instead of raising
  • WeakKeyDictionary.get() for the refresh-callback signature cache is now guarded against TypeError for non-weakrefable callables
  • AUTO mode setpoint deadband clamp now runs before setpoint selection, ensuring the correct (clamped) value is sent to the device
  • CLI settings bool coercion uses isinstance(v, bool) to avoid bool("false") == True
  • Zero-value proto3 fields (0 °C temperature, 0 dBm WiFi signal, 0% humidity) are now preserved instead of being dropped as falsy
  • NotifierStream reconnect subscription is now protected by an asyncio.Lock to prevent concurrent subscribe/reconnect races
  • CLI enum lookups raise a clear error showing valid options on invalid input
  • auth.py narrows broad except Exception to except (QuiltAuthError, ClientError) to avoid swallowing unexpected errors

v0.2.2

11 May 15:26

Choose a tag to compare

Fixed

  • Corrected mapping of outdoor units to indoor units in SystemSnapshot
  • Fixed TUI interaction issues with button handling and bindings

v0.2.1

11 May 02:05

Choose a tag to compare

Fixed

  • Restored CI/release quality-gate stability by applying required ruff format
    updates in model files.

v0.1.4

09 May 05:15

Choose a tag to compare

Fixed

  • boto3.client() was called synchronously inside async functions, causing a
    blocking HTTP request to the EC2 instance metadata service (IMDS) at
    169.254.169.254 during credential resolution. This manifested as an
    HTTPClientError in Home Assistant's async event loop. The client is now
    created via loop.run_in_executor() like the subsequent API calls.

v0.1.3

09 May 05:05

Choose a tag to compare

Fixed

  • Regenerated gRPC stubs with grpcio-tools==1.78.0 so the library works
    inside Home Assistant, which hard-pins grpcio==1.78.0 in its package
    constraints. Previously the stubs were generated with 1.80.0 and raised
    RuntimeError at import time on older grpcio versions.

v0.1.2

09 May 04:59

Choose a tag to compare

chore: bump version to 0.1.2

v0.1.1

08 May 19:12

Choose a tag to compare

chore: bump version to 0.1.1