Skip to main content

This is my custom aiomodbus client

Project description

DM-aiomodbus

Asynchronous Modbus clients for Python with TCP and Serial connection support.

Links


Section Description
Installation How to install the package
Usage How to use the package
Types Types and classes used in the package
Inner Client Methods List of methods available for inner client

Installation

Check if you have Python 3.8 or higher installed:

python3 --version

Install the package using pip:

pip install dm-aiomodbus

Usage

Windows Setup

import asyncio
import sys

if sys.platform == "win32":
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

Code Example

import asyncio
from dm_aiomodbus import (
   DMAioModbusSerialClient, DMAioModbusSerialClientConfig,
   DMAioModbusTcpClient, DMAioModbusTcpClientConfig,
   DMAioModbusInnerClient
)


async def main():
    # Initialize Serial client
    serial_modbus_client = DMAioModbusSerialClient(
        config=DMAioModbusSerialClientConfig(
            port="/dev/ttyUSB0",
            baudrate=9600,  # default value
            bytesize=8,  # default value
            stopbits=2,  # default value
            parity="N",  # default value
            disconnect_timeout_s=20,  # default value
            error_logging=False  # default value
        )
    )

    # Initialize TCP client
    tcp_modbus_client = DMAioModbusTcpClient(
        config=DMAioModbusTcpClientConfig(
            host="129.168.1.5",
            port=502,  # default value
            disconnect_timeout_s=20,  # default value
            error_logging=False  # default value
        )
    )

    # Read/write register(s)
    async def callback(client: DMAioModbusInnerClient):
        await client.write_register(256, 1)
        result = await client.read_holding_registers(256, count=3)
        print(result)

    # Execute callback
    await serial_modbus_client.execute(callback)
    # or
    await tcp_modbus_client.execute(callback)


if __name__ == "__main__":
    asyncio.run(main())

Note: All read/write methods should be called inside your callback function


Types

Serial Client Config

class DMAioModbusSerialClientConfig:
    port: str  # Serial port name. Example: "/dev/ttyS0" - Linux UART, "/dev/ttyUSB0" - linux USB, "COM1" - Windows USB
    baudrate: int = 9600  # Baudrate in bits per second
    bytesize: Literal[7, 8] = 8  # Number of data bits
    stopbits: Literal[1, 2] = 2  # Number of stop bits
    parity: Literal["N", "E", "O"] = "N"  # Parity mode. N - None, E - Even, O - Odd
    disconnect_timeout_s: int = 20  # Timeout in seconds
    error_logging: bool = False  # Enable error logging

TCP Client Config

class DMAioModbusTcpClientConfig:
    host: str  # IP address of the device
    port: int = 502  # Port number
    disconnect_timeout_s: int = 20  # Timeout in seconds
    error_logging: bool = False  # Enable error logging

Read Response

class DMAioModbusReadResponse:
    data: list[int]  # List of values read from device
    error: str  # Error message if operation failed

Note: This class has to_dict() method that returns a dictionary

Warning: If the operation failed, the data field will be an empty list

Write Response

class DMAioModbusWriteResponse:
    status: bool  # Boolean indicating success or failure
    error: str  # Error message if operation failed

Note: This class has to_dict() method that returns a dictionary

Warning: The status is considered True, if the operation did not result in an error.


Inner Client Methods

Method Arguments Response Type
read_coils - address int
- count int = 1
- slave int= 1
ReadResponse
read_discrete_inputs - address int
- count int = 1
- slave int= 1
ReadResponse
read_holding_registers - address int
- count int = 1
- slave int= 1
ReadResponse
read_input_registers - address int
- count int = 1
- slave int= 1
ReadResponse
write_coil - address int
- value int
- slave int = 1
WriteResponse
write_register - address int
- value int
- slave int = 1
WriteResponse
write_coils - address int
- values list[int] | int
- slave int= 1
WriteResponse
write_registers - address int
- values list[int] | int
- slave int= 1
WriteResponse

Parameters Description

  • address: Register address (single integer)
  • count: Number of items to read (default: 1)
  • value/values: Value(s) to write (single integer or list of integers)
  • slave: Slave unit address (default: 1)

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

dm_aiomodbus-0.3.4.tar.gz (6.7 kB view details)

Uploaded Source

Built Distribution

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

dm_aiomodbus-0.3.4-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

Details for the file dm_aiomodbus-0.3.4.tar.gz.

File metadata

  • Download URL: dm_aiomodbus-0.3.4.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for dm_aiomodbus-0.3.4.tar.gz
Algorithm Hash digest
SHA256 329a54d5641eb0ae78c58e62ca0b1931c0f279107cd8e15a26135f03e1c46997
MD5 6bb95810676f0b79164da78537176f81
BLAKE2b-256 afcd588f3d2d4ee089d87df2a7756e10423fc1f466b42ffebd0ebf7eba6bd427

See more details on using hashes here.

File details

Details for the file dm_aiomodbus-0.3.4-py3-none-any.whl.

File metadata

  • Download URL: dm_aiomodbus-0.3.4-py3-none-any.whl
  • Upload date:
  • Size: 6.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for dm_aiomodbus-0.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 e6d1f608e2298503f6cac1cef47c3cf5d981ef4722084cc081365d741ca51618
MD5 9a9f662a287b0ff98e85ab9c65f0b485
BLAKE2b-256 5930238226f33a808dafc402f33034fabc85daf2007d3ab60fa6047e81dba238

See more details on using hashes here.

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