from __future__ import annotations
from typing import Any, Optional, Awaitable
class ModbusError(Exception):
class ModbusTimeout(ModbusError):
class ModbusConnectionError(ModbusError):
class ModbusProtocolError(ModbusError):
class ModbusDeviceException(ModbusProtocolError):
class ModbusConfigError(ModbusError):
class ModbusInvalidArgument(ModbusError):
class TcpClient:
def __init__(
self,
host: str,
port: int = 502,
unit_id: int = 1,
timeout_ms: int = 1000,
) -> None: ...
def connect(self) -> None:
def disconnect(self) -> None:
def has_pending_requests(self) -> bool:
def __enter__(self) -> TcpClient: ...
def __exit__(self, *args: Any) -> bool: ...
def read_coils(self, address: int, quantity: int) -> list[bool]: ...
def write_coil(self, address: int, value: bool) -> tuple[int, bool]: ...
def write_coils(self, address: int, values: list[bool]) -> None: ...
def read_discrete_inputs(self, address: int, quantity: int) -> list[bool]: ...
def read_holding_registers(self, address: int, quantity: int) -> list[int]: ...
def write_register(self, address: int, value: int) -> tuple[int, int]: ...
def write_registers(self, address: int, values: list[int]) -> None: ...
def mask_write_register(
self, address: int, and_mask: int, or_mask: int
) -> tuple[int, int, int]: ...
def read_write_registers(
self,
read_address: int,
read_quantity: int,
write_address: int,
write_values: list[int],
) -> list[int]: ...
def read_input_registers(self, address: int, quantity: int) -> list[int]: ...
def read_fifo_queue(self, address: int) -> list[int]: ...
def read_file_record(self, file_number: int, record_number: int, record_length: int) -> list[int]: ...
def write_file_record(self, file_number: int, record_number: int, data: list[int]) -> None: ...
def get_device_identification(self, object_id: int) -> dict[int, bytes]: ...
class AsyncTcpClient:
def __init__(
self,
host: str,
port: int = 502,
unit_id: int = 1,
timeout_ms: int = 1000,
) -> None: ...
def connect(self) -> Any:
def has_pending_requests(self) -> bool:
async def __aenter__(self) -> AsyncTcpClient: ...
async def __aexit__(self, *args: Any) -> bool: ...
def read_coils(self, address: int, quantity: int) -> Any: ...
def write_coil(self, address: int, value: bool) -> Any: ...
def write_coils(self, address: int, values: list[bool]) -> Any: ...
def read_discrete_inputs(self, address: int, quantity: int) -> Any: ...
def read_holding_registers(self, address: int, quantity: int) -> Any: ...
def write_register(self, address: int, value: int) -> Any: ...
def write_registers(self, address: int, values: list[int]) -> Any: ...
def mask_write_register(self, address: int, and_mask: int, or_mask: int) -> Any: ...
def read_write_registers(
self,
read_address: int,
read_quantity: int,
write_address: int,
write_values: list[int],
) -> Any: ...
def read_input_registers(self, address: int, quantity: int) -> Any: ...
def read_fifo_queue(self, address: int) -> Any: ...
def read_file_record(self, file_number: int, record_number: int, record_length: int) -> Any: ...
def write_file_record(self, file_number: int, record_number: int, data: list[int]) -> Any: ...
def get_device_identification(self, object_id: int) -> Any: ...
class SerialClient:
def __init__(
self,
port: str,
baud_rate: int = 9600,
unit_id: int = 1,
mode: str = "rtu",
timeout_ms: int = 1000,
) -> None: ...
def connect(self) -> None: ...
def disconnect(self) -> None: ...
def has_pending_requests(self) -> bool: ...
def __enter__(self) -> SerialClient: ...
def __exit__(self, *args: Any) -> bool: ...
def read_coils(self, address: int, quantity: int) -> list[bool]: ...
def write_coil(self, address: int, value: bool) -> tuple[int, bool]: ...
def write_coils(self, address: int, values: list[bool]) -> None: ...
def read_discrete_inputs(self, address: int, quantity: int) -> list[bool]: ...
def read_holding_registers(self, address: int, quantity: int) -> list[int]: ...
def write_register(self, address: int, value: int) -> tuple[int, int]: ...
def write_registers(self, address: int, values: list[int]) -> None: ...
def mask_write_register(self, address: int, and_mask: int, or_mask: int) -> tuple[int, int, int]: ...
def read_write_registers(
self,
read_address: int,
read_quantity: int,
write_address: int,
write_values: list[int],
) -> list[int]: ...
def read_input_registers(self, address: int, quantity: int) -> list[int]: ...
def read_fifo_queue(self, address: int) -> list[int]: ...
def read_file_record(self, file_number: int, record_number: int, record_length: int) -> list[int]: ...
def write_file_record(self, file_number: int, record_number: int, data: list[int]) -> None: ...
def get_device_identification(self, object_id: int) -> dict[int, bytes]: ...
class AsyncSerialClient:
def __init__(
self,
port: str,
baud_rate: int = 9600,
unit_id: int = 1,
mode: str = "rtu",
timeout_ms: int = 1000,
) -> None: ...
def connect(self) -> Any: ...
def has_pending_requests(self) -> bool: ...
async def __aenter__(self) -> AsyncSerialClient: ...
async def __aexit__(self, *args: Any) -> bool: ...
def read_coils(self, address: int, quantity: int) -> Any: ...
def write_coil(self, address: int, value: bool) -> Any: ...
def write_coils(self, address: int, values: list[bool]) -> Any: ...
def read_discrete_inputs(self, address: int, quantity: int) -> Any: ...
def read_holding_registers(self, address: int, quantity: int) -> Any: ...
def write_register(self, address: int, value: int) -> Any: ...
def write_registers(self, address: int, values: list[int]) -> Any: ...
def mask_write_register(self, address: int, and_mask: int, or_mask: int) -> Any: ...
def read_write_registers(
self,
read_address: int,
read_quantity: int,
write_address: int,
write_values: list[int],
) -> Any: ...
def read_input_registers(self, address: int, quantity: int) -> Any: ...
def read_fifo_queue(self, address: int) -> Any: ...
def read_file_record(self, file_number: int, record_number: int, record_length: int) -> Any: ...
def write_file_record(self, file_number: int, record_number: int, data: list[int]) -> Any: ...
def get_device_identification(self, object_id: int) -> Any: ...
class ModbusApp:
def handle_read_coils(self, address: int, count: int) -> list[bool] | Awaitable[list[bool]]:
...
def handle_write_coil(self, address: int, value: bool) -> None | Awaitable[None]:
...
def handle_write_coils(self, address: int, values: list[bool]) -> None | Awaitable[None]:
...
def handle_read_discrete_inputs(self, address: int, count: int) -> list[bool] | Awaitable[list[bool]]:
...
def handle_read_holding_registers(self, address: int, count: int) -> list[int] | Awaitable[list[int]]:
...
def handle_read_input_registers(self, address: int, count: int) -> list[int] | Awaitable[list[int]]:
...
def handle_write_register(self, address: int, value: int) -> None | Awaitable[None]:
...
def handle_write_registers(self, address: int, values: list[int]) -> None | Awaitable[None]:
...
def handle_mask_write_register(
self, address: int, and_mask: int, or_mask: int
) -> None | Awaitable[None]:
...
def handle_read_write_registers(
self,
read_address: int,
read_count: int,
write_address: int,
write_values: list[int],
) -> list[int] | Awaitable[list[int]]:
...
def handle_read_fifo_queue(self, pointer_address: int) -> list[int] | Awaitable[list[int]]:
...
def handle_read_exception_status(self) -> int | Awaitable[int]:
...
def handle_get_comm_event_counter(self) -> tuple[int, int] | Awaitable[tuple[int, int]]:
...
class AsyncTcpServer:
def __init__(
self,
host: str,
app: ModbusApp,
port: int = 502,
unit_id: int = 1,
) -> None: ...
def serve_forever(self) -> Any:
async def __aenter__(self) -> AsyncTcpServer: ...
async def __aexit__(self, *args: Any) -> bool: ...
class TcpServer:
def __init__(
self,
host: str,
app: ModbusApp,
port: int = 502,
unit_id: int = 1,
) -> None: ...
def serve_forever(self) -> None:
def __enter__(self) -> TcpServer: ...
def __exit__(self, *args: Any) -> bool: ...
class AsyncSerialServer:
def __init__(
self,
port: str,
app: ModbusApp,
baud_rate: int = 9600,
unit_id: int = 1,
mode: str = "rtu",
timeout_ms: int = 1000,
) -> None: ...
def serve_forever(self) -> Any:
async def __aenter__(self) -> AsyncSerialServer: ...
async def __aexit__(self, *args: Any) -> bool: ...
class SerialServer:
def __init__(
self,
port: str,
app: ModbusApp,
baud_rate: int = 9600,
unit_id: int = 1,
mode: str = "rtu",
timeout_ms: int = 1000,
) -> None: ...
def serve_forever(self) -> None:
def __enter__(self) -> SerialServer: ...
def __exit__(self, *args: Any) -> bool: ...
class GatewayEventHandler:
def __init__(self) -> None: ...
def on_forward(self, session_id: int, unit_id: int, channel_idx: int) -> None: ...
def on_response_returned(self, session_id: int, upstream_txn: int) -> None: ...
def on_routing_miss(self, session_id: int, unit_id: int) -> None: ...
def on_downstream_timeout(self, session_id: int, internal_txn: int) -> None: ...
def on_upstream_disconnect(self, session_id: int) -> None: ...
class AsyncTcpGateway:
def __init__(
self,
bind_addr: str,
event_handler: Optional[GatewayEventHandler] = None,
) -> None: ...
def bind_address(self) -> str: ...
def add_tcp_downstream(self, host: str, port: int = 502) -> int:
def add_unit_route(self, unit: int, channel: int) -> None: ...
def add_range_route(self, min: int, max: int, channel: int) -> None: ...
async def serve_forever(self) -> None:
def stop(self) -> None: ...
async def __aenter__(self) -> "AsyncTcpGateway": ...
async def __aexit__(self, *args: Any) -> bool: ...
class TcpGateway:
def __init__(
self,
bind_addr: str,
event_handler: Optional[GatewayEventHandler] = None,
) -> None: ...
def bind_address(self) -> str: ...
def add_tcp_downstream(self, host: str, port: int = 502) -> int: ...
def add_unit_route(self, unit: int, channel: int) -> None: ...
def add_range_route(self, min: int, max: int, channel: int) -> None: ...
def serve_forever(self) -> None:
def stop(self) -> None: ...
def __enter__(self) -> "TcpGateway": ...
def __exit__(self, *args: Any) -> bool: ...