Changelog
The authoritative, complete history is maintained in
docs/CHANGELOG.md
and the GitHub releases.
This page only summarizes recent milestones.
v0.27.0-b4 — 2026-11-10
The PV zero-power workaround is rebuilt around the mechanism a live series on a Navigator 10 established: the controller flags a frozen pv_production register — any constant substitute re-trips message 20300 after about ten minutes, while any value change clears it in seconds. There is no wattage threshold. The workaround now alternates 10 W and 20 W every minute, and dusk production below the 5 W register resolution (which was written as a real 0 W before) is also replaced. PV message 20300.
v0.27.0-b3 — 2026-11-10
Firmware orientation survives a restart: Latest reported firmware keeps its last server answer instead of going blank — it is stored locally and restored at startup, with the original comparison time until the next check. The newer firmware observed repairs notice keeps its acknowledged or dismissed state across restarts, the first check after a restart runs within 15 minutes, and withdrawing the consent clears notice and stored answer. Firmware orientation.
v0.27.0-b2 — 2026-11-10
The #493 answer from IDM support is documented: when a battery is used, register 84 (battery charge/discharge) must be written together with the battery SoC. The setup and options help for both battery fields states this where the sources are chosen, and the register reference marks register 84 as required with battery. External power setup.
v0.27.0-b1 — 2026-11-10
The 0.27 measurability line begins: the Modbus transport boundary now times every physical request passively — reads, writes, coils, including bisect re-reads — in a bounded 100-request window. With Communication diagnostics enabled, the new Modbus request duration (window) sensor publishes the median plus outcome classes and per-function-code statistics, and the diagnostics export carries the same snapshot. The scan-interval repair gains a Fix it flow with a measured interval suggestion, and advisor recommendation titles render in German or English. Per-request metrics, scan interval, Predictive Advisor.
v0.26.13 — 2026-11-09
The firmware repairs notice names both versions on the card itself: the repairs page shows the installed version next to the newest matching community observation and repeats that this is orientation, not availability. Release plumbing hardens the pin updater, so dated release-history statements and the parity-test fixture no longer follow or corrupt the current pin. Firmware orientation.
v0.26.12 — 2026-11-09
Firmware sightings now persist across independent sharing, telemetry and explicit diagnostic metadata. Existing consents remain valid. A single matching version appears as latest reported; ambiguous Pro metadata cannot trigger a heat-pump update repair. Firmware sharing and sources.
v0.26.11 — 2026-11-09
Explicitly absent web heating circuits no longer discard other successful circuit reads. Diagnostics list absent circuit letters. See Findings for confirmed donation evidence and open work.
v0.26.10 — 2026-11-08
With the device hierarchy enabled, the three cloud-consent entities — Telemetry report status, Latest reported firmware and Newer firmware observed (unconfirmed) — now form their own Telemetry subdevice beneath the plant. Entity IDs and history are preserved; the installed software version stays in Diagnostics. Group placement.
v0.26.9 — 2026-11-08
Consented plant telemetry becomes verifiable: the local Telemetry report status diagnostic sensor shows the last delivery outcome, attempt times and the failure streak, and seven undelivered daily reports raise a self-clearing repair notice. Permanent 4xx rejections drop the frozen report instead of retrying it forever, the report ID survives schema changes, a manual send inside the cooldown raises a clear validation error, and both cloud consents now share one per-minute timer. Delivery status and failure handling.
v0.26.8 — 2026-11-08
Supported external-power GLT sensors remain registered when startup reads an unset value and recover automatically once the controller returns a valid reading. The manual Number remains writable and polled independently of forwarding. Stable entity IDs and off/on/off reload behavior are regression-tested. Controller-side battery display flicker (#493) remains unresolved. Open-work planning and diagnostic guidance are refreshed; capture replay establishes no new #577 parser defect.
v0.26.7 — 2026-11-08
Unwired room sensors no longer trigger the Implausible sensor value health check. A heating circuit without an iDM room sensor answers register 1364 with uninitialized memory (about -327 °C); that band now counts as sensor not present — the health flag clears, the room-temperature entity reports unavailable, and climate/water-heater cards publish no temperature instead of a garbage value. Genuinely out-of-range readings still trip the check. The band rule is shared with the API (pinned 2.16.1). Findings and limits.
v0.26.6 — 2026-11-07
Optional 10 W PV zero-power workaround for message 20300 on affected Navigator controllers. Enable it on the external power sensor mapping page during setup, options or reconfiguration. It is off by default: only valid zero production is replaced, positive production resumes live forwarding, and unavailable sources remain skipped. Source sensors, surplus and household balance stay unchanged. Evidence and limits.
v0.26.5 — 2026-11-07
Installed and observed firmware now share the Diagnostics subdevice with the hierarchy enabled. Controller metadata recognizes both NAV10_ and T_NAV10_ prefixes; a web transport is not a controller-family identification. Activation and explanation.
v0.26.4 — 2026-11-07
New: firmware orientation with acknowledgement. The diagnostic Newer firmware observed (unconfirmed) entity shows matching community observations. A newer version also creates a Repairs notice that can be acknowledged once per device/version. Activation and explanation. Availability and compatibility are unconfirmed; only iDM or an authorized installer verifies and performs a firmware update.
Telemetry resumes counters and elapsed time at matching checkpoints after reloads. The private server adds source coverage, short-window and operating-duration consistency gates with weighted denominators. Legacy duration windows are omitted once without resetting operating history or changing frozen retries, consent or schedules.
v0.26.3 — 2026-11-07
Optional plant telemetry and an independent firmware check are now available. Both remain off by default, with short consent notices linking to full privacy information. Reports survive restarts and uploads are spread across installations. Obsolete technician-code entities are removed on first setup.
v0.26.2 — 2026-11-06
The integration speaks five more languages: setup, options, services, repairs and error texts (419 each) now arrive in Spanish, Italian, Romanian, Czech and Polish whenever Home Assistant runs in one of them — entity names fall back to English, no settings change. A new installer checklist page hands the heating installer a printable PDF-ready page (Modbus TCP, fixed IP, GLT/PV signal, web PIN, plant data) with translations in all five languages, the English documentation home forwards German browsers once per session, and short README summaries cover the five new languages.
v0.26.1 — 2026-11-06
The technician access-code sensors are removed for safety reasons: the integration no longer calculates the time-based Fachmann-Ebene codes, the option that created the sensors is gone from the options flow, and the two sensor entities disappear on upgrade — no migration is needed and everything else is untouched. Access to the installer level remains a matter for the heating installer. The controller-clock sensor keeps making clock drift visible, and the protocol-analysis notes remain research documentation.
v0.26.0 — 2026-11-06
The setup assistant can now find the heat pump by itself. Setup starts with a choice between manual entry and a network scan: the scan probes every host of a chosen IPv4 subnet once on the Modbus TCP port 502 — no Modbus data is sent or read — and lists the responding devices with IP address and, when resolvable, reverse-DNS hostname. The picked address pre-fills the connection form, where the connection test, web access and Modbus-proxy settings are completed as before. The subnet field is pre-filled from Home Assistant's network adapter. The high-pressure fault web binary sensor no longer reads permanently on: the B10 safety contact is normally closed and now inverts like its B5/B15 siblings, so a healthy plant shows no fault (#649). Rollback is safe; existing entries are untouched.
v0.25.0 — 2026-11-05
The stable cut of the 0.25.0 line and the Home Assistant 2026.11 platform
release: the 2026.11.0 minimum is declared in the manifest and HACS and
enforced at setup, so installations on 2026.8–2026.10 stay on 0.24.0-b2.
The advisor shares one evidence base across reports, sensors and local
Assist — observed changes, explainable recommendations, a review of
heating-curve adjustments and an Advisor dashboard view — and the API pin
moves to idm-heatpump-api[web]==2.16.0. GLT sentinel readbacks become
countable in the debug log (#493). Sub-devices convert once to child
devices, three entities need a one-time retarget, and rollback stays safe.
v0.25.0-b9 — 2026-11-04
Daily and weekly reports reuse existing local AI measurements in the shared
advisor history instead of starting their energy analysis from scratch.
Missing evidence remains unknown. Full recommendation details stay visible
but are excluded from Recorder to avoid oversized-attribute warnings.
Measured-data reports continue to work without any AI provider or credentials.
The transport floor now matches the validated HA runtime, modbus-connection>=4.12.7.
This includes all fixes from the unpublished b8 candidate.
v0.25.0-b7 — 2026-11-04
Advisor evidence beta: reports, Predictive Advisor sensors and local Assist share period comparisons for energy, COP, starts and room comfort. New sensors explain changes and review observed heating-curve adjustments against matched weather and operating history. Recommendations gain localized evidence and confidence explanations, and generated dashboards include an Advisor view. Learning, forecast aggregation, missing-data handling and operating explanations are corrected. Analysis stays read-only; no result proves causality or savings. New evidence starts collecting after update and needs suitable before/after history. Existing energy totals and AI report history are retained.
v0.25.0-b6 — 2026-11-01
Diagnostics beta for the GLT flicker thread: when the controller erases a GLT RAM input between two forwarding writes, the writable Number reports unknown for that sample — and the debug log now names the register once per affected poll cycle (#493), so the events become countable against the forwarding write cadence. Built in and silent unless debug logging is enabled.
v0.25.0-b5 — 2026-11-01
Statistics fix for the audit beta: 0.25.0-b4 dropped the measurement
state class of the heat-sink flow sensor (Durchfluss Wärmesenke (B2)) and
the heat-sink charging-pump signal, so Home Assistant retired their
long-term statistics with the state-class repair dialog. Sensors whose
overlay deliberately leaves the device class unset keep their state class
again — from the library's own annotation or the unit map — while
enum-option sensors stay state-class-free. Statistics resume on update
without data loss.
v0.25.0-b4 — 2026-10-31
The October code-audit beta: fixes across web-only controls, services and
Navigator 1.7 — heating-circuit selects and correct climate ranges come
back in web-only mode, device_id targets resolve through the device
registry, write_register parses boolean strings and accepts addresses
up to 65535, and set_system_mode works on Navigator 1.7 again. Advisor
analytics align to local midnight, the Assist agent matches word
boundaries, and legacy differential-circuit entity IDs (#429) are
shortened once at setup.
v0.25.0-b3 — 2026-10-31
Hotfix for the valve semantics beta: on plants without the heating/cooling
function the changeover valve (1110) answers the UINT16 "not configured"
sentinel 65535, which the new enum rejected as not_in_enum and dropped
the entity from every update. The API pin moves to 2.16.0b2, the sentinel
passes validated polls, and the entity reports unavailable again.
v0.25.0-b2 — 2026-10-30
The gate-and-semantics beta: component setup now refuses Home Assistant builds
older than 2026.11.0b0 with a clear message instead of crashing while adding
climate and water-heater entities (#632). The API pin moves to
idm-heatpump-api[web]==2.16.0b1 — the changeover valve reports the documented
Heating/Cooling positions as an enum sensor and the heat-source circuit fault
becomes a binary sensor (both get new entity IDs; retarget automations once).
v0.25.0-b1 — 2026-10-29
The Home Assistant 2026.11 line: the minimum is now HA 2026.11.0. Climate and
water-heater cards use the 2026.11 native_ temperature properties, the
config-entry lifecycle returns None and unloading fails loudly, sub-devices
register as ChildDeviceInfo (converting in place, keeping device IDs) and
every repair issue is linked to its config entry so Home Assistant cleans it
up automatically.
v0.24.0-b2 — 2026-10-28
The onboarding/Assist/dashboard beta, updated: on top of the shared Modbus
connection provider (HA 2026.10+), live plant detection during onboarding,
the deterministic local Assist agent and the generate_dashboard service,
the GLT input Numbers keep readback polling and stay writable without
automatic forwarding (#493), the API pin moves to 2.15.1 (the
shared-connection transport contract plus the Navigator 2.0
structured-JSON temperature schema), and the advisor anomaly retraction
test runs at fixed times of day (#622).
v0.23.2 — 2026-10-27
The stable cut of the b1–b5 line: the predictive advisor calibrates its
anomaly detection against each plant's own repeatability, the weather and
the season, splits flow/spread baselines by demand reason, scales finding
confidence with the deviation, and gains snooze services for recurring,
understood findings. Adds the read-only web-capture tool, dual-label
Navigator 10 sensors (including the M125 pump signal via API 2.14.5)
and the Holiday-mode fix.
v0.23.2-b4 — 2026-10-26
Fixes the dual-label sensors (B33/B113, B34/B114) on Navigator 10 plants
with an intermediate loop: they vanished whenever a Modbus connection was
active, because they shared the web value keys that are suppressed as Modbus
duplicates. They now have their own entities next to the Modbus registers.
v0.23.2-b3 — 2026-10-25
Pins the API maintenance prerelease 2.14.5b2: model detection batches its
heating-circuit probes behind individual gate probes with a per-slot fallback
(roughly half the requests, identical results). No register-map changes; the
full integration suite passed against this API tree.
v0.23.2-b2 — 2026-10-25
Adds recognition for Navigator 10 dual-label sensor identifiers (B33/B113 and
B34/B114) used on installations with an intermediate loop (Trennwärmetauscher /
frost-protected outdoor loop, #598) and cleans Python 3.14 event loop warnings
and quality-scale pins (#599).
v0.23.2-b1 — 2026-10-24
Holiday mode (value 3) survives validated Modbus polls with the tested API prerelease. EEPROM safeguards and Navigator 1.7 mode meanings are unchanged. Forwarding stop/restart tests and the English/German guide now distinguish successful writes from controller display behavior. The recurring SoC issue #493 and the remaining Navigator 1.7 web/status problems in #577 stay open. The release also includes the standalone read-only capture tool and a voluntary request for private diagnostic captures. No configuration migration is needed.
v0.23.1 — 2026-10-22
A fix release for two field reports. Hybrid Navigator 1.7 plants — a 1.7 controller with a 2.0-generation web module — resolve to Navigator 1.7 in auto mode again; since 0.22.0 the connected web client had flipped the register map to Navigator 2.0, dropping about twenty Modbus entities (#577). Lifetime heat-quantity counters no longer step back by a cent: the controller's own kWh integration wobbles in the second decimal, and the new guard holds the previous value within rounding noise while real resets pass through (#578).
v0.23.0 — 2026-10-21
The stable cut of the 0.23 line (fourteen betas, 2026-10-17 through
2026-10-20). The predictive advisor matured on field feedback: six new
sensors track the COP of pure heating and pure hot-water charging
separately, hot-water windows render in your Home Assistant time zone
from correctly folded quarter-hour price and PV feeds (Forecast.Solar
sensors work without extra setup), recommendations stay one stable entry
per topic, and the building model learns only from space heating (one-time
relearn on upgrade). The heat-sink flow rate is finally read correctly:
field evidence proved register 1072 is a word-swapped FLOAT32, not UCHAR —
the device-logic dependency moves to idm-heatpump-api[web]==2.14.4.
Unconfigured plant features stopped logging validation warnings and a web
--- placeholder no longer crashes the sensor state (#532), GLT
forwarding passes no longer open coordinator-wide unavailability windows
(#537), and a new heat-pump-level flow deviation sensor rounds the line
off. With Home Assistant 2026.11, the built-in Marketplace (HACS's
successor, same catalog) installs the integration directly. Rollback to
0.22.0 keeps working.
v0.23.0-b14 — 2026-10-20
New heat-pump-level flow deviation sensor: the heat pump's own flow temperature versus the highest circuit setpoint currently requesting flow, published only in pure heating mode — during DHW charges the flow is charging temperature, not supply, and is deliberately not reported. Design based on a 24-hour read-only probe on the reference plant; the delineation is documented in the open work audit.
v0.23.0-b13 — 2026-10-19
Hotfix from the reference-plant PV setup: the Forecast.Solar source of b12 never matched on real installations (registry platform/domain mixup); the PV forecast stayed empty. Verified live after the fix: the advisor reads the hourly forecast and recommends a hot-water window.
v0.23.0-b12 — 2026-10-19
The advisor can now read its PV forecast from the core Forecast.Solar integration (no account, no API key): point the Predictive advisor PV forecast sensor option at one of its sensors.
v0.23.0-b11 — 2026-10-19
Hotfix found live on the reference plant during the b10 verification: the advisor efficiency-score sensor never published its score (the engine rounded to a float, the sensor accepts ints only).
v0.23.0-b10 — 2026-10-19
Advisor hardening pass plus per-mode COP: the hot-water window times now
render in your Home Assistant time zone, quarter-hour price and PV feeds
are read correctly, daily re-issued recommendations no longer expire
weekly, the building models weight and decay their samples (one-time
relearn), and six new sensors track the COP of pure heating and pure
hot-water charging separately (energy_cop_heating_*,
energy_cop_dhw_*). Full list in the changelog.
v0.23.0-b9 — 2026-10-18
Follow-up to b8, now confirmed live on two plants (discussion #516 — where
the reporter also traced the UCHAR to an official doc revision change:
Navigator 2.0 rev 12 → 13 and Navigator 10 rev 0 → 1 corrected 1072 to
FLOAT). The energy-manager option fields were missing from both translation
files, so the plain options step showed raw field keys in English and German
— translated now with the guided-sections terminology, plus parity guards
that fail the build when strings.json, en.json and de.json drift apart
or the German register reference misses an English regeneration. The
troubleshooting pages now also document that the Navigator serves only one
Modbus client at a time: a second connection reads -1.0 sentinels on
optional blocks while the primary keeps live data — direct tests need the
integration stopped (verified live on the reference plant, whose flow entity
now reads real L/min).
v0.23.0-b8 — 2026-10-18
The heat-sink flow rate is read with the datatype the controller actually
speaks: field readings (discussion #516) proved register 1072 is a
word-swapped FLOAT32, not the UCHAR of the official IDM doc. A direct HA
modbus float32 read with word swap returned plausible values while the
integration's UCHAR decode jumped wildly — it read one byte of the float's
low word. Pins idm-heatpump-api 2.14.4: real flow values display
correctly, not-present plants stay unavailable, and the web flowmeter
fallback keeps filling them.
v0.23.0-b7 — 2026-10-18
Building-model regressions now require exclusive space heating and an active heating circuit (#546). Old heat-loss and flow-curve aggregates and derived thermal capacity relearn once; COP and other analytics remain intact. Grid-meter household consumption pauses when a mapped battery-power source is invalid, instead of using an incomplete balance (#519). Diagnostics privacy tests use a deterministic web-status fixture. Controller-side SOC resets (#493) remain an open firmware observation; cyclic GLT refresh stays enabled.
v0.23.0-b6 — 2026-10-18
Audit and runtime-hardening prerelease of the 0.23 line: raises the
heat_sink_flow_rate advisor plausibility ceiling to 250.0 L/min so live
flowmeter readings (such as 33.9 L/min from the #516 web fallback) count as
usable data, keeps has_flow_sensor: true on no-TWT plants during idle 0.0 L/min when a web flowmeter is present, and declares heat_sink_flow_temp plus
the advisor's heating-circuit registers in the entity-aware polling plan.
Daily recommendation re-issues with unchanged content now roll over their
date-stamped ID in place without history churn, retract()/mark() match by
topic across calendar days, advisor_operation_reason keeps Defrosting and
Cooling ahead of the DHW temperature-delta heuristic without negative
shortfall text, advisor_forecast_task is cancelled on entry unload, web
not-present fallback clears unused sentinels immediately on web refresh and
reports status: "web_fallback" in diagnostics, write confirmations track
in-flight refreshes per task, room/humidity forwarding deduplicates shared
sensors and logs write cooldowns at DEBUG, and KNX/watchdog workers spawn as
Home Assistant background tasks.
v0.23.0-b4 — 2026-10-17
Second batch from the advisor field validation: the silent availability flap after every GLT forwarding pass is gone (#537) — a cancelled write-confirmation refresh made Home Assistant record a failed update without any log line, so all entities flipped unavailable for ~12 s every forwarding interval; the confirmation is now only cancelled while it still sleeps. The advisor operation reason stops mixing English and German labels for the same cause (#538), and the no-TWT fake flow rate no longer counts as usable advisor data (#539). No configuration change is needed.
v0.23.0-b3 — 2026-10-17
Third prerelease of the 0.23 line, built from an end-to-end simulation of a
live Navigator 10 (AERO ALM 6-15, T_NAV10_20.24-1580-g02a20b66f) plant in
a real Home Assistant instance. Fixes advisor_operation_reason
(compose_operation_reason) so idle web demand labels (Keine Anforderung,
Aus, System aus) never override an active operating mode (Heating,
Cooling) when the faster Modbus poll or compressor run-on sees the heat pump
running before the web supplement updates, and checks Defrosting
(hp_operating_mode == 8) before the heating-circuit flow-temperature loop so
reverse-cycle defrosting is always reported as Defrosting instead of
Heating circuit A.
v0.23.0-b2 — 2026-10-17
Second prerelease of the 0.23 line, built from a read-only live audit on a
Navigator 10 (T_NAV10_20.24-1580-g02a20b66f) plant. Installations that
report thermal output on current_power (register 1790) while
thermal_power_flow_sensor (register 4126) stays at 0.0 kW now compute
calculated_cop, thermal energy totals (energy_thermal_*, energy_cop_*)
and predictive-advisor COP/building models automatically. Normal Modbus
entry setup now runs cleanup_stale_model_entities (cleaning up orphaned
register entities such as unconfigured cascade registers before detaching
empty sub-devices), cleanup_stale_web_sensor_entities removes the retired
web_heatpump_model entity and skips/removes the 12 Navigator 2.0-only
stat_* (Web 2.0) sensors on confirmed Navigator 10 controllers, and the
Navigator 10 web_energyflow_grid / web_energyflow_pv sensors report
unavailable instead of unknown when the controller omits grid_power
or pv_power. Also clarifies External Power Forwarding GLT number
((setpoint) / (Vorgabe)) vs sensor entities in the configuration wiki
(#519).
v0.23.0-b1 — 2026-10-17
First prerelease of the 0.23 line, built from issue #532's field
evidence. Unconfigured plant features (no bivalence, solar, cooling or
external demand source) no longer warn as invalid values on every
restart — their "not present" fills (255 resp. 0) are declared as
register sentinels in the device library (idm-heatpump-api 2.14.3), so
the affected entities simply report unavailable, exactly like the
storage-temperature registers always did. Genuinely out-of-range data
from a live source (the reporter's KNX-fed 100.96 % humidity) stays
rejected. And the Navigator web pages' --- placeholder for "no value
right now" (e.g. the projected hot-water power while no demand runs) now
reports unavailable too, instead of crashing Home Assistant's sensor
state machine on every update — the reporter's log counted 273 listener
errors from that. No configuration change is needed.
v0.23.0-b5 — 2026-10-17
Third round of field feedback: Registers that report "not present" now show the web supplement's live value instead (discussion #516) — the heat-sink flow rate on plants without a plate heat exchanger reads the spurious 0 L/min from the Modbus pattern while the controller's own flowmeter serves the real value; not-present readings (documented sentinels or the no-TWT signature) are filled from the web, real Modbus values always win. And daily advisor recommendations supersede their topic predecessor instead of piling up as parallel "new" entries (one topic, one active entry, confidence and viewed-status carry over). No configuration change is needed.
v0.22.0 — 2026-10-15
The stable cut of the 0.22 line (seven betas, 2026-10-13 through 2026-10-15, absorbing the never-released 0.21.3 line). Two field topics dominate: some controllers clear GLT RAM inputs seconds after the last write (#493) — the forwarders now refresh them at a firmware-safe 3-second cadence and rewrite unchanged values after controller restarts — and implausible room temperatures no longer feed the predictive advisor (#504), which can additionally take Home Assistant temperature sensors as room sources now. On top: short Modbus outages stay quiet for five minutes instead of flooding errors and repairs, a bidirectional grid meter is accepted directly (#519), forwarded values are written quantized to the register resolution, and the guided options walk reaches the advisor room-sources step again (#527). Rolling back to 0.21.2 keeps working.
v0.22.0-b7 — 2026-10-15
Guided configuration shows the advisor room temperature sources step again (#527): selecting the predictive advisor in the guided options walk used to skip straight past the Advisor room temperature sources step to the review, so the advisor's room temperature source entities could not be picked from the UI — only the classic options flow reached the step. It now appears right after the advisor detail step and returns to the guided review as usual. The Configuration page also documents the Home Assistant 2026.8+ entry points: options sit behind the gear icon on the config-entry row, while Reconfigure only re-runs connection setup (#526).
v0.22.0-b6 — 2026-10-14
External power forwarding writes quantized values (#519): derived sums
such as household consumption used to carry floating-point arithmetic
noise (e.g. 0.3569999999999999 instead of 0.357) into the entity
state, which the next poll then replaced with the register's rounded
readback — the entity visibly alternated between both spellings. Writes
are now rounded to the register resolution (10 W) before reaching the
controller, so the state is stable and always matches what the heat pump
actually stores. The cyclic 3-second refresh stays: GLT inputs live in
controller RAM (not EEPROM — no write-cycle wear) and some firmwares
clear them seconds after the last write.
v0.22.0-b5 — 2026-10-14
External power forwarding accepts a bidirectional grid meter directly
(#519): the new Bidirectional grid power sensor field takes a single
signed grid-connection sensor with a selectable sign convention (positive
= grid import or positive = export). The integration normalizes the sign
and derives the signed pv_surplus; together with the PV production
sensor it also derives house_consumption, including mapped battery flow.
Explicitly selected surplus and house-consumption sensors keep
precedence, and the grid meter alone is never written as household
consumption. No template helpers are needed any more on plants with a
bidirectional meter.
v0.22.0-b4 — 2026-10-14
Room temperature, storage temperature and humidity forwarding survive a controller restart: every periodic interval pass now rewrites the GLT registers even when the source value has not moved. Previously the tolerance guard suppressed every rewrite of an unchanged value, so a controller or Modbus-service restart — which wipes the volatile GLT RAM inputs — silently disabled external room-temperature influence until the source value drifted (observed live on a Navigator 10 during the #493 investigation: the register sat at the -1 sentinel for a quarter hour). Event-driven writes keep the tolerance skip, so bursty sources neither spam writes nor trip the write cooldown.
v0.22.0-b3 — 2026-10-13
GLT RAM inputs stay solid on Navigator 10: fallback periodic refresh cadence
is reduced to 3.0 s ($T/2$ of the ~5.0 s controller watchdog), write cooldown
is capped to 2.0 s specifically for external power registers so RAM inputs
are never choked by general cooldown settings, post-write confirmation poll
storms are suppressed on external power writes, battery SoC is rounded to
an integer (int), and an informative hint logs when battery_soc is mapped
without battery_discharge.
v0.22.0-b2 — 2026-10-13
Short Modbus outages stay quiet: a connection failure that recovers within five minutes no longer raises a repair issue, an error line or unavailable entities — the coordinator keeps serving the last snapshot, pending writes pause silently, and the log gets one gray info line on loss and one on recovery; a delivered write closes the outage early. Only outages longer than five minutes escalate to the visible repair, and controller-answered errors (wrong slave ID, firmware) always escalate immediately.
v0.22.0-b1 — 2026-10-13
Opens the 0.22 line and absorbs the never-promoted 0.21.3 beta line (everything since 0.21.2). GLT RAM inputs are refreshed every 5 s because some controllers clear them ~10 s after the last write (#493); the advisor ignores implausible room temperatures and gains read-only Home Assistant room-temperature sources for circuits without a wired sensor (#504); a connected nav20 web client corrects Navigator-10 misdetections; sensor bursts never cancel in-flight writes; and connection outages are reported once instead of per refresh pass. Includes the SolarEdge GLT setup guide and clearer write-failure repairs.
v0.21.2 — 2026-10-12
External power sensor selections can be cleared again (#489), including the battery source and its optional HA boost condition. Fractional SOC readings are rounded for the integer GLT input instead of being rejected. Clearing a mapping does not write a fallback value. All changes from 0.21.1 remain included.
v0.21.1 — 2026-10-12
Maintenance release for automatic PV DHW charging (#487) and Navigator 1.7 technician codes (#486). Automatic boosts preserve normal heating mode, require 5 °C of reheat headroom and retain a full completion-based cooldown across reloads and restarts. Navigator 1.7 receives its supported level-1 code; the obsolete level-2 entity is removed. Navigator PV buffer regulation remains independent. Differential-circuit parameter mappings remain unverified.
v0.21.0-b4 — 2026-10-11
v0.21.0 — 2026-10-12
The Predictive Advisor release: a strictly read-only analysis layer that
observes the plant, learns its own baselines and answers why the heat pump is
running right now — anomaly detection against 30-day baselines, health and
efficiency scores, a learned building model, heating-curve recommendations in
careful 0.02 steps, hot-water windows from PV forecast or dynamic prices, and a
24-hour plan. Recommendations fire events with full explanations and a bounded,
restart-safe lifecycle. No write path to the heat pump, no AI, no cloud — on
by default with the Smart profile, with its own toggle and a one-time What's-new
notice. The release also ships the field-hardening of recent days: the
dhw_charge_off_temp range correction (46–67 °C, from #460's evidence), the
log-flood fix for persistently invalid registers, guided external power
configuration working on every level (#471), labels for every AI options field,
and the transport floor following Home Assistant 2026.10.1.
v0.20.4 — 2026-10-11
Third stable maintenance release on the 0.20.x line: guided configuration of
external power forwarding no longer crashes on the advanced level (#471) —
the wizard advertised a forwarding interval the options page never had, so the
feature's advanced page died with an Unknown error while the standard level
worked. The external power forwarding interval is now a real option
(30–3600 s, default 60 s), a regression test walks every guided feature at
every level, and sensor-driven forwards arriving faster than the write
cooldown are skipped quietly instead of logging rejected the value every
cycle. The modbus-connection floor follows Home Assistant 2026.10.1 to
4.12.4. The same guided fix ships in the 0.21.0 beta line from 0.21.0-b4 on.
Fourth beta of the 0.21.0 line. Guided configuration of external power
forwarding no longer crashes on the advanced level (#471): the wizard
advertised a forwarding interval the options page never had, so the feature's
advanced page died with an Unknown error while the standard level worked.
The external power forwarding interval is now a real option (30–3600 s,
default 60 s), and a regression test walks every guided feature at every
level so a missing option can never ship again. Sensor-driven forwards that
arrive faster than the integration's per-register write cooldown are now
skipped quietly at debug level instead of logging rejected the value on
every cycle — expected self-throttling, not a controller fault. Also in this
cut: hardened Pages builds against unsafe output directories, UTF-8 preserved
in the Windows KNX parity check, corrected web-only control descriptions,
stable Home Assistant 2026.10.0 validated alongside the minimum in CI, and
real-HA lifecycle tests required before automated dependency merges.
v0.21.0-b3 — 2026-10-09
Third beta of the 0.21.0 line, a data fix following the reporter's evidence
in #460: the controller stores 63 °C in dhw_charge_off_temp and its own
web interface offers 50–67 °C there, so the documented 46–53 °C range was
too narrow. The validation range widens to 46–67 °C (idm-heatpump-api 2.14.2): the Hot water charge stop temperature entity now reports instead
of staying unavailable, and writes can use the full window the controller
itself offers. The register reference is regenerated; the same fix ships on
the stable line from 0.20.3 on.
v0.21.0-b2 — 2026-10-09
Second beta of the 0.21.0 line, a maintenance cut: a register that answers
with a permanently invalid value no longer floods the Home Assistant log
with one warning per poll (#460 — every 12 s, more than 6600 entries per day
on an AEOR ALM 4-12 whose dhw_charge_off_temp sits outside the documented
46–53 °C range). The warning now fires once per register, repeats go to the
debug log, and the message names the value, the rejection reason and the
documented range. The device logic moves to idm-heatpump-api[web]==2.14.1.
v0.21.0-b1 — 2026-10-07
First beta of the 0.21.0 line and the biggest analysis feature so far: the
Predictive Advisor — a strictly read-only recommendation layer that
observes the plant, tracks per-register data quality and walks documented
observation stages (collecting → early hints → recommending → established).
It answers why the heat pump is running, detects anomalies against the
plant's own 30-day baselines, computes health and efficiency scores, learns
a building model (heat loss, thermal inertia, optimal flow temperature),
recommends heating-curve corrections in careful 0.02 steps, finds hot-water
windows from a PV forecast or a dynamic price sensor, and joins everything
into a 24-hour plan. Recommendations fire idm_advisor_recommendation
events with their full explanation. Fully local and deterministic — no AI,
no cloud, no LLM — and no write path to the heat pump at all. On by
default with the Smart profile, with its own toggle; a one-time What's-new
notice in Settings → Repairs summarizes the changes.
v0.20.3 — 2026-10-09
Second stable maintenance release on the 0.20.x line, driven by the
reporter's evidence in #460: the controller stores 63 °C in
dhw_charge_off_temp and its own web interface offers 50–67 °C there, so
the documented 46–53 °C range was too narrow. The validation range widens to
46–67 °C (idm-heatpump-api 2.14.2): the Hot water charge stop
temperature entity now reports instead of staying unavailable, and writes
can use the full window the controller itself offers. Pin-and-documentation-
only cut on top of 0.20.2 (plus the cherry-picked ruff 0.17 and
Home-Assistant-pin-ceiling maintenance needed to release against today's
tooling); the same range fix ships in the 0.21.0 beta line from 0.21.0-b3 on.
v0.20.2 — 2026-10-09
Stable maintenance release on the 0.20.x line: a register that answers with a
permanently invalid value no longer floods the Home Assistant log with one
warning per poll (#460 — every 12 s, more than 6600 entries per day on an
AEOR ALM 4-12 whose dhw_charge_off_temp sits outside the documented
46–53 °C range). The warning now fires once per register, repeats go to the
debug log, and the message names the value, the rejection reason and the
documented range. Pin-and-documentation-only cut on top of 0.20.1 — the device
logic moves to idm-heatpump-api[web]==2.14.1; the same fix ships in the
0.21.0 beta line from 0.21.0-b2 on.
v0.20.1 — 2026-10-06
This release makes Modbus interruptions self-healing and completes the
differential-temperature circuits from the beta line (#429): while the
local web interface keeps delivering data, a failed Modbus poll stops
alarming — a calm repair notice states that data keeps flowing, and a
background watchdog reloads entries stuck in Home Assistant's setup-retry
backoff once the endpoint answers again. Differential circuits (for example
a wood stove connected through HC D) are detected automatically through the
local web interface, and their devices return to short entity IDs via a
one-time migration. The integration is validated against Home Assistant
2026.10 (minimum stays 2026.8.1); the transport packages became
Home-Assistant-owned minimum pins and the device logic moves to
idm-heatpump-api[web]==2.14.0.
v0.20.0 — 2026-09-30
The local Navigator web interface becomes a first-class data path:
web_only grows from an emergency read-only fallback into a real operating
mode — the Navigator 10 WebSocket delivers statistics, freshwater status,
the controller clock, performance, weather and iON data, and carries
capture-confirmed writes for the operating mode, error acknowledgement, the
hot-water setpoint and per-circuit setpoints and modes, with climate and
water-heater cards on top. An explicit connection-mode option, two
connection-state entities and a one-tap reload button make the data paths
transparent. The Navigator 1.0/1.7 integration is complete (issue #319):
the official FC01/FC05 coil block c3000–c3003 brings the acknowledge button
and its own Vorrangladung button. Controller error codes become readable
German text through the packaged vendor database, and a sensitive-data
guard joins CI.
v0.19.0 — 2026-09-26
The Navigator 1.0/1.7 becomes a first-class citizen and
photovoltaics gets a face — plus an honest AI adviser and a fully
bilingual documentation site. The 1.x family gains the complete official
writable holding table, a firmware-honest range guard, the per-register
diagnostics report, a working freshwater setpoint (a capture-verified float
pair the official table types wrong) and its own warm-water card. PV
visibility (issue #353) arrives as a derived surplus diagnostic, the
Navigator 10's own demand reason from its web interface and a dedicated
Photovoltaik device group. Everything stays 100 % local; no entity IDs
change. Runtime: idm-heatpump-api[web]==2.4.3.
v0.18.0 — 2026-09-20
Two flagship feature sets on top of 0.17.1: the optional Smart Energy &
Comfort package and the experimental AI plant adviser — plus a guided
setup that replaces the long options form. Smart Energy & Comfort brings
persistent energy/COP/CO₂ statistics, a read-only Health Monitor,
heating-curve and weather comfort advice, comfort scheduling and a
fail-closed PV-surplus hot-water boost (both writing features need explicit
exclusive-controller confirmation). The AI plant adviser is read-only and
off by default: deterministic measured-data reports, with optional free-form
explanations through local Ollama, a Home Assistant AI Task entity or
explicitly consented cloud requests — the only authorized cloud exception.
Everything stays 100 % local by default. Runtime: idm-heatpump-api[web]==2.2.0.
v0.17.1 — 2026-09-14
Dependency and hardening patch on 0.17.0: the tested runtime moves to
idm-heatpump-api[web]==2.1.2, modbus-connection==4.12.1 and
tmodbus[async-serial]==0.6.2; release validation always rejects stale
runtime pins now (the bypass input is gone), and the Navigator variant
fallback stops after a successful Navigator 10 WebSocket login instead of
misreporting the protocol family.
v0.17.0 — 2026-09-13
The stable cut of the 0.17.0 line, consolidating its whole beta cycle. The
headline: Navigator 1.0/1.7 heat pumps are supported — automatically
detected, served their own register map from the official 1.x table, with
writable PV-supplement registers on updated firmware. The rest is the
September code audit: eight bugs fixed (a poll outliving its config entry, a
failed setup leaving live entities behind, Fahrenheit room sensors written as
Celsius, sentinel readings on thermostat cards, and more), hardening of the
web supplement and the DHW boost, and the automation that keeps the
dependency pins current on its own. Runtime: idm-heatpump-api 2.1.1,
modbus-connection 4.11.1. The full, authoritative changelog is in
docs/CHANGELOG.md;
from this release on it is kept version-to-version (beta sections are folded
into the stable section at the cut).
v0.17.0-beta.1 — 2026-09-09
First candidate of the 0.17.0 line, carrying the result of the code audit in
docs/dev/code-audit-2026-09.md. Eight bugs are fixed — among them a poll that
outlived its config entry, a failed setup that left live entities behind, a
second heat pump behind one Modbus gateway that could no longer be added,
forwarded room temperatures that were not converted to degrees Celsius, and
sentinel readings that reached a temperature state — together with six
robustness items and three performance items. Both runtime pins move forward
(modbus-connection 4.11.1, idm-heatpump-api 2.0.1). No register map and
no entity identifier changed.
It is a beta: the audit touched model detection, setup and teardown,
write-enabled entities and services, and a runtime dependency change restarts
the soak clock. Verification progress is tracked in
docs/release-evidence/0.17.0-beta.1.md.
v0.16.1 — 2026-08-28
Patch on 0.16.0, from a live Home Assistant log. With the optional web
supplement pointed at an IP address, the integration closed a Home
Assistant aiohttp session instead of detaching it — Home Assistant wraps
close() on every session its helpers hand out, because the connector below it
is shared with every other integration. The session is now released with
detach(), and created with auto_cleanup=False so a web client rebuilt after
a failed poll does not leave the previous session pinned until Home Assistant
stops.
A hostname was never affected; it borrows the shared session, which the integration never released. Polling, entity state, writes, the KNX bridge and the Modbus path are unchanged, as are the runtime pins.
v0.16.0 — 2026-08-28
First stable release of the 0.16.0 line. It closes 0.16.0-beta.1 through
0.16.0-rc.6 with no code change since RC6.
The headline is the experimental KNX bridge. The integration serves the 654
IDM KNX communication objects itself — same object numbers, datapoint types and
read/write directions as IDM's ETS example project — so the Weinzierl
KNX IP BAOS 774 gateway module is no longer needed. It is opt-in, off by
default, and drives the Home Assistant knx integration, which is where
tunnelling, routing and KNX Secure stay. One base group address configures all
objects; idm_heatpump.export_knx_group_addresses and
scripts/generate_knx_group_addresses.py produce the ETS import. Physical-bus
interoperability is still unverified, which is why the feature is labelled
experimental.
Breaking: pymodbus is gone. The integration requires
idm-heatpump-api[web]==2.0.0 and speaks Modbus TCP through
modbus-connection==4.10.0 / tmodbus[async-serial]==0.6.1 only. 0.15.1 is
the last line with pymodbus. Nothing on the wire changes — register addresses,
entity IDs, unique IDs and the write path are identical, so entities, history,
automations and dashboards survive the update.
Also in the line: every entity name resolves through a Home Assistant
translation key, so an English installation finally shows English names;
heating circuits, optional modules and rooms became child devices on Home
Assistant 2026.9 without losing a device ID; strict mypy runs with nothing
disabled; and the test suite is gated at 95 % coverage with config_flow.py at
100 %.
See KNX Bridge.
v0.16.0-rc.6 — 2026-08-27
The KNX bridge now recovers when IDM starts before Home Assistant's KNX runtime has finished loading. Group-address event registration is retried every five seconds, and partial success is retained so only missing DPT batches are tried again. No manual IDM integration reload is required.
RC5's latest-value command queue and all write protections are unchanged. The EEPROM-sensitive classification and configurable 60-second default remain as before; registration recovery sends no bus telegram and writes no controller register by itself.
v0.16.0-rc.5 — 2026-08-27
Incoming commands for the experimental KNX bridge now use a latest-value-wins queue. Rapid intermediate setpoints are coalesced for one second, and a valid command that encounters the general cooldown or EEPROM protection remains queued until the guard expires instead of being lost. The EEPROM-sensitive register classification and the configurable 60-second default are unchanged.
The options text now distinguishes the live evidence precisely: setup and reload were verified with an active Home Assistant KNX interface in safe receive-only mode, while physical group-address telegram interoperability and bus load remain open because no IDM group addresses were imported into ETS.
See KNX Bridge.
v0.16.0-rc.4 — 2026-08-27
Entity names are translated. Until now only a handful of control entities had translations; every other entity — the Modbus registers, the calculated and operating-analysis sensors, the technician codes and the local web supplement values — carried a hardcoded German name in every language. All of them now resolve through a Home Assistant translation key, so an English installation shows English names and a German one shows the names it always had. Entity IDs and unique IDs are unchanged.
The rest of the candidate is quality-scale work with no user-visible effect: the config flow reached 100 % test coverage and the suite 95 %, both enforced in CI; the optional web clients use Home Assistant's own aiohttp session; and strict typing lost its seven disabled error codes.
See Entities.
v0.16.0-rc.3 — 2026-08-27
Optional, experimental KNX bridge: the integration can serve the IDM KNX communication
objects — same object numbers, datapoint types and read/write directions as
IDM's ETS example project — through the Home Assistant knx integration, so
the Weinzierl KNX IP BAOS 774 gateway module is no longer needed. KNX Secure,
tunnelling and routing come from the knx integration. One base group address
configures all 654 objects, and idm_heatpump.export_knx_group_addresses
returns the table for ETS.
Experimental: unit-tested, but never yet exercised against a real KNX bus.
See KNX Bridge.
v0.15.0 — 2026-08-22
Stable release closing the 0.15.0-beta.1..beta.3 cycle. No breaking changes:
unique IDs, entity IDs, register addresses and write paths are unchanged, and an
existing config entry keeps polling exactly as before.
Changed
- Transport off the alpha pin:
modbus-connection==4.8.1andtmodbus[async-serial]==0.5.1(previously4.0.0a3/0.5.0), with a typed error hierarchy andModbusDesyncErrorfor gateways serving several clients.
Added
- Web room temperature sensors for all heating circuits A–G:
B61–B67(room_temperature_HK_A..G), verified live on Navigator 10 ALM 6-15. - Connection pacing options under "Advanced Modbus settings": pause between
requests (0–0.5 s) and pause after connect (0–5 s), both
0by default. - Automated dependency pin freshness checking and an English documentation contract, both enforced in CI.
Fixed
- Inverted NC digital inputs in the web supplement:
ew_evu_lock_contact,dewpoint_humidity_alarmandfailure_eheatingnow reportoffin normal operation andonon alarm, lock or fault. - Orphaned deprecated sensor entities: stale
sensor.*_webentries left over from thebinary_sensormigration are cleaned from the entity registry at startup.
Release gate note: this stable tag was cut without the seven-day soak and without a signed stable-candidate smoke test — a deliberate maintainer decision, recorded in
docs/release-evidence/0.15.0.mdand on Stability and Release Readiness.
v0.15.0-beta.3 — 2026-08-22
Beta candidate 3: adds room temperature sensors for all heating circuits (A–G)
in the optional Navigator web supplement, bumps idm-heatpump-api to 1.0.2.
Added
- Web room temperature sensors for all heating circuits A–G: Support for
B61–B67(room_temperature_HK_A..G), verified live on Navigator 10 ALM 6-15 (B64 = 21.8 °C). idm-heatpump-api[web]: Bumped to1.0.2.
v0.15.0-beta.2 — 2026-08-22
Beta candidate 2: fixes inverted state on normally closed (NC) digital inputs in the Navigator web supplement, automatically cleans up orphaned legacy sensor entities in Home Assistant's entity registry, and adds automated dependency pin freshness checking.
Fixed
- Inverted NC digital inputs in Web supplement:
ew_evu_lock_contact,dewpoint_humidity_alarm, andfailure_eheatingare Normally Closed contacts and now correctly reportoffin normal operation andonon alarm/lock. - Orphaned deprecated sensor entities cleanup: Stale
sensor.*_webentities migrated tobinary_sensorare automatically cleaned from Home Assistant's entity registry at startup. - Dependency pin updater platform support: Normalized paths to POSIX format.
Added
- English documentation contract: Enforced by tests.
- Automated dependency freshness checking: Daily PyPI pin verification.
v0.15.0-beta.1 — 2026-08-19
Beta candidate: the transport pin moves off the modbus-connection==4.0.0a3
alpha onto 4.8.1, plus two new pacing options that are off by default. Because
this changes the runtime dependency of the direct Modbus socket, it ships
through the pre-release channel — the soak clock for a stable tag restarts with
this candidate. No breaking changes; unique IDs, entity IDs, register addresses
and write paths are unchanged, and an existing config entry polls exactly as
before without any action.
Changed
- Transport pinned to
modbus-connection==4.8.1andtmodbus[async-serial]==0.5.1(previously4.0.0a3/0.5.0). The newer library adds a typed error hierarchy, connection-wide pacing, and — since 4.8.0 —ModbusDesyncError: when a peer answers a different request than the one sent (typical for a gateway serving several Modbus clients at once), the backend drops the link instead of decoding the foreign reply. Theasync-serialextra is not optional even though this integration is TCP-only: sincemodbus-connection4.7.0 the backend module importsserialxat module level. - Transport error translation now uses the typed exceptions instead of
comparing
exception_codenumbers. The contract is unchanged: code 2 staysIllegalAddressError(coordinator bisect), codes 5/6/10/11 stay on the retry-in-place path, and theexception_code=<N>marker the coordinator matches on is still rendered as a number.
Added
- Two options under "Advanced Modbus settings", both
0by default: pause between requests (0–0.5 s, minimum gap from the end of one request to the start of the next) and pause after connect (0–5 s, once per connect and reconnect). Raise them for controllers or gateways that answer "device busy", drop requests, or time out under a dense request stream. The guided setup profiles set the request pause along: "unreliable network" 0.05 s, "multiple clients" 0.1 s.
v0.14.1 — 2026-08-18
Patch release: three bugs around the lifecycle of optional heating circuits. No breaking changes; unique IDs, register addresses and write paths are unchanged.
Fixed
- Sensors of a circuit enabled later never appeared. Entities are only built
while the config entry loads. If the controller still reported the
-1.0sentinel in that one poll, the "hide unused sensors" filter dropped the circuit's read-only registers — so the circuit got its controls but neither flow, room nor setpoint temperature, until some later reload happened to catch better values. A configured circuit is now exempt from that filter, the same way writable controls already were. Availability still follows the live value. - Flow deviation showed the flow temperature while idle. A circuit that asks
for nothing reports setpoint
0.0. That is a normal operating state, not a declared sentinel, so the sensor computedflow - 0and published the measured flow temperature as a 26 K deviation. It is now suppressed (stateunknown) while the circuit requests nothing, like the COP sensor at standstill. - "Unnamed device" in the device list. Sub-devices are created before the
platforms so
via_devicelinks resolve regardless of platform order; their name only arrives with the first entity. A sub-device that never received one stayed in the list as an unnamed, empty entry. Those are now detached when the config entry loads. A sub-device whose entities the user merely disabled is kept. - Orphaned entities of deselected circuits. Unchecking a circuit left its entities in the registry as permanently unavailable. They are now removed when the config entry loads, narrowly scoped to register-backed entities of this entry whose register points at an unconfigured circuit. Re-enabling the circuit recreates them under unchanged unique IDs.
v0.14.0 — 2026-08-18
Minor release: one usability fix on the heating curve, the circuit design parameters become expert entities, plus a per-circuit dashboard example and a contract test that catches the root cause of the 0.13.0 bug in CI. Config entries, entity IDs, unique IDs, register addresses and write paths are unchanged, and the tested dependency pairing is identical to 0.13.0.
Fixed
- Heating curve step size.
hc_{a..g}_heating_curveis a FLOAT register and therefore inherited the default step of 0.5, even though its range is 0.1–3.5. Common settings such as 0.3 or 0.4 fell between two steps and could not be entered. The step is now 0.1; the range still comes fromidm-heatpump-api.
Changed
- Heating-curve parameters are expert entities.
hc_{x}_heating_curve,hc_{x}_parallel_shift,hc_{x}_setpoint_flow_constantandhc_{x}_setpoint_flow_coolingare created disabled on new installations, likepower_limit_hpalready was. They define the design of the whole heating system and write to EEPROM registers. Existing installations are unaffected —entity_registry_enabled_defaultonly applies when an entity is first created.
Added
- Per-circuit dashboard example
(
docs/examples/dashboard-idm-heating-circuit.yaml). Home Assistant sorts a device page alphabetically and mixes comfort setpoints with design parameters; the example keeps them in separate sections and adds a history graph of measured flow, requested flow, room and outdoor temperature. - Contract test for the web value keys (
tests/test_cross_repo_contract.py). It compares the value namesidm-heatpump-apican deliver against the keys the integration turns into entities and fails as soon as the API provides a value the integration would silently discard — the root cause of the circuit B–G bug in 0.13.0.
v0.13.0 — 2026-08-18
Minor release with one fix that makes new entities appear on systems with more than one heating circuit, plus German names for the optional circuits. Fully backward compatible: config entries, entity IDs, unique IDs, register addresses and write paths are unchanged, and the tested dependency pairing is identical to 0.12.0.
Fixed
- Web entities for every heating circuit, not just circuit A. The Navigator
web values for the circuit pump (
M31–M37), mixer (M41–M47) and flow temperature (B51–B57) are provided byidm-heatpump-apifor circuits A–G, but the integration only picked up the circuit-A keys from a static allowlist. A circuit enabled later through the options flow therefore never received its(Web)entities — the values arrived and were discarded. Web entities are now created per configured heating circuit, so they appear on the reload that follows a later activation. - German names for heating circuits B–G. The name table only contained
hc_a_*entries, so every optional circuit fell back to the English default (Hc D Cooling Limitinstead ofKühlgrenze HK D). Names for B–G are now derived from the circuit-A table. Entity IDs and unique IDs are unchanged; only the displayed name differs.
v0.12.0 — 2026-08-17
Minor release with two new features and one polling fix. Fully backward compatible: config entries, entity IDs, unique IDs, register addresses and write paths are unchanged, and the tested dependency pairing is identical to 0.11.1.
Added
- Flow deviation per heating circuit (
calculated_hc_{a..g}_flow_deviation): the measured flow temperature of a circuit minus the flow setpoint the controller requests for that same circuit. Positive means overshoot, negative means the circuit does not reach its setpoint — the key figure when tuning a heating curve. Nothing is estimated; both operands are decoded registers of one circuit. Idle (0.0) and unconfigured (-1.0) circuits reportunavailableinstead of a meaningless deviation. With device hierarchy enabled the sensor sits on its heating-circuit device. - Self-diagnosis for a scan interval that is too short: when polling takes at least 80% of its own interval for several cycles in a row, a repair issue explains the situation and names the three effective remedies. This saturation is what turns into timeouts, especially when a second Modbus client shares the controller.
Fixed
- Calculated sensors could lose their source registers under entity-aware
polling —
calculated_copwas missing from the hand-maintained dependency list, so disabling the two power sensors made the COP sensor permanently unavailable. Dependencies are now derived from the sensor definitions.
See docs/CHANGELOG.md
for the full entry including test and CI changes.
v0.11.1 — 2026-08-15
Patch release fixing #192: a runtime model correction from the web supplement (e.g. Navigator 2.0 → Navigator 10 based on a NAV10 firmware-string match) updated the coordinator's live state, but Home Assistant's Device Registry — populated once at entity-setup time — never received the correction, since that detection key is deliberately excluded from the reload fingerprint to avoid tearing down active connections. The device page kept showing the original model while diagnostics already showed the corrected one. The coordinator now pushes a changed model/firmware/serial number directly into the Device Registry whenever a correction actually changes one of them.
v0.11.0 — 2026-08-15
First stable release of the 0.11.x line, after eight betas
(0.11.0-beta.1 – 0.11.0-beta.8). Fully backward compatible: existing
config entries, entity IDs, register addresses and write paths are
unchanged. See docs/CHANGELOG.md
for the full consolidated changelog.
Added
- Direct Modbus TCP socket now runs through
modbus-connection==4.0.0a3with thetmodbus==0.5.0backend, replacing the previous direct-Pymodbus path. - External humidity forwarding and external storage-temperature forwarding (GLT), alongside the existing per-heating-circuit room-temperature forwarding.
- Transport diagnostics (
modbus-connection/tmodbusversions, socket ownership, connection status).
Changed
idm-heatpump-api[web]pinned0.9.1→1.0.1(the stable API 1.x line introduces the public transport-injection contract this integration's tmodbus path relies on).- Minimum Home Assistant version raised to
2026.8.1;via_device→via_device_iddevice-registry migration.
Fixed
- Eight confirmed bugs found in a full codebase audit (climate preset-mode
safety, a
write_registerKeyError, a diagnostics IP-leak, a register- cache collision, a write-filter gap, reconfigure input loss, a stale device-info cache, and a zone-room validation counter reset), plus repair-issue IDs now scoped per config entry and narrower exception handling in the polling coordinator.
Known limitation
- A Navigator 2.0/Terra SWM model-detection follow-up (#192) remains open and is being investigated post-release.
v0.11.0-beta.3 - 2026-08-05
- Continues the direct
modbus-connection==4.0.0a3/tmodbus==0.5.0socket with the stableidm-heatpump-api[web]==1.0.0. - Transient Modbus exception codes 5 (Acknowledge), 6 (Server Device Busy), 10
(Gateway Path Unavailable) and 11 (Gateway Target Failed to Respond) are now
translated to
ModbusException, so the API retry loop repeats them in place on the same connection instead of forcing a hard reconnect — matching the API 1.0 transport contract (retry-in-place path). Code 2 remainsIllegalAddressErrorfor the coordinator bisect logic. - Removed the dead
_NON_RETRYABLE_DEVICE_EXCEPTION_CODESset and corrected comments that misdescribed the API retry behavior.
v0.11.0-beta.1 — 2026-08-04
- This is the first IDM integration beta whose direct Modbus TCP socket runs
through
modbus-connection==4.0.0a3with the separately pinnedtmodbus==0.5.0backend.4.0.0a3is the transport library version; the IDM integration version is0.11.0-beta.1(latest stable:0.10.1). idm-heatpump-api[web]==0.9.1continues to own the register model, batching, encoding/decoding, model detection and write safety. Itspymodbus>=3.12.1,<4.0dependency remains temporarily pinned because API 0.9.1 still imports it, but pymodbus no longer owns the direct socket.- Diagnostics and the API-version sensor now include
modbus-connectionandtmodbusversions plus redacted transport capabilities. - The adapter is implemented and covered by automated tests. Each config entry
still owns its socket and reports
supports_shared_connection: falsebecause Home Assistant central cross-entry sharing is not available; read-only validation of the new path on real Navigator hardware remains pending. - Transient Modbus responses 5 (Acknowledge), 6 (Server Device Busy), 10 (Gateway Path Unavailable), and 11 (Gateway Target Failed to Respond) escape the batch layer without individual-read fallback or permanent register quarantine. Backend-owned busy retries are not duplicated by the adapter.
- This beta does not satisfy the stable hardware-smoke and soak gates yet.
v0.8.5 — 2026-07-23
First stable release of the 0.8.5 line. Consolidates the eight beta candidates plus the final i18n and stability fixes from the stable code review.
Added
- Manual Navigator model override (Auto / Navigator 10 / Navigator 2.0 / Navigator Pro), wenn die automatische Erkennung mehrdeutig ist.
- Restart-sicherer Warmwasser-Boost mit den Services
idm_heatpump.start_dhw_boostundidm_heatpump.cancel_dhw_boostsowie Start-/Cancel-Buttons. Der Boost-Zustand überlebt HA-Neustarts. - Optionale Gerät-Hierarchie (Wärmepumpe, DHW-Controller, Zonenmodule als separate Sub-Geräte).
- Entity-bewusstes Modbus-Polling, Momentan-COP-Sensor und Betriebszyklus-Analyse (Verdichter-/Abtau-Zähler).
- Navigator-Web-Binary-Sensoren für Online-/Regler-Online-Status.
Changed
- API-Pin aktualisiert:
idm-heatpump-api[web]==0.8.4(war 0.8.1). Bringt sentinel-aware Heizkreis-Modus-Probes, robusteren Navigator-10-vs-2.0-Differenzierer für Terra SWM, automatische Kaskadenerkennung und Navigator-10-Heizkreisdaten für die Kreise B–G. - Klima- und Warmwasser-Entitäten melden ihre unterstützte Schrittweite (0,5 °C bzw. 1 °C für integer-backed Register).
- Modbus-Register-Wiki gegen API 0.8.4 regeneriert.
- Repository aufgeräumt (
.planning/, alteROADMAP.md, verwaiste Skripte und AI-Handoff-Doku entfernt). - README und HA-Core-Entwurf listen jetzt alle 8 Plattformen und das vollständige Service-Set inkl. DHW-Boost.
Fixed
- Integer-Modbus-Numbers bieten keine invaliden Nachkommastellen mehr an (#158).
- Terra SWM / Navigator 2.0 wurde fälschlich als Navigator 10 erkannt (Issue #44); die Erkennung verlangt jetzt plausible Power-Limit-Werte.
- Water-Heater-Entität ignoriert jetzt den Unused-Sentinel und zeigt nicht
mehr
-1 °Cals Live-Temperatur an. - DHW-Boost nutzt Übersetzungsschlüssel statt harter deutscher Strings;
die Multi-Device-Service-ValidationError verwendet den bestehenden Schlüssel
multiple_entries_select_entry. - DHW-Boost:
DhwBoostErrorwird im Timeout-/Target-Restore-Pfad sauber abgefangen statt als unhandled Task-Exception durchzuschlagen.
Known limitation
- Home Assistants experimentelle
modbus_connectionwird noch nicht verwendet. Der vorbereitete Transport-Vertrag bleibt bewusst inaktiv, bis die offizielle HA-Schnittstelle final ist.
v0.8.5-beta.8 — 2026-07-23
Changed
- Neue Beta-Kandidatenversion
0.8.5-beta.8: Aktualisiert Manifest, Release-Evidence, Changelog und Wiki-Verweise auf den aktuellen Beta-Stand. Laufzeitcode, Entitäten, Register, Schreibpfade und der getesteteidm-heatpump-api[web]==0.8.4-Pin bleiben unverändert.
v0.8.5-beta.7 — 2026-07-22
Fixed
- Endgültiges Navigator-Modell wird mit der API synchronisiert: Manuelle Modell-Overrides und eindeutige spätere Web-Korrekturen gelten nun auch für die modellabhängigen Register- und Schreibprüfungen der API.
- Zukünftiger Modbus-Transportvertrag korrigiert: Der weiterhin inaktive Vertrag unterscheidet FC04/Input Register und FC03/Holding Register und begrenzt Slave-IDs auf 1–247. Der produktive Transport bleibt unverändert.
v0.8.5-beta.6 — 2026-07-22
Fixed
- Ganzzahlige Modbus-Werte verwenden jetzt Schrittweite 1: Heiz- und Kühlgrenzen der Heizkreise A–G sowie alle weiteren schreibbaren Integer- Register bieten keine ungültigen 0,5-Schritte mehr an.
- Climate und Warmwasser melden die unterstützte Zielwert-Schrittweite: Heizkreis- und Raum-Sollwerte verwenden 0,5 °C, der ganzzahlige Warmwasser- Sollwert 1 °C.
v0.8.5-beta.5 — 2026-07-22
Changed
- Pin auf
idm-heatpump-api[web]==0.8.4: Aktualisiert die API-Bibliothek auf v0.8.4 für verbesserte Modbus-Modellerkennung (Erkennung aktiver Heizkreise über Betriebsmodus-Register, verlässliche Abfrage für Navigator 10 vs. 2.0 bei Terra SWM Firmware und Kaskaden-Erkennung).
v0.8.4 — 2026-07-19
Changed
- Zonenmodul-Raumrelais ist jetzt ein
binary_sensor: Der Relaisstatus pro Raum (zm{z}_room{r}_relay) wurde bisher als numerischer Sensor mit0/1angezeigt. Er läuft jetzt auf derbinary_sensor-Plattform und zeigton/off(Device ClassRunning, Toggle-Icon). Erfordert das mitgelieferteidm-heatpump-api[web]==0.8.1, in dem das Relay-Register alsbinary=Truemarkiert ist. Schließt #128. - Pin auf
idm-heatpump-api[web]==0.8.1.
v0.8.3 — 2026-07-16
Changed
- Pin auf
idm-heatpump-api[web]==0.8.0: Wirkt zwei Verbesserungen der Bibliothek automatisch aus (keine Code-Änderung an der Integration):detect_modelerkennt nicht-kontinuierliche Heizkreise (z. B. nur HK A und HK D installiert) zusätzlich über die Active-Mode-Register 1498–1504.- Der Navigator-10-Web-Client liefert Vorlauf, Pumpe und Mischer der Heizkreise B–G (vorher nur HK A und HK C).
- Enthält den IPv4/IPv6-Web-Anmeldungsfix für den Navigator 2.0 aus API 0.7.7.
v0.8.2 — 2026-07-12
⚠️ Wichtige Hinweise zum Update (Breaking Changes)
Das direkte Update von v0.8.1 auf v0.8.2 enthält keine zusätzlichen Breaking
Changes. Bei einem Update von v0.7.4 oder älter gelten weiterhin die
v0.8-Änderungen: lokaler Webzugriff mit PIN, die fest gepinnte API 0.7.6, neue
climate- und water_heater-Plattformen, die entfernte Entität
ext_demand_brine_pump_m16, fehlertolerantes Polling und IP-unabhängige Unique
IDs. Die vollständigen Hinweise stehen im Changelog.
Korrekturen
- Benennt native Regler eindeutig als Heizkreis A, Zone 1 Raum 1 und Warmwasser, statt den Gerätenamen für mehrere Entitäten anzuzeigen.
- Zeigt für Warmwasser den passenden Modus Wärmepumpe statt des irreführenden Status Hochleistung.
- Vervollständigt die kanonischen Entity-Texte und sichert das Naming mit Tests ab.
v0.8.1-beta.29 — 2026-07-11
- Remembers the successful Navigator 2.0 or Navigator 10/Pro local web protocol and retries only that protocol during normal runtime recovery.
- Tries both supported web protocols during setup, reconfiguration and repair,
and treats local network code
0as disabled. - Redacts web host, web PIN and detailed web connection strings from downloaded diagnostics.
- Adds GLT Monitor diagnosis, writable-control guidance, exact PV/battery datatypes and guarded examples for PV surplus and external DHW requests.
- Keeps
idm-heatpump-api[web]==0.7.6; this release needs a new integration version, not a new API package. - Consolidates verified constraints and remaining verification work in the project knowledge base and Wiki.
v0.8.1-beta.28 — 2026-07-11
- Pins the published
idm-heatpump-api0.7.6 stability release. - Propagates transport failures without disabling valid registers.
- Quarantines proven room-mode batch mismatches and avoids later double reads.
- Recognizes the verified cascade-unavailable sentinel.
- Restores explicitly acknowledged custom-register writes with numeric validation.
Unreleased stability audit — 2026-07-10
- Transport/no-response failures no longer count as permanent failures of individual registers.
- Zone-room mode validation isolates unsupported/invalid values and avoids repeated double reads after quarantine.
- Navigator 10 cascade capability recognizes the hardware-confirmed
255unavailable sentinel. - Advanced raw writes retain numeric/datatype validation and require explicit risk acknowledgement.
- Added measurable stable-release gates.
v0.8.1-beta.27 — 2026-07-10
- Pinned the hardware-verified API 0.7.5.
- Added register-specific unavailable-sentinel handling.
- Compared 170 definitions across 45 groups in 309 read-only batch/individual checks without a raw mismatch.
Historical summary
v0.4.6 — 2026-05-31
- 169+ entities (109 sensors, 8 binary, 44 numbers, 4 selects, 4 switches)
- Full
idm-heatpumplibrary integration (Option B complete) - Binary sensors for compressors, fault alarms, heating/cooling/DHW demand
- Solar, ISC, PV, cascade registers all included
- German entity names throughout
- Write-only register protection (
error_acknowledge)
v0.4.4 — 2026-05-31
- Full migration to
idm-heatpumplibrary as core - Navigator 10 support: heat sink sensors, flow rate, groundwater temps
- Booster A/B diagnostics (16 new sensors)
v0.4.0 — 2026-05-30
- Major architectural change
- Navigator 10 support added
- First large library-backed dynamic register map
v0.2.0 — 2026-03-22
- Initial release
- Basic Modbus TCP integration
- System sensors, heating circuits, DHW control