{ "info": { "author": "Theodor Lindquist", "author_email": "theodor.lindquist@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Home Automation" ], "description": "# pymysensors [![Build Status][build-badge]][build]\nPython API for talking to a MySensors gateway (http://www.mysensors.org/). Currently supports serial protocol v1.4, v1.5, v2.0 - v2.2. Not all features of v2.x are implemented yet.\n\n- Supports smartsleep with serial API v2.x.\n- Supports the MQTT client gateway with serial API v2.x.\n- Supports OTA updates, for both [DualOptiboot](https://github.com/mysensors/DualOptiboot) and [MYSBootloader](https://github.com/mysensors/MySensorsBootloaderRF24) bootloaders.\n- All gateway instances, serial, tcp (ethernet) or mqtt will run in separate threads.\n- As an alternative to running the gateway in its own thread, there are experimental implementations of all gateways using asyncio.\n\n# Usage\nCurrently the API is best used by implementing a callback handler\n\n```python\nimport mysensors.mysensors as mysensors\n\ndef event(message):\n \"\"\"Callback for mysensors updates.\"\"\"\n print('sensor_update ' + str(message.node_id))\n\nGATEWAY = mysensors.SerialGateway('/dev/ttyACM0', event)\nGATEWAY.start()\n```\n\nIn the above example PyMysensors will call \"event\" whenever a node in the Mysensors network has been updated. The message passed to the callback handler has the following data:\n\n```\nMessage\n gateway - the gateway instance\n node_id - the sensor node identifier\n child_id - the child sensor id\n type - the message type (int)\n ack - True is message was an ACK, false otherwise\n sub_type - the message sub_type (int)\n payload - the payload of the message (string)\n```\n\nSymbolic names for the Message types and sub_types are defined in the protocol version-specific const_X.py files.\n\nThe data structure of a gateway and it's network is described below.\n\n```\nSerialGateway/TCPGateway/MQTTGateway\n sensors - a dict containing all nodes for the gateway; node is of type Sensor\n\nSensor - a sensor node\n children - a dict containing all child sensors for the node\n sensor_id - node id on the MySensors network\n type - 17 for node or 18 for repeater\n sketch_name\n sketch_version\n battery_level\n protocol_version - the mysensors protocol version used by the node\n\nChildSensor - a child sensor\n id - child id on the parent node\n type - data type, S_HUM, S_TEMP etc.\n description - the child description sent when presenting the child\n values - a dictionary of values (V_HUM, V_TEMP, etc.)\n```\n\nGetting the type and values of node 23, child sensor 4 would be performed as follows:\n\n```python\ns_type = GATEWAY.sensors[23].children[4].type\nvalues = GATEWAY.sensors[23].children[4].values\n```\nTo update a node child sensor value and send it to the node, use the set_child_value method in the Gateway class:\n\n```python\n# To set sensor 1, child 1, sub-type V_LIGHT (= 2), with value 1.\nGATEWAY.set_child_value(1, 1, 2, 1)\n```\n\n## Persistence\nWith persistence mode on, you can restart the gateway without\nhaving to restart each individual node in your sensor network. To enable persistence mode, the keyword argument `persistence`\nin the constructor should be True. A path to the config file\ncan be specified as the keyword argument `persistence_file`. The file type (.pickle or .json) will set which persistence protocol to use, pickle or json. JSON files can be read using a normal text editor. Saving to the persistence file will be done on a schedule every 10 seconds if an update has been done since the last save. Make sure you start the persistence saving before starting the gateway.\n\n```py\nGATEWAY.start_persistence()\n```\n\n## Protocol version\nSet the keyword argument `protocol_version` to set which version of the MySensors serial API to use. The default value is `'1.4'`.\n\n## Serial gateway\nThe serial gateway also supports setting the baudrate, read timeout and reconnect timeout.\n\n```python\nimport mysensors.mysensors as mysensors\n\ndef event(message):\n \"\"\"Callback for mysensors updates.\"\"\"\n print(\"sensor_update \" + str(message.node_id))\n\nGATEWAY = mysensors.SerialGateway(\n '/dev/ttyACM0', baud=115200, timeout=1.0, reconnect_timeout=10.0,\n event_callback=event, persistence=True,\n persistence_file='somefolder/mysensors.pickle', protocol_version='1.4')\nGATEWAY.start()\n```\n\nThere are two other gateway types supported besides the serial gateway: the tcp-ethernet gateway and the MQTT gateway.\n\n## TCP ethernet gateway\nThe ethernet gateway is initialized similar to the serial gateway. The ethernet gateway supports setting the tcp host port, receive timeout and reconnect timeout, besides the common settings and the host ip address.\n\n```python\nGATEWAY = mysensors.TCPGateway(\n '127.0.0.1', port=5003, timeout=1.0, reconnect_timeout=10.0,\n event_callback=event, persistence=True,\n persistence_file='somefolder/mysensors.pickle', protocol_version='1.4')\n```\n\n## MQTT gateway\nThe MQTT gateway requires MySensors serial API v2.0 or greater and the MQTT client gateway example sketch loaded in the gateway device. The gateway also requires an MQTT broker and a python MQTT client interface to the broker. See [mqtt.py](https://github.com/theolind/pymysensors/blob/master/mqtt.py) for an example of how to implement this and initialize the MQTT gateway.\n\n## Over the air (OTA) firmware updates\nCall `Gateway` method `update_fw` to set one or more nodes for OTA\nfirmware update. The method takes three positional arguments and one\nkeyword arguement. The first argument should be the node id of the node to\nupdate. This can also be a list of many node ids. The next two arguments should\nbe integers representing the firwmare type and version. The keyword argument is\noptional and should be a path to a hex file with the new firmware.\n\n```python\nGATEWAY.update_fw([1, 2], 1, 2, fw_path='/path/to/firmware.hex')\n```\n\nAfter the `update_fw` method has been called the node(s) will be requested\nto restart when pymysensors Gateway receives the next set message. After\nrestart and during the MySensors `begin` method, the node will send a firmware\nconfig request. The pymysensors library will respond to the config request. If\nthe node receives a proper firmware config response it will send a firmware\nrequest for a block of firmware. The pymysensors library will handle this and\nsend a firmware response message. The latter request-response conversation will\ncontinue until all blocks of firmware are sent. If the CRC of the transmitted\nfirmware match the CRC of the firmware config response, the node will restart\nand load the new firmware.\n\n## Gateway id\nThe gateway method `get_gateway_id` will try to return a unique id for the\ngateway. This will be the serial number of the usb device for serial gateways,\nthe mac address of the connected gateway for tcp gateways or the publish topic\nprefix (in_prefix) for mqtt gateways.\n\n## Async gateway\nThe serial, TCP and MQTT gateways now also have versions that support asyncio. Use the\n`AsyncSerialGateway` class, `AsyncTCPGateway` class or `AsyncMQTTGateway` class to make a gateway that\nuses asyncio. The following public methods are coroutines in the async gateway:\n\n- get_gateway_id\n- start_persistence\n- start\n- stop\n- update_fw\n\nSee [async_main.py](https://github.com/theolind/pymysensors/blob/master/async_main.py) for an example of how to use this gateway.\n\n[build-badge]: https://travis-ci.org/theolind/pymysensors.svg?branch=master\n[build]: https://travis-ci.org/theolind/pymysensors\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/theolind/pymysensors", "keywords": "sensor,actuator,IoT,DYI", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "pymysensors", "package_url": "https://pypi.org/project/pymysensors/", "platform": "", "project_url": "https://pypi.org/project/pymysensors/", "project_urls": { "Homepage": "https://github.com/theolind/pymysensors" }, "release_url": "https://pypi.org/project/pymysensors/0.18.0/", "requires_dist": [ "crcmod (>=1.7)", "get-mac (>=0.2.1)", "IntelHex (>=2.2.1)", "pyserial (>=3.4)", "pyserial-asyncio (>=0.4)", "voluptuous (>=0.11.1)" ], "requires_python": "", "summary": "Python API for talking to a MySensors gateway", "version": "0.18.0" }, "last_serial": 4399577, "releases": { "0.10.0": [ { "comment_text": "", "digests": { "md5": "7f102d30464fbf9bf26e779700e8b425", "sha256": "ced7366b8e8761dfec8e0c9776134d238dba7f5e1e8bd6c40300144114386bec" }, "downloads": -1, "filename": "pymysensors-0.10.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7f102d30464fbf9bf26e779700e8b425", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31582, "upload_time": "2017-05-06T23:35:42", "url": "https://files.pythonhosted.org/packages/75/88/46e5342e9d56c72dc6343796f252840870075f5f72879a6db5ee3d53ae42/pymysensors-0.10.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "70ea84403a57d7a5e1cd17400c0039e0", "sha256": "e5c0f70ab993e48f6ab767b06234832d91004eaba87dcb46153219895c6174f8" }, "downloads": -1, "filename": "pymysensors-0.10.0.tar.gz", "has_sig": false, "md5_digest": "70ea84403a57d7a5e1cd17400c0039e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27432, "upload_time": "2017-05-06T23:35:45", "url": "https://files.pythonhosted.org/packages/45/66/b34374e471b50df8e5a08c14dc8082aacff78a42ce85d5a1781dcad4227c/pymysensors-0.10.0.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "79eff131c0a7c9b7f9ec7a6e527eccdd", "sha256": "85999bedb24d3d08c64cba0272d77bc10a88a5a7eddb48805e8dd1bb0d3b2a96" }, "downloads": -1, "filename": "pymysensors-0.11.0-py3-none-any.whl", "has_sig": false, "md5_digest": "79eff131c0a7c9b7f9ec7a6e527eccdd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36422, "upload_time": "2017-08-21T09:32:07", "url": "https://files.pythonhosted.org/packages/03/44/97ae3a69bdbadb456e91f4118784c44ace266c53c569cd279e2d418a97f6/pymysensors-0.11.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b7a9233eb60d8483a30ae306584719b6", "sha256": "13822fffde2be5c1a71dbfa21ae235e60c6a356cc1da92d53bc82266d6b4a453" }, "downloads": -1, "filename": "pymysensors-0.11.0.tar.gz", "has_sig": false, "md5_digest": "b7a9233eb60d8483a30ae306584719b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31256, "upload_time": "2017-08-21T09:32:08", "url": "https://files.pythonhosted.org/packages/5c/01/e2a9986ab4bcb8e48e518a356e054a5f9ffea77e48f4abaea4c1c2a15a36/pymysensors-0.11.0.tar.gz" } ], "0.11.1": [ { "comment_text": "", "digests": { "md5": "72fe37e721b1e859389df75b1d13aa07", "sha256": "70e571cd8a76aa904a04e6a41ebfeca1f8d8e679dc5e33aa2ba0877cf9eb725c" }, "downloads": -1, "filename": "pymysensors-0.11.1-py3-none-any.whl", "has_sig": false, "md5_digest": "72fe37e721b1e859389df75b1d13aa07", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37482, "upload_time": "2017-08-29T13:16:21", "url": "https://files.pythonhosted.org/packages/8a/25/018f1bde9a8d3838d755e54b79633430e88fdecd3cb7a2a01770da59b7a8/pymysensors-0.11.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "82bc02b54ce0de109ef86960d3b1ec90", "sha256": "0b6c026d0d280ba95949619c98c1a92467b5e26331344cc063aaf3deb7b1c258" }, "downloads": -1, "filename": "pymysensors-0.11.1.tar.gz", "has_sig": false, "md5_digest": "82bc02b54ce0de109ef86960d3b1ec90", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31880, "upload_time": "2017-08-29T13:16:23", "url": "https://files.pythonhosted.org/packages/35/d1/7032a4793b13f1611e6bde73ed99a65d006299b948b6b0f25034dae486e7/pymysensors-0.11.1.tar.gz" } ], "0.12.0": [ { "comment_text": "", "digests": { "md5": "0da970910121b35c21326dba5610ec29", "sha256": "214961031943755cf65fe379fe5ca01138423133f828f80e859f936773de9fb0" }, "downloads": -1, "filename": "pymysensors-0.12.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0da970910121b35c21326dba5610ec29", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37549, "upload_time": "2018-01-14T15:39:25", "url": "https://files.pythonhosted.org/packages/f1/07/c072fed67dead61332f4a6103c83311a4879e72e749e2be00fd1c6ad2976/pymysensors-0.12.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0654c1cf9750d7701ed1b41991af800c", "sha256": "b366044673895ead37dae282664434618f20db0a28e5cb6327dd1a28d4729392" }, "downloads": -1, "filename": "pymysensors-0.12.0.tar.gz", "has_sig": false, "md5_digest": "0654c1cf9750d7701ed1b41991af800c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32063, "upload_time": "2018-01-14T15:39:26", "url": "https://files.pythonhosted.org/packages/78/50/9ef25d8c08f79b2ef016db4a564cfc5c2abe4c19801892c87829407fb4e2/pymysensors-0.12.0.tar.gz" } ], "0.12.1": [ { "comment_text": "", "digests": { "md5": "9e1c7ce20799a3ddf9b839165e8871b6", "sha256": "c9f44cd42dbd6db2dfa1f6ea37b5d98b17dec10c339b1ed29614c179e38bf199" }, "downloads": -1, "filename": "pymysensors-0.12.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9e1c7ce20799a3ddf9b839165e8871b6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 37555, "upload_time": "2018-01-14T23:41:08", "url": "https://files.pythonhosted.org/packages/7f/0d/38735ccce626c3035d71ea906ec2f9b76cf43d49dd6ea571a08e5ce6bb32/pymysensors-0.12.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "92790762368206628566a0ed0d923202", "sha256": "c1bf29287472c113a60a3d1403736c83542290768ca8d0f80b8e1a7c226acb00" }, "downloads": -1, "filename": "pymysensors-0.12.1.tar.gz", "has_sig": false, "md5_digest": "92790762368206628566a0ed0d923202", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32136, "upload_time": "2018-01-14T23:41:11", "url": "https://files.pythonhosted.org/packages/3f/e9/e5af4009b856246ea755347812db34bfed4a04770902b77a5dc249055efd/pymysensors-0.12.1.tar.gz" } ], "0.13.0": [ { "comment_text": "", "digests": { "md5": "0f2b1d923421729ccf25ebb305ef3b46", "sha256": "756a5d5b5f6712efbec8eaeb3297f6616182deb0483a2317f864ab02626edbba" }, "downloads": -1, "filename": "pymysensors-0.13.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0f2b1d923421729ccf25ebb305ef3b46", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 44951, "upload_time": "2018-04-02T13:48:28", "url": "https://files.pythonhosted.org/packages/17/af/843ad8f15c683be5554aa05054c39cde6f16e3b17e854d28f0da062789bb/pymysensors-0.13.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ba319f08abfaed9890885f0ab71434d1", "sha256": "7a362b21d26a4f4f0bdc06fa19209823838310eff9f0cf1053406a6ca772b307" }, "downloads": -1, "filename": "pymysensors-0.13.0.tar.gz", "has_sig": false, "md5_digest": "ba319f08abfaed9890885f0ab71434d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38601, "upload_time": "2018-04-02T13:48:20", "url": "https://files.pythonhosted.org/packages/cc/e5/f0119032461f8b49d89ceae5006bae6e04a5f5b90e8453a4687e12d6bdaa/pymysensors-0.13.0.tar.gz" } ], "0.14.0": [ { "comment_text": "", "digests": { "md5": "0e114e5daa1191ccb85422b2dac1dfc6", "sha256": "a06b489efcb729b2819623bfea65e5f2102d594c0e192fb30182b46c54fa4ad4" }, "downloads": -1, "filename": "pymysensors-0.14.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0e114e5daa1191ccb85422b2dac1dfc6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 44978, "upload_time": "2018-05-10T11:37:56", "url": "https://files.pythonhosted.org/packages/cf/91/1eb99438783e5de38143cb11bb30ab0741b62c1b2aba9e3cdd50e27e10c9/pymysensors-0.14.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a594de44e0789a7ae1247688c4f8e153", "sha256": "460031a7abc4b84b4e2ff085f9952718b9a82841a68e2df50450efea30159a55" }, "downloads": -1, "filename": "pymysensors-0.14.0.tar.gz", "has_sig": false, "md5_digest": "a594de44e0789a7ae1247688c4f8e153", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38764, "upload_time": "2018-05-10T11:37:47", "url": "https://files.pythonhosted.org/packages/38/f0/25a7e11f2cdb2356d4d5953e6f52ddb32aaf8eb837abf954cd0457d1b1b6/pymysensors-0.14.0.tar.gz" } ], "0.15.0": [ { "comment_text": "", "digests": { "md5": "ec41aec7e9bcffa8ae743f8412b8add5", "sha256": "0493dc4c5d0bcb8348e1a0dcae25ea70d2d996d6ca37f9bc0e21dace0da21117" }, "downloads": -1, "filename": "pymysensors-0.15.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ec41aec7e9bcffa8ae743f8412b8add5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 41826, "upload_time": "2018-05-27T11:21:48", "url": "https://files.pythonhosted.org/packages/b2/49/55872cee90d87880292d21bed50f288e22302e02b780ba87548678ab3e58/pymysensors-0.15.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ed130c25d7d7be2e37a6c159ae9a52f", "sha256": "71dde4e8c9f3524be1576827ea73d16284cbe7eafcf4b347e5a2a820884eb2c0" }, "downloads": -1, "filename": "pymysensors-0.15.0.tar.gz", "has_sig": false, "md5_digest": "8ed130c25d7d7be2e37a6c159ae9a52f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39445, "upload_time": "2018-05-27T11:21:49", "url": "https://files.pythonhosted.org/packages/38/bb/663dbdba29239fcbb2acfbcdc3f753251e275de877e185a4b7a07ebc791b/pymysensors-0.15.0.tar.gz" } ], "0.16.0": [ { "comment_text": "", "digests": { "md5": "e0a482924e9cd4e8689d0bd0fc7469eb", "sha256": "3a49d230703a092741095ed808a8dd223345fe13bdd492f94b269c3ddceed52b" }, "downloads": -1, "filename": "pymysensors-0.16.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e0a482924e9cd4e8689d0bd0fc7469eb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 42937, "upload_time": "2018-07-19T13:19:34", "url": "https://files.pythonhosted.org/packages/0e/36/f7b19deb61c1cd02989f12d55c7d8b7f3e6aecf5bb336978c7ef4793c754/pymysensors-0.16.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c0ca4c1f18ec70ef21ec5f669ed5ea6", "sha256": "50c38f9be55b86bc1a280522c852a0fce02fa3273b5715a63760b67ccb30e61d" }, "downloads": -1, "filename": "pymysensors-0.16.0.tar.gz", "has_sig": false, "md5_digest": "7c0ca4c1f18ec70ef21ec5f669ed5ea6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40247, "upload_time": "2018-07-19T13:19:35", "url": "https://files.pythonhosted.org/packages/91/19/75bc3b2eb7a26b0abf03037d5ae9cdd18bc925e6e62a2d7e16fe06d0bf18/pymysensors-0.16.0.tar.gz" } ], "0.17.0": [ { "comment_text": "", "digests": { "md5": "234e66803994e51cf77f33bc12ddf29c", "sha256": "990eb5a04ecbb936b1a35b15d6e18fabba650cef199ffd4e762e57257d646572" }, "downloads": -1, "filename": "pymysensors-0.17.0-py3-none-any.whl", "has_sig": false, "md5_digest": "234e66803994e51cf77f33bc12ddf29c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 42929, "upload_time": "2018-08-12T14:48:15", "url": "https://files.pythonhosted.org/packages/cf/f0/b1ed8506180a0cbb3ff526429899aa73b41b88123fb30c008456653f89b3/pymysensors-0.17.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2fdbd295a3ea238e208d910b7668513e", "sha256": "01239a04f21dc73fd3fdf251bcd56e3fb7f0b3c09b261e00c7def3e9f855e423" }, "downloads": -1, "filename": "pymysensors-0.17.0.tar.gz", "has_sig": false, "md5_digest": "2fdbd295a3ea238e208d910b7668513e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40532, "upload_time": "2018-08-12T14:48:17", "url": "https://files.pythonhosted.org/packages/62/9b/132e426b8c382963e5723306f797fbdb19c5bcd81fb677bba96954ff5542/pymysensors-0.17.0.tar.gz" } ], "0.18.0": [ { "comment_text": "", "digests": { "md5": "ef4399baa24d97c1ca9301341a7737bf", "sha256": "a7592a2c32b63af2ccca52c7d0afccec894b62762b51dbd529ae30a41127cec9" }, "downloads": -1, "filename": "pymysensors-0.18.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ef4399baa24d97c1ca9301341a7737bf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 42822, "upload_time": "2018-10-21T14:08:23", "url": "https://files.pythonhosted.org/packages/28/8b/2261e5892b7b6e0ca4d96f334b44f698fda93f7ca863f8d7fb9c53de2dd0/pymysensors-0.18.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f9d1e9aac4cd38003f71579bc6a2a641", "sha256": "0cd4e47daf48a1f63722c3f9dfbff1b54c26ddd8bef1048dfaaeadeedf5c6ded" }, "downloads": -1, "filename": "pymysensors-0.18.0.tar.gz", "has_sig": false, "md5_digest": "f9d1e9aac4cd38003f71579bc6a2a641", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40563, "upload_time": "2018-10-21T14:08:25", "url": "https://files.pythonhosted.org/packages/46/94/4d6e2705b21ac3aba3604f4a3bed32dfbbdcc0301e68b117ee373dac6bd8/pymysensors-0.18.0.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "715c26ac0fc11965f1d04f9e8c6ad3d5", "sha256": "141e60240301ad180afea8a1fbd1e5a73431e823ccf157838dbd37b0879298ab" }, "downloads": -1, "filename": "pymysensors-0.9.1.tar.gz", "has_sig": false, "md5_digest": "715c26ac0fc11965f1d04f9e8c6ad3d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17327, "upload_time": "2017-05-04T18:08:16", "url": "https://files.pythonhosted.org/packages/b2/b6/d3626f269c9e70297ade689a14c7679ae02f93ff86e020e85c595590e54c/pymysensors-0.9.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ef4399baa24d97c1ca9301341a7737bf", "sha256": "a7592a2c32b63af2ccca52c7d0afccec894b62762b51dbd529ae30a41127cec9" }, "downloads": -1, "filename": "pymysensors-0.18.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ef4399baa24d97c1ca9301341a7737bf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 42822, "upload_time": "2018-10-21T14:08:23", "url": "https://files.pythonhosted.org/packages/28/8b/2261e5892b7b6e0ca4d96f334b44f698fda93f7ca863f8d7fb9c53de2dd0/pymysensors-0.18.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f9d1e9aac4cd38003f71579bc6a2a641", "sha256": "0cd4e47daf48a1f63722c3f9dfbff1b54c26ddd8bef1048dfaaeadeedf5c6ded" }, "downloads": -1, "filename": "pymysensors-0.18.0.tar.gz", "has_sig": false, "md5_digest": "f9d1e9aac4cd38003f71579bc6a2a641", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40563, "upload_time": "2018-10-21T14:08:25", "url": "https://files.pythonhosted.org/packages/46/94/4d6e2705b21ac3aba3604f4a3bed32dfbbdcc0301e68b117ee373dac6bd8/pymysensors-0.18.0.tar.gz" } ] }