Home Assistant Modbus TCP
YAML package to integrate Lambda EU-L series air/water heat pumps into Home Assistant via native Modbus TCP.
This package was developed and validated on the Lambda EU20L, but the Modbus register map is identical across the entire Lambda EU-L series: EU08L, EU13L, EU15L and EU20L.
Only the physical heating capacity differs — the register block layout, scaling, data types and enumerations are shared between all models. Renaming the Modbus hub name (and optionally the EU20L … sensor name prefixes) is all that is needed to run the same package on a different EU-L model.
Based on the official Lambda Modbus specification dated 2025-02-13.
- Full register coverage of 6 Lambda modules — Ambient, E-Manager, Heat Pump 1, Boiler 1, Buffer 1, Heating Circuit 1
- 61 Modbus sensors with correct
device_class,state_class,unit_of_measurement,scaleandprecision - 8 additional undocumented register sensors (hot gas, subcooling, suction gas, condensation, evaporation, expansion valve opening angle, VdA max rating, EqM rating) — identified by Modbus scan and matched against the Lambda control panel
- 9 state-mapping template sensors rendering the numeric state registers as plain German panel text plus matching MDI icons
- 4 calculated template sensors: SCOP, flow/return ΔT, calculated heating power (
flow × ΔT × 1.163), and the deviation between reported and calculated heating power - 3 climate entities exposing the heating curve offset, domestic hot water thermostat and room thermostat as regular HA climate tiles
- Energy Dashboard ready — accumulated energy counters (registers 1020 and 1022) use
total_increasingand are already scaled to kWh - Separate optional helpers (
helpers.yaml) for compressor speed in rpm, IMP NMT MAX II circulation pump control percentage, and a collective fault binary sensor - Ready-to-use Lovelace dashboard card with 6 gauges, heat pump state badge and an SVG buffer-tank visualization
A few other Lambda heat pump projects already exist for Home Assistant (see Related Projects at the bottom). This package is based on the initial work of @RalfWinter, includes the ideas and suggestions of @thecem and was built with the following goals in mind:
- Pure YAML, no custom component. Uses the built-in Home Assistant Modbus integration — no HACS dependency, no additional Python code, no risk of breakage on Home Assistant updates, works on every current HA version. Pure YAML also makes customization straightforward: adding a second heating circuit, an additional buffer tank or a second boiler is a copy-paste of the existing register block with adjusted register addresses.
- Undocumented registers 1025–1032 covered: hot gas, subcooling, suction gas, condensation, evaporation, expansion valve opening angle, VdA max rating and EqM rating.
- Complete HA metadata on every sensor.
device_class,state_class,unit_of_measurement,scaleandprecisionare set for every entity, so long-term statistics, Energy Dashboard integration and history graphs work out of the box, without any manual configuration in the HA UI. - Unique IDs on every entity. This package also assigns a
unique_idto every entity — withoutunique_idHome Assistant does not allow entities to be customized from the UI (changes such as renaming, changing units or icons etc. are not permitted then), so unique IDs are essential for a complete YAML definition to provide a seamless user experience. - State mapping via dict, not list index. All state-register decoders use
a
key → labeldict (with a parallelkey → mdi:icondict) instead of indexing into an inline list. List-based decoders silently shift if a state is added, removed or omitted by mistake — every label after the gap then shows the wrong value. The dict approach binds each numeric state to its label by key, falls back cleanly toUnknownfor unmapped values, lets every state carry its own MDI icon, is less redundant and easier to maintain (one line per state, no positional bookkeeping), and is trivial to translate by editing the dict values directly. - Uniform key order in every sensor block. All sensor definitions list
their keys in the same order (
name,unique_id,address,data_type,scale,precision,device_class,state_class,unit_of_measurement), so blocks are easy to diff against each other and the YAML stays reviewable when copy-pasted to add a second heating circuit or buffer tank. - Units are rescaled at the Modbus layer, not stacked on top via templates. Accumulated counters are exposed directly in kWh (instead of seven-digit Wh values) and the inverter power in kW. Downstream systems (evcc, Power Flow Card, Energy Dashboard) get sane values without needing additional wrapper templates.
- Climate entities for RW registers. Heating curve offset, domestic hot water thermostat and room thermostat are exposed as native HA climate tiles — not just read-only sensors.
- Dashboard included. SVG buffer-tank visualization and gauges ship as ready-to-use Lovelace YAML — other projects are backend-only.
- Home Assistant (any current version with the built-in Modbus integration activated)
- A Lambda EU-L series heat pump with firmware that exposes the Modbus TCP interface
- A network connection between HA and the Lambda controller (Ethernet)
- Default Modbus TCP port: 502
Firmware note (V1.1.3): Owners with firmware V1.1.3 have reported that the word order of
int32registers has been changed. If your accumulated energy counters (1020, 1022) show nonsense values, addswap: wordto those sensor definitions. See the inline comment at the top oflambda_heatpump.yaml.
- Copy
lambda_heatpump.yaml(and optionallyhelpers.yaml) to/config/packages/ - Ensure packages are enabled in
configuration.yaml:homeassistant: packages: !include_dir_named packages
- Adjust the Lambda controller IP address in the YAML:
host: 192.168.2.6 # ← CHANGE: IP of your Lambda controller
- Optionally rename the Modbus hub name (
EU20L) and theEU20L …sensor name prefix if you run a different EU-L model - Restart Home Assistant
Language: Entity names, comments and template descriptions are in English. Panel-facing terminology (state mappings, climate entity names) is deliberately kept in German because the Lambda is primarily sold in German-speaking countries.
The file dashboard_card.yaml contains a ready-to-use Lovelace card with
gauges for heating power, electrical power consumption, COP, compressor speed,
heat-load-pump (HLP) control percentage and HLP flow rate. A custom
button-card renders the buffer tank as an SVG with live temperature readings.
Usage: Paste the contents of dashboard_card.yaml as a manual card (YAML)
in the dashboard editor.
Helper dependency: The gauges for compressor speed (rpm) and HLP control percentage reference template sensors that live in
helpers.yaml. Installhelpers.yamltogether with the dashboard card or remove those two gauges.
The following dashboard lists all entities plus long-term trends for COP/SCOP and PV surplus in one Dashboard view:
| HACS Card | Purpose | HACS Search |
|---|---|---|
| Vertical Stack In Card | Outer container without borders | vertical-stack-in-card |
| card-mod | CSS styling (remove borders, colors) | card-mod |
| button-card | SVG buffer-tank visualization | button-card |
Without these cards the dashboard card will not render correctly. The Modbus YAML itself works independently.
Eight additional registers exist in the 1025-1032 range that are not documented in the official Lambda Modbus specification. They were identified by a full Modbus scan and match many of the values visible on the Lambda control panel (at user level 2 or higher). Column "Panel Label" lists the corresponding German panel term so they can be cross-checked.
⚠️ Use at your own risk. No guarantee that the register assignments are correct on every firmware version. Lambda intends to keep them, though.
| Register | Sensor | Unit | Panel Label |
|---|---|---|---|
| 1025 | VdA Max Rating | % | VdA (Verdichteranlage Max. Rating) |
| 1026 | Hot Gas Temperature | °C | HG (Heißgas) |
| 1027 | Subcooling Temperature | °C | SC (Unterkühlung) |
| 1028 | Suction Gas Temperature | °C | SG (Sauggas) |
| 1029 | Condensation Temperature | °C | KD (Kondensation) |
| 1030 | Evaporation Temperature | °C | VD (Verdampfung) |
| 1031 | EqM Rating | % | EqM (Energiequellen-Modulation) |
| 1032 | Expansion Valve Opening Angle | % | ExV (Öffnungswinkel) |
Three modbus.climates entries expose RW registers as HA climate tiles so
that temperatures and offsets can be adjusted directly from the dashboard.
| Entity | Read Register | Write Register | Range |
|---|---|---|---|
| λ Heizkurve Solltemperatur Offset | 5050 | 5050 | −5.0 … +5.0 K |
| λ Brauchwasser-Thermostat | 2002 | 2050 | 45 … 54 °C |
| λ Raum-Thermostat | 5004 | 5051 | 15 … 35 °C |
See entities.md for a complete mapping of registers to entity names, units, device classes and state mappings.
helpers.yaml contains three template helpers that are commonly useful but
kept out of lambda_heatpump.yaml because they depend on specific hardware
choices or display preferences:
- Compressor speed (rpm) — derived from register 1010, assumes 5500 rpm = 100 %
- Heat charge pump (HLP) control % — piecewise-linear interpolation from register 1006 (heat sink volume flow) to the control percentage of an IMP NMT MAX II circulation pump. The calibration points were measured empirically and do not apply to other pump models.
Lambda Sammelstörung— abinary_sensorofdevice_class: problemthat turns on if any of the six Lambda error number registers reports a non-zero value.
The dashboard card references the first two helpers. If you do not use an IMP NMT MAX II pump, either remeasure the curve or remove the HLP gauge.
Template sensors for JAZ / MAZ / TAZ (yearly / monthly / daily COP) are
planned but not yet included because they depend on a longer chain of
utility_meter helpers and integration helpers that are not part of this
package. Contributions welcome.
If you want, you can recreate the native Lambda Sigmatek service panel as a
Lovelace view inside Home Assistant. Now that every relevant register is
exposed via Modbus, nearly all the values the physical control panel shows are
available as HA entities, so a pixel-accurate recreation using the
picture-elements dashboard card becomes feasible.
The screenshot below is the original Lambda Sigmatek HMI as it appears on the desktop client — the recreation aims to mirror it as closely as possible, with domestic hot water, buffer and heating circuit temperatures added to the same view so that all relevant data is available in one place:
Two files in this repo make this a drop-in addition:
service_panel_card.yaml— apicture-elementsLovelace card with all state labels positioned over the panel background imageimages/lambda_panel_background.png— the cleaned background screenshot of the original Lambda Sigmatek HMI
Installation:
- Copy
images/lambda_panel_background.pngto/config/www/so it is served at/local/lambda_panel_background.png - Create a new dashboard view of type Sidebar (or any view that gives the card enough horizontal space — the panel image has a fixed aspect ratio)
- Add a manual card and paste the contents of
service_panel_card.yaml
Fine-tuning: browser zoom level, screen resolution and font rendering all affect where each label lands on the background image. After installation you can edit the card directly in the dashboard UI and adjust the
left,topandfont-sizevalues of every element (e.g.,left: 50%,top: 29.2%,font-size: 2.2vmin) until everything lines up cleanly in your environment.
Optional: the YAML reserves a slot for an external flow-rate entity (e.g., from a circulation pump such as the IMP NMT MAX II, or the HLP regulation percentage). It is commented out at the bottom of the file — uncomment and point it at any flow-rate sensor you have available.
- Lambda Modbus specification (PDF) — official Lambda Wärmepumpen Modbus description and protocol, dated 2025-02-13
- Reverse-engineered register mappings for the undocumented registers 1025-1032 (thanks to @thecem) documented inline in
lambda_heatpump.yaml
Other Lambda heat pump projects for Home Assistant:
RalfWinter/lambda-heatpump-modbus-tcp-HA— early basic YAML packageGuidoJeuken-6512/lambda_heat_pumps— HACS custom componentfloriansProjects/lambda-heatpump-homeassistant— YAML package paired with Grafana dashboards and a Shelly Pro 3EM for cross-checked energy meteringroute662/Lambda-Heatpump— alternative HACS custom Python component





