IDM Heatpump Documentation
GitHub
Edit on GitHub

Entities

Smart feature entities

The optional Smart Energy & Comfort profile adds electrical and thermal energy totals for lifetime, day and month, COP for the same periods, estimated costs, CO₂ and optional PV use, plus compressor-cycle and operating analysis. These are derived values, not additional physical meters. The required power registers must be available.

Health Monitor adds eight problem checks and a report sensor. Heating-curve and weather advisers add read-only recommendations. The optional comfort schedule changes the existing circuit room target; it does not create a second climate controller entity. Automatic DHW charging uses the existing boost controls and state machine.

With device hierarchy enabled, iDM Analytics, iDM Health Monitor, iDM Comfort and Diagnostics separate these features from controller entities. Disabling optional features removes their entity registrations; re-enabling them restores the same IDs. Existing controller IDs are retained.

The integration dynamically generates entities based on your heat pump configuration (heating circuits, zones, optional features).

Entity Platforms

Platform Count Description
Sensor model-dependent Temperatures, pressures, flow rates, energy, PV, solar, cascade, booster, runtime versions, diagnostics
Binary Sensor model-dependent Fault alarms, compressor status, heating/cooling/DHW demand, web states
Number model-dependent Writable setpoints, temperature limits, GLT parameters, power limits
Select model-dependent System mode, heating circuit modes, solar mode, ISC mode
Switch model-dependent External heating/cooling/DHW demand, one-time DHW charge
Climate per circuit + zone room Heating/cooling mode + target temperature for heating circuits and zone-module rooms
Water Heater 1 DHW target temperature with current temperature readback
Button 1 Acknowledge active errors on the heat pump

Exact counts depend on the detected model, active heating circuits, zones, rooms and optional features. Adding circuits, zones, cascade, technician codes or web supplement data can add entities.

Entities are grouped by function in Home Assistant where possible. The optional technician code sensors are pinned at the top, followed by configuration entities, switches, writable values, live measurements and diagnostics.

Entity names and languages

Entity names come from the integration's translation files and follow the language configured in Home Assistant: an English installation shows English names, a German one shows the German names the integration has always used. Heating circuits and zone rooms share one name per measurement and fill in their circuit letter or zone/room number, for example Heating circuit A flow temperature and Zone 1 room 2 temperature.

Changing the Home Assistant language changes the displayed names only. Entity IDs and unique IDs stay exactly as they are, so dashboards, automations and long-term statistics keep working. An entity created after a language change derives its entity ID from the name in that language, as with every Home Assistant integration.


Sensors

Runtime diagnostics

Entity State Attributes Category
IDM Heatpump API version Installed idm-heatpump-api version integration_version, modbus_connection_version, tmodbus_version, home_assistant_version, python_version Diagnostic

This sensor remains available even if heat-pump polling fails, making it useful when collecting information for a bug report. The direct socket runtime is identified by the modbus_connection_version and tmodbus_version attributes.

Technician-level access codes

When enabled in the integration options, two additional sensors expose the current access codes for Fachmann Ebene 1 and Fachmann Ebene 2. They update once per minute, are placed at the top of the IDM device entity list and are not Modbus registers.

The option is disabled by default. Treat the values as sensitive: limit access to their dashboard cards and never publish them in screenshots, logs or support requests. See Configuration for setup and security guidance. The calculation method is deliberately not documented.

System Temperatures & Pressures

Entity Register Unit
Outdoor temperature 1000 °C
Average outdoor temperature 1002 °C
Storage tank temperature 1008 °C
Cold storage temperature 1010 °C
DHW temperature bottom 1012 °C
DHW temperature top 1014 °C
HP flow temperature 1050 °C
HP return temperature 1052 °C
HGL flow temperature 1054 °C
Heat source inlet/outlet 1056/1058 °C
Air intake temperatures 1060/1064 °C
Air heat exchanger temp 1062 °C
Entity Register Unit
Heat sink return temp (B124) 1068 °C
Heat sink flow temp (B125) 1070 °C
Heat sink flow rate (B2) 1072 l/min
Heat sink charging pump signal (M73) 1074 %

