NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3474 most downloaded on PyPI
A fully featured modbus protocol stack in python
Last release 1 months ago
13 Aug 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
3 versions withdrawn
withdrawn after publishing
14 years old
81 releases · first in 2012
This is really a bug fix release with quite a number of important fixes, thanks to our committers. It is marked as a x.y release for 2 reasons:
This is really a bug fix release with quite a number of important fixes, thanks to our committers. It is marked as a x.y release for 2 reasons:
We welcome 3 new committers.
Fixes:
SimDevice.action (#2989)ModbusSerialServer.__init__ kwargs (#2962)One column per quarter.
Bug fixes and 3rd party libs (used only for development) are upgraded.
Bug fixes and 3rd party libs (used only for development) are upgraded.
The function generate_ssl() is moved to examples.
ModbusServerContext initialization with dict devices parameter (#2944)DataType.REGISTERS 'h' -> 'H' (#2940)ModbusTlsServer, removed parameters certfile=,keyfile=,password=, only accept sslctx= * This is due to complaints that the development certificate is self signed, and thus insecure for production.
ModbusTlsClient, removed generate_ssl() * This is due to complaints that the development certificate is self signed, and thus insecure for production.
Upgraded 3rd party libraries (only relevant for developing pymodbus)
Small summer maintenance release:
Small summer maintenance release:
Altherma heat pump control, with Home Assistant and updating server.
removed RemoteDeviceContext, because it only is a partial forwarder a proper forwarder should be made at frame level.
datastore get/setValues is removed, please use server.async_get/setValues instead.
datastore show a deprecation warning please use simData instead.
SimData/SimDevice have been updated
No inter_frame_time check for baudrate > 38000.
Minor bug fixes.
asyncio.iscoroutinefunction() is deprecated
This release contains a lot of smaller (but still important) bug fixes, and 2 big new items:
We are also please to welcome 4 new contributors, who we hope will contribute more. A big thanks to all that have helped
make this release happen.
Please remember this is an Y type release (in our X.Y.Z scheme) so please remember to check API_CHANGES.RST to see if
your project needs to make small changes.
Detailed changes:
when using no_response_expected=, the call returns None
remove idle_time() from sync client since it is void
ModbusSerialServer new parameter "allow_multiple_devices" which gives limited multipoint support with baudrate < 19200 and a good RS485 line.
SimData / SimDevice are now integrated in the server (and will mid-term replace other datastores).
Most important change is that there are now full support for python 3.14 and a number of packages (like mypy) have been updated.
Small maintenance release.
Most important change is that there are now full support for python 3.14 and a number of packages (like mypy) have been updated.
Prepare 3.11.4 (#2815)
Update CodeQL to v4. (#2816)
Solve python3.14 problem (and mypy upgrade). (#2814)
More doc corrections. (#2813)
Correct wrong example in doc. (#2812)
update to pylint 4 (#2806)
ExceptionResponse for no_response_expected. (#2801)
Complete test for SimData / SimDevice. (#2798)
SimData and simDevice. (#2796)
Avoid windows CI problem with log testing. (#2797)
Update doc with 4.0 information. (#2795)
Make global DataType. (#2794)
Remove test pymodbus.log file. (#2793)
Update README. (#2788)
Activate ruff indent checking. (#2787)
Coverage 100% (using no cover, when needed).
A small maintenance release.
Most important change is it creates an alias in pypi for the library, allowing home-assistant to overcome a version problem.
Clarify documentation on reconnect_delay
Remark: in the test coverage commits are a change of the ExceptionResponse PDU, which could cause problems on v3.11.1.
Auto debug in case of an error.
Correct bit handling (each byte is LSB->MSB).
Correct bit handling (each byte is LSB->MSB). (#2707)
read_input_registers docstring change count to regs (#2704)
Add dev_id/tid check in clients (#2711)
Revert wrong byte handling in v3.10.0 bit handling order is LSB-> MSB for each byte REMARK: word are ordered depending on big/little endian readCoils and other bit functions now return bit in logical order (NOT byte order)
Example: Hex bytes: 0x00 0x01 delivers False * 8 True False * 7
Hex bytes: 0x01 0x03 delivers True False * 7 True True False * 6
Raise runtimeerror if listen() fails.
Raise runtimeerror if listen() fails. (#2697)
Correct values parameter in setValues. (#2696)
Correct return from getValues. (#2695)
Add request fc to exceptionResponse. (#2694)
DummyProtocol is not async (#2686)
Handle "little" for multiple values in to_registers (#2678)
Remove unused const. (#2676)
Add retries to ModbusPDU class (#2672)
Don't invoke trace_connect callback twice (#2670)
ensure unpacking of proper length during decoding (#2664) (#2665)
README clean-up (#2659)
Bump coverage to 95,5% (#2658)
Simplify response rejection. (#2657)
Bump coverage to 93%. (#2656)
Solve ModbusDeviceContext bug. (#2653)
Bit handling LSB -> MSB across bytes. (#2634)
Change slave to device_id and slave= to device_id=. (#2600)
Remove payload. (#2524)
ModbusSlaveContext replaced by ModbusDeviceContext
payload removed (replaced by "convert_to/from_registers")
slave=, slaves= replaced by device_id=, device_ids=
slave request names changed to device
bit handling order is LSB (last byte) -> MSB (first byte) readCoils and other bit functions now return bit in logical order (NOT byte order)
Older versions had LSB -> MSB pr byte V3.10 have LSB -> MSB across bytes.
Example: Hex bytes: 0x00 0x01 Older versions would deliver False * 8 True False * 7 V3.10 deliver True False * 15
Hex bytes: 0x01 0x03 Older versions would deliver True False * 7 True True False * 6 V3.10 deliver True True False * 6 True False * 7
Don't bool-test explicit datastores
Reactivate simulator validate. (#2643)
Don't bool-test explicit datastores (#2638)
Test and hard delayed response test. (#2636)
Update simulator doc. (#2635)
SimData update
Officially working towards 4.0.0
* Correct byte order in bits.
Correct byte order in bits. (#2631)
Correct bit handling internally and in API.
Correct bit handling internally and in API. (#2627)
default argument ModbusSequentialDataBlock (#2622)
Fix exception error message for decoding response (#2618)
Expose exception_code to API. (#2615)
Simplify ruff config (#2611)
Documentation dont fixed. (#2605)
sum() can operate on an Iterator directly (#2610)
SimData update. (#2601)
Start<x>Server custom_functions -> custom_pdu.
Update pyproject.toml to remove python 3.9.
Remove validate() from datastores. (#2595)
Python 3.9 is EOL, not supported actively. (#2596)
correct handle_local_echo for sync client. (#2593)
devcontainer, automatic install. (#2583)
Don't set_result on completed futures. (#2582)
Flush recv_buffer before each transaction write. (#2581)
Add missing trace. (#2578)
Update github actions. (#2579)
Python 3.9 is reaching end of life, and no longer supported. Depending on the usage the code might still work
Start*Server, custom_functions -> custom_pdu (handled by Modbus<x>Server)
Bit handling (e.g. read_coils) was not handling the bits in the correct order
Allow id=0 and check if response.id == request.id.
Allow id=0 and check if response.id == request.id. (#2572)
New simulator is WIP, not to be used.
New simulator is WIP, not to be used. (#2568)
dev_id=0 no response expected (returns ExceptionResponse(0xff)). (#2567)
New simulator datastore. (#2535)
Parameterize string encoding in convert_to_registers and convert_from_registers
Parameterize string encoding in convert_to_registers and convert_from_registers (#2558)
Fix client modbus function calls in remote by adding count as keyword argument (#2563)
Fix exception text in ModbusPDU.validateAddress (#2551)
Typo arround no_response_expected (#2550)
Trace new connection in server. (#2549)
Add trace to server.
Update misleading DATATYPE text. (#2547)
Fix pylint.
Clarify server usage.
Solve instable transaction testing. (#2538)
Add background parameter to servers.
Remove deprecate from payload. (#2532)
Add background parameter to servers. (#2529)
Split async_io.py and simplify server start/stop. (#2528)
Update custom_msg example to include server. (#2527)
Move repl doc to repl repo. (#2522)
Add API to set max until disconnect. (#2521)
Asyncio future removed from sync client.
Asyncio future removed from sync client. (#2514)
Raise exception on no response in async client.
Convert endianness (#2506)
Fix sync serial client, loop. (#2510)
Correct future. (#2507)
Correct #2501 (#2504)
Raise exception on no response in async client. (#2502)
re-instatiate Future on reconnect (#2501)
Remove all trailing zeroes during string decoding (#2493)
Fix too many sync client log messages. (#2491)
Deprecate BinaryPayloadDecoder / BinaryPayloadBuilder.
slave_id -> dev_id (internally). (#2486)
Pin python 3.13.0 and update ruff. (#2487)
Add documentation link to README. (#2483)
Add datatype bits to convert_to/from_registers. (#2480)
Add trace API to server. (#2479)
Add trace API for client. (#2478)
Integrate TransactionManager in server. (#2475)
Rename test/sub. (#2473)
Check server closes file descriptors. (#2472)
Update http_server.py (#2471)
Restrict write_registers etc to list[int]. (#2469)
Write_registers/pdu typing again. (#2468)
Remove ModbusExceptions enum. (#2467)
Add special ssl socket handling of "no data". (#2466)
Add tip that values= will be modified to list[int]. (#2465)
client 100% test coverage (#2396)
Extend TransactionManager to handle sync. (#2457)
Add convert_from to simple examples. (#2458)
New async transaction manager. (#2453)
Deprecate BinaryPayloadDecoder / BinaryPayloadBuilder. (#2456)
Correct close for server transport. (#2455)
RTU frame problem, when received split. (#2452)
pdu, 100% coverage. (#2450)
Refactor PDU, add strong typing to base classes. (#2438)
Enforce keyword only parameters. (#2448)
Fix read_device_information with sync client. (#2441)
Simplify syncTransactionManager. (#2443)
Import examples direct. (#2442)
rename ModbusExceptions enums to legal constants. (#2436)
Add typing to examples. (#2435)
Refactor PDU diag. (#2421)
Fix client lock, Parallel API calls are not permitted. (#2434)
Ensure accept_no_response_limit > retries. (#2433)
Check client and frametype. (#2426)
Add MDAP to TLS frame. (#2425)
Clean/Finalize testing for bit functions. (#2420)
Simplify pdu bit, remove skip_encode. (#2417)
remove zero_mode parameter. (#2354)
Prepare refactor messages. (#2416)
Fixed handle local echo in serialserver (#2415)
Correct minor framer/pdu errors. (#2407)
Rtu decode frames without byte count. (#2412)
Improve type of parameter values of write_registers (#2411)
PDU lookupClass work with sub function code. (#2410)
Correct wait_next_api link in README. (#2406)
ModbusSlaveContext, removed zero_mode parameter.
Removed skip_encode parameter.
renamed ModbusExceptions enums to legal constants.
enforced client keyword only parameters (positional not allowed).
added trace_packet/pdu/connect to client/server.
removed on_connect_callback from client.
removed response_manipulator, request_tracer from server.
Wrong close, when transaction do not match.
Clean PDU init. (#2399)
Wrong close, when transaction do not match. (#2401)
Remove unmaintained (not working) example contributions. (#2400)
All pdu (incl. function code) tests to pdu directory. (#2397)
Add no_response_expected argument to requests (#2385)
Resubmit: Don't close/reopen tcp connection on single modbus message timeout (#2350)
100% test coverage for PDU. (#2394)
Type DecodePDU. (#2392)
Update to use DecodePDU. (#2391)
Client/Server decoder renamed and moved to pdu. (#2390)
Move client/server decoder to pdu. (#2388)
Introducing PyModbus Guru on Gurubase.io (#2387)
Remove IllegalFunctionRequest. (#2384)
remove ModbusResponse. (#2383)
Add typing to pdu base classes. (#2380)
Updated roadmap.
remove databuffer from framer. (#2379)
Improve retries for sync client. (#2377)
Move process test to framer tests (#2376)
Framer do not check ids (#2375)
Remove callback from framer. (#2374)
Auto fill device ids for clients. (#2372)
Reenable multidrop tests. (#2370)
write_register/s accept bytes or int. (#2369)
roadmap corrections.
Added roadmap (not written in stone). (#2367)
Update README to show python 3.13.
Test on Python 3.13 (#2366)
Use @abstractmethod (#2365)
Corrected smaller documentation bugs. (#2364)
README as landing page in readthedocs. (#2363)
frameProcessIncomingPacket removed
100% test coverage of framers (#2359)
Framer, final touches. (#2360)
Readme file renamed (#2357)
Remove old framers (#2358)
frameProcessIncomingPacket removed (#2355)
Cleanup framers (reduce old_framers) (#2342)
Run CI on PR targeted at wait_next_api.
Sync client, allow unknown recv msg size. (#2353)
integrate old rtu framer in new framer (#2344)
Update README.rst (#2351)
Client.close should not allow reconnect= (#2347)
Remove async client.idle_time(). (#2349)
Client doc, add common methods (base). (#2348)
Reset receive buffer with send(). (#2343)
Remove unused protocol_id from pdu (#2340)
CI run on demand on non-protected branches. (#2339)
Server listener and client connections have is_server set. (#2338)
Reopen listener in server if disconnected. (#2337)
Regroup test. (#2335)
Improve docs around sync clients and reconnection (#2321)
transport 100% test coverage (again) (#2333)
Update actions to new node.js. (#2332)
Bump 3rd party (#2331)
Documentation on_connect_callback (#2324)
Fixes the unexpected implementation of the ModbusSerialClient.connected property (#2327)
Forward error responses instead of timing out. (#2329)
Add stacklevel=2 to logging functions (#2330)
Fix encoding & decoding of ReadFileRecordResponse (#2319)
Improvements for example/contib/solar (#2318)
Update solar.py (#2316)
Remove double conversion in int (#2315)
Complete pull request #2310 (#2312)
fixed type hints for write_register and write_registers (#2309)
Remove _header from framers. (#2305)
Rename branch wait3.8.0 to wait_next_API
Correct README
Rename branch wait3.8.0 to wait_next_API
Better error message, when pyserial is missing.
Better error message, when pyserial is missing.
Slave=0 will return first response, used to identify device address. (#2298)
Feature/add simulator api skeleton (#2274)
Correct max. read size for registers. (#2295)
Ruff complains, due to upgrade. (#2296)
Properly process 'slaves' argument (#2292)
Update repl requirement to >= 2.0.4 (#2291)
Fix aiohttp < 3.9.0 (#2289)
Simplify framer test setup (#2290)
Clean up ModbusControlBlock (#2288)
example docstrings diag_message -> pdu.diag_message (#2286)
Explain version schema (#2284)
Add more testing for WriteRegisters. (#2280)
Proof for issue 2273. (#2277)
Update simulator tests. (#2276)
Remove unneeded client parameters.
Remove unneeded client parameters. (#2272)
simulator: Fix context single parameter (#2264)
buildPacket can be used for Request and Response (#2262)
More descriptive decoder exceptions (#2260)
Cleanup ReadWriteMultipleRegistersResponse and testing (#2261)
Feature/simulator addressing (#2258)
Framer optimization (apart from RTU). (#2146)
Use mock.patch.object to avoid protected access errors. (#2251)
Fix some mypy type checking errors in test_transaction.py (#2250)
Update check for windows platform (#2247)
Logging 100% coverage. (#2248)
CI, Block draft PRs to use CPU minutes. (#2245, #2246)
Remove kwargs client. (#2243, #2244, #2257)
remove kwargs PDU messagees. (#2240)
Remove message_generator example (not part of API). (#2239)
Update dev dependencies (#2241)
Fix ruff check in CI (#2242)
Remove kwargs. (#2236, #2237)
Simulator config, kwargs -> parameters. (#2235)
Refactor transaction handling to better separate async and sync code. (#2232)
Simplify some BinaryPayload pack operations (#2224)
Fix writing to serial (rs485) on windows os. (#2191)
Remember to remove serial writer. (#2209)
Transaction_id for serial == 0. (#2208)
Solve pylint error.
Sync TLS needs time before reading frame (#2186)
Update transaction.py (#2174)
PDU classes --> pymodbus/pdu. (#2160)
Speed up no data detection. (#2150)
RTU decode hunt part. (#2138)
Dislodge client classes from modbusProtocol. (#2137)
Merge new message layer and old framer directory. (#2135)
Coverage == 91%. (#2132)
Remove binary_framer. (#2130)
on_reconnect_callback --> on_connect_callback. (#2122)
Remove certfile,keyfile,password from TLS client. (#2121)
Drop support for python 3.8 (#2112)
default slave changed to 1 from 0 (which is broadcast).
broadcast_enable, retry_on_empty, no_resend_on_retry parameters removed.
class method generate_ssl() added to TLS client (sync/async).
removed certfile, keyfile, password from TLS client, please use generate_ssl()
on_reconnect_callback() removed from clients (sync/async).
on_connect_callback(true/false) added to async clients.
binary framer no longer supported
Framer.<type> renamed to FramerType.<type>
PDU classes moved to pymodbus/pdu
Simulator config custom actions kwargs -> parameters
Non defined parameters (kwargs) no longer valid
Drop support for Python 3.8 (its no longer tested, but will probably work)
Solve serial unrequested frame.
Remove python 3.8 from CI
Log comm retries. (#2220)
Solve serial unrequested frame. (#2219)
test convert registers with 1234.... (#2217)
Fix writing to serial (rs485) on windows os. (#2191)
Remember to remove serial writer. (#2209)
Update client.rst (#2199)
Fix usage file names (#2194)
Show error if example is run without support files. (#2189)
Solve pylint error.
Describe zero_mode in ModbusSlaveContext.__init__ (#2187)
Datastore will not return ExceptionResponse. (#2175)
call async datastore from modbus server (#2144)
Transaction id overrun.
Add minimal devcontainer. (#2172)
Sphinx: do not turn warnings into errors.
Fix usage of AsyncModbusTcpClient in client docs page (#2169)
Bump actions CI. (#2166)
Request/Response: change execute to be async method (#2142)
datastore: add async_setValues/getValues methods (#2165)
fixed kwargs not being expanded for actions on bit registers, adjusted tests to catch this issue (#2161)
Clean datastore setValues. (#2145)
modbus_server: call execute in a way that those can be either coroutines or normal methods (#2139)
Streamline message class. (#2133)
Fix decode for wrong mdap len.
SOCKET/TLS framer using message decode(). (#2129)
ASCII framer using message decode() (#2128)
Add generate_ssl() to TLS client as helper. (#2120)
add _legacy_decoder to message rtu (#2119)
Allow socket exception response with wrong length
Allow socket exception response with wrong length
Add lock to async requests, correct logging and length calc. (FIX, not on dev)
Add lock to async requests, correct logging and length calc. (FIX, not on dev)
test_simulator: use unused_tcp_port fixture (#2141)
streamline imports in Factory.py (#2140)
Secure testing is done with pymodbus in PR. (#2136)
Fix link to github in README (#2134)
Wildcard exception catch from pyserial. (#2125)
Problem with stale CI. (#2117)
Add connection exception to list of exceptions catpured in retries (#2113)
Move on_reconnect to client level (#2111)
Bump github stale. (#2110)
update package_test_tool (add 4 test scenarios) (#2107)
Bump dependencies. (#2108)
Cancel send if no connection. (#2103)
Solve transport close() as not inherited method.
Solve transport close() as not inherited method. (#2098)
enable mypy --check-untyped-defs (#2096)
Add get_expected_response_length to transaction.
Remove control encode in framersRemove control encode in framers. (#2095)
Bump codeql in CI to v3. (#2093)
Improve server types (#2092)
Remove pointless try/except (#2091)
Improve transport types (#2090)
Use explicit ValueError when called with incorrect function code (#2089)
update message tests (incorporate all old tests). (#2088)
Improve simulator type hints (#2084)
Cleanup dead resetFrame code (#2082)
integrate message.encode() into framer.buildPacket. (#2062)
Repair client close() (intern= is needed for ModbusProtocol). (#2080)
Updated Message_Parser example (#2079)
Fix #2069 use released repl from pypi (#2077)
Fix field encoding of Read File Record Response (#2075)
Improve simulator types (#2076)
Bump actions. (#2071)
Update framers to ease message integration (only decode/encode)
Update framers to ease message integration (only decode/encode) (#2064)
Add negtive acknowledge to modbus exceptions (#2065)
add Message Socket/TLS and amend tests. (#2061)
Improve factory types (#2060)
ASCII. (#2054)
Improve datastore documentation (#2056)
Improve types for messages (#2058)
Improve payload types (#2057)
Reorganize datastore inheritance (#2055)
Added new message (framer) raw + 100%coverage. (#2053)
message classes, first step (#1932)
Use AbstractMethod in transport. (#2051)
A datastore for each slave. (#2050)
Only run coverage in ubuntu / python 3.12 (#2049)
Replace lambda with functools.partial in transport. (#2047)
Move self.loop in transport to init() (#2046)
Fix decoder bug (#2045)
Add support for server testing in package_test_tool. (#2044)
DictTransactionManager -> ModbusTransactionManager (#2042)
eliminate redundant server_close() (#2041)
Remove reactive server (REPL server). (#2038)
Improve types for client (#2032)
Improve HTTP server type hints (#2035)
eliminate asyncio.sleep() and replace time.sleep() with a timeout (#2034)
Use "new" inter_byte_timeout and is_open for pyserial (#2031)
Add more type hints to datastore (#2028)
Add more framer tests, solve a couple of framer problems. (#2024)
Rework slow tests (use NULL_MODEM) (#1995)
Allow slave=0 in serial communication. (#2023)
Client package test tool. (#2022)
Add REPL documentation back with links to REPL repo (#2017)
Move repl to a seperate repo (#2009)
solve more mypy issues with client (#2013)
solve more mypy issues with datastore (#2010)
Remove useless. (#2011)
streamline transport tests. (#2004)
Improve types for REPL (#2007)
Specify more types in base framer (#2005)
Move htmlcov -> build/cov (#2003)
Avoid pylint complain about lambda. (#1999)
Improve client types (#1997)
Fix setblocking call (#1996)
Actívate warnings in pytest. (#1994)
Add profile option to pytest. (#1991)
Simplify message tests (#1990)
Upgrade pylint and ruff (#1989)
Add first architecture document. (#1988)
Update CONTRIBUTING.rst.
Return None for broadcast. (#1987)
Make ModbusClientMixin Generic to fix type issues for sync and async (#1980)
remove strange None default (#1984)
Fix incorrect bytearray type hint in diagnostics query (#1983)
Fix URL to CHANGELOG (#1979)
move server_hostname to be local in tls client. (#1978)
Parameter "strict" is and was only used for serial server/client. (#1975)
Removed unused parameter close_comm_on_error. (#1974)
Update datastore_simulator example with client
Update datastore_simulator example with client (#1967)
Test and correct receiving more than one packet (#1965)
Remove unused FifoTransactionManager. (#1966)
Always set exclusive serial port access. (#1964)
Add server/client network stub, to allow test of network packets. (#1963)
Combine conftest to a central file (#1962)
Call on_reconnect_callback. (#1959)
Readd ModbusBaseClient to external API.
Update README.rst
minor fix for typo and consistency (#1946)
More coverage. (#1947)
Client coverage 100%. (#1943)
Run coverage in CI with % check of coverage. (#1945)
transport 100% coverage. (#1941)
contrib example: TCP drainage simulator with two devices (#1936)
Remove "pragma no cover". (#1935)
transport_serial -> serialtransport. (#1933)
Fix behavior after Exception response (#1931)
Correct expected length for udp sync client. (#1930)
solve Socket_framer problem with Exception response
solve Socket_framer problem with Exception response (#1925)
Allow socket frames to be split in multiple packets (#1923)
Reset frame for serial connections.
Source address None not 0.0.0.0 for IPv6
Missing Copyright in License file
Correct wrong url to modbus protocol spec.
Fix serial port in TestComm.
* Set documentation to v3.6.2.
Set documentation to v3.6.2.
* Solve pypi upload error.
Solve pypi upload error.
Release errors (pyproject.toml changes).
Release errors (pyproject.toml changes). (#1811)
Simplify transport_serial (modbus use)
Simplify transport_serial (modbus use) (#1808)
Reduce transport_serial (#1807)
Change to pyproject.toml. (#1805)
fixes access to asyncio loop via loop property of SerialTransport (#1804)
Bump aiohttp to support python 3.12. (#1802)
README wrong links. (#1801)
CI caching. (#1796)
Solve pylint unhappy. (#1799)
Clean except last 7 days. (#1798)
Reconect_delay == 0, do not reconnect. (#1795)
Update simulator.py method docstring (#1793)
add type to isError. (#1781)
Allow repr(ModbusException) to return complete information (#1779)
Update docs. (#1777)
* server tracer example. (#1773) * sync connect missing. (#1772) * simulator future problem.
server tracer example. (#1773)
sync connect missing. (#1772)
simulator future problem. (#1771)
Always close socket on error (reset_sock).
Always close socket on error (reset_sock). (#1767)
Revert reset_socket change.
add close_comm_on_error to example.
Test long term (HomeAsistant problem). (#1765)
Update ruff to 0.0.287 (#1764)
Remove references to ModbusSerialServer.start (#1759) (#1762)
Readd test to get 100% coverage.
transport: Don't raise a RunTimeError in ModbusProtocol.error_received() (#1758)
test_client: Fix test_client_protocol_execute()
Async retry (#1752)
test_client: Fix test_client_protocol_execute() (#1751)
Use enums for constants (#1743)
Local Echo Broadcast with Async Clients (#1744)
Fix #1746 . Return missing result (#1748)
Document nullmodem. (#1739)
Add system health check to all tests. (#1736)
Handle partial message in ReadDeviceInformationResponse (#1738)
Broadcast with Handle Local Echo (#1737)
transport_emulator, part II. (#1710)
Added file AUTHORS, to list all Volunteers. (#1734)
Fix #1702 and #1728 (#1733)
Clear retry count when success. (#1732)
RFC: Reduce parameters for REPL server classes (#1714)
retries=1, solved. (#1731)
Impoved the example "server_updating.py" (#1720)
pylint 3.11 (#1730)
Correct retry loop. (#1729)
Fix faulty not check (#1725)
bugfix local echo handling on sync clients (#1723)
Updated copyright in LICENSE.
Correct README pre-commit.
Fix custom message parsing in RTU framer (#1716)
Request tracer (#1715)
pymodbus.server: allow strings for "-p" paramter (#1713)
New nullmodem and transport. (#1696)
xdist loadscope (test is not split). (#1708)
Add client performance example. (#1707)
Remove handler parameter from ModbusUdpServer
Remove loop parameter from ModbusSerialServer
Remove handler and allow_reuse_port from repl default config
Static classes from the constants module are now inheriting from enum.Enum and using UPPER_CASE naming scheme, this affects: - MoreData - DeviceInformation - ModbusPlusOperation - Endian - ModbusStatus
Async clients now accepts no_resend_on_retry=True, to not resend the request when retrying.
ModbusSerialServer now accepts request_tracer=.
pass source_address in tcp client.
Fix serial startup problems. (#1701)
pass source_address in tcp client. (#1700)
serial server use source_address[0]. (#1699)
Examples coverage nearly 100%. (#1694)
new async serial (#1681)
Docker is not supported (lack of maintainer). (#1693)
Forwarder write_coil --> write_coil. (#1691)
Change default source_address to (0.0.0.0, 502) (#1690)
Update ruff to 0.0.277 (#1689)
Fix dict comprehension (#1687)
Removed requests dependency from contrib/explain.py (#1688)
Fix broken test (#1685)
Fix readme badges (#1682)
Bump aiohttp from 3.8.3 to 3.8.5 (#1680)
pygments from 2.14.0 to 2.15.0 (#1677)
async_client: add retries/reconnect.
Handle partial local echo. (#1675)
clarify handle_local_echo. (#1674)
async_client: add retries/reconnect. (#1672)
Fix 3.11 problem. (#1673)
Add new example simulator server/client. (#1671)
examples/contrib/explain.py leveraging Rapid SCADA (#1665)
_logger missed basicConfig. (#1670)
Bug fix for #1662 (#1663)
Bug fix for #1661 (#1664)
Fix typo in config.rst (#1660)
test action_increment. (#1659)
test codeql (#1655)
mypy complaints. (#1656)
Remove self.params from async client (#1640)
Drop test of pypy with python 3.8.
repair server_async.py (#1644)
move common framer to base. (#1639)
Restrict Return diag call to bytes. (#1638)
use slave= in diag requests. (#1636)
transport listen in server. (#1628)
CI test.
Integrate transport in server. (#1617)
fix getFrameStart for ExceptionResponse (#1627)
Add min/min to simulator actions.
Change to "sync client" in forwarder example (#1625)
Remove docker (lack of maintenance). (#1623)
Clean defaults (#1618)
Reduce CI log with no debug. (#1616)
prepare server to use transport. (#1607)
Fix RemoteSlaveContext (#1599)
Combine stale and lock. (#1608)
update pytest + extensions. (#1610)
Change version follow PEP 440. (#1609)
Fix regression with REPL server not listening (#1604)
Remove handler= for server classes. (#1602)
Fix write function codes (#1598)
transport nullmodem (#1591)
move test of examples to subdirectory. (#1592)
transport as object, not base class. (#1572)
Simple examples. (#1590)
transport_connect as bool. (#1587)
Prepare dev (#1588)
Release corrections. (#1586)
Modbus<x>Client .connect() returns True/False (connected or not)
Modbue<x>Server handler=, allow_reuse_addr=, backlog= are no longer accepted
ModbusTcpClient / AsyncModbusTcpClient no longer support unix path
StartAsyncUnixServer / ModbusUnixServer removed (never worked on Windows)
ModbusTlsServer reqclicert= is no longer accepted
ModbusSerialServer auto_connect= is no longer accepted
ModbusSimulatorServer.serve_forever(only_start=False) added to allow return
Fix regression with REPL server not listening
Fix RemoteSlaveContext (#1599)
Change version follow PEP 440. (#1609)
Fix regression with REPL server not listening (#1604)
Fix write function codes (#1598)
Release corrections. (#1586)
transport fixes and 100% test coverage.
transport fixes and 100% test coverage. (#1580)
Delay self.loop until connect(). (#1579)
Added mechanism to determine if server did not start cleanly (#1539)
Proof transport reconnect works. (#1577)
Fix non-shared block doc in config.rst. (#1573)
Transport integrated in async clients.
Stabilize windows tests. (#1567)
Bump mypy 1.3.0 (#1568)
Transport integrated in async clients. (#1541)
Client async corrections (due to 3.1.2) (#1565)
Server_async[udp], solve 3.1.1 problem. (#1564)
Remove ModbusTcpDiagClient. (#1560)
Remove old method from Python2/3 transition (#1559)
Switch to ruff's version of bandit (#1557)
Allow reading/writing address 0 in the simulator (#1552)
Remove references to "defer_start". (#1548)
Client more robust against faulty response. (#1547)
Fix missing package_data directives for simulator web (#1544)
Fix installation instructions (#1543)
Solve pytest timeout problem. (#1540)
DiagnosticStatus encode missing tuple check. (#1533)
test SparseDataStore. (#1532)
BinaryPayloadBuilder.to_string to BinaryPayloadBuilder.encode (#1526)
Adding flake8-pytest-style` to ruff (#1520)
Simplify version management. (#1522)
pylint and pre-commit autoupdate (#1519)
Add type hint (#1512)
Add action to lock issues/PR. (#1508)
New common transport layer. (#1492)
Solve serial close raise problem.
Remove old config values (#1503)
Document pymodbus.simulator. (#1502)
Refactor REPL server to reduce complexity (#1499)
Don't catch KeyboardInterrupt twice for REPL server (#1498)
Refactor REPL client to reduce complexity (#1489)
pymodbus.server: listen on ID 1 by default (#1496)
Clean framer/__init__.py (#1494)
Duplicate transactions in UDP. (#1486)
clean ProcessIncommingPacket. (#1491)
Enable pyupgrade (U) rules in ruff (#1484)
clean_workflow.yaml solve parameter problem.
Correct wrong import in test. (#1483)
Implement pyflakes-simplify (#1480)
Test case for UDP duplicate msg issue (#1470)
Test of write_coil. (#1479)
Test reuse of client object. (#1475)
Comment about addressing when shared=false (#1474)
Remove old aliases to OSError (#1473)
pymodbus.simulator fixes (#1463)
Fix wrong error message with pymodbus console (#1456)
update modbusrtuframer (#1435)
Server multidrop test.: (#1451)
mypy problem ModbusResponse.
ModbusTcpDiagClient is removed due to lack of support
Clients have an optional parameter: on_reconnect_callback, Function that will be called just before a reconnection attempt.
general parameter unit= -> slave=
move SqlSlaveContext, RedisSlaveContext to examples/contrib (due to lack of maintenance)
BinaryPayloadBuilder.to_string was renamed to BinaryPayloadBuilder.encode
on_reconnect_callback for async clients works slightly different
utilities/unpack_bitstring now expects an argument named data not string
* Add forgotten await
Add forgotten await
Don't publish univeral (Python2 / Python 3) wheels
add missing server.start(). (#1443)
Don't publish univeral (Python2 / Python 3) wheels (#1423)
Remove unneccesary custom LOG_LEVEL check (#1424)
Include py.typed in package (#1422)
Add value <-> registers converter helpers.
Add value <-> registers converter helpers. (#1413)
Add pre-commit config (#1406)
Make baud rate configurable for examples (#1410)
Clean __init_ and update log module. (#1411)
Simulator add calls functionality. (#1390)
Add note about not being thread safe. (#1404)
Update docker-publish.yml
Forward retry_on_empty and retries by calling transaction (#1401)
serial sync recv interval (#1389)
Add tests for writing multiple writes with a single value (#1402)
Enable mypy in CI (#1388)
Limit use of Singleton. (#1397)
Cleanup interfaces (#1396)
Add request names. (#1391)
Simulator, register look and feel. (#1387)
Fix enum for REPL server (#1384)
Remove unneeded attribute (#1383)
Fix mypy errors in reactive server (#1381)
remove nosec (#1379)
Fix type hints for http_server (#1369)
Merge pull request #1380 from pymodbus-dev/requirements
remove second client instance in async mode. (#1367)
Pin setuptools to prevent breakage with Version including "X" (#1373)
Lint and type hints for REPL (#1364)
Clean mixin execute (#1366)
Remove unused setup_commands.py. (#1362)
Run black on top-level files and /doc (#1361)
repl config path (#1359)
Fix NoReponse -> NoResponse (#1358)
Make whole main async. (#1355)
Fix more typing issues (#1351)
Test sync task (#1341)
Fixed text in ModbusClientMixin's writes (#1352)
lint /doc (#1345)
Remove unused linters (#1344)
Allow log level as string or integer. (#1343)
Sync serial, clean recv. (#1340)
Test server task, async completed (#1318)
main() should be sync (#1339)
Bug: Fixed caused by passing wrong arg (#1336)
helper to convert values in mixin: convert_from_registers, convert_to_registers
import pymodbus.version -> from pymodbus import __version__, __version_full__
pymodbus.pymodbus_apply_logging_config(log_file_name="pymodbus.log") to enable file pymodbus_apply_logging_config
pymodbus.pymodbus_apply_logging_config have default DEBUG, it not called root settings will be used.
pymodbus/interfaces/IModbusDecoder removed.
pymodbus/interfaces/IModbusFramer removed.
pymodbus/interfaces/IModbusSlaveContext -> pymodbus/datastore/ModbusBaseSlaveContext.
StartAsync<type>Server, removed defer_start argument, return is None. instead of using defer_start instantiate the Modbus<type>Server directly.
ReturnSlaveNoReponseCountResponse has been corrected to ReturnSlaveNoResponseCountResponse
Option --modbus-config for REPL server renamed to --modbus-config-path
client.protocol.<something> --> client.<something>
client.factory.<something> --> client.<something>
Fix register type check for size bigger than 3 registers (6 bytes)
Solve log problem in payload.
Fix register type check for size bigger than 3 registers (6 bytes) (#1323)
Re-add SQL tests. (#1329)
Central logging. (#1324)
Skip sqlAlchemy test. (#1325)
Solve 1319 (#1320)
More direct readme links for REPL
Update README.rst
Correct README link. (#1316)
More direct readme links for REPL (#1314)
Add classifier for 3.11 (#1312)
Update README.rst (#1313)
Delete ModbusCommonBlock.png (#1311)
Add modbus standard to README. (#1308)
fix no auto reconnect after close/connect in TCPclient (#1298)
Update examples.rst (#1307)
var name clarification (#1304)
Bump external libraries. (#1302)
Reorganize documentation to make it easier accessible (#1299)
Simulator documentation (first version). (#1296)
Updated datastore Simulator. (#1255)
Update links to pydmodbus-dev (#1291)
Change riptideio to pymodbus-dev. (#1292)
#1258 Avoid showing unit as a seperate command line argument (#1288)
Solve docker cache problem. (#1287)
small performance improvement on debug log
add missing server.start() (#1282)
small performance improvement on debug log (#1279)
Fix Unix sockets parsing (#1281)
client: Allow unix domain socket. (#1274)
transfer timeout to protocol object. (#1275)
Add ModbusUnixServer / StartAsyncUnixServer. (#1273)
Added return in AsyncModbusSerialClient.connect (#1271)
add connect() to the very first example (#1270)
Solve docker problem. (#1268)
Test stop of server task. (#1256)
Parallelize pytest with pytest-xdist
Add xdist pr default. (#1253)
Create docker-publish.yml (#1250)
Parallelize pytest with pytest-xdist (#1247)
Support Python3.11 (#1246)
Fix reconnectDelay to be within (100ms, 5min) (#1244)
Fix typos in comments (#1233)
WEB simulator, first version. (#1226)
Clean async serial problem. (#1235)
terminate when using 'randomize' and 'change_rate' at the same time (#1231)
Used tooled python and OS (#1232)
add 'change_rate' randomization option (#1229)
add check_ci.sh (#1225)
Simplify CI and use cache. (#1217)
Solve issue 1210, update simulator (#1211)
Add missing client calls in mixin.py. (#1206)
Advanced simulator with cross memory. (#1195)
AsyncModbusTcp/UdpClient honors delay_ms == 0 (#1203) (#1205)
Fix #1188 and some pylint issues (#1189)
Serial receive incomplete bytes.issue #1183 (#1185)
Handle echo (#1186)
Add updating server example. (#1176)
Added --host to client_* examples, to allow easier use.
unit= in client calls are no longer converted to slave=, but raises a runtime exception.
Added missing client calls (all standard request are not available as methods).
client.mask_write_register() changed parameters.
server classes no longer accept reuse_port= (the socket do not accept it)
Add pygments as requirement for repl
Add pygments as requirement for repl
Update datastore remote to handle write requests (#1166)
Allow multiple servers. (#1164)
Fix typo. (#1162)
Transfer parms. to connected client. (#1161)
Repl enhancements 2 (#1141)
Server simulator with datastore with json data. (#1157)
Avoid unwanted reconnects (#1154)
Do not initialize framer twice. (#1153)
Allow timeout as float. (#1152)
Improve Docker Support (#1145)
Fix unreachable code in AsyncModbusTcpClient (#1151)
Fix type hints for port and timeout (#1147)
Start/stop multiple servers. (#1138)
Server/asyncio.py correct logging when disconnecting the socket (#1135)
Add Docker and container registry support (#1132)
Removes undue reported error when forwarding (#1134)
Obey timeout parameter on connection (#1131)
Readme typos (#1129)
Clean noqa directive. (#1125)
Add isort and activate CI fail for black/isort. (#1124)
Update examples. (#1117)
Move logging configuration behind function call (#1120)
serial2TCP forwarding example (#1116)
Make serial import dynamic. (#1114)
Bugfix ModbusSerialServer setup so handler is called correctly. (#1113)
Clean configurations. (#1111)
* Faulty release!
Faulty release!
Solve multiple incomming frames.
Solve multiple incomming frames. (#1107)
Up coverage, tests are 100%. (#1098)
Prepare for rc1. (#1097)
Prepare 3.0.0dev5 (#1095)
Adapt serial tests. (#1094)
Allow windows. (#1093)
Remove server sync code and combine with async code. (#1092)
Solve test of tls by adding certificates and remove bugs (#1080)
Simplify server implementation. (#1071)
Do not filter using unit id in the received response (#1076)
Hex values for repl arguments (#1075)
All parameters in class parameter. (#1070)
Add len parameter to decode_bits. (#1062)
New combined test for all types of clients. (#1061)
Dev mixin client (#1056)
Add/update client documentation, including docstrings etc. (#1055)
Add unit to arguments (#1041)
Add timeout to all pytest. (#1037)
Simplify client parent classes. (#1018)
Clean copyright statements, to ensure we follow FOSS rules. (#1014)
Rectify sync/async client parameters. (#1013)
Clean client directory structure for async. (#1010)
Remove async_io, simplify AsyncModbus<x>Client. (#1009)
remove init_<something>_client(). (#1008)
Remove async factory. (#1001)
Remove loop parameter from client/server (#999)
add example async client. (#997)
Change async ModbusSerialClient to framer= from method=. (#994)
Add forwarder example with multiple slaves. (#992)
Remove async get_factory. (#990)
Remove unused ModbusAccessControl. (#989)
Solve problem with remote datastore. (#988)
Remove unused schedulers. (#976)
Remove twisted (#972)
Remove/Update tornado/twister tests. (#971)
remove easy_install and ez_setup (#964)
Fix mask write register (#961)
Activate pytest-asyncio. (#949)
Changed default framer for serial to be ModbusRtuFramer. (#948)
Remove tornado. (#935)
Pylint, check method parameter documentation. (#909)
Add get_response_pdu_size to mask read/write. (#922)
Minimum python version is 3.8. (#921)
Ensure make doc fails on warnings and/or errors. (#920)
Remove central makefile. (#916)
Re-organize examples (#914)
Documentation cleanup and clarification (#689)
Update doc for repl. (#910)
Include package and tests in coverage measurement (#912)
Use response byte length if available (#880)
better fix for rtu incomplete frames (#511)
Remove twisted/tornado from doc. (#904)
Update classifiers for pypi. (#907)
Documentation updates
PEP8 compatibale code
More tooling and CI updates
Remove python2 compatibility code (#564)
Remove Python2 checks and Python2 code snippets
Misc co-routines related fixes
Fix CI for python3 and remove PyPI from CI
Fix mask_write_register call. (#685)
Add support for byte strings in the device information fields (#693)
Catch socket going away. (#722)
Misc typo errors (#718)
Support python3.10
Implement asyncio ModbusSerialServer
ModbusTLS updates (tls handshake, default framer)
Support broadcast messages with asyncio client
Fix for lazy loading serial module with asyncio clients.
Updated examples and tests
Support python3.7 and above
Support creating asyncio clients from with in coroutines.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →