Configuration
Connection Parameters
| Parameter | Description | Default |
|---|---|---|
| Host (IP) | IP address of the IDM Navigator | - (required) |
| Port | Modbus TCP port | 502 |
| Slave ID | Modbus slave ID | 1 |
| Name | Integration name (to distinguish multiple instances) | IDM Navigator |
| Local web PIN | Optional PIN for local Navigator web supplement data | empty |
Leave the web PIN empty if you want Modbus-only operation. Modbus remains the baseline path and works without a PIN. Providing a PIN also enables the setup flow to offer a limited web-only fallback when Modbus is unavailable.
The direct Modbus socket is local to this integration and uses
modbus-connection with the tmodbus backend. Each config entry owns its own
connection; Home Assistant central cross-entry sharing is not currently
available.
Options
After entering the connection details, choose a guided setup depth:
| Depth | What the wizard asks |
|---|---|
| Standard | Feature selection, required sensors and safe defaults |
| Advanced | The same features plus common intervals, thresholds and tuning |
| Expert | The same features plus every available transport and forwarding setting |
Each depth offers the same set of functions. Select only the functions you want to change; each selected function opens a short page for its switch and any needed sensor, circuit or group mapping. A final confirmation saves the configuration and reloads the entry. Settings from a deeper mode remain saved when you later choose a simpler mode. You can switch depth at any time through Reconfigure > Features. Reconfigure > Connection changes the host, web access and Modbus proxy. Existing options remain in place if their function was not selected in the wizard.
When newly enabling beta features, an additional acknowledgement page appears before saving. It is separate from the ownership confirmation required by the automatic DHW manager and comfort schedule.
Feature profile
The Feature profile controls optional IDM-specific entities:
| Profile | Enabled functionality |
|---|---|
iDM Smart Energy & Comfort |
Calculated COP and deviation sensors, compressor cycle analysis, persistent energy/COP/cost statistics, short-cycle detection and DHW boost controls; optional health and comfort features |
Vanilla |
Core IDM register entities, climate controls, water heater, diagnostics and configured web data |
The Smart profile is enabled by default to preserve the complete existing integration behavior. Vanilla is useful when only the original controller values and controls should be exposed. Switching profiles reloads the entry; optional entities may be removed or recreated, while core entity IDs remain unchanged.
The profile does not automatically write energy values or modify the heating curve. External PV, battery, room-temperature, humidity and storage forwarding remain separate opt-in functions and are documented in their own sections.
Smart also exposes persistent energy, COP, cost, CO₂ and optional PV self-consumption statistics when the required power registers are available. The electricity price and CO₂ factor are configured locally in the options; they are not fetched from an external service.
When Device hierarchy is enabled, optional entities are kept in their own logical groups: iDM Analytics, iDM Health Monitor, and iDM Comfort. Existing controller, heating-circuit, warm-water and web entities remain in their existing groups and retain their entity IDs.
External power source mapping and forwarding
The External power forwarding category maps existing Home Assistant sensors to PV surplus, PV production, house consumption, battery charge/discharge, battery SOC and electric-heater power. The forwarding switch is off by default. When enabled, valid values are written to the corresponding IDM GLT registers on source changes and periodically (default: 60 seconds).
Power sensors must report W, kW or MW; forwarding converts to kW. Battery SOC must be a whole percentage from 0 to 100. The battery sign can be kept or inverted to match the source convention. Invalid or out-of-range values are skipped; an unavailable source does not write a fallback zero. Blank fields leave their registers untouched. Do not have another energy manager write the same register at the same time.
The saved mapping also supplies the optional PV estimate and automatic DHW manager. They can read an existing mapping while forwarding is off. The current guided wizard shows the mapping page only when forwarding is enabled; it does not yet provide a separate source-selection page for read-only use. See external power setup for controller preparation and field mappings.
Optional PV energy manager
The automatic PV surplus DHW charging option is off by default. It only starts the existing safe DHW boost when the selected PV surplus is available. It requires the external power source mapping and the explicit confirmation that Home Assistant is the only DHW controller. This is an ownership declaration, not automatic detection of Smartfox, openWB or another controller. Disable competing DHW control before confirming it.
Missing, unavailable or invalid source values fail closed. The manager does not write GLT energy registers and does not alter normal heating, the heating curve or the electric heater. Tariff, weather and heating preheat controls are not enabled by this option. A selected tariff sensor changes cost accounting only; automatic price-based heating control is not implemented. See Smart Energy & Comfort for source precedence, defaults and the behavior of an already running boost.
Optional comfort schedule and advisers
The comfort schedule is disabled by default and requires the explicit single-controller confirmation. It writes only the selected circuit's room temperature target inside the configured daily window and restores the prior target afterwards if the current value still matches the scheduled target. A manual change made while the schedule is active is left untouched. Advanced mode offers up to 16 daily windows across configured circuits, including overnight windows, in Home Assistant's configured timezone. See schedule examples.
The heating-curve assistant and weather-preheat adviser are read-only. They
publish recommendations without changing any IDM register. The weather adviser
requires a selected Home Assistant weather entity. All comfort entities are
shown under iDM Comfort when device hierarchy is enabled.
Optional iDM Health Monitor
The iDM Health Monitor is disabled by default and adds read-only diagnostic
entities. It checks communication failures, compressor start frequency, low
current COP, DHW temperature deviation and implausible temperature values. The
iDM health report sensor exposes ok or problem and lists active checks in
its attributes. It does not change any heat-pump setting.
Scan Interval
The scan interval determines how often registers are polled.
| Value | Recommendation |
|---|---|
| 10 seconds | For active monitoring (default) |
| 30 seconds | Balanced |
| 60 seconds | For quieter systems |
Web Supplement Data
The integration can optionally read additional local Navigator web data through
idm-heatpump-api. This is read-only and additive. It is used for values such
as Navigator generation, software version, heat pump model, selected Web UI
diagnostics, and Navigator 10 infosystem notifications.
| Option | Description | Default |
|---|---|---|
| Web supplement data | Enables the optional local web poll; it becomes active only with a valid PIN | on |
| Web supplement interval | Separate polling interval for web data | 30 seconds |
| Web host | Optional separate host for the Navigator web interface, useful when Modbus goes through a proxy | Modbus host |
Important behavior:
- If no PIN is configured, no web client is created and the integration stays in Modbus-only mode.
- During setup, reconfiguration and repair, the Modbus model is used only to choose which local web protocol to try first. If that attempt fails, the other supported protocol is also tested. The protocol that actually succeeds is stored with the config entry.
- During normal polling, the successful authenticated client is reused. If its session expires or the connection fails, the client is closed and the same known protocol is rebuilt immediately. The other Navigator generation is not probed during routine runtime recovery.
- After replacing the Navigator, changing the web endpoint or making a firmware change that alters the local interface, run Reconfigure → Change connection settings so protocol detection can run again.
- If the PIN is wrong during setup or reconfiguration, the form shows the PIN error immediately. After a Modbus failure, the PIN can be corrected directly in the recovery form without restarting setup.
- If the web interface is unreachable later, Modbus polling continues.
- Web polling runs separately and starts slightly after Modbus polling so both protocols do not hit the controller at the exact same moment.
- Modbus register values always have priority. Web sensors are only created for extra values or values without an existing Modbus entity. Web model/firmware metadata may complete an unknown Modbus result, but a definite family conflict is ignored.
- If a Modbus proxy is used, enter the proxy IP as Host and the original heat pump IP as Web host so the local Navigator web interface can still be reached.
Navigator 2.0 uses a local HTTP/CSRF login; Navigator 10 and Navigator Pro use the Navigator-10 WebSocket login family. See Local Navigator Web Interface for the complete detection and recovery state machine.
Room Temperature Forwarding
Room temperature forwarding is optional and disabled by default. When enabled,
the integration can forward selected Home Assistant temperature sensors to the
IDM external room temperature registers of the active heating circuits, for
example hc_a_ext_room_temp.
| Option | Description | Default |
|---|---|---|
| Room temperature forwarding | Enables forwarding for selected circuits | off |
| Forwarding interval | Periodic refresh interval for selected room temperatures | 300 seconds |
| Forwarding tolerance | Minimum change before a repeated value is written again | 0.2 °C |
| Sensor per heating circuit | Home Assistant temperature entity to forward | empty |
Important behavior:
- Values are written on sensor state changes and also refreshed periodically.
- Invalid, unavailable, non-numeric or out-of-range values are skipped.
- Leaving a circuit without a selected sensor keeps that circuit untouched.
- This feature writes Modbus values. Use sensors that represent the actual room temperature you want the heat pump to see.
External Humidity Forwarding
External humidity forwarding is optional and disabled by default. When
enabled, the integration forwards one selected Home Assistant humidity sensor
to the global IDM GLT humidity register (ext_humidity). Unlike room
temperature, humidity has no per-heating-circuit register, so only a single
sensor can be selected.
| Option | Description | Default |
|---|---|---|
| Humidity forwarding | Enables forwarding of the selected sensor | off |
| Forwarding interval | Periodic refresh interval | 300 seconds |
| Forwarding tolerance | Minimum change before a repeated value is written again | 2.0 % |
| Humidity sensor | Home Assistant humidity entity to forward | empty |
The same behavior notes as room temperature forwarding apply: values are written on state changes and refreshed periodically, invalid or out-of-range values are skipped, and leaving the sensor field empty disables forwarding.
External Storage Temperature Forwarding
External storage temperature forwarding is optional and disabled by default.
When enabled, the integration forwards up to four selected Home Assistant
temperature sensors to the fixed IDM GLT storage registers: heat storage
(glt_heat_storage_temp), cold storage (glt_cold_storage_temp), and DHW
storage bottom/top (glt_dhw_temp_bottom / glt_dhw_temp_top).
| Option | Description | Default |
|---|---|---|
| Storage temperature forwarding | Enables forwarding for selected registers | off |
| Forwarding interval | Periodic refresh interval | 300 seconds |
| Forwarding tolerance | Minimum change before a repeated value is written again | 0.5 °C |
| Sensor per storage register | Home Assistant temperature entity to forward | empty |
The same behavior notes as room temperature forwarding apply: values are written on state changes and refreshed periodically, invalid or out-of-range values are skipped, and leaving a register's field empty keeps it untouched.
KNX Bridge
The KNX bridge is optional and disabled by default. When enabled, the integration publishes the IDM KNX communication objects on a KNX bus and accepts commands from it — replacing the Weinzierl KNX IP BAOS gateway module IDM sells for the Navigator. It drives the Home Assistant KNX integration, which must be set up: gateway, tunnelling and KNX Secure come from there.
| Option | Description | Default |
|---|---|---|
| Enable KNX bridge | Turns the bridge on and shows the group address step | off |
| Send values to KNX | Publish a telegram whenever a value changes | on |
| Accept commands from KNX | Write incoming values on writable objects into the heat pump | on |
| Answer read requests | Reply to a KNX read request with the current value | on |
| Full resend interval | Resend every value periodically; 0 sends only on change | 0 seconds |
| Change tolerance | Minimum change before a numeric value is sent again | 0.1 |
| Base group address | Object numbers are added to this address | 8/0/0 |
| Object groups | Which parts of the catalogue take part | all |
| Group address overrides | register = address per line for objects addressed differently |
empty |
Group addresses are derived as base address + IDM object number, so with
the default base object 1 (outdoor temperature) lands on 8/0/1 and object
222 (heating circuit A mode) on 8/0/222. The whole catalogue fits inside
one main group. Use idm_heatpump.export_knx_group_addresses to get the
full table for your controller.
Full details, including the object groups and datapoint types, are in KNX Bridge.
Heating Circuits
Select the active heating circuits (A through G). Only enabled circuits create entities in Home Assistant.
Zones
Specify the number of zone modules (0–10) and the active rooms per module. The integration supports up to 8 rooms per zone; 6 is the API default for current Navigator 10 hardware. Configure only physically present rooms to avoid unnecessary individual room-mode validation traffic.
Technician Level Codes
Enable this optional feature to add two sensor entities that display the current access codes for Fachmann Ebene 1 and Fachmann Ebene 2 on the IDM Navigator. The feature is disabled by default.
| Sensor | Description |
|---|---|
sensor.{name}_fachmann_ebene_1 |
Current access code for technician level 1 |
sensor.{name}_fachmann_ebene_2 |
Current access code for technician level 2 |
The sensors update every minute and can be used in a Home Assistant dashboard or notification. They are integration-provided helper sensors rather than Modbus register values, so they do not appear in the Modbus register catalog.
Treat both sensor states as sensitive access information. Enable them only when needed, restrict dashboard visibility, and do not include their values in public screenshots, support posts, notifications to shared devices or logs. The calculation method is intentionally not part of the public documentation.
Room Names
For each room in each zone, you can assign a custom name. These names are used as entity names in Home Assistant.
Reconfiguration
- Go to Settings → Devices & Services
- Click IDM Heatpump
- Click Reconfigure
- Choose the action you need:
- Features opens Standard, Advanced or Expert setup to change selected feature settings without changing unselected categories.
- Change connection settings updates host, port, slave ID, local web PIN, and proxy settings after validating them.
- Test current connection runs a read-only check against the saved settings. It does not save anything and never writes Modbus registers.
The test reads a known IDM Modbus register. If that fails, a short DNS/TCP check identifies the network failure more precisely. If a local web PIN is configured, it also verifies the Navigator web endpoint and authentication. The result distinguishes hostname, refused connection, timeout, unreachable endpoint, missing Modbus response, invalid PIN, and web interface errors. Submit the result form again to repeat the test.
A wrong web PIN is rejected directly when changing the connection. Leaving it empty keeps the entry in Modbus-only mode.
If Modbus fails while a valid web PIN is present, the flow offers web-only mode and clearly lists its limitations. Choosing Retry Modbus connection returns to the correct reconfiguration form; switching back from web-only mode clears the fallback flag after a successful Modbus check. Existing heating-circuit, zone and advanced Modbus options are preserved while web-only mode is active, so they are available again after Modbus is restored.
Use Configure or Reconfigure → Configure features to edit the complete options form, including scan interval, circuits, zones, Smart Energy & Comfort, health monitoring, forwarding, and automatic controls. Saving reloads the integration so optional entities follow the selected settings. Newly enabled beta features require an explicit acknowledgement before saving.
Advanced Modbus options
The collapsed Advanced Modbus settings section also provides power-user controls in addition to timeout and retry settings:
- Pause between requests (0–0.5 seconds) is the minimum gap the connection
keeps between two Modbus requests, measured from the end of one request to
the start of the next.
0 s(the default) sends requests back-to-back, as every release before this option did. Raise it when the controller or a Modbus gateway answers "device busy", drops requests, or times out under a dense request stream. The pause applies to every request, so a full polling cycle takes correspondingly longer: with roughly 40 batches,0.1 sadds about 4 seconds per cycle. Start at0.05 s. - Pause after connect (0–5 seconds) is awaited once after the link is
established, before the first request is sent — on the first connect and on
every reconnect, not per request.
0 s(the default) sends immediately. Raise it for gateways that accept a connection before they are ready to answer. - Polling jitter (0–20%) adds a random delay of up to the selected
percentage of the scan interval to every poll. This spreads network and
controller load when several heat pumps start polling at the same time.
0%disables jitter. - Extended communication diagnostics creates diagnostic entities for the last successful poll, poll duration, consecutive failures, and the active register count. Total polls and failures are included as attributes and in downloaded diagnostics.
- Write cooldown (0–600 seconds) applies per register. A second write to
the same register during the configured interval is rejected without sending
anything to the heat pump, and Home Assistant reports the remaining wait.
0completely disables this protection; changing it is at the user's own risk. Different register addresses do not block one another.
The general write cooldown is independent of the API's EEPROM protection. EEPROM-sensitive registers can therefore still be subject to the separately configured EEPROM interval and its safety rules.
Runtime and API versions
IDM Heatpump is a Home Assistant custom integration rather than an add-on.
The integration creates a diagnostic sensor named IDM Heatpump API version
(German: IDM-Heatpump-API-Version). Its state is the actually installed
idm-heatpump-api distribution version. The sensor attributes also show:
integration_version: installed custom integration versionmodbus_connection_version: installed connection-library versiontmodbus_version: installed direct socket-backend versionhome_assistant_version: installed Home Assistant Core versionpython_version: Python runtime version
The same version set is included in downloaded diagnostics. The integration and
its direct dependency versions are also logged when the entry starts. This is the authoritative way
to check the runtime; the version pinned in
custom_components/idm_heatpump/manifest.json describes what
should be installed, while the sensor shows what is actually loaded.
Integration and API release pairing
This project has two independently versioned packages:
| Package | Current tested version | When it needs a new version |
|---|---|---|
| Home Assistant custom integration | 0.17.0-beta.2 (previous stable: 0.16.2) |
Integration code, config flow, diagnostics, entities or bundled user documentation changes |
| Connection library | modbus-connection==4.12.2 |
Transport contract, connection lifecycle or error semantics change |
| Direct socket backend | tmodbus[async-serial]==0.6.2 |
Wire/backend implementation changes |
| Python register/web library | idm-heatpump-api[web]==2.6.0 |
Register schema, encoding/decoding, batching, model detection, write safety or reusable web-client implementation changes |
The manifest lists the tested runtime in this order:
modbus-connection==4.12.2, tmodbus[async-serial]==0.6.2,
and idm-heatpump-api[web]==2.6.0. The first two packages own the direct
socket. idm-heatpump-api remains responsible for IDM-specific device logic
and owns its exception hierarchy; the integration no longer installs
pymodbus. 4.12.2 is the version of modbus-connection, not an IDM integration
version. The transport was first shipped by IDM integration beta
0.11.0-beta.1.
The adapter is implemented, covered by automated tests and live-verified on a
Navigator 10. Its redacted
diagnostics report source: modbus_connection.tmodbus, owns_socket: true and
supports_shared_connection: false. Navigator 2.0/Pro coverage and an
intentional connection-loss/reconnect test remain open; real-hardware writes
stay out of scope unless explicitly authorized. IDM Heatpump is a custom
integration, not a Home Assistant add-on.
Debug Logging
Enable extended logging for troubleshooting:
logger:
default: info
logs:
custom_components.idm_heatpump: debug
EEPROM Notice
Certain registers are EEPROM-sensitive (88 total). These registers are stored in EEPROM when written and have a limited number of write cycles. The integration warns about excessive writing of these registers.
BMS Cyclic Writing
Registers 1696 and 1698 (BMS temperature requests) must be written cyclically every 10 minutes to remain active. The switch entities for BMS requests handle this automatically.
Experimental AI adviser (upcoming)
The experimental adviser provides daily/weekly reports and explanations of health and efficiency. It is off by default and has no plant control tools or voice exposure. Ollama is local; v0.17.2-b10 adds separately consented OpenAI and Z.ai reports with bounded requests. See setup, report actions, data coverage and limitations.