Skip to main content

python-stiebel-eltron

Python API for interacting with the STIEBEL ELTRON ISG web gateway via modbus for controlling integral ventilation units and heat pumps.

This module is based on the STIEBEL ELTRON modbus user manual, but is not official, developed, supported or endorsed by Stiebel Eltron GmbH & Co. KG. For questions and other inquiries, use the issue tracker in this repo please.

Requirements

You need to have Python installed.

  • STIEBEL ELTRON Internet-Service Gateway ISG WEB with enabled modbus module
    • You can call the STIEBEL ELTRON support, if your ISG does not have the modbus module enabled. They upgraded mine for free.
  • STIEBEL ELTRON heatpumpt (compatible). Successfully used devices:
    • LWZ504e
    • LWZ304
    • Tecalor THZ 7.1 IBC Topline with ISG Connect (reported as LWZ_R290, WPM register map). Ventilation registers (WpmVentilationValues, WpmVentilationParameters) read only so far; writing the ventilation stages is untested
  • Network connection to the ISG WEB

Installation

The package is available in the Python Package Index.

Base install:

    $ pip install pystiebeleltron

Install with the optional tmodbus backend used in the example below:

    $ pip install "pystiebeleltron[tmodbus]"

Example usage of the module

The examples/ directory contains runnable examples for WPM and LWZ heat pumps. They use the optional tmodbus backend, so install pystiebeleltron[tmodbus] first.

The API takes a ModbusUnit. You own the connection: build it, hand a unit to the API, and close it when done. Building it performs no I/O — the first read establishes the link, and a link that drops later is re-established on the next request, over the same unit handle. Each register block is a component exposed on the API, and values are read as typed attributes (None when the register is unavailable).

Pass the IP address of the ISG gateway to the selected example:

./examples/wpm-example.py 192.168.1.10
./examples/lwz-example.py 192.168.1.10

The WPM example also demonstrates writing and restoring the DHW comfort temperature. The LWZ example reads room and outside temperatures and the current operating mode.

For a read-only WPM library check outside Home Assistant, use examples/wpm-readonly-check.py in a separate virtual environment. Select --family wpm, wpm3 or wpm3i, and pass --confirm-read-only. It performs one poll by default (--polls accepts at most three); --raw exercises raw reads without printing register values. The output contains package versions, a retry-module fingerprint and request outcomes, excluding host addresses and register values. The wrapper permits only input and holding reads and rejects all write operations. This checks the library, not Home Assistant compatibility.

WPM API polls retry an illegal-address input or holding read at most once from a lower start answered directly in the same register space and poll, when the expanded read fits within 125 registers. Healthy reads and writes are unchanged; LWZ does not opt in. A rejected block costs one failed original request and at most one additional read on every poll. A successful retry does not establish that the target registers exist; unavailable words still decode as None.

Errors a caller sees

  • get_controller_model raises StiebelEltronModbusError when the identification register cannot be read or comes back empty, and UnknownControllerModelError (with .model_id) for an id this library does not know.
  • async_update and async_read_raw raise the modbus_connection errors unchanged: ModbusError and its subclasses such as ModbusConnectionError, ModbusTimeoutError or an IllegalDataAddressError naming the refused block. The one exception is an optional block a controller refuses with illegal data address before it ever answered it; that block is dropped and the poll goes on, as described above.
  • write raises ValueError from the field's validator for a value outside its documented range, AttributeError for an unknown or read-only field, and the modbus_connection errors for a failed transfer.

License

python-stiebel-eltron is licensed under MIT, for more details check LICENSE.

Metadata

Release files for pystiebeleltron 0.9.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pystiebeleltron 0.9.3
File Size Uploaded Provenance Actions
pystiebeleltron-0.9.3.tar.gz 21.6 kB With provenance Details for pystiebeleltron-0.9.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pystiebeleltron 0.9.3
File Interpreter ABI Platform Actions
pystiebeleltron-0.9.3-py3-none-any.whl Python 3 none any Details for pystiebeleltron-0.9.3-py3-none-any.whl

Total release size: 48.1 kB

Release files / pystiebeleltron-0.9.3.tar.gz

Download URL pystiebeleltron-0.9.3.tar.gz
Size 21.6 kB
Tags Source
SHA-256 checksum
How to use checksums
e9f81badce38f9765f371e133f46c635346cf7b8e29a0ddb3db9f812de5f63d2
BLAKE2b-256 checksum
How to use checksums
10b49d74eee0821cb686ef75dd0d49c339ae22ccc77f79c41dd31039e106ec48
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Release files / pystiebeleltron-0.9.3-py3-none-any.whl

Download URL pystiebeleltron-0.9.3-py3-none-any.whl
Size 26.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7e9835d994491f88ef9ea235c953f28b6a9ab3a2eb6bf8ca2f63a00d2dd6dc46
BLAKE2b-256 checksum
How to use checksums
de98593fbe9c1846cbce3115a06646251b9412af820f832dbc62a9ff617be245
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

Security for pystiebeleltron 0.9.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for pystiebeleltron-0.9.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.9.3 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page