Skip to content

v0.3.7

Choose a tag to compare

@eXPerience83 eXPerience83 released this 28 Sep 06:35
3b53bdd

Changelog

[0.3.7] - 2025-09-28

Fixed

  • switch: ensure stable device identifier even when coordinator snapshot is empty at startup (fallback to self._device_id).
  • climate: do not swallow API errors; _send_p_event() now re-raises (except CancelledError). Callers only apply optimistic state and schedule refresh after a successful send, preventing “phantom success” in the UI.
    • Moved import time to module level in select.py and number.py to avoid per-read imports in entity properties and improve async hygiene.

Notes

  • P2=4 (AUTO) remains unsupported for now; docs toggle will be added when implemented.

[0.3.7-alpha.11] - 2025-09-27

Changed

  • Presets UI: scenary now appears under Controls (entity_category=None) and sleep_time now appears under Configuration (entity_category=CONFIG) for clearer organization.
  • No other logic changes: unique IDs, optimistic updates, and coordinator refresh behavior remain the same.

[0.3.7-alpha.9] - 2025-09-27

Added

  • Binary Sensor: new device_on (device_class: power), enabled by default and non-diagnostic. Mirrors the backend power field with robust normalization for dashboards/automations. No I/O in properties; reads from the coordinator snapshot.

Changed

  • Core: __init__.py now always loads the binary_sensor platform (minimal change—no other behavior altered).

Notes

  • Presets (select/number) remain always loaded as of 0.3.7-alpha.8.
  • No translation updates in this build.

[0.3.7-alpha.8] - 2025-09-27

Changed

  • Presets are now always loaded from __init__.py (select.py and number.py are forwarded unconditionally). The previous enable_presets toggle is ignored by setup.
  • Options: removed enable_presets from the config & options flow. Presets (select/number) are now always loaded (per previous step), so the flag is no longer needed.
  • Options UI now only exposes scan_interval (min 10s) and expose_pii_identifiers.
  • Sensors: extended the non-diagnostic whitelist to {local_temp, mode_text, cold_consign, heat_consign, cold_speed, heat_speed} so these show under regular Sensors instead of Diagnostics.

Added

  • Sensors: added slats telemetry as diagnostic disabled-by-default (ver_state_slats, ver_position_slats, hor_state_slats, hor_position_slats, ver_cold_slats, ver_heat_slats, hor_cold_slats, hor_heat_slats).

Unchanged (confirmed)

  • Defaults preserved: power (raw) remains diagnostic enabled; units, update_date, connection_date remain diagnostic disabled.
  • PII cleanup remains narrow (removes only sensors whose unique_id ends with a PII attribute) to avoid deleting non-PII entities.

[0.3.7-alpha.7] - 2025-09-25

Fixed

  • Options: restored enable_presets (select/number) by reading from options and falling back to data during setup.
  • Sensors: power is now enabled by default; units, update_date and connection_date remain disabled by default (documented).
  • Privacy: hardened PII cleanup when expose_pii_identifiers is disabled, ensuring non-PII sensors are unaffected.

Notes

  • Home Assistant does not retroactively disable already-created entities when defaults change. If units/update_date/connection_date appear enabled from previous versions, disable them from the UI or remove the entities so they are re-created with the new defaults.

[0.3.7-alpha.6] - 2025-09-25

Added

  • Privacy: automatic cleanup of PII sensors when expose_pii_identifiers is disabled (entities are removed from the Entity Registry on entry reload).

[0.3.7-alpha.5] - 2025-09-25

Added

  • Sensors: new status, mode (raw), and derived mode_text (maps 1→cool, 2→heat, 3→fan_only, 4→auto/heat_cool, 5→dry; unknown otherwise), all enabled by default.
  • Sensors: min_limit_cold/max_limit_cold/min_limit_heat/max_limit_heat and min/max_temp_unoccupied are now enabled by default; all temperature-like sensors display 1 decimal for consistency.
  • Sensors: update_date and connection_date added as timestamp (disabled by default).
    • Privacy/PII: sensors for mac, pin, installation_id, spot_name, complete_name, latitude, longitude, and time_zone are created only when the new expose_pii_identifiers option is enabled; when enabled they are on by default and are not marked as diagnostic.
  • Sensor: ventilate_variant (diagnostic, enabled by default) derived from the modes bitmask; values: "3" (preferred), "8" (fallback), or "none".

Changed

  • Sensors: progs_enabled is enabled by default.
  • Formatting: all temperature/setpoint/limit/unoccupied values are parsed safely and rounded to one decimal.
  • Sensor: mode_text mapping extended to include P2=6 (cool_air), P2=7 (heat_air), and P2=8 (ventilate (alt)), keeping existing mappings for 1/2/3/4/5.

Security/Privacy

  • Config/Options: added expose_pii_identifiers opt-in flag (stored only; PII is never logged or included in diagnostics).

Notes

  • Disabling expose_pii_identifiers stops providing PII sensors on next reload; any previously created PII entities remain in Home Assistant's entity registry (standard behavior) and can be removed manually from the UI if desired.

[0.3.7-alpha.4] - 2025-09-23

Added

  • Options Flow for editing scan_interval and enable_presets from the UI.

Fixed

  • Missing “Options” menu in the integration due to async_get_options_flow not being defined on the ConfigFlow class.
  • Ensured config_flow.py is complete and Black/Ruff compliant (no truncated lines).

[0.3.7-alpha.3] - 2025-09-22

Fixed

  • Options Flow now shows correctly: async_get_options_flow moved to module level in config_flow.py.
  • Robust installation parsing in __init__.py (handles both installation.id and installation_id).
  • airzone_api.login() now accepts tokens at either resp.user.authentication_token or resp.authentication_token.

