Releases: CaputoDavide93/Mixergy-Home-Assistant
Release list
Mixergy v2.2.0
Highlights
- See why the tank is changing charge with the new Operating reason sensor and Charge target active binary sensor.
- Distinguish a fresh physical-tank report from a successful cloud request with Tank connectivity, Last tank measurement, and Last cloud receipt.
- Stale tank reports no longer add phantom energy or cost to persisted totals.
- Missing temperature, charge, target, and power readings now appear unavailable instead of as plausible zeroes.
Compatibility and validation
- Home Assistant 2025.8.0 remains the supported minimum.
- Verified on Home Assistant 2026.8.2.
- Minimum/current test suites, strict typing, Hassfest, and HACS validation all passed.
- Release coverage: 97.96% against a 95% gate.
See the full changelog.
Mixergy v2.1.0
Six user-visible fixes, five of them found by an adversarial review of the codebase.
Fixed
- Holiday mode hid heating that was really happening. Frost protection, the anti-legionella cycle and the pre-return reheat all reported as not-heating while away, so the power sensor read zero and the energy and cost totals stopped for the whole holiday.
- Service calls without a target no longer report success while doing nothing.
boost_chargeand friends succeeded silently whenever no tank was loaded. - A Mixergy server error no longer looks like a wrong password. Any non-success response from the login endpoint was reported as an authentication failure, which stopped polling and raised a re-authenticate prompt during outages nothing could be done about.
- A missing default heat source no longer prevents the integration loading. On a first start it meant setup never completed.
- Tank readings are parsed correctly in both response formats. One of the two shapes the cloud returns was silently discarded, leaving target charge, heat source, heating status and holiday mode all reporting defaults.
- Authentication could get permanently stuck after a malformed token lifetime, reusing a dead token until Home Assistant restarted.
- German, French and Italian were each missing 29 strings, so parts of setup, reconfigure, options, the device triggers and service fields fell back to English mid-dialog.
- Cloud responses are size-capped before parsing.
Changed
The default poll interval is now 60 seconds (was 30). The tank reports to the Mixergy cloud roughly once a minute, so polling twice that fast could not surface fresher data — it only tripled the request count, since each cycle fetches measurement, settings and schedule. Boosts and control changes refresh immediately as before; only background polling slows.
This affects existing installs that never chose an interval. To keep 30 seconds, set it under Settings → Devices & Services → Mixergy → Configure. The 30–300 second range is unchanged.
Quality
46 of the 47 applicable Home Assistant Integration Quality Scale rules are now met, recorded per-rule in quality_scale.yaml. No tier is claimed: the scale applies to core integrations only, and one Bronze rule (brands) cannot be satisfied by any custom integration. Test coverage is 98% with every module above 95%, and ruff plus strict mypy run in CI against both the minimum and current Home Assistant.
Note on the HACS icon: it shows as a grey placeholder. Nothing is wrong with your install — the icon is correct everywhere inside Home Assistant. It is a known HACS limitation affecting every custom integration published after February 2026 (hacs/integration#5171).
v2.0.0 — domain renamed to mixergy_tank
Breaking change — the integration domain is now mixergy_tank
The previous domain, mixergy, was already registered in the Home Assistant
brands repository by a different, unrelated project of the same name. A domain
is the key both Home Assistant and the brands CDN use for identity, and two
projects cannot share one — so this integration's HACS listing showed that
project's icon, and any user with both installed risked colliding config
entries.
Moving to a domain of its own ends that misattribution and removes the
collision.
Note on the icon. HACS builds its listing icons from the brands CDN and
does not use an integration's packagedbrand/images, so the HACS listing
now shows an "icon not available" placeholder instead. Home Assistant
2026.3+ uses the packaged Mixergy artwork on its own Integrations page,
device pages, and elsewhere in the UI.
Upgrading from 1.x — manual steps required
Home Assistant ties a config entry to its domain, so the entry cannot migrate
itself. Step 4 matters: HACS installs the renamed integration into
custom_components/mixergy_tank/, but it derives its install path from the
current manifest domain and therefore cannot remove the directory belonging to
the previous one. Skipping it leaves the retired integration installed and can
show two integrations named Mixergy after the restart.
- Take a full Home Assistant backup.
- Note your tank's serial number (Settings → Devices & Services →
Mixergy → Configure). - Delete the existing Mixergy integration entry. This frees its entity IDs
for the replacement entry. - Update to 2.0.0 in HACS — but do not restart yet.
- Delete the old
/config/custom_components/mixergy/directory, using the
File editor, Studio Code Server, Samba, or a terminal. Keep
/config/custom_components/mixergy_tank/. - Restart Home Assistant.
- Re-add via Settings → Devices & Services → Add Integration → Mixergy,
selecting the same tank and experience mode. - Update automations that call the services —
mixergy.boost_charge,
mixergy.set_holiday_datesandmixergy.clear_holiday_datesare now
mixergy_tank.*. Device triggers usingdomain: mixergybecome
domain: mixergy_tank.
The recreated entities normally reclaim their previous entity IDs because
step 3 removes the old registry entries first. If an ID gains a numeric suffix,
rename it back to the original to keep dashboards, automations and recorder
history aligned.
Full walkthrough: 1.x → 2.x migration.
Unchanged
The Mixergy company name and the mixergy.io API host are untouched. Only
domain-bearing identifiers moved; there are no functional changes to polling,
entities, or the API client in this release.
Mixergy v1.3.6
Fixed
- Replaced every remaining legacy logo asset with the Mixergy Home Assistant identity.
- Added light/dark standard and high-DPI landscape logos beside the tank icons.
- Added reviewed SHA-256 contracts for all vector sources and raster outputs.
Runtime integration behavior is unchanged from v1.3.5.
Mixergy v1.3.5
Changed
- Compact repository header for a cleaner HACS detail page.
- Refreshed packaged standard and high-DPI integration icons.
- Clarified local Home Assistant branding versus the HACS listing CDN.
Runtime integration behavior is unchanged from v1.3.4.
v1.3.4
Post-release correctness fixes from a deep review of v1.3.3.
Fixed
- Successful HTTP responses with wrong-shaped JSON now raise typed
MixergyAuthErrororMixergyConnectionErrorinstead of leaking raw
AttributeError/TypeErrorexceptions into config flows and polling. - HATEOAS discovery and tank listing validate object, array, entry, and link
shapes consistently before reading fields. - Holiday windows are rejected before discovery or network I/O unless the
start is strictly before the end, protecting services and DateTime entities
with one API-level invariant.
v1.3.3 — Hardened API validation & public-release CI
Hardening release: exact-origin API-link validation, a public-release CI pipeline, and the fixes from an adversarial review of the hardening itself.
Security & correctness
- Exact-origin HATEOAS validation — discovered API links are accepted only on
https://www.mixergy.io(default port, no embedded credentials); redirects are never followed, and a permanent redirect on a cached endpoint now clears the discovery cache so an endpoint rotation self-heals on the next poll. - Malformed discovered URLs raise a clean
MixergyConnectionErrorinstead of an untypedValueError. - Invalid heat-source writes fail before any network request; the allowlist is derived from the enum.
- Diagnostics survive a config entry that failed before its coordinator loaded.
UnitOfRatio.PERCENTAGEon HA 2026.7+, value-identical fallback on the 2025.8 floor.- Polling-interval help text corrected to 30–300 s in every locale (it/de/fr), with a guard test parametrised over all of them.
CI
- Every change now tests the advertised minimum HA 2025.8.0 and current HA 2026.8.1; a weekly latest-HA canary asserts it truly resolved the newest core release.
- GitHub Actions pinned to immutable commits, read-only tokens, repository-hygiene tests (both workflow extensions, job-level permission widening rejected).
- Security policy + private vulnerability reporting; Dependabot enabled.
Brand
- Banner wordmark now Mixergy Home Assistant; canonical repository name
Mixergy-Home-Assistantacross all badges and links.
91/91 tests green on HA 2025.8.0 and 2026.8.1. Requires Home Assistant 2025.8.0 or newer.
v1.3.2 — HA 2026.x future-proofing
Compatibility release for Home Assistant 2026.x — closes upcoming core deprecations before they become errors, and hardens CI so the suite always runs against the current HA core:
- Options flow →
OptionsFlowWithReload, update listener removed — the listener +async_update_reload_and_abortcombination becomes a hard error in HA 2026.12. - Device registry: service target resolution now prefers
DeviceEntry.config_entry_id(HA 2026.8 single-config-entry model), falling back on older cores. The deprecated.config_entriesset is removed in 2027.8. - Honest HACS floor: minimum Home Assistant is now 2025.8.0.
- CI: Python 3.12 → 3.14 (HA 2026.8 needs ≥3.14.2) plus a weekly scheduled test run, so core API churn is caught between pushes.
- Docs/tooling roll-up: generated README entity tables with a CI drift check, repository links updated to Mixergy-HA.
76/76 tests green on HA 2026.8.1 / Python 3.14. Requires Home Assistant 2025.8.0 or newer.
v1.3.1 — Hardening release
Hardening release from an adversarial code review focused on HA-core compatibility and robustness. Also fixes the weekly hassfest failure.
Fixed
- Cost sensor state class —
MONETARYdevice class only permitsTOTAL; wasTOTAL_INCREASING, which HA core rejects for long-term statistics. - Stale-poll accumulator poisoning — the energy and cost accumulator sensors kept integrating power across failed coordinator polls, manufacturing phantom kWh from stale readings. They now skip integration and resync their clock while the poll is failing.
- API URL guards — 10
assert <url> is not Nonesites inapi.pyreplaced with a typed_require_url()raisingMixergyConnectionError;AssertionErrorescaped the error taxonomy and disappears underpython -O. - Options flow cross-field validation —
no_water_thresholdcan no longer be set at or abovelow_water_threshold; the form re-shows with a translated error (en/de/fr/it). - services.yaml schema drift — removed
area: {}anddevice:filters from servicetarget:blocks; hassfest now only acceptsentity:filters.
Added
- 4 regression tests covering the fixes above (76 total).
v1.3.0 — Water heater, new entities & flows
Feature release: a native water-heater entity plus several new entities and
flows, shaped by a full review pass for both bugs and features.
Added
- Water heater entity — the tank now appears as a first-class HA
water_heater: current/target temperature, heat-source operation modes
(electric / gas / heat pump), and an away (holiday) toggle. Advanced mode. - Holiday datetime entities — set holiday start/end from a UI picker
(in addition to the services). Advanced mode. - Reconfigure flow — update account credentials from the integration's
Reconfigure button without removing and re-adding the entry. - Multi-tank picker — the config flow now lists the tanks on your account
to choose from instead of typing the serial (manual entry still allowed). - Repair issues — a "tank not found" repair card guides you to reconfigure,
and clears automatically once the tank is reachable again. - Device triggers — automate on "hot water low", "heating started/stopped",
and "holiday started/ended" directly from the Automations UI. - Configurable alert thresholds — set the low / no hot water percentages in
the integration options. - Optional electricity cost sensor — set a price per kWh in options to get a
running electric-heating cost in your currency. quality_scale.yamlchecklist tracking Bronze→Platinum rule status.
Changed
- Entity write commands (switches, numbers, select, button, water heater) now
trigger HA's re-auth flow on an auth failure, consistent with the services. - Experience-mode selector labels are translatable.
- Diagnostics now include (non-secret) options and coordinator metadata.
PARALLEL_UPDATESdeclared on every platform (0 for read, 1 for write).- Device info now includes the serial number and a configuration URL.
Fixed
- API numeric fields are coerced to finite floats; null/NaN/inf/garbage values
no longer mislead entities or the energy/cost integrators. - Options help text corrected to the real 30–300 s poll-interval range.
electric_powerreports a float when idle (was an int0).- Services expose an area target in the UI (the backend already resolved it).