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.1.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.1-py3-none-any.whl (26.1 kB view details)

Uploaded Python 3

File details

Details for the file trovis_modbus-1.0.1.tar.gz.

File metadata

  • Download URL: trovis_modbus-1.0.1.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.1.tar.gz
Algorithm Hash digest
SHA256 c19725b7c6ece72d6cb5695d4c2b969c6ced2b4d0700f926768015f16e500497
MD5 fc9b06ed9e023d0e963bf719c3985feb
BLAKE2b-256 1f628bb6d9e668a5b7a5b68f1e637abfd0492038b9a6d20e09d272340e7343a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for trovis_modbus-1.0.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: trovis_modbus-1.0.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e8fa66ed8568c283fc9b6f8547bb256acce5dfa123a31241874191ce0b81ab53
MD5 7bf68cb72f14a3749d681d217a21706c
BLAKE2b-256 071d8d7c4289b2675a62d19b832c245d20c4a2cb4b4fc00a99fbcb58fbebf89c

See more details on using hashes here.

Provenance

The following attestation bundles were made for trovis_modbus-1.0.1-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