{ "info": { "author": "Nina Pakshina", "author_email": "ninucium@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# Modbus2Websocket\nModbus2Websocket (further, M2W) is an python-based application that routes data between Modbus TCP protocol and Websockets.\n\n![m2w logo](http://ninucium.ru/modbus2websocket/logo.png)\n\n## Purpose\nThe main goal of M2W router is to deliver data between industrial system and web application. Modbus TCP - industrial protocol, used to exchange information between industrial devices and HMIs. Usually, to visualize data engineers have to use heavy and expensive SCADA or HMI. On other hand web technologies provide easy and powerful tools for data visualization in your own web browser, without any thick client. That is why M2W was created in first place - to make simple webHMI server that works with Industrial systems.\n\n\n## Components\n- async Modbus TCP server `async_modbus_server.py`\n- async Modbus TCP client `async_modbus_client.py`\n- async Websocket server `async_websocket_server.py`\n- Router `router.py`\n\n\n## What it supports\n* Reading Input Registers, Digital Inputs, Coils and Holding Registers$\n* Sending to the websocket client.\n\n## Future development:\n- [x] Async Modbus Server\n- [x] Async Modbus Client\n- [x] Async Websocket Server\n- [x] Router\n- [x] Html example page\n- [ ] Database connection\n\n\n## Installation steps\n* [Module installation](#module-installation)\n* [Details](#details)\n* [Creating app](#creating-app)\n* [Example](#example)\n* [Modbus details](#modbus-details)\n\n## Installation\n### Module installation\n\nModbus2websocket library installs with pip:\n```\npip install modbus2websocket\n```\n\n### Details\nBefore creating you application you have to specify following:\n* Websocket server IP, for example, 192.168.220.10\n* Websocket port, by default, it is 8888\n* Modbus/TCP server's IP, for example, 192.168.220.5\n\n\n### Modbus server\nIf you don't have running Modbus/TCP server, you can use server simulator.\n\n### Creating app\nClass Router will manage data between Modbus/TCP and websockets client, that runs in your browser\n```python\nfrom modbus2websocket.router import Router\n```\nRouter has two public methods:\n* `Router.add_modbus_reg()` - that adds registers you want to read\n* `Router.run()` - that runs router.\n\nYou should add registers that you want to read, as a list of dictionaries.\nStructure of single registers looks like that:\n```python\nInput_register_1 = {'ir':\n {\n 'adr': 0,\n 'num': 1,\n 'name': 'Input Register 1',\n },\n },\n```\nWhere:\n* `ir` - registers type. (see [Modbus details](#modbus-details)).\n* `adr` - regsiter's address. It starts from 0 to 65535.\n* `num` - number of registers to read. It is limited between 1 to 2000.\n* `name` - unique name for your register.\n\n\n### Example\n\n```python\nfrom modbus2websocket.router import Router\n\n\nif __name__ == '__main__':\n ws_ip = '192.168.220.10' # websocket ip address\n ws_port = 8888 # websocket port\n modbus_ip = '192.168.220.5' # Modbus ip address\n router = Router(ws_ip, ws_port, modbus_ip)\n # Modbus registers to read\n regs = [\n {'ir':\n {\n 'adr': 0,\n 'num': 1,\n 'name': 'Reg1',\n },\n },\n {'hr':\n {\n 'adr': 1,\n 'num': 1,\n 'name': 'Reg2',\n },\n },\n {'ir':\n {\n 'adr': 2,\n 'num': 1,\n 'name': 'Reg3',\n },\n },\n ]\n router.add_modbus_reg(regs)\n router.run()\n```\n\n### Modbus details\n\nRegisters type | Short name | Description\n-----------------|------------|-------------\nDigital Input | DI | Read only, bool, 1-bit\nInput Register | IR | Read only, float/int, 16-bit\nCoil | C | Read/write, bool, 1-bit\nHolding register | HR | Read/write, float/int, 16-bit\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/PakshNina/modbus2websocket", "keywords": "modbus tcp websocket asyncio socket", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "modbus2websocket", "package_url": "https://pypi.org/project/modbus2websocket/", "platform": "", "project_url": "https://pypi.org/project/modbus2websocket/", "project_urls": { "Homepage": "https://github.com/PakshNina/modbus2websocket" }, "release_url": "https://pypi.org/project/modbus2websocket/0.0.5/", "requires_dist": [ "pyModbusTCP", "websockets" ], "requires_python": "", "summary": "Modbus/TCP to websocket router.", "version": "0.0.5" }, "last_serial": 5708478, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "3040df36819ef6c16aaea1f0d42409e3", "sha256": "ae04c40e3c5bbe367b8faf6d99d84f3fef5bd459cd9f7a50c428039cc8e72a1f" }, "downloads": -1, "filename": "modbus2websocket-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3040df36819ef6c16aaea1f0d42409e3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7263, "upload_time": "2019-08-20T13:28:11", "url": "https://files.pythonhosted.org/packages/bb/1c/d96bc36c4cf832b009e8f1917cc51d088d3cbf2fc85aa3d50c8e4f93bcef/modbus2websocket-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7461bd027cf1cff038ecc4512c0bacd3", "sha256": "95c79a7a796946064e2051bca76edbbf7fa268869be042980ea87a67e89d8e16" }, "downloads": -1, "filename": "modbus2websocket-0.0.1.tar.gz", "has_sig": false, "md5_digest": "7461bd027cf1cff038ecc4512c0bacd3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4722, "upload_time": "2019-08-20T13:28:13", "url": "https://files.pythonhosted.org/packages/8f/7c/6f9e731a827af949e7951962250b4c324c3386f789b7369a71d4ad76f1cb/modbus2websocket-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "cf1de888709288f1f10af28d09d37b8e", "sha256": "c2a4c6cdbd046e1761786dfe35071c26dc91f36dde59b2b083a27457c67e21e7" }, "downloads": -1, "filename": "modbus2websocket-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "cf1de888709288f1f10af28d09d37b8e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7268, "upload_time": "2019-08-20T13:56:47", "url": "https://files.pythonhosted.org/packages/1e/42/ba9a2db505b0f9add4bd9a40293c2c4848d9de4baff80d8cf4ea1f30309b/modbus2websocket-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b30bcdfe26d169776af0a8dde69f26ab", "sha256": "c07c95750c7102389ce9dae498d9f94adc5e1151c46e76945ca34fee0f13b578" }, "downloads": -1, "filename": "modbus2websocket-0.0.2.tar.gz", "has_sig": false, "md5_digest": "b30bcdfe26d169776af0a8dde69f26ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4740, "upload_time": "2019-08-20T13:41:58", "url": "https://files.pythonhosted.org/packages/e7/f8/c365017ec9c3dc1b1b7541e13b50f21fdc7a776e16ce6c8f87efd6c472e3/modbus2websocket-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "0b11b485248afd3676a726a453bc5be3", "sha256": "8482397da001f9203269b87ffe3ebf945937984455a259b4ec6dcabb4ca861a6" }, "downloads": -1, "filename": "modbus2websocket-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "0b11b485248afd3676a726a453bc5be3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7268, "upload_time": "2019-08-20T13:58:22", "url": "https://files.pythonhosted.org/packages/65/ff/d010c08d4dfedfb5d48c37cac35ae954eda7c06589b44e4084d414ae8d34/modbus2websocket-0.0.3-py3-none-any.whl" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "ece100869b79dee3e2e076b122861853", "sha256": "b0150adece44ae2a850a9e7832f45215f2e98f393145af4bccf3638c036cc711" }, "downloads": -1, "filename": "modbus2websocket-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "ece100869b79dee3e2e076b122861853", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8131, "upload_time": "2019-08-21T10:24:48", "url": "https://files.pythonhosted.org/packages/ea/7c/ad48f91ce5452d528c1a149b83f3dc7e617031421f7e44a3dc9c8d3b2f86/modbus2websocket-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9121c3b2028b1b37f92c48e8d4fb47fd", "sha256": "d17c4b5f58d1fd636bb617090247aac2bdd1cf6811f7292edcb73882cbb22b60" }, "downloads": -1, "filename": "modbus2websocket-0.0.4.tar.gz", "has_sig": false, "md5_digest": "9121c3b2028b1b37f92c48e8d4fb47fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5542, "upload_time": "2019-08-21T10:23:13", "url": "https://files.pythonhosted.org/packages/e4/a7/fa5ce57f1c54ceac105b7b4db50f8d84cd3aec849748bc32d698b81fea39/modbus2websocket-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "b42a9cc1c6e18202da16652b6f2099f8", "sha256": "ac8dffb07063a39886a4762c655fda1b33137ff5021bc4a1c2ed7e9528a1ef76" }, "downloads": -1, "filename": "modbus2websocket-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "b42a9cc1c6e18202da16652b6f2099f8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8179, "upload_time": "2019-08-21T10:26:43", "url": "https://files.pythonhosted.org/packages/35/b9/13d2c2451142b748fd69aaeefca4f5f0a3c6d485cf22e438c349fc37fcdd/modbus2websocket-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9ee7791a12c95367e97ef1bbf37d6eac", "sha256": "521fb5b8fb1cc69fdca71043341e0762e35b95edab49a41952baa34873848098" }, "downloads": -1, "filename": "modbus2websocket-0.0.5.tar.gz", "has_sig": false, "md5_digest": "9ee7791a12c95367e97ef1bbf37d6eac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5595, "upload_time": "2019-08-21T10:27:06", "url": "https://files.pythonhosted.org/packages/c2/e9/c4f2ae98cbe7431595f3126af4b59832dfae4a11f89872b87339974f86e0/modbus2websocket-0.0.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b42a9cc1c6e18202da16652b6f2099f8", "sha256": "ac8dffb07063a39886a4762c655fda1b33137ff5021bc4a1c2ed7e9528a1ef76" }, "downloads": -1, "filename": "modbus2websocket-0.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "b42a9cc1c6e18202da16652b6f2099f8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8179, "upload_time": "2019-08-21T10:26:43", "url": "https://files.pythonhosted.org/packages/35/b9/13d2c2451142b748fd69aaeefca4f5f0a3c6d485cf22e438c349fc37fcdd/modbus2websocket-0.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9ee7791a12c95367e97ef1bbf37d6eac", "sha256": "521fb5b8fb1cc69fdca71043341e0762e35b95edab49a41952baa34873848098" }, "downloads": -1, "filename": "modbus2websocket-0.0.5.tar.gz", "has_sig": false, "md5_digest": "9ee7791a12c95367e97ef1bbf37d6eac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5595, "upload_time": "2019-08-21T10:27:06", "url": "https://files.pythonhosted.org/packages/c2/e9/c4f2ae98cbe7431595f3126af4b59832dfae4a11f89872b87339974f86e0/modbus2websocket-0.0.5.tar.gz" } ] }