Read a Samson Trovis 557x heating controller over Modbus.
Project description
trovis-modbus
[!IMPORTANT] Additional documentation and instructions for contributors are available in the project wiki.
trovis-modbus is an asynchronous Python library for reading and writing Samson TROVIS 557x heating controllers over Modbus.
The library is backend-neutral: it consumes a modbus_connection.ModbusUnit and does not create or own the transport itself. Applications can therefore use tmodbus, pymodbus, or another backend supported by modbus-connection.
The Home Assistant integration using this library is maintained separately in trovis-modbus-hass.
Features
- Object-oriented access to controller subsystems
- Automatic controller-model probe
- Automatic detection of connected physical sensors
- Model-aware heating-circuit support
- Model-specific readable register and coil ranges
- Grouped and range-aware Modbus reads
- Maximum read span of 50 registers or coils per request
- Read and write support for registers and coils
- TROVIS write-access handling
- Field-specific write validation
- Neutral metadata for units, limits, steps, enums, and writable flags
- TROVIS-specific invalid-value handling
Supported model profiles
The current implementation uses two conservative manufacturer-derived profiles:
| Models | Heating circuits | Register and coil profile |
|---|---|---|
| TROVIS 5573, 5573-1, 5575, 5576 | 2 | TROVIS 5573 Rev. 2.54 |
| TROVIS 5578, 5578-E, 5579 | 3 | TROVIS 5578 Rev. 2.62 final |
Known gaps and manufacturer block boundaries are preserved. Reads are never planned across those boundaries.
Device structure
A Trovis557x object exposes the following subsystems:
| Attribute | Description |
|---|---|
info |
Model, firmware, hardware version, and serial information |
controller |
Controller-wide status and settings |
clock |
Controller date and time |
sensors |
Physical temperature and remote-control inputs |
heating_circuit_1 |
Heating circuit Rk1 |
heating_circuit_2 |
Heating circuit Rk2 |
heating_circuit_3 |
Heating circuit Rk3 on supported models |
hot_water |
Domestic-hot-water circuit Rk4 |
device.heating_circuits contains only the heating circuits supported by the detected model.
Basic usage
Install the library together with the desired modbus-connection backend.
Example using tmodbus and transparent RTU over TCP:
import asyncio
from modbus_connection.tmodbus import connect_tcp
from trovis_modbus import Trovis557x
async def main() -> None:
connection = await connect_tcp(
"192.168.1.50",
port=502,
framer="rtu",
)
try:
unit = connection.for_unit(246)
probe = await Trovis557x.async_probe(unit)
device = Trovis557x(
unit,
model=probe.model,
detected_sensors=probe.detected_sensors,
)
await device.async_update()
print("Model:", device.model)
print("Detected sensors:", sorted(device.detected_sensors))
print("Outside temperature AF1:", device.sensors.af1)
print(
"Rk1 day setpoint:",
device.heating_circuit_1.room_setpoint_day,
)
await device.async_enable_writing()
try:
await device.heating_circuit_1.set_room_setpoint_day(21.5)
finally:
await device.async_disable_writing()
finally:
await connection.close()
asyncio.run(main())
For native Modbus TCP with MBAP framing, use:
connection = await connect_tcp(
"192.168.1.50",
port=502,
framer="socket",
)
Serial transports are opened through the selected backend and may include local serial ports or supported serial URLs.
Metadata and writes
The library is the source of truth for neutral TROVIS datapoint metadata:
- register or coil reference
- value type
- scaling
- invalid values
- unit
- minimum and maximum
- step
- enum options
- writable state
Writes use:
await component.async_write_datapoint(field, value)
The library refreshes the TROVIS write-access code before the write, applies field validation, and performs required TROVIS-specific preconditions such as releasing an Ebene override coil.
Address conventions
Catalog definitions use manufacturer references:
- holding registers such as
HR40145 - coils such as
CL137
Conversion to zero-based Modbus addresses is centralized in the library.
Command-line query tool
The repository contains script/query.py for querying a controller without Home Assistant.
Install the CLI backend:
python -m pip install -e ".[cli]"
Examples:
python script/query.py tcp 192.168.1.50 --unit 246
python script/query.py serial /dev/ttyUSB0 --unit 246
Use --framer rtu for transparent RTU over TCP or --framer socket for native Modbus TCP.
Development and tests
Install the project in editable mode and run the test suite:
python -m pip install -e .
uv sync
uv run pytest
uvx prek run --all-files
If uv is not available, alternatively run:
python -m pip install -e .
python -m pip install pytest pytest-asyncio
python -m compileall src tests
python -m pytest
The test suite uses the in-memory mock backend provided by modbus-connection; no physical controller or external Modbus server is required for the normal unit tests.
The current release 1.0.1 was tested with modbus-connection 3.2.0 and 3.3.0.
Please read the contributor instructions before opening a pull request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file trovis_modbus-1.0.2.tar.gz.
File metadata
- Download URL: trovis_modbus-1.0.2.tar.gz
- Upload date:
- Size: 39.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
589428ffced04e0a33f9e044f9046b501fa0f2c121b98f57b49e918ff0ef31f3
|
|
| MD5 |
dfdbde287be3b83b48c8a767ea1717fe
|
|
| BLAKE2b-256 |
dcd9e11917c174f7717b655f3bfaeacf87a71b56c660f9f5cec31457a2bfd2ed
|
Provenance
The following attestation bundles were made for trovis_modbus-1.0.2.tar.gz:
Publisher:
publish.yml on Tom-Bom-badil/trovis-modbus
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trovis_modbus-1.0.2.tar.gz -
Subject digest:
589428ffced04e0a33f9e044f9046b501fa0f2c121b98f57b49e918ff0ef31f3 - Sigstore transparency entry: 2062272571
- Sigstore integration time:
-
Permalink:
Tom-Bom-badil/trovis-modbus@99977345cba1bb584c54470beb0a5844fe829e21 -
Branch / Tag:
refs/tags/1.0.2 - Owner: https://github.com/Tom-Bom-badil
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@99977345cba1bb584c54470beb0a5844fe829e21 -
Trigger Event:
release
-
Statement type:
File details
Details for the file trovis_modbus-1.0.2-py3-none-any.whl.
File metadata
- Download URL: trovis_modbus-1.0.2-py3-none-any.whl
- Upload date:
- Size: 26.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
04064bba2a5df4b0f41f7b96da27ca7ea4b4d97b19e080d3a34e8c0ccd682996
|
|
| MD5 |
21ff95cdbda5befbd4a59e9c8908cdf5
|
|
| BLAKE2b-256 |
2d03ce71086b0f70e9151cc5662b5a8f8da8a38a388a465c866e6f93ea3f9be1
|
Provenance
The following attestation bundles were made for trovis_modbus-1.0.2-py3-none-any.whl:
Publisher:
publish.yml on Tom-Bom-badil/trovis-modbus
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
trovis_modbus-1.0.2-py3-none-any.whl -
Subject digest:
04064bba2a5df4b0f41f7b96da27ca7ea4b4d97b19e080d3a34e8c0ccd682996 - Sigstore transparency entry: 2062272606
- Sigstore integration time:
-
Permalink:
Tom-Bom-badil/trovis-modbus@99977345cba1bb584c54470beb0a5844fe829e21 -
Branch / Tag:
refs/tags/1.0.2 - Owner: https://github.com/Tom-Bom-badil
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@99977345cba1bb584c54470beb0a5844fe829e21 -
Trigger Event:
release
-
Statement type: