Skip to main content

modbus-connection

A backend-neutral Modbus connection abstraction for Python.

The top-level modbus_connection package provides the abstract ModbusConnection class, the ModbusUnit Protocol, and a small exception hierarchy. Two interchangeable backends implement them: tmodbus and pymodbus. The bare install pulls neither.

One physical Modbus link addresses many units (1–247). Many consumers can share one serialized connection instead of each opening a competing socket. This package is the connection abstraction that makes that sharing possible while keeping the backend swappable.

Install

pip install "modbus-connection[tmodbus]"    # tmodbus backend
pip install "modbus-connection[pymodbus]"   # pymodbus backend

Example

Model a device once, then construct, update, read, and write it. The optional modbus_connection.model framework maps a device's registers and coils to typed attributes and reads the whole device in as few Modbus calls as possible.

import asyncio

from modbus_connection import ModbusTcpParams
from modbus_connection.model import Component, gauge, uint32, coil
from modbus_connection.tmodbus import ModbusConnection


class Meter(Component):
    voltage = gauge(0, 0.1, unit="V")  # scaled 16-bit register
    """Grid voltage."""

    current = gauge(1, 0.1, unit="A")
    """Grid current."""

    energy = uint32(2, unit="Wh")  # 32-bit over two registers
    """Lifetime energy."""

    relay = coil(0, writable=True)
    """Load relay."""


async def main() -> None:
    conn = ModbusConnection(ModbusTcpParams(host="192.168.1.50", port=502))
    try:
        meter = Meter(conn.for_unit(1))

        await meter.async_update()  # one pooled read per space
        print(meter.voltage, meter.current, meter.energy, meter.relay)

        await meter.write("relay", True)  # write a writable field
    finally:
        await conn.close()


asyncio.run(main())

Documentation

The website documents the rest: the other transports (UDP, serial, TLS), the field types and read planning, repeated sub-units, the Device base class for a device library, the SunSpec field types and model generator, the in-memory mock backend for tests, and the exception hierarchy.

https://home-assistant-libs.github.io/modbus-connection/

Develop

uv sync --extra tmodbus
uv run pytest

The suite runs both backends against an in-process tmodbus server over TCP, UDP, RTU-over-TCP, serial and TLS, so it covers real framing and error responses. Running the pymodbus client against the tmodbus server also checks the two implementations against each other. tests/conftest.py has the datastore and the server helpers.

Formatting and linting is ruff and type checking is mypy. CI enforces both. Run them locally with:

uv run mypy

Install the commit hook with prek so code is formatted on commit:

uvx prek install          # set up the git hook
uvx prek run --all-files  # format + lint everything now

Metadata

Release files for modbus-connection 4.12.7

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

Source distribution (sdist)

Source distribution for modbus-connection 4.12.7
File Size Uploaded Provenance Actions
modbus_connection-4.12.7.tar.gz 280.0 kB With provenance Details for modbus_connection-4.12.7.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for modbus-connection 4.12.7
File Interpreter ABI Platform Actions
modbus_connection-4.12.7-py3-none-any.whl Python 3 none any Details for modbus_connection-4.12.7-py3-none-any.whl

Total release size: 367.2 kB

Release files / modbus_connection-4.12.7.tar.gz

Download URL modbus_connection-4.12.7.tar.gz
Size 280.0 kB
Tags Source
SHA-256 checksum
How to use checksums
794556c938e7c34ae7edeb03cae46a5e777009163e7ca866625f091b398b805b
BLAKE2b-256 checksum
How to use checksums
1cac9a94683c293c13c7ff28eb8ce0bec4fe0c98c6d66cb00eeba237c9a7d665
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 26, 2026.

Transparency log

Release files / modbus_connection-4.12.7-py3-none-any.whl

Download URL modbus_connection-4.12.7-py3-none-any.whl
Size 87.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4c8897acdb65233b293b531aee0212fb574a526d7242ad7e3612fb577cff7bd6
BLAKE2b-256 checksum
How to use checksums
02e18176458ce5e908ee51532fcc175d669860c29e61841104a586bb03ea9da7
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 26, 2026.

Transparency log

Security for modbus-connection 4.12.7

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

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for modbus_connection-4.12.7.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 26, 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

4.12.7 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