Compressors & Pumps

Entity Register
Compressor status 1–4 1100–1103
Charging pump status (M73) 1104
Brine pump status (M16) 1105
Heat source pump status (M15) 1106
ISC cold storage pump (M84) 1108
ISC recooling pump (M17) 1109
Circulation pump (M64) 1118

Energy & Power

Entity Register Unit
Energy heating 1748 kWh
Energy total 1750 kWh
Energy cooling 1752 kWh
Energy DHW 1754 kWh
Energy defrost 1756 kWh
Energy passive cooling 1758 kWh
Energy solar 1760 kWh
Energy electric heater 1762 kWh
Current power draw 1790 kW
Current power solar 1792 kW
Power consumption HP 4122 kW
Thermal power 4126 kW

PV / Energy Management

Entity Register Datatype Unit
PV surplus 74 FLOAT, word-swapped kW
Electric heater power 76 FLOAT, word-swapped kW
PV production 78 FLOAT, word-swapped kW
House consumption 82 FLOAT, word-swapped kW
Battery discharge 84 FLOAT, word-swapped kW
Battery SOC 86 signed INT16, one register %

Battery SOC accepts 0–100; -1 means that no battery value is available. Treating address 86 like the surrounding two-register FLOAT values produces an implausible result.

PV surplus operation (derived diagnostic)

