{ "info": { "author": "Andrea Barbaresi", "author_email": "barban.mobile@google.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# Library for EVA II PRO WiFi Smart Dehumidifier appliance\n[![PyPI](https://img.shields.io/pypi/v/midea-inventor-lib.svg)](https://pypi.org/project/midea-inventor-lib/)\n[![](https://img.shields.io/pypi/pyversions/midea-inventor-lib.svg)](https://pypi.org/project/midea-inventor-lib/)\n[![](https://img.shields.io/pypi/l/midea-inventor-lib.svg)](https://pypi.org/project/midea-inventor-lib/)\n[![](https://img.shields.io/pypi/wheel/midea-inventor-lib.svg)](https://pypi.org/pypi/midea-inventor-lib/)\n[![](https://img.shields.io/pypi/status/midea-inventor-lib.svg)](https://pypi.org/pypi/midea-inventor-lib/)\n[![](https://img.shields.io/pypi/implementation/midea-inventor-lib.svg)](https://pypi.org/pypi/midea-inventor-lib/)\n[![<100kB](https://img.shields.io/github/languages/code-size/barban-dev/midea_inventor_dehumidifier.svg)](https://github.com/barban-dev/midea_inventor_dehumidifier)\n[![<100kB](https://img.shields.io/github/repo-size/barban-dev/midea_inventor_dehumidifier.svg)](https://github.com/barban-dev/midea_inventor_dehumidifier)\n[![Build status](https://travis-ci.com/barban-dev/midea_inventor_dehumidifier.svg?branch=master)](https://travis-ci.com/barban-dev/midea_inventor_dehumidifier)\n[![Known Vulnerabilities](https://snyk.io/test/github/barban-dev/midea_inventor_dehumidifier/badge.svg?targetFile=requirements.txt)](https://snyk.io/test/github/barban-dev/midea_inventor_dehumidifier?targetFile=requirements.txt)\n[![HitCount](http://hits.dwyl.io/barban-dev/midea_inventor_dehumidifier.svg)](http://hits.dwyl.io/barban-dev/midea_inventor_dehumidifier)\n[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5E7ULVFGCGKU2&source=url)\n\n\nAuthor: Andrea Barbaresi =2018, 2019=\n\nLicence: GPLv3\n\nThis repo contains the python package ***midea_inventor_lib*** that implements a client-side library to connect to the Web API provided by Midea/Inventor, in order to remotely control an **EVA II PRO WiFi Smart Dehumidifier device**.\n\nInfo about the dehumidifier appliance can be found [here.](https://www.inventorappliances.com/dehumidifiers/eva-ii-pro-wi-fi-20l)\n\nYou can buy the smart dehumidifier appliance (WiFi version) on Amazon (the two links below contain my referral code):\n* [Amazon.co.uk](https://www.amazon.co.uk/gp/product/B07665CCSM/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=barban0d-21&creative=6738&linkCode=as2&creativeASIN=B07665CCSM&linkId=a7408b12a09679586e1816acc3c9d74b)\n* [Amazon.it](https://www.amazon.it/gp/product/B075486X31/ref=as_li_tl?ie=UTF8&camp=3414&creative=21718&creativeASIN=B075486X31&linkCode=as2&tag=barban03-21&linkId=33e8ff818aaa4b45f0c320e6661773b2)\n\n\nTarget devices\n--------------\nEven though the library has been designed to generically address any kind of existing MIDEA devices, ***please note that at the moment the implemented functionalities work on the dehumidifier appliance only (0xA1 type devices).***\n\nIf you are interested in developing code that is able to control Midea/Inventor Air Condition systems (0xAC type devices), you can have a look at ***midea-air-condition*** Ruby&Rails library by **Balazs Nadasdi** available [here.](https://github.com/yitsushi/midea-air-condition)\n\n\nPrerequisites\n-------------\nIn order to control the EVA II PRO WiFi Smart Dehumidifier appliance using the provided Python library, first of all it is necessary to download and install the official App, in order to register a valid user to the cloud platform (a valid email address is required). \nThe official companion Apps are available on Google's and Apple's App Stores:\n* [Google Play](https://play.google.com/store/apps/details?id=com.inventor)\n* [Apple Store](https://itunes.apple.com/gr/app/invmate-ii/id1109243423)\n\nOnce connected with valid credentials (i.e. email address and password), your home device has to be added to the list of configured devices using the App (please refer to the manual of the official App to accomplish this task).\n\nOnce having a valid registered user and the home device configured, you can start to use the python library instead of the offical App to control the device via Internet (both the client when the library is installed and the home device should be connected to the Internet).\n\n\nInstallation\n------------\nInstall from PyPi using [pip](http://www.pip-installer.org/en/latest), a package manager for\nPython.\n```\npip install midea-inventor-lib\n```\nDon't have pip installed? Try installing it, by running this from the\ncommand line:\n```\n$ curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python\n```\nOr, you can [download the source code (ZIP)](https://github.com/barban-dev/midea_inventor_dehumidifier/zipball/master) and then run:\n```\npython setup.py install\n```\nYou may need to run the above commands with ``sudo``.\n\n\nGetting started\n---------------\nMinimal steps to use the library in your python code are reported below:\n\n**Step 1: Include the python package**\n```python\nfrom midea_inventor_lib import MideaClient\n```\n**Step 2: Instantiate the MideaClient object**\n\nUsing clear-text password:\n```python\nclient = MideaClient(\"user.example@gmail.com\", \"myPassword\", \"\")\n```\nUsing password's sha-256 hash:\n```python\nclient = MideaClient(\"user.example@gmail.com\", \"\", \"76549b827ec46e705fd03831813fa52172338f0dfcbd711ed44b81a96dac51c6\")\n```\n**Enable logging (optional):**\n\nYou can enable logging by setting the 'verbose' parameter to True (default is False) in the MideaClient constructor. \nSet 'debug' parameter to True in order to log debugging messages too (default is False).\nSet 'logfile' string parameter to a full-path filename in order to make the library log messages into a file instead of using the console (default).\nE.g.:\n```python\n_email = \"user@example.com\"\n_password = \"passwordExample\"\n_sha256password = \"\"\n_verbose = True\t\t#Enable logging\n_debug = False\t\t#Disable debug messages\n_logfile = \"\"\t\t#Log to console (default)\nclient = MideaClient(_email, _password, _sha256password, _debug, _verbose, _logfile)\n```\n**Step 3: Activate a new session by logging in**\n```python\nres = client.login()\nif res == -1:\n print \"Login error: please check log messages.\"\nelse:\n sessionId = client.current[\"sessionId\"]\n```\n**Step 4: Get the target deviceId by retrieving the list of configured appliances**\n```python\nappliances = {}\nappliances = client.listAppliances()\nfor a in appliances:\n print \"[id=\"+a[\"id\"]+\" type=\"+a[\"type\"]+\" name=\"+a[\"name\"]+\"]\"\n```\n**Step 5: Send commands to control the target device**\nGet the device state:\n```python\nres = client.get_device_status(deviceId)\nif res == 1:\n print client.deviceStatus.toString()\n```\nPower-on:\n```python\nres = client.send_poweron_command(deviceId)\nif res:\n print client.deviceStatus.toString();\n```\nPower-off:\n```python\nres = client.send_poweroff_command(deviceId)\nif res:\n print client.deviceStatus.toString();\n```\nSet Ion on:\n```python\nres = client.send_ion_on_command(deviceId)\nif res:\n print client.deviceStatus.toString();\n```\nSet Ion off:\n```python\nres = client.send_ion_off_command(deviceId)\nif res:\n print client.deviceStatus.toString();\n```\nSet fan speed:\n```python\nif speed > 0 and speed < 100:\n res = client.send_fan_speed_command(deviceId, speed)\n if res:\n print client.deviceStatus.toString();\n```\nSet target humidity:\n```python\nif hum >= 30 and hum <= 70:\n res = client.send_target_humidity_command(deviceId, hum)\n if res:\n print client.deviceStatus.toString();\n```\nSet operation mode:\n```python\nif mode > 0 and mode < 5:\n res = client.send_mode_command(deviceId, mode) #set Mode (1:TARGET_MODE, 2:CONTINOUS_MODE, 3:SMART_MODE, 4:DRYER_MODE)\n if res:\n print client.deviceStatus.toString();\n```\nSet updated status (usefull to update multiple attributes at one):\n```python\nstatus =client.get_device_status(deviceId) #get current status\n#Update status\nstatus.ionSetSwitch = 1 #Ion on\nstatus.setMode = 1 #target-mode\nres = self._client.send_update_status_command(self._device[\"id\"], status)\nif res:\n print client.deviceStatus.toString();\n```\n\nClient example\n--------------\nThis repo also contains a fully working client (***dehumi_control.py***) that demonstrates how to use the ***midea_inventor_lib*** library in order to control the EVA II PRO WiFi Smart Dehumidifier appliance via a Command Line Interface.\n\nTo use the client, the email address of a registered user and the associated password have to be provided via command line parameters (either clear-text password or password's sha-256 hash has to be provided using the '-p' or '-s' options):\n```\n# python dehumi_control.py -h\nUsage:dehumi_control.py -e -p -s -l [-h] [-v] [-d]\n```\n\nHome Assistant custom-component\n-------------------------------\n***[NEW]*** Custom-component for the Home Assistant platform can be found on ``/homeassistant`` folder.\nIn order to activate the component, follow these steps:\n\n**Step 1: Copy necessary files to your HA's configuration shared folder** \n\nCopy ***the content of*** ``/homeassistant`` folder (***not the folder itself***), ***including subfolders***, on your HA's configuration shared folder.\n\nCopy ``/midea_inventor_lib`` folder on ``\\deps\\lib\\python3.6\\site-packages\\`` of your HA's configuration shared folder.\n\nFinal result should look similar to this:\n```\n\\\\\n \u2514\u2500\u2500 config\n \u251c\u2500\u2500 custom_components\n \u2502\u00a0\u00a0 \u251c\u2500\u2500 climate\n \u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u2514\u2500\u2500 midea_dehumi.py\n \u2502\u00a0\u00a0 \u251c\u2500\u2500 midea_dehumi.py\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 sensor\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 midea_dehumi.py\n \u2514\u2500\u2500 deps\n \u2514\u2500\u2500 lib\n \u2514\u2500\u2500 python3.6\n \u2514\u2500\u2500 site-packages\n \u2514\u2500\u2500 midea_inventor_lib\n \u2514\u2500\u2500 libfiles...\n```\n\n**Step 2: Activate midea_dehumi platform on your HA's configuration file**\n\nAdd the following section in your ``configuration.yaml``\n```\nmidea_dehumi:\n username: user@example.com\n password: passwordExample\n```\nAs usual, you can hide your secret password by means of ``!secret`` notation by specifing it in ``secrets.yaml``\n\nAlternatively, if you prefer, ``sha256password`` parameter can be used instead of the ``password`` one to specify password's sha-256 hash\n```\nmidea_dehumi:\n username: user@example.com\n sha256password: cf76d55503cdee3....\n```\n**Step 3: Activate DEBUG-level logging (optional)**\n\nIt is highly suggested to activate DEBUG-level logging for the three components the midea_dehumi platform consists of. This let you perform troubleshooting analysis if the component doesn't work as expected.\n```\nlogger:\n default: info\n logs:\n custom_components.midea_dehumi: debug\n custom_components.climate.midea_dehumi: debug\n custom_components.sensor.midea_dehumi: debug\n```\n** Step 4: Restart HA**\n\nYou can restart HA by using one of your preferred method (e.g. using reboot button on Settings>General>Server Management og HA's Web dashboard).\n\nIf everything is ok, you will find the following two new entities in your HA dashboard:\n\n* **climate.midea_dehumi_*[Device_ID]***\n* **sensor.midea_dehumi_*[Device_ID]*_humidity**\n\nBy means of the climate entity, you can control your appliance whereas the sensor reports the detected current humidity of your environment.\n\nIf you cannot find the entities reported above, check the logs generated by HA to track the issue.\n\nInternals \n---------\n***You can skip this part if you are not interested in technical details concerning the format of the API messages used by the library.***\n\nOfficial companion Apps for Android and IOS platforms are based on the midea-SDKs made available by Midea Smart Technology Co., Ltd.:\n* [ios-sdk](https://github.com/midea-sdk-org/ios-sdk)\n* [android-sdk](https://github.com/midea-sdk-org/android-sdk)\n\nAccording to the SDK's documentation, \"MideaSDK is a software develop kit maintained by MSmart. You can develop your own APP, Smart Hardware or Smart TV based on this SDK to control the smart appliances produced by Midea.\"\n\nOfficial documentation for the open API can be found here (chinese language only):\nhttps://github.com/midea-sdk/midea-sdk.github.io/tree/master/api\n\nApart Androd and IOS platforms, no other environment is currently officially supported. In order to develop the client-side library for all the platform supporting Python, I used a Man-In-The-Middle Web Proxy as a packet sniffer to understand the basics on the API messages exchanged between the offical Android client and the Midea cloud Server.\n\nWeb API server can be reached via ```https://mapp-appsmb.com/``` (POST web requests shoud be used).\n\nA brief description of the most relevant endpoints follows:\n\n```/v1/user/login/id/get``` endpoint with 'loginAccount' parameter is used to get 'loginId' parameter (different for each session).\n\n```/v1/user/login``` endpoint with 'password' parameter is used to perform the login ('accessToken' and 'sessionId' parameters are returned). The password parameter sent by the client is SHA-256 hash of a string derived from 'loginId', 'password' and 'appKey' parameters.\n\n```/v1/appliance/user/list/get``` endpoint is used to retrieve the list of configured devices together withh all the associated parameters ('name', 'modelNumber', 'activeStaus', 'onlineStatus', etc.)\n\n```/v1/appliance/transparent/send``` endpoint with the 'order' parameter is used to control the home device (the 'reply' parameter is returned). Both the 'order' and 'reply' parameters are AES encryted; the encryption/decryption key used by AES is derived from the 'APP_key' parameter (constant string) and the 'accessToken' parameter returned when logging in. The revelant part of code used for the encription and decryption tasks can be found in the **MideaSecurity** class in **midea_security.py** file.\n\nFor Further Studies (FFS)\n-------------------------\nAt the moment, the client-side Python library can control a dehumidifier appliance by sending API messages to the cloud Server that talks to the home device. Both the client and the home device need Internet access in this cloud-to-cloud scenario. \nThe possibility to control the home device locally (i.e. the possibility to let the client to send API messagges directly to the home device) when both the client and the home device are associated to the same WiFi network is FFS.\n\nHow to contribute\n-----------------\nIf you can code in Python and you are interested in improving and expanding this work, feel free to clone this repo. Drop me a line if you wish to merge your modifications in my repo too.\n\nDisclaimer\n----------\nBesides owning an EVA II PRO WiFi device, I have no connection with Midea/Inventor company. This library was developed for my own personal use and shared to other people interested on Internet of Things systems and domotic platforms. This software is provided as is, without any warranty, according to the GNU Public Licence version 3.\n\nDonations\n---------\nIf this project helps you to reduce time to develop your code, you can make me a donation.\n\n[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=5E7ULVFGCGKU2&source=url)\n\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/barban-dev/midea_inventor_dehumidifier", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "midea-inventor-lib", "package_url": "https://pypi.org/project/midea-inventor-lib/", "platform": "", "project_url": "https://pypi.org/project/midea-inventor-lib/", "project_urls": { "Homepage": "https://github.com/barban-dev/midea_inventor_dehumidifier" }, "release_url": "https://pypi.org/project/midea-inventor-lib/1.0.4/", "requires_dist": [ "requests (>=2.16.0)", "pycryptodome (>=3.6.6)" ], "requires_python": "", "summary": "Client-side Python library for EVA II PRO WiFi Smart Dehumidifier appliance by Midea/Inventor.", "version": "1.0.4" }, "last_serial": 4665869, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "007d8207e021663918b097e7306b66c4", "sha256": "642d35abd81e75b02c5f0c245a9021f9d9db53cae7dca6d70684f3ef0c1c45e1" }, "downloads": -1, "filename": "midea_inventor_lib-1.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "007d8207e021663918b097e7306b66c4", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 30240, "upload_time": "2018-12-28T00:12:39", "url": "https://files.pythonhosted.org/packages/11/68/3cb4ce7255ef96f12071d611ce437e11f82b2c1e532aa0f2b90b20c252d1/midea_inventor_lib-1.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c7724997aadffcc2a2b65b12c51ab0f", "sha256": "d0ab03daf7647faf6e838619c52deb369c9557d1062acdf5e6527486d686edfd" }, "downloads": -1, "filename": "midea_inventor_lib-1.0.0.tar.gz", "has_sig": false, "md5_digest": "8c7724997aadffcc2a2b65b12c51ab0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14521, "upload_time": "2018-12-28T00:12:42", "url": "https://files.pythonhosted.org/packages/22/b8/9d2567245137da68ac835930fefd96d7181c90cd52532946ef80b0c57b4c/midea_inventor_lib-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "1931102d3422000900bbc22f17966090", "sha256": "2683bf53fc7e3587f1e0dd343871f30677325e9be56402d2ef2f45d86e71c1be" }, "downloads": -1, "filename": "midea_inventor_lib-1.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "1931102d3422000900bbc22f17966090", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 30245, "upload_time": "2018-12-28T00:34:09", "url": "https://files.pythonhosted.org/packages/06/0a/de660fd9bc04a975515a8d3fff5851e6613faea5f2b586e7a2a97610d178/midea_inventor_lib-1.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "734f47dbecfc7ae24961fdba0797ac9c", "sha256": "913ad2dabba1164bca7f97e0338e88702562958ae2156736d57844954f2590da" }, "downloads": -1, "filename": "midea_inventor_lib-1.0.1.tar.gz", "has_sig": false, "md5_digest": "734f47dbecfc7ae24961fdba0797ac9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14555, "upload_time": "2018-12-28T00:34:10", "url": "https://files.pythonhosted.org/packages/49/85/3981d59ad4b1e082b4cecb1ddc43247fbf4b072a981ae418b6d58b5a12e1/midea_inventor_lib-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "7b946c6c5f14db59da75213f07fe245f", "sha256": "031932d2e35b35b99a415a2a47b561c038ad50f69cbd830a4a42cc7c4dd9f3c2" }, "downloads": -1, "filename": "midea_inventor_lib-1.0.2-py2-none-any.whl", "has_sig": false, "md5_digest": "7b946c6c5f14db59da75213f07fe245f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 30959, "upload_time": "2018-12-29T16:07:59", "url": "https://files.pythonhosted.org/packages/4e/64/d88b9b5f429d4dab44d7d6a7545051de418fb8348e87d5ed8c053883ad82/midea_inventor_lib-1.0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff657b1bba5276c62b96e9f7484023d2", "sha256": "abf924de3bf4c96575cb8fee63e7cf5de630d2efa8eda2be2e92a1f156c6694b" }, "downloads": -1, "filename": "midea_inventor_lib-1.0.2.tar.gz", "has_sig": false, "md5_digest": "ff657b1bba5276c62b96e9f7484023d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15489, "upload_time": "2018-12-29T16:08:01", "url": "https://files.pythonhosted.org/packages/72/e4/de9c604231da94cbc413a1c002f7a51129ca92de1fe5e111fd7703031e3e/midea_inventor_lib-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "efb6c7cf6afbb901d4008a13c640c3fa", "sha256": "45db24d3d3f6b9f252bf5389ec81753f47c1e84929f449fdec9a845d8d1f6135" }, "downloads": -1, "filename": "midea_inventor_lib-1.0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "efb6c7cf6afbb901d4008a13c640c3fa", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 31648, "upload_time": "2018-12-30T21:34:11", "url": "https://files.pythonhosted.org/packages/ba/cb/db7275b8bef559dcad0a8a8d84c923851058365c70fbfd5c613448078d47/midea_inventor_lib-1.0.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "50978db48b3e390f1394c2ebaef0b1be", "sha256": "a1e46c0a8cdd1b2d584a9416a35c62ccbed986d7a13c89f26403920391ea168a" }, "downloads": -1, "filename": "midea_inventor_lib-1.0.3.tar.gz", "has_sig": false, "md5_digest": "50978db48b3e390f1394c2ebaef0b1be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16214, "upload_time": "2018-12-30T21:34:12", "url": "https://files.pythonhosted.org/packages/be/7a/4bb3c8703607fd60894b7d5930589fccbc600b9c8fd76f88eb56225c4c4a/midea_inventor_lib-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "f77e804e0a043ecc656d98143ec07264", "sha256": "075edf980469a501608fa6ec69160945c7630a26485354f7e5e12ac2795105bd" }, "downloads": -1, "filename": "midea_inventor_lib-1.0.4-py2-none-any.whl", "has_sig": false, "md5_digest": "f77e804e0a043ecc656d98143ec07264", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 32919, "upload_time": "2019-01-06T15:26:55", "url": "https://files.pythonhosted.org/packages/d9/96/c03956a3a55450bdf870e5da1cbd7d5e232dd6fb7100fb065b981f0a46fa/midea_inventor_lib-1.0.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "713d36ef200b8bb23f0dd54f15c0cab3", "sha256": "9369d3946aa7c98f5dd74709bd756256e142f0d11f0751a781919bb206b0b755" }, "downloads": -1, "filename": "midea_inventor_lib-1.0.4.tar.gz", "has_sig": false, "md5_digest": "713d36ef200b8bb23f0dd54f15c0cab3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17784, "upload_time": "2019-01-06T15:26:57", "url": "https://files.pythonhosted.org/packages/94/aa/ce419514c4e768fb96e63f45ae773b99f7fa4f631649f1d76be300e45ca3/midea_inventor_lib-1.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f77e804e0a043ecc656d98143ec07264", "sha256": "075edf980469a501608fa6ec69160945c7630a26485354f7e5e12ac2795105bd" }, "downloads": -1, "filename": "midea_inventor_lib-1.0.4-py2-none-any.whl", "has_sig": false, "md5_digest": "f77e804e0a043ecc656d98143ec07264", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 32919, "upload_time": "2019-01-06T15:26:55", "url": "https://files.pythonhosted.org/packages/d9/96/c03956a3a55450bdf870e5da1cbd7d5e232dd6fb7100fb065b981f0a46fa/midea_inventor_lib-1.0.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "713d36ef200b8bb23f0dd54f15c0cab3", "sha256": "9369d3946aa7c98f5dd74709bd756256e142f0d11f0751a781919bb206b0b755" }, "downloads": -1, "filename": "midea_inventor_lib-1.0.4.tar.gz", "has_sig": false, "md5_digest": "713d36ef200b8bb23f0dd54f15c0cab3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17784, "upload_time": "2019-01-06T15:26:57", "url": "https://files.pythonhosted.org/packages/94/aa/ce419514c4e768fb96e63f45ae773b99f7fa4f631649f1d76be300e45ca3/midea_inventor_lib-1.0.4.tar.gz" } ] }