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.12.6 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.3.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.3-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: dm_aiomodbus-0.3.3.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.3.tar.gz
Algorithm Hash digest
SHA256 98963a202bfada26bafde5cfc61374109ba73a3be44f8ce797e59ee4252b844c
MD5 acbf7db78b5dcaef74e1dec28fdf464a
BLAKE2b-256 63342079bf7c8520328b9a51a8b3d71e8d485828d380fed0e09a820d6b58a00f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: dm_aiomodbus-0.3.3-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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 73f67f62151c46e9d727251e222fb3ac83dd2578ff64c088fe55449a20896df3
MD5 9d34ca8e9dd1b0895254a8ba1b52a5eb
BLAKE2b-256 ab0f5d759e464ef571a878cf2137aef54d93d9de202d9e5f1b176fcee43c2a94

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