Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trovis_modbus-1.0.2.tar.gz (39.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

trovis_modbus-1.0.2-py3-none-any.whl (26.1 kB view details)

Uploaded Python 3

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

Hashes for trovis_modbus-1.0.2.tar.gz
Algorithm Hash digest
SHA256 589428ffced04e0a33f9e044f9046b501fa0f2c121b98f57b49e918ff0ef31f3
MD5 dfdbde287be3b83b48c8a767ea1717fe
BLAKE2b-256 dcd9e11917c174f7717b655f3bfaeacf87a71b56c660f9f5cec31457a2bfd2ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for trovis_modbus-1.0.2.tar.gz:

Publisher: publish.yml on Tom-Bom-badil/trovis-modbus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for trovis_modbus-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 04064bba2a5df4b0f41f7b96da27ca7ea4b4d97b19e080d3a34e8c0ccd682996
MD5 21ff95cdbda5befbd4a59e9c8908cdf5
BLAKE2b-256 2d03ce71086b0f70e9151cc5662b5a8f8da8a38a388a465c866e6f93ea3f9be1

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page