# DM-aiomodbus
## Urls
* [PyPI](https://pypi.org/project/dm-aiomodbus)
* [GitHub](https://github.com/MykhLibs/dm-aiomodbus)
## Example
### Connection
* Serial
```python
from dm_aiomodbus import DMAioModbusSerialClient
modbus_client = DMAioModbusSerialClient(
port="/dev/ttyUSB0",
baudrate=9600,
bytesize=8,
stopbits=2,
parity="N"
)
```
* TCP
```python
from dm_aiomodbus import DMAioModbusTcpClient
modbus_client = DMAioModbusTcpClient(
host="192.168.0.0",
port=501
)
```
* Simulator _(always returns mock data)_
```python
from dm_aiomodbus import DMAioModbusSimulatorClient
modbus_client = DMAioModbusSimulatorClient()
```
### Usage
* _**Usual**_ client
```python
from dm_aiomodbus import DMAioModbusTcpClient
import asyncio
async def main():
# create client
modbus_client = DMAioModbusTcpClient(
host="192.168.0.0",
port=501,
name_tag="my_tcp_plc"
)
# read registers
reg_258_259, = await modbus_client.read_holding_registers(258, count=2)
reg_256 = await modbus_client.read_holding_registers(256)
# read second slave-device
reg_260_2 = await modbus_client.read_holding_registers(address=260, slave=2)
print(reg_258_259, reg_256, reg_260_2)
# write registers
status_256 = await modbus_client.write_register(256, 1)
print(status_256)
# write second slave-device
await modbus_client.write_register(260, value=0, slave=2)
if __name__ == "__main__":
asyncio.run(main())
```
* _**Return-errors**_ client
Error messages are returned with the execution result
```python
from dm_aiomodbus import DMAioModbusTcpClient
import asyncio
async def main():
# create client
modbus_client = DMAioModbusTcpClient(
host="192.168.0.0",
port=501,
return_errors=True
)
# read registers
# get values and error (if present, else "")
reg_258_259, err1 = await modbus_client.read_holding_registers(258, count=2)
print(reg_258_259, err1)
# write registers
# get write status and error (if present, else "")
status_256, err2 = await modbus_client.write_register(256, 1)
print(status_256, err2)
if __name__ == "__main__":
asyncio.run(main())
```
### Optional init parameters
| Parameter | Type | Default Value | Description |
|----------------------------|--------|---------------|---------------------------------------------------------------------|
| `return_errors` | `bool` | `False` | Error messages are returned with the execution result |
| `execute_timeout_s` | `int` | `5` | requests timeout (s) |
| `disconnect_timeout_s` | `int` | `20` | timeout waiting for an active connection after the last request (s) |
| `after_execute_timeout_ms` | `int` | `3` | timeout between requests (ms) |
| `name_tag` | `str` | _auto_ | name tag for logger suffix |
### Set custom logger
_If you want set up custom logger_
```python
from dm_aiomodbus import DMAioModbusTcpClient
# create custom logger
class MyLogger:
def debug(self, message):
pass
def info(self, message):
pass
def warning(self, message):
print(message)
def error(self, message):
print(message)
# set up custom logger for all clients
DMAioModbusTcpClient.set_logger(MyLogger())
```
### Run in Windows
_If you run async code in **Windows**, set correct selector_
```python
import asyncio
import sys
if sys.platform == "win32":
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
```
Raw data
{
"_id": null,
"home_page": "https://pypi.org/project/dm-aiomodbus",
"name": "dm-aiomodbus",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "dm aiomodbus",
"author": "dimka4621",
"author_email": "mismartconfig@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/4e/6b/e7bf3233ea5413c38323411bb52adf0be9d93d93c119abc6dcfd508f9935/dm_aiomodbus-0.2.4.tar.gz",
"platform": null,
"description": "# DM-aiomodbus\n\n## Urls\n\n* [PyPI](https://pypi.org/project/dm-aiomodbus)\n* [GitHub](https://github.com/MykhLibs/dm-aiomodbus)\n\n## Example\n\n### Connection\n\n* Serial\n ```python\n from dm_aiomodbus import DMAioModbusSerialClient\n\n modbus_client = DMAioModbusSerialClient(\n port=\"/dev/ttyUSB0\",\n baudrate=9600,\n bytesize=8,\n stopbits=2,\n parity=\"N\"\n )\n ```\n\n* TCP\n ```python\n from dm_aiomodbus import DMAioModbusTcpClient\n\n modbus_client = DMAioModbusTcpClient(\n host=\"192.168.0.0\",\n port=501\n )\n ```\n\n* Simulator _(always returns mock data)_\n ```python\n from dm_aiomodbus import DMAioModbusSimulatorClient\n\n modbus_client = DMAioModbusSimulatorClient()\n ```\n\n### Usage\n\n* _**Usual**_ client\n\n```python\nfrom dm_aiomodbus import DMAioModbusTcpClient\nimport asyncio\n\n\nasync def main():\n # create client\n modbus_client = DMAioModbusTcpClient(\n host=\"192.168.0.0\",\n port=501,\n name_tag=\"my_tcp_plc\"\n )\n\n # read registers\n reg_258_259, = await modbus_client.read_holding_registers(258, count=2)\n reg_256 = await modbus_client.read_holding_registers(256)\n # read second slave-device\n reg_260_2 = await modbus_client.read_holding_registers(address=260, slave=2)\n print(reg_258_259, reg_256, reg_260_2)\n\n # write registers\n status_256 = await modbus_client.write_register(256, 1)\n print(status_256)\n # write second slave-device\n await modbus_client.write_register(260, value=0, slave=2)\n\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n* _**Return-errors**_ client\n\nError messages are returned with the execution result\n```python\nfrom dm_aiomodbus import DMAioModbusTcpClient\nimport asyncio\n\n\nasync def main():\n # create client\n modbus_client = DMAioModbusTcpClient(\n host=\"192.168.0.0\",\n port=501,\n return_errors=True\n )\n\n # read registers\n # get values and error (if present, else \"\")\n reg_258_259, err1 = await modbus_client.read_holding_registers(258, count=2)\n print(reg_258_259, err1)\n\n # write registers\n # get write status and error (if present, else \"\")\n status_256, err2 = await modbus_client.write_register(256, 1)\n print(status_256, err2)\n\n\nif __name__ == \"__main__\":\n asyncio.run(main())\n```\n\n### Optional init parameters\n\n| Parameter | Type | Default Value | Description |\n|----------------------------|--------|---------------|---------------------------------------------------------------------|\n| `return_errors` | `bool` | `False` | Error messages are returned with the execution result |\n| `execute_timeout_s` | `int` | `5` | requests timeout (s) |\n| `disconnect_timeout_s` | `int` | `20` | timeout waiting for an active connection after the last request (s) |\n| `after_execute_timeout_ms` | `int` | `3` | timeout between requests (ms) |\n| `name_tag` | `str` | _auto_ | name tag for logger suffix |\n\n### Set custom logger\n\n_If you want set up custom logger_\n\n```python\nfrom dm_aiomodbus import DMAioModbusTcpClient\n\n\n# create custom logger\nclass MyLogger:\n def debug(self, message):\n pass\n\n def info(self, message):\n pass\n\n def warning(self, message):\n print(message)\n\n def error(self, message):\n print(message)\n\n\n# set up custom logger for all clients\nDMAioModbusTcpClient.set_logger(MyLogger())\n```\n\n### Run in Windows\n\n_If you run async code in **Windows**, set correct selector_\n\n```python\nimport asyncio\nimport sys\n\nif sys.platform == \"win32\":\n asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "This is my custom aiomodbus client",
"version": "0.2.4",
"project_urls": {
"GitHub": "https://github.com/MykhLibs/dm-aiomodbus",
"Homepage": "https://pypi.org/project/dm-aiomodbus"
},
"split_keywords": [
"dm",
"aiomodbus"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "2a573a3c87a61f033a84a8565a8b9f0a89c995bcba182896bb29bec3779e9656",
"md5": "a8ce4fe927a1cc5ab1328e2dd40316f1",
"sha256": "91e4865cde67f3626e3e8947cf83a147636e81ecd6bd4eb76c2be64e3fa3db58"
},
"downloads": -1,
"filename": "dm_aiomodbus-0.2.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a8ce4fe927a1cc5ab1328e2dd40316f1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 6327,
"upload_time": "2024-10-21T10:18:27",
"upload_time_iso_8601": "2024-10-21T10:18:27.179910Z",
"url": "https://files.pythonhosted.org/packages/2a/57/3a3c87a61f033a84a8565a8b9f0a89c995bcba182896bb29bec3779e9656/dm_aiomodbus-0.2.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4e6be7bf3233ea5413c38323411bb52adf0be9d93d93c119abc6dcfd508f9935",
"md5": "70a9b28b7bd63630209b8faf464861dc",
"sha256": "880fd2ecb885c79c56857d2e298369e8d3268f5346d2d28b9f3b9067f4706044"
},
"downloads": -1,
"filename": "dm_aiomodbus-0.2.4.tar.gz",
"has_sig": false,
"md5_digest": "70a9b28b7bd63630209b8faf464861dc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 5412,
"upload_time": "2024-10-21T10:18:28",
"upload_time_iso_8601": "2024-10-21T10:18:28.489811Z",
"url": "https://files.pythonhosted.org/packages/4e/6b/e7bf3233ea5413c38323411bb52adf0be9d93d93c119abc6dcfd508f9935/dm_aiomodbus-0.2.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-21 10:18:28",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "MykhLibs",
"github_project": "dm-aiomodbus",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "dm-aiomodbus"
}