The Navigator controllers do not expose an internal "PV surplus charging active" state register — the whole PV block (74–88) consists of GLT measurement inputs written by an external energy manager. The integration therefore provides the derived diagnostic binary sensor PV-Überschussbetrieb (calculated_pv_surplus_operation, issue #353). It is on when both halves of the state are true:

  1. Surplus is currently signalled to the controller: pv_surplus (register
    1. ≥ 0.05 kW or the SG-Ready signal smart_grid_status (register 90) reports Supergreen.
  2. The heat pump is actually drawing electrical power: power_consumption_hp (register 4122) ≥ 0.05 kW, falling back to hp_operating_mode (register 1090) ≠ Off on installations without the Nav 10 power measurement.

The entity is only created when at least one source per half exists on the detected installation; thresholds and the currently active sources are exposed as attributes. Note for installations where the surplus is measured behind the heat pump feeder: pv_surplus collapses toward zero while the heat pump absorbs the surplus it is charged with — there the SG-Ready signal (or pv_production) remains the reliable indicator, and the SG-Ready source keeps the diagnostic meaningful.

Solar Thermal

Entity Register Unit
Solar collector temperature 1850 °C
Solar return temperature 1852 °C
Solar charging temperature 1854 °C
Solar WQ reference / pool temp 1857 °C

These entities only exist while the solar thermal system option is enabled (default). Plants without collectors can switch the option off in the integration settings: the solar registers leave the poll and the empty Solaranlage device group disappears after a reload. Re-enabling it restores the entities with their previous IDs.

The integration also notices on its own: when every solar register reports "not configured" for a full day, a repair suggestion offers to switch the module off (or keep it, which dismisses that round of the suggestion).

ISC (Intelligent Surface Cooling)

Entity Register Unit
ISC charging temp cooling 1870 °C
ISC recooling temperature 1872 °C

Booster A/B (2nd heat generator)

Entity Register
Booster fault 4001
Booster interlock 4002
Booster A: source inlet/outlet, storage, flow, return temps 4010–4018
Booster A: source pump, charging pump, compressor 4020–4022
Booster B: equivalent registers 4040–4052

Cascade (multi-heat pump)

Entity Register
Cascade available heating/cooling/DHW 1147–1149
Cascade running heating/cooling/DHW 1150–1152
Cascade requested temps (heat/cool/DHW) 1200–1204
Cascade average flow temps 1206–1210
Cascade min/max power 1220–1225
Cascade bivalence settings 1226–1231

Heating Circuit Sensors (per circuit A–G)

Entity Description
hc_{x}_flow_temp Flow temperature
hc_{x}_room_temp Room temperature
hc_{x}_setpoint_flow_temp Current setpoint flow temp
hc_{x}_active_mode Active operating mode

Calculated Sensors

These sensors are derived from register values of the same snapshot. Nothing is estimated: every operand is a decoded register value, and the sensor reports no value rather than a guess when its sources are not meaningful.

Entity Description
calculated_hp_temperature_delta Heat pump spread (flow minus return)
calculated_heat_source_temperature_delta Heat source spread (inlet minus outlet)
calculated_dhw_setpoint_deviation DHW actual minus setpoint
calculated_cop Momentary COP (thermal power / electrical power)
calculated_hc_{x}_flow_deviation Flow deviation per heating circuit

Flow deviation per heating circuit compares the measured flow temperature of a circuit (hc_{x}_flow_temp) with the flow setpoint the controller currently requests for that circuit (hc_{x}_setpoint_flow_temp):

  • Positive — the circuit runs above the requested setpoint (overshoot, typically a heating curve set too high or a mixer that opens too far).
  • Around zero — the circuit follows its heating curve.
  • Negative — the circuit does not reach its setpoint (undersized heat source, high load, defrost, or a limiting setting).

The sensor becomes unavailable while the circuit is idle (the controller reports 0.0) and on circuits that are not configured (-1.0). That is intentional: a deviation calculated from a placeholder value would be meaningless. The entity itself is created as soon as both registers exist, so a Home Assistant restart during standby does not make it disappear.

This deliberately compares values within one heating circuit. A deviation at heat-pump level needs an unambiguous register for the flow setpoint the heat pump itself requests and remains an open roadmap item.

Optional Web Supplement Sensors

When Web supplement data is enabled and a local Navigator web PIN is configured, the integration adds read-only diagnostic sensors from the local web API. These sensors are additive; Modbus entities remain the primary data source.

Typical web-only sensors include:

Entity Description
Navigator version (Web) Detected Navigator generation, for example Navigator 2.0 or Navigator 10
Software version (Web) Controller software version reported by the local web interface
Heat pump model (Web) Heat pump model/type reported by the web interface
myIDM ID (Web) Compact myIDM ID derived from the local web account value before @
Info system notification count (Web) Number of active Navigator 10 infosystem notifications
Anforderungsgrund (Web) Navigator 10 only: the controller's own demand reason (issue #353)

Demand reason from the web interface (Navigator 10 only)

The Navigator controllers expose no internal PV-mode state register over Modbus, but the Navigator 10 web interface renders the display's "Anforderungsgrund" — including PV — from a bitmask in the WebSocket home/detail frame. With the web supplement active on a Navigator 10, the integration evaluates that frame every web poll and exposes:

  • Anforderungsgrund (Web) (web_demand_reason): the human-readable demand reason, worded like the controller's own display — for example PV, Heizkreis A, Zeitprogramm, Mehrere Anforderungen, Keine Anforderung or Aus — with the raw operationMode/info values of every contributing widget as attributes.
  • PV-Anforderungsgrund (Web) (web_demand_reason_pv): binary sensor that is on while the controller itself reports PV as its demand reason (bit 32), in the heating as well as the domestic-hot-water reason table.

This is the device-reported counterpart of the derived calculated_pv_surplus_operation diagnostic: the web entity reflects what the controller decided, the Modbus entity works without a web PIN. On Navigator 2.0 (different, PHP-based web interface) only the derived Modbus entity is available.

With the device hierarchy enabled, all PV entities — the PV registers (pv_surplus, pv_production, pv_target_value), smart_grid_status, the derived diagnostic and the two web entities — share the dedicated Photovoltaik subdevice instead of the main device. | Info system notifications (Web) | Summary of active Navigator 10 infosystem notifications | | Hot gas temperature (Web) | Web-only diagnostic temperature when available | | Evaporator pressure (Web) | Web-only refrigerant pressure when available | | Board temperature (Web) | Controller board temperature when available | | Current/projected heating / cooling / hot water power (Web) | The controller's current or projected thermal power for that mode |

"Momentane/prognostizierte Leistung" is not a live measurement

The Navigator labels these three values mom./prog. Leistung Heizen, mom./prog. Leistung Kühlen and mom./prog. Leistung Vorrang — momentane bzw. prognostizierte power. They report what the controller currently expects to deliver for that mode, so a non-zero value while heating or cooling is switched off is normal and not a fault. A value that changes while the compressor is idle is the controller re-planning, not the heat pump running.

For actual electrical draw, use Wärmepumpe Aufnahmeleistung / current_electrical_power instead.

If a web value duplicates an existing Modbus entity, the web entity is skipped. This prevents duplicate dashboard values and keeps Modbus as the authoritative source for register-backed data.

Only values returned by the current local web snapshot are available. Optional Navigator 10 infosystem notifications are read independently; if that optional request fails, the other valid web values remain available. See Local Navigator Web Interface for protocol and web-only-mode details.

Internal Message Sensor

The internal_message diagnostic sensor exposes the active IDM internal message as readable text, for example a code plus message description. It also provides the structured attributes message_code and message_text so automations can react either to the numeric code or to the human-readable description.


Binary Sensors

Entity Register Description
hp_sum_alarm 1099 Sum alarm (total fault)
compressor_status_1 1100 Compressor 1 running
compressor_status_2 1101 Compressor 2 running
compressor_status_3 1102 Compressor 3 running
compressor_status_4 1103 Compressor 4 running
heating_demand 1091 Heating demand active
cooling_demand 1092 Cooling demand active
dhw_demand 1093 DHW demand active
calculated_pv_surplus_operation derived Heat pump running on signalled PV surplus (see PV / Energy Management)

The 1.x family reports its live demand status through the official coil block (ma_de_812049 Rev.1), read with Modbus function code 01. These entities exist only on a detected Navigator 1.0/1.7:

Entity Coil Description
demand_heating_17 c3001 Anforderung Heizen — heating demand active
demand_cooling_17 c3002 Anforderung Kühlen — cooling demand active
demand_dhw_17 c3003 Anforderung Vorrangladung — DHW priority charge demand active

The acknowledge coil c3000 has no sensor: it backs the Acknowledge errors button (see Services), which sends a single-coil write (function code 05) on the 1.x family and a holding-register write on the shared Navigator 2.0/10 family.


Numbers (Writable)

DHW

Entity Register Range
dhw_setpoint 1032 35–95 °C
dhw_charge_on_temp 1033 30–50 °C
dhw_charge_off_temp 1034 46–53 °C

Heating Circuit (per circuit)

Entity Register Range
hc_{x}_room_setpoint_heat_normal 1401+ 15–30 °C
hc_{x}_room_setpoint_heat_eco 1415+ 10–25 °C
hc_{x}_room_setpoint_cool_normal 1457+ 15–30 °C
hc_{x}_room_setpoint_cool_eco 1471+ 15–30 °C
hc_{x}_heating_curve 1429+ 0.1–3.5 (step 0.1, expert)
hc_{x}_heating_limit 1442+ 0–50 °C
hc_{x}_cooling_limit 1484+ 0–36 °C
hc_{x}_parallel_shift 1505+ 0–30 (expert)
hc_{x}_ext_room_temp 1650+ 15–30 °C

Entries marked expert shape the heating curve of the whole installation and write to EEPROM registers. They are created disabled on new installations — enable them under Settings -> Devices & Services -> IDM Heatpump -> Entities. Existing installations keep whatever state the entity already had. hc_{x}_setpoint_flow_constant and hc_{x}_setpoint_flow_cooling are expert entities for the same reason.

hc_{x}_ext_room_temp can be controlled manually like any other number entity or filled automatically by optional room temperature forwarding. When forwarding is enabled, selected Home Assistant temperature sensors are written to these external room temperature registers on state changes and periodically with a 300 second default interval.

GLT / External Control

Entity Register
ext_outdoor_temp 1690
ext_humidity 1692
ext_demand_temp_heating 1694
ext_demand_temp_cooling 1695
glt_temp_demand_heating 1696
glt_temp_demand_cooling 1698
glt_heat_storage_temp 1716
glt_cold_storage_temp 1718
glt_dhw_temp_bottom 1720
glt_dhw_temp_top 1722

Power Limits

These registers are model-dependent and disabled by default. Do not use them for legal or contractual load control until the behavior is verified for your exact hardware and firmware.

Entity Register
power_limit_hp 4108
power_limit_cascade 4112

Selects

Entity Register Options
system_mode 1005 Standby, Automatic, Absent, Hot Water Only, Heating/Cooling Only
hc_{x}_mode 1393+ Off, Time Program, Normal, Eco, Manual Heat, Manual Cool
solar_mode 1856 Off, Automatic, Manual
isc_mode 1874 Off, Automatic, Manual

Switches

Entity Register Description
demand_heating 1710 External heating demand
demand_cooling 1711 External cooling demand
demand_dhw_charging 1712 External DHW charge demand
demand_onetime_dhw 1713 One-time DHW charge

Climate

Climate entities combine a mode selector and a temperature target into the standard Home Assistant thermostat card. Two types are created:

Heating Circuit Climate (climate.hc_x)

One per configured heating circuit (A–G). Controls the circuit operating mode and its normal (day) room setpoint temperature.

Control Register Notes
HVAC mode hc_{x}_mode Off, Time Program, Normal, Eco, Manual Heat, Manual Cool
Target temperature hc_{x}_room_setpoint_heat_normal Range depends on circuit config
Current temperature hc_{x}_room_temp Room temperature sensor
HVAC action hp_operating_mode Derives HEATING/COOLING/IDLE from heat pump status

Zone Room Climate (climate.zm{z}_room{r})

One per configured room in each zone module. Controls the room operating mode and its temperature setpoint.

Control Register Notes
HVAC mode zm{z}_room{r}_mode Off, Time Program, Normal, Eco, Manual Heat, Manual Cool
Target temperature zm{z}_room{r}_setpoint Range depends on zone config
Current temperature zm{z}_room{r}_temp Room temperature sensor
HVAC action hp_operating_mode Derives HEATING/COOLING/IDLE from heat pump status

Writes go through the coordinator's centralized write path with optimistic updates and translated error messages.


Water Heater

A single water heater entity (water_heater.idm_heatpump) provides DHW target temperature control with current temperature readback. Created when the target register (dhw_setpoint) and a DHW tank temperature register exist — the shared family reports dhw_temp_top, the Navigator 1.0/1.7 map offers dhw_temp (tank temperature, address 1012) instead.

Property Register Notes
Current temperature dhw_temp_top / dhw_temp Shared family: top DHW tank temperature; Navigator 1.x: dhw_temp tank temperature
Target temperature dhw_setpoint Writable setpoint (shared family 35–95 °C typical; Navigator 1.x 35–60 °C, float pair 2152–2153)
Operation mode N/A Always "Heat Pump"

Uses the same coordinator write path as climate entities.


Button

A single button (button.idm_heatpump_acknowledge_errors) acknowledges active errors on the heat pump by writing 1 to the error_acknowledge write-only register. Always available so automations can trigger on alarm state changes.


Zone Modules

For each enabled zone module (up to 10), room-level entities are created:

Entity per room Description
zm{z}_room{r}_temp Room temperature
zm{z}_room{r}_setpoint Room setpoint (writable)
zm{z}_room{r}_humidity Room humidity
zm{z}_room{r}_mode Room operating mode
zm{z}_room{r}_relay Relay status (binary_sensor: on/off)

Plus per-zone: zm{z}_mode_heat_cool, zm{z}_dehumidification

Code copied