v0.3.7
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 (exceptCancelledError). Callers only apply optimistic state and schedule refresh after a successful send, preventing “phantom success” in the UI. -
- Moved
import timeto module level inselect.pyandnumber.pyto avoid per-read imports in entity properties and improve async hygiene.
- Moved
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:
scenarynow appears under Controls (entity_category=None) andsleep_timenow 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 backendpowerfield with robust normalization for dashboards/automations. No I/O in properties; reads from the coordinator snapshot.
Changed
- Core:
__init__.pynow always loads thebinary_sensorplatform (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.pyandnumber.pyare forwarded unconditionally). The previousenable_presetstoggle is ignored by setup. - Options: removed
enable_presetsfrom 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) andexpose_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_dateremain 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 fromoptionsand falling back todataduring setup. - Sensors:
poweris now enabled by default;units,update_dateandconnection_dateremain disabled by default (documented). - Privacy: hardened PII cleanup when
expose_pii_identifiersis 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_dateappear 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_identifiersis 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 derivedmode_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_heatandmin/max_temp_unoccupiedare now enabled by default; all temperature-like sensors display 1 decimal for consistency. - Sensors:
update_dateandconnection_dateadded astimestamp(disabled by default). -
- Privacy/PII: sensors for
mac,pin,installation_id,spot_name,complete_name,latitude,longitude, andtime_zoneare created only when the newexpose_pii_identifiersoption is enabled; when enabled they are on by default and are not marked as diagnostic.
- Privacy/PII: sensors for
- Sensor:
ventilate_variant(diagnostic, enabled by default) derived from themodesbitmask; values:"3"(preferred),"8"(fallback), or"none".
Changed
- Sensors:
progs_enabledis enabled by default. - Formatting: all temperature/setpoint/limit/unoccupied values are parsed safely and rounded to one decimal.
- Sensor:
mode_textmapping 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_identifiersopt-in flag (stored only; PII is never logged or included in diagnostics).
Notes
- Disabling
expose_pii_identifiersstops 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_flownot being defined on theConfigFlowclass. - Ensured
config_flow.pyis 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_flowmoved to module level inconfig_flow.py. - Robust installation parsing in
__init__.py(handles bothinstallation.idandinstallation_id). airzone_api.login()now accepts tokens at eitherresp.user.authentication_tokenorresp.authentication_token.
Added
- Options editable post-setup:
scan_intervalandenable_presets. - Conditional loading of
select(scenary) andnumber(sleep_time) platforms whenenable_presetsis 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 theConfigFlowclass so the Options button appears and the flow is callable by Home Assistant. - Runtime settings now read from
entry.options(with fallback toentry.data), soscan_intervalandenable_presetsactually take effect after editing options.
Changed
- Added an options update listener to reload the entry when options change.
- Conditional platform loading:
selectandnumberare now loaded only whenenable_presetsis enabled.
[0.3.7-alpha.1] - 2025-09-22
Added
- Options flow:
enable_presetsflag and editablescan_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()andput_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_time30..120, step 10) using the API helper, with optimistic UI.
Changed
- Presets (select/number) are optional: entities are enabled-by-default only if
enable_presetsis 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_offmapped toP1with optimistic state and short post-write refresh.
Fixed
- Climate: normalize optimistic/remote power values in
_device_power_on()so"0"is correctly treated asFalse, 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.0while keepingprecision = PRECISION_WHOLE. This guarantees 1°C increments in UI to match device capabilities.
[0.3.5-alpha.3] - 2025-09-16
Fixed
- Sensors:
machine_errorsnow reports "No errors" when the backend returns a null/empty value, instead of showingunknown. 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_featuresreturning a plainint. Now it always returns a properClimateEntityFeaturebitmask, avoidingTypeError: argument of type 'int' is not iterableon recent HA versions. - Sensors:
local_temp(and alsocold_consign/heat_consign) could show asunknownwhen the backend returned decimal values (e.g. "23.5"). Parsing now usesfloat(...)instead ofint(...), restoring proper readings without altering entity names or structure. - Climate: restore correct
/eventspayload 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, andmax_tempas floats (accepting"24.0"or"23,5"). This preventsunknownsetpoint 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 ofasyncio.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.jsonuses a supported minimal schema (name,render_readme).
Changed
- Manifest version bumped to
0.3.5-alpha.1for the first alpha of this phase.
Notes
- If HACS complains about pre-release formatting, use
0.3.5a1as an alternative version string in the manifest (PEP 440 compatible).
What's Changed
- E x perience83 new by @eXPerience83 in #5
Full Changelog: v0.3.4.1...v0.3.7