{ "info": { "author": "Henrik Palmlund Wahlgren @ Palmlund Wahlgren Innovative Technology AB", "author_email": "henrik@pwit.se", "bugtrack_url": null, "classifiers": [], "description": "\n# IEC 62056-21\n\n[![CircleCI](https://circleci.com/gh/pwitab/iec62056-21/tree/master.svg?style=svg)](https://circleci.com/gh/pwitab/iec62056-21/tree/master)\n[![Coverage Status](https://coveralls.io/repos/github/pwitab/iec62056-21/badge.svg)](https://coveralls.io/github/pwitab/iec62056-21)\n\nA Python library for IEC 62056-21, Direct Local Data Exchange of Energy Meters. \nFormer IEC 61107 or IEC 1107\n\n## Installation\n\nWe only support python 3.6+\n\nInstall via pip:\n\n```\npip install iec62056-21\n```\n\n## About IEC 62056-21\n\nIEC 62056-21 (earlier IEC 61107 or sometimes just IEC 1107, is an international \nstandard for a computer protocol to read utility meters. It is designed to operate \nover any media, including the Internet. A meter sends ASCII (in modes A..D) or \nHDLC (mode E) data to a nearby hand-held unit (HHU) using a serial port. The physical \nmedia are usually either modulated light, sent with an LED and received with a \nphotodiode, or a pair of wires, usually modulated by a 20mA current loop. The protocol \nis usually half-duplex.\n\n\n## Limitations of this library.\n\n* At the moment we only support Mode C.\n* We assume that only protocol mode Normal is used.\n\n## Example usage:\n\nReading a meter using a optical usb probe via the D0-interface.\n\n```python\nfrom iec62056_21.client import Iec6205621Client\n\nclient = Iec6205621Client.with_serial_transport(port='/dev/tty_something')\n\npassword_challange = client.access_programming_mode()\n\nclient.send_password('00000000') # Common standard password\n\ndata_answer = client.read_value('1.8.0')\n```\n\n```python\nfrom iec62056_21.client import Iec6205621Client\n\nclient = Iec6205621Client.with_tcp_transport(address=('192.168.0.1', 8000), device_address='12345678', password='00000000')\n\npassword_challange = client.access_programming_mode()\n\nclient.send_password('00000000') # Common standard password\n\ndata_answer = client.read_value('1.8.0')\n```\n\n\n## Derivative protocols\n\nSome manufacturer are using a derivative protocol to IEC 62056-21. They comply with \nmost things but might for example not use the access request features according to \nstandard or they have a slightly different flow in command execution\n\nThis library can be used with some of them. You just need to be aware of the differences.\nWe provide special handlers for some unique parts that is included in this library. \nThey might be split into separate libraries in the future.\n\n### LIS-200\n\nA protocol for Elster devices. Main difference is that they have the concept of \nlocks instead of password and instead of answering the password request you need to \nwrite the password to a certain register.\n\n## Development\n\nThis library is developed by Palmlund Wahlgren Innovative Technology AB in Sweden and \nis used in our multi utility AMR solution: [Utilitarian](https://docs.utilitarian.io)\n\n## Contributing\n\n* Check for open issues or open a fresh issue to start a discussion around a feature \n idea or a bug.\n* Fork the repository on GitHub to start making your changes to the master branch (or \n branch off of it).\n* Write a test which shows that the bug was fixed or that the feature works as expected.\n* Send a pull request and bug the maintainer until it gets merged and published.\n\n\n\n# Changelog\n\n\nThe format is based on `Keep a Changelog: https://keepachangelog.com/en/1.0.0/`,\nand this project adheres to `Semantic Versioning: https://semver.org/spec/v2.0.0.html`\n\n\n## Unreleased\n\n### Added\n\n### Changed\n\n### Deprecated\n\n### Removed\n\n### Fixed\n\n### Security\n\n\n# v.0.0.2 (2019-06-12)\n\n### Fixed\n\nIssue `#2` Dependency problems when installing.\n\n# v0.0.1 (2019-06-04)\n\nInitial implementation of IEC 62056-21 with focus on supporting LIS 200 derivative \nprotocol.\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/pwitab/iec62056-21", "keywords": "metering,amr,iec62056-21", "license": "BSD-3-Clause", "maintainer": "", "maintainer_email": "", "name": "iec62056-21", "package_url": "https://pypi.org/project/iec62056-21/", "platform": "", "project_url": "https://pypi.org/project/iec62056-21/", "project_urls": { "Homepage": "https://github.com/pwitab/iec62056-21" }, "release_url": "https://pypi.org/project/iec62056-21/0.0.2/", "requires_dist": [ "attrs (>=19.1.0)", "pyserial (>=3.4)" ], "requires_python": "~=3.6", "summary": "A Python library for IEC62056-21, Local Data Readout of Energy Meters. Former IEC1107", "version": "0.0.2" }, "last_serial": 5390651, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "1367b7fd493999f30618d2bb5770091f", "sha256": "5aa0ac8674cdc8112eec120ddd284b08e82a51c0be50eccc4ebc9d5f0a7bbdcd" }, "downloads": -1, "filename": "iec62056_21-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "1367b7fd493999f30618d2bb5770091f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.6", "size": 21555, "upload_time": "2019-06-04T13:25:26", "url": "https://files.pythonhosted.org/packages/8f/54/5976241ad31c65c2e5cacd41d4e4fd8ccb8438fd803cdc059488b077a51c/iec62056_21-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2e5de2389fb793f9397fa1e9c167cf1b", "sha256": "358ab049373b5071c563e28be20a9392a7ef3ebdd5c7932275758538048c5149" }, "downloads": -1, "filename": "iec62056-21-0.0.1.tar.gz", "has_sig": false, "md5_digest": "2e5de2389fb793f9397fa1e9c167cf1b", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 20671, "upload_time": "2019-06-04T13:25:28", "url": "https://files.pythonhosted.org/packages/db/9e/8250bc59dd7b086e86a3f257394c38866841abd91a0fcb10ed94233df00a/iec62056-21-0.0.1.tar.gz" } ], "0.0.1.dev1": [ { "comment_text": "", "digests": { "md5": "4d1679d64ba1df3f32be8189f5e513f3", "sha256": "f2c60daec0fda05f1f8414306e69d727f5ffb41d1858050ee58e9c8e4c5d353e" }, "downloads": -1, "filename": "iec62056_21-0.0.1.dev1-py3-none-any.whl", "has_sig": false, "md5_digest": "4d1679d64ba1df3f32be8189f5e513f3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3419, "upload_time": "2018-05-09T20:35:47", "url": "https://files.pythonhosted.org/packages/f8/bc/19c78ef321236b4cec9585fda958397f8c924c1ad02c1275e6a55787fbfa/iec62056_21-0.0.1.dev1-py3-none-any.whl" } ], "0.0.1.dev2": [ { "comment_text": "", "digests": { "md5": "a70a26274747af29bcac31ea64794dbd", "sha256": "3b12d48a4549bf734f4ca4947cb7e485639c8da21e906fca02e7bbf51c6fbef3" }, "downloads": -1, "filename": "iec62056_21-0.0.1.dev2-py3-none-any.whl", "has_sig": false, "md5_digest": "a70a26274747af29bcac31ea64794dbd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.6", "size": 21530, "upload_time": "2019-06-04T12:48:25", "url": "https://files.pythonhosted.org/packages/a2/38/a28cb09e24fe4e2ed7b3cab307f0eb6d19114b9a98fde69fdaa2c7e8c923/iec62056_21-0.0.1.dev2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e07acb0dbcb589fbc674f3c3a6dc6792", "sha256": "090c14cbde987f1d1618ac46eda7f3fc471649ef05cc93fc0417e281b0a6ae74" }, "downloads": -1, "filename": "iec62056-21-0.0.1.dev2.tar.gz", "has_sig": false, "md5_digest": "e07acb0dbcb589fbc674f3c3a6dc6792", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 20635, "upload_time": "2019-06-04T12:48:27", "url": "https://files.pythonhosted.org/packages/90/93/20b02a79de1b89a7a2caf27d7fffe35ab551d94677994ed6b8db31ddede8/iec62056-21-0.0.1.dev2.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "db9ac4f9a3eca49487047437cc24edfb", "sha256": "951d529da9a13646c4209259bc8850a0582a65ad10bef55164aec2a84ffd1705" }, "downloads": -1, "filename": "iec62056_21-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "db9ac4f9a3eca49487047437cc24edfb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.6", "size": 21601, "upload_time": "2019-06-12T11:02:50", "url": "https://files.pythonhosted.org/packages/4f/39/0de3afb472e461e4464da1a16cc3a46715e29fdf012157644e963166f0b2/iec62056_21-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6da223887f697353f1d1cebd89a4851d", "sha256": "3d5e2ceefdecceef7baf5086d6fa2feafa706a272b90a73f02c3f76386d868f5" }, "downloads": -1, "filename": "iec62056-21-0.0.2.tar.gz", "has_sig": false, "md5_digest": "6da223887f697353f1d1cebd89a4851d", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 20729, "upload_time": "2019-06-12T11:02:51", "url": "https://files.pythonhosted.org/packages/d4/27/4d82e32df9ea77bd51af66ec435510bcf929cd32c87fa19cbe692322e23e/iec62056-21-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "db9ac4f9a3eca49487047437cc24edfb", "sha256": "951d529da9a13646c4209259bc8850a0582a65ad10bef55164aec2a84ffd1705" }, "downloads": -1, "filename": "iec62056_21-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "db9ac4f9a3eca49487047437cc24edfb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": "~=3.6", "size": 21601, "upload_time": "2019-06-12T11:02:50", "url": "https://files.pythonhosted.org/packages/4f/39/0de3afb472e461e4464da1a16cc3a46715e29fdf012157644e963166f0b2/iec62056_21-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6da223887f697353f1d1cebd89a4851d", "sha256": "3d5e2ceefdecceef7baf5086d6fa2feafa706a272b90a73f02c3f76386d868f5" }, "downloads": -1, "filename": "iec62056-21-0.0.2.tar.gz", "has_sig": false, "md5_digest": "6da223887f697353f1d1cebd89a4851d", "packagetype": "sdist", "python_version": "source", "requires_python": "~=3.6", "size": 20729, "upload_time": "2019-06-12T11:02:51", "url": "https://files.pythonhosted.org/packages/d4/27/4d82e32df9ea77bd51af66ec435510bcf929cd32c87fa19cbe692322e23e/iec62056-21-0.0.2.tar.gz" } ] }