Added

  • Options editable post-setup: scan_interval and enable_presets.
  • Conditional loading of select (scenary) and number (sleep_time) platforms when enable_presets is enabled.
  • Optimistic UI for scenary and sleep_time entities.

Changed

  • Defensive checks to avoid loading optional platforms when files are missing.

[0.3.7-alpha.2] - 2025-09-22

Fixed

  • Options Flow registration: moved async_get_options_flow() to the ConfigFlow class so the Options button appears and the flow is callable by Home Assistant.
  • Runtime settings now read from entry.options (with fallback to entry.data), so scan_interval and enable_presets actually take effect after editing options.

Changed

  • Added an options update listener to reload the entry when options change.
  • Conditional platform loading: select and number are now loaded only when enable_presets is enabled.

[0.3.7-alpha.1] - 2025-09-22

Added

  • Options flow: enable_presets flag and editable scan_interval (min 10s).
  • airzone_api.put_device_fields(): generic PUT /devices/<id> helper with retries/backoff and PII-safe logging.
  • airzone_api.put_device_scenary() and put_device_sleep_time() built on the generic PUT.
  • select.py: Scenary control (occupied / vacant / sleep) using the API helper, with optimistic UI.
  • number.py: Sleep timer control (sleep_time 30..120, step 10) using the API helper, with optimistic UI.

Changed

  • Presets (select/number) are optional: entities are enabled-by-default only if enable_presets is set; otherwise they are created disabled so users can enable them manually if desired.

Fixed

  • Ensured no PII in logs for all new PUT flows, consistent with existing API client behavior.

[0.3.5-alpha.5] - 2025-09-18

Added

  • Climate: implement async_turn_on/async_turn_off mapped to P1 with optimistic state and short post-write refresh.

Fixed

  • Climate: normalize optimistic/remote power values in _device_power_on() so "0" is correctly treated as False, enabling reliable auto-power-on when changing HVAC mode.

[0.3.5-alpha.4] - 2025-09-17

Changed

  • Climate: enforce integer UI step for target temperature by adding target_temperature_step = 1.0 while keeping precision = PRECISION_WHOLE. This guarantees 1°C increments in UI to match device capabilities.

[0.3.5-alpha.3] - 2025-09-16

Fixed

  • Sensors: machine_errors now reports "No errors" when the backend returns a null/empty value, instead of showing unknown. If a list of errors is returned, it is rendered as a comma-separated string; other values are shown as-is. No other sensor behavior changed.
  • Prevent crash on entity setup caused by climate.supported_features returning a plain int. Now it always returns a proper ClimateEntityFeature bitmask, avoiding TypeError: argument of type 'int' is not iterable on recent HA versions.
  • Sensors: local_temp (and also cold_consign / heat_consign) could show as unknown when the backend returned decimal values (e.g. "23.5"). Parsing now uses float(...) instead of int(...), restoring proper readings without altering entity names or structure.
  • Climate: restore correct /events payload using {"cgi":"modmaquina","device_id":..., "option":"P#", "value":...}. Commands (power/mode/temp/fan) now operate reliably, mirroring the switch entity's format.
  • Climate: parse target_temperature, min_temp, and max_temp as floats (accepting "24.0" or "23,5"). This prevents unknown setpoint values and avoids falling back to default limits when the backend returns decimal strings. Clamping for P7/P8 remains integer-based, and payload still sends "NN.0".

Changed

  • Rebalanced default sensors: core ones enabled by default again (e.g., local_temp, scenary, speeds, consigns); extra diagnostics remain opt-in to reduce noise and protect privacy.
  • Climate: interpret device["modes"] as a bitstring (positions P2=1..8) instead of an integer bitmask; fallback to exposing COOL/HEAT/FAN_ONLY/DRY when missing.

[0.3.5-alpha.2] - 2025-09-16

Added

  • Diagnostic sensors for MAC Address and PIN (disabled by default).
  • Timestamp sensors for Connection Date and Device Update Date (disabled by default).
  • Sleep Timer (min) is now enabled by default.

Changed

  • Normalize value types:
    • Temperatures and sleep minutes shown as integers in the UI.
    • Proper duration unit for sleep timer (minutes) with device_class: duration.
  • Climate:
    • Restored fan control; hidden in Dry and Off.
    • Respect device modes bitmask when provided.
    • Target temperature uses 1 °C steps in UI; API payload remains decimal.
    • Device Registry: climate entity now also reports model (brand) and sw_version (firmware), aligned with the power switch.

Fixed

  • Climate init crash when accessing device snapshot before context was built.
  • Write commands use the correct /events payload (P1/P2/P3/P4/P7/P8).

[0.3.5-alpha.1] - 2025-09-15

Fixed

  • API: Catch builtin TimeoutError (Python 3.11 alias of asyncio.TimeoutError) to align with Ruff/pyupgrade and avoid formatter rewrites.
  • API: Correct minor header typo when setting Content-Type.
  • Diagnostics: Prevent duplicated titles in diagnostic sensors when the backend device name changes; names are rebuilt as <DeviceName> <FriendlyName> on each update.
  • Hassfest: Ensure manifest keys are strictly sorted (domain, name, then alphabetical).
  • HACS: hacs.json uses a supported minimal schema (name, render_readme).

Changed

  • Manifest version bumped to 0.3.5-alpha.1 for the first alpha of this phase.

Notes

  • If HACS complains about pre-release formatting, use 0.3.5a1 as an alternative version string in the manifest (PEP 440 compatible).

What's Changed

Full Changelog: v0.3.4.1...v0.3.7