{
"info": {
"author": "",
"author_email": "",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Intended Audience :: End Users/Desktop",
"License :: OSI Approved :: Apache Software License",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Topic :: Home Automation",
"Topic :: Software Development :: Libraries :: Python Modules"
],
"description": "[](https://badge.fury.io/py/HAP-python) [](https://travis-ci.org/ikalchev/HAP-python) [](https://codecov.io/gh/ikalchev/HAP-python) [](http://hap-python.readthedocs.io/en/latest/?badge=latest) [](https://pepy.tech/project/hap-python)\n# HAP-python\n\nHomeKit Accessory Protocol implementation in python 3.\nWith this project, you can integrate your own smart devices and add them to your\niOS Home app. Since Siri is integrated with the Home app, you can start voice-control your\naccessories right away.\n\nMain features:\n\n* Camera - HAP-python supports the camera accessory from version 2.3.0!\n* asyncio support - You can run various tasks or accessories in the event loop.\n* Out of the box support for Apple-defined services - see them in [the resources folder](pyhap/resources).\n* Secure pairing by just scannig the QR code.\n* Integrated with the home automation framework [Home Assistant](https://github.com/home-assistant/home-assistant).\n\nThe project was developed for a Raspberry Pi, but it should work on other platforms. To kick-start things,\nyou can open `main.py` or `busy_home.py`, where you will find some fake accessories.\nJust run one of them, for example `python3 busy_home.py`, and you can add it in\nthe Home app (be sure to be in the same network).\nStop it by hitting Ctrl+C.\n\nThere are example accessories as well as integrations with real products\nin [the accessories folder](accessories). See how to configure your camera in\n[camera_main.py](camera_main.py).\n\n## Table of Contents\n1. [API](#API)\n2. [Installation](#Installation)\n3. [Setting up a camera](#Camera)\n4. [Run at boot (and a Switch to shutdown your device)](#AtBoot)\n5. [Notice](#Notice)\n\n## Installation \n\nAs of version 2.0.0, HAP-python no longer supports python older than 3.5, because we\nare moving to asyncio. If your platform does not have a compatible python out of the\nbox, you can install it manually or just use an older version of HAP-python.\n\nAs a prerequisite, you will need Avahi/Bonjour installed (due to zeroconf package).\nOn a Raspberry Pi, you can get it with:\n```\n$ sudo apt-get install libavahi-compat-libdnssd-dev\n```\n`avahi-utils` may also fit the bill. Then, you can install with `pip3` (you will need `sudo` or `--user` for the install):\n```sh\n$ pip3 install HAP-python[QRCode]\n```\n\nThis will install HAP-python in your python packages, so that you can import it as `pyhap`. To uninstall, just do:\n```\n$ pip3 uninstall HAP-python\n```\n\n## API \n\nA typical flow for using HAP-python starts with implementing an Accessory. This is done by\nsubclassing [Accessory](pyhap/accessory.py) and putting in place a few details\n(see below). After that, you give your accessory to an AccessoryDriver to manage. This\nwill take care of advertising it on the local network, setting a HAP server and\nrunning the Accessory. Take a look at [main.py](main.py) for a quick start on that.\n\n```python\nfrom pyhap.accessory import Accessory, Category\nimport pyhap.loader as loader\n\nclass TemperatureSensor(Accessory):\n \"\"\"Implementation of a mock temperature sensor accessory.\"\"\"\n\n category = Category.SENSOR # This is for the icon in the iOS Home app.\n\n def __init__(self, *args, **kwargs):\n \"\"\"Here, we just store a reference to the current temperature characteristic and\n add a method that will be executed every time its value changes.\n \"\"\"\n # If overriding this method, be sure to call the super's implementation first.\n super().__init__(*args, **kwargs)\n\n # Add the services that this Accessory will support with add_preload_service here\n temp_service = self.add_preload_service('TemperatureSensor')\n self.temp_char = temp_service.get_characteristic('CurrentTemperature')\n\n # Having a callback is optional, but you can use it to add functionality.\n self.temp_char.setter_callback = self.temperature_changed\n\n def temperature_changed(self, value):\n \"\"\"This will be called every time the value of the CurrentTemperature\n is changed. Use setter_callbacks to react to user actions, e.g. setting the\n lights On could fire some GPIO code to turn on a LED (see pyhap/accessories/LightBulb.py).\n \"\"\"\n print('Temperature changed to: ', value)\n\n @Acessory.run_at_interval(3) # Run this method every 3 seconds\n # The `run` method can be `async` as well\n def run(self):\n \"\"\"We override this method to implement what the accessory will do when it is\n started.\n\n We set the current temperature to a random number. The decorator runs this method\n every 3 seconds.\n \"\"\"\n self.temp_char.set_value(random.randint(18, 26))\n\n # The `stop` method can be `async` as well\n def stop(self):\n \"\"\"We override this method to clean up any resources or perform final actions, as\n this is called by the AccessoryDriver when the Accessory is being stopped.\n \"\"\"\n print('Stopping accessory.')\n```\n\n## Setting up a camera \n\nThe [Camera accessory](pyhap/camera.py) implements the HomeKit Protocol for negotiating stream settings,\nsuch as the picture width and height, number of audio channels and others.\nStarting a video and/or audio stream is very platform specific. Because of this,\nyou need to figure out what video and audio settings your camera supports and set them\nin the `options` parameter that is passed to the `Camera` Accessory. Refer to the\ndocumentation for the `Camera` contructor for the settings you need to specify.\n\nBy default, HAP-python will execute the `ffmpeg` command with the negotiated parameters\nwhen the stream should be started and will `terminate` the started process when the\nstream should be stopped (see the default: `Camera.FFMPEG_CMD`).\nIf the default command is not supported or correctly formatted for your platform,\nthe streaming can fail.\n\nFor these cases, HAP-python has hooks so that you can insert your own command or implement\nthe logic for starting or stopping the stream. There are two options:\n\n1. Pass your own command that will be executed when the stream should be started.\n\n You pass the command as a value to the key `start_stream_cmd` in the `options` parameter to\n the constuctor of the `Camera` Accessory. The command is formatted using the\n negotiated stream configuration parameters. For example, if the negotiated width\n is 640 and you pass `foo start -width {width}`, the command will be formatted as\n `foo start -width 640`.\n\n The full list of negotiated stream configuration parameters can be found in the\n documentation for the `Camera.start` method.\n\n2. Implement your own logic to start, stop and reconfigure the stream.\n\n If you need more flexibility in managing streams, you can directly implement the\n `Camera` methods `start`, `stop` and `reconfigure`. Each will be called when the\n stream should be respectively started, stopped or reconfigured. The start and\n reconfigure methods are given the negotiated stream configuration parameters.\n\n Have a look at the documentation of these methods for more information.\n\nFinally, if you can take snapshots from the camera, you may want to implement the\n`Camera.snapshot` method. By default, this serves a stock photo.\n\n## Run at boot \nThis is a quick way to get `HAP-python` to run at boot on a Raspberry Pi. It is recommended\nto turn on \"Wait for network\" in `raspi-config`. If this turns to be unreliable, see\n[this](https://www.raspberrypi.org/forums/viewtopic.php?f=66&t=187225).\n\nCopy the below in `/etc/systemd/system/HAP-python.service` (needs sudo).\n```\n[Unit]\nDescription = HAP-python daemon\nWants = pigpiod.service # Remove this if you don't depend on pigpiod\nAfter = local-fs.target network-online.target pigpiod.service\n\n[Service]\nUser = lesserdaemon # It's a good idea to use some unprivileged system user\n# Script starting HAP-python, e.g. main.py\n# Be careful to set any paths you use, e.g. for persisting the state.\nExecStart = /usr/bin/python3 /home/lesserdaemon/.hap-python/hap-python.py\n\n[Install]\nWantedBy = multi-user.target\n```\n\nTest that everything is fine by doing:\n\n```sh\n> sudo systemctl start HAP-python\n> systemctl status HAP-python\n> sudo journalctl -u HAP-python # to see the output of the start up script.\n> sudo systemctl stop HAP-python\n```\n\nTo enable or disable at boot, do:\n\n```sh\n> sudo systemctl enable HAP-python\n> sudo systemctl disable HAP-python\n```\n\n### Shutdown switch\n\nIf you are running `HAP-python` on a Raspberry Pi, you may want to add a\n[Shutdown Switch](pyhap/accessories/ShutdownSwitch.py) to your Home. This is a\nSwitch Accessory, which, when triggered, executes `sudo shutdown -h now`, i.e.\nit shutdowns and halts the Pi. This allows you to safely unplug it.\n\nFor the above to work, you need to enable passwordless `/sbin/shutdown` to whichever\nuser is running `HAP-python`. For example, do:\n```sh\n$ sudo visudo # and add the line: \" ALL=NOPASSWD: /sbin/shutdown\".\n```\n\n## Notice \n\nSome HAP know-how was taken from [HAP-NodeJS by KhaosT](https://github.com/KhaosT/HAP-NodeJS).\n\nI am not aware of any bugs, but I am more than confident that such exist. If you find any,\nplease report and I will try to fix them.\n\nSuggestions are always welcome.\n\nHave fun!\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/ikalchev/HAP-python",
"keywords": "",
"license": "Apache License 2.0",
"maintainer": "",
"maintainer_email": "",
"name": "HAP-python",
"package_url": "https://pypi.org/project/HAP-python/",
"platform": "",
"project_url": "https://pypi.org/project/HAP-python/",
"project_urls": {
"Bug Reports": "https://github.com/ikalchev/HAP-python/issues",
"Documentation": "http://hap-python.readthedocs.io/en/latest/",
"Homepage": "https://github.com/ikalchev/HAP-python",
"Source": "https://github.com/ikalchev/HAP-python/tree/master"
},
"release_url": "https://pypi.org/project/HAP-python/2.6.0/",
"requires_dist": [
"curve25519-donna",
"ed25519",
"pycryptodome",
"tlslite-ng",
"zeroconf",
"base36 ; extra == 'qrcode'",
"pyqrcode ; extra == 'qrcode'"
],
"requires_python": ">=3.5",
"summary": "HomeKit Accessory Protocol implementation in python",
"version": "2.6.0"
},
"last_serial": 5865753,
"releases": {
"1.0": [
{
"comment_text": "",
"digests": {
"md5": "b2e13acd69a3627b0a033e8b4bad54fb",
"sha256": "8490840dff6d41908974900f3bff8a2330c00a9a34d5003e04d081099424f46d"
},
"downloads": -1,
"filename": "HAP-python-1.0.tar.gz",
"has_sig": false,
"md5_digest": "b2e13acd69a3627b0a033e8b4bad54fb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 38048,
"upload_time": "2018-01-21T09:09:39",
"url": "https://files.pythonhosted.org/packages/29/dd/18e55d572e48e01e6e3506862fc2cf1a2a902aae40d57f9a6b26866dcf81/HAP-python-1.0.tar.gz"
}
],
"1.0.5": [
{
"comment_text": "",
"digests": {
"md5": "eec2230ff3b6199baaea00fa33b15851",
"sha256": "85103523cdcafaa960ab6dfaf5d8197b21a024234bb59bde0964fb88cc312b49"
},
"downloads": -1,
"filename": "HAP-python-1.0.5.macosx-10.13-x86_64.tar.gz",
"has_sig": false,
"md5_digest": "eec2230ff3b6199baaea00fa33b15851",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 67846,
"upload_time": "2018-01-26T19:08:57",
"url": "https://files.pythonhosted.org/packages/4d/1f/70586b0d778a353f04e107d11fd63f0fb1c5cda6cebb2be41468b3201d48/HAP-python-1.0.5.macosx-10.13-x86_64.tar.gz"
}
],
"1.0.6": [
{
"comment_text": "",
"digests": {
"md5": "270fad7ccfe1bc3468b41ad48e10a87a",
"sha256": "0a4f7c284cced51334537e47adc46f3f595b24aa2e78062e8fff4bca1c40a358"
},
"downloads": -1,
"filename": "HAP-python-1.0.6.1.tar.gz",
"has_sig": false,
"md5_digest": "270fad7ccfe1bc3468b41ad48e10a87a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 39188,
"upload_time": "2018-01-29T05:40:00",
"url": "https://files.pythonhosted.org/packages/68/95/12b6f673b69e2cf17d9b8a671cffc8c4f8b3552425f0ba1b8f7ccb619d57/HAP-python-1.0.6.1.tar.gz"
}
],
"1.0.7": [
{
"comment_text": "",
"digests": {
"md5": "7fe5d7c952093b7daac3d5a43dd1f03b",
"sha256": "d5fabb620d012eb9e9087894a6f0f924a04bc95225e5cc9f22e4e08212d003f5"
},
"downloads": -1,
"filename": "HAP-python-1.0.7.2.tar.gz",
"has_sig": false,
"md5_digest": "7fe5d7c952093b7daac3d5a43dd1f03b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 40963,
"upload_time": "2018-02-02T20:40:44",
"url": "https://files.pythonhosted.org/packages/e2/9c/8b8ecd361c4492614fba5723b91328edbb582d71df2593d08fa0dcf6dff8/HAP-python-1.0.7.2.tar.gz"
}
],
"1.0.8": [
{
"comment_text": "",
"digests": {
"md5": "1b89e353da1cf6b4657597be6ad636d4",
"sha256": "a01d7ace193c9fc5d71dbad82a8d78abcf89cc08012bd504e571c521b9aaf107"
},
"downloads": -1,
"filename": "HAP-python-1.0.8.tar.gz",
"has_sig": false,
"md5_digest": "1b89e353da1cf6b4657597be6ad636d4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 40965,
"upload_time": "2018-02-02T22:24:52",
"url": "https://files.pythonhosted.org/packages/d1/ac/9940f701c37d0a953a3dcaed6d581f0c4dfaea0a03de440599df33a64b18/HAP-python-1.0.8.tar.gz"
}
],
"1.0.9": [
{
"comment_text": "",
"digests": {
"md5": "60cd32b0f4953ffc4acf2e916df04f2a",
"sha256": "947684a348884b1a797ca44a12f74edab70e0aaa775a8d0d43fe8015a7a53a0d"
},
"downloads": -1,
"filename": "HAP-python-1.0.9.tar.gz",
"has_sig": false,
"md5_digest": "60cd32b0f4953ffc4acf2e916df04f2a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 41207,
"upload_time": "2018-02-03T07:31:27",
"url": "https://files.pythonhosted.org/packages/1d/73/d676f84c4eed402ef8a51c8b864b29dbefc1e94131004730119cd223aa73/HAP-python-1.0.9.tar.gz"
}
],
"1.1": [
{
"comment_text": "",
"digests": {
"md5": "6cd2ead7ed17132a67b48e2e25d0f7ad",
"sha256": "e414417502f06587d6c4c283c9213866cb7cdddd857f8b14ad560859b79cf3c2"
},
"downloads": -1,
"filename": "HAP-python-1.1.tar.gz",
"has_sig": false,
"md5_digest": "6cd2ead7ed17132a67b48e2e25d0f7ad",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 41878,
"upload_time": "2018-02-03T08:17:17",
"url": "https://files.pythonhosted.org/packages/8c/a4/29b737abfc685c846f23aa021524e55df8696a16964326e53748c9b15c2d/HAP-python-1.1.tar.gz"
}
],
"1.1.1": [
{
"comment_text": "",
"digests": {
"md5": "e71fa2b408c0e122196507486b16f317",
"sha256": "d6b770f7a077909b4714ecdb44f37f24272bce45ee4cf19e8765f3b6bfcfcfdc"
},
"downloads": -1,
"filename": "HAP-python-1.1.1.tar.gz",
"has_sig": false,
"md5_digest": "e71fa2b408c0e122196507486b16f317",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 42491,
"upload_time": "2018-02-03T22:05:19",
"url": "https://files.pythonhosted.org/packages/f9/55/08f04f309e619e82eb65723b6b4cc6086cd12b6625f2735892c1b344c4b6/HAP-python-1.1.1.tar.gz"
}
],
"1.1.2": [
{
"comment_text": "",
"digests": {
"md5": "f34ea5ff26c8246bc467591a286c4a66",
"sha256": "efb189a1e03e2a4308299c92884b5fbd5179b43abe99cdec5803b66cd320d5bb"
},
"downloads": -1,
"filename": "HAP-python-1.1.2.tar.gz",
"has_sig": false,
"md5_digest": "f34ea5ff26c8246bc467591a286c4a66",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 44353,
"upload_time": "2018-02-13T22:28:05",
"url": "https://files.pythonhosted.org/packages/48/cb/176081d62ae12a854606f56ff8482a398a5f38f1a1db0651f27ebb7038b2/HAP-python-1.1.2.tar.gz"
}
],
"1.1.3": [
{
"comment_text": "",
"digests": {
"md5": "0d30bb94c0e4d4b01e8ab98f8581f884",
"sha256": "d97cf9e75f88449ce9c108da1aff6b9d6975ba831f959c7e164c853284ec2c6f"
},
"downloads": -1,
"filename": "HAP-python-1.1.3.tar.gz",
"has_sig": false,
"md5_digest": "0d30bb94c0e4d4b01e8ab98f8581f884",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 44560,
"upload_time": "2018-02-16T06:50:48",
"url": "https://files.pythonhosted.org/packages/c9/e6/13ff6979eec2c3c9e6698916b338d3440175f9ea26980915ba4c5ab1ebeb/HAP-python-1.1.3.tar.gz"
}
],
"1.1.4": [
{
"comment_text": "",
"digests": {
"md5": "33d77f6e72e2fb0505a92a0e1217f894",
"sha256": "bd378386cb61bffea3b5c269d1ca790b27eb813af3ac1f8738a44dd1d5c3b4e8"
},
"downloads": -1,
"filename": "HAP-python-1.1.4.tar.gz",
"has_sig": false,
"md5_digest": "33d77f6e72e2fb0505a92a0e1217f894",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 46048,
"upload_time": "2018-02-17T17:40:01",
"url": "https://files.pythonhosted.org/packages/38/46/1434617a85237725ef7ab004d7832bed519ac948fe46b64eff8b67043813/HAP-python-1.1.4.tar.gz"
}
],
"1.1.5": [
{
"comment_text": "",
"digests": {
"md5": "74f903efc274f31b195f8a6d8240ef7c",
"sha256": "2200baab8d5cd7e08ac748857d0751847cdc2d9c62275dda616c1c034883f370"
},
"downloads": -1,
"filename": "HAP-python-1.1.5.tar.gz",
"has_sig": false,
"md5_digest": "74f903efc274f31b195f8a6d8240ef7c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 47271,
"upload_time": "2018-02-18T09:17:58",
"url": "https://files.pythonhosted.org/packages/bd/41/ae9980158bb3a36d1b980c19ad8be032105d4196360ee685c61f09253ef3/HAP-python-1.1.5.tar.gz"
}
],
"1.1.6": [
{
"comment_text": "",
"digests": {
"md5": "4004dd2bf330dfc836feb831bb12ee13",
"sha256": "9fb960eb91a56e4f59b588bfc6e55e6a7612240c5f7fe0349c1a2fcf250b3a38"
},
"downloads": -1,
"filename": "HAP-python-1.1.6.tar.gz",
"has_sig": false,
"md5_digest": "4004dd2bf330dfc836feb831bb12ee13",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 47831,
"upload_time": "2018-02-20T10:43:53",
"url": "https://files.pythonhosted.org/packages/e8/4c/124747efb3278a11ccd235413f696394550f4c4a3f406712e85ec57c956f/HAP-python-1.1.6.tar.gz"
}
],
"1.1.7": [
{
"comment_text": "",
"digests": {
"md5": "b0ef8cdb60236561c45b88bad245d105",
"sha256": "7ff45f390b8d1b815ba768cf01f26df6083566d3238db25b6e147202051f0863"
},
"downloads": -1,
"filename": "HAP-python-1.1.7.tar.gz",
"has_sig": false,
"md5_digest": "b0ef8cdb60236561c45b88bad245d105",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 47984,
"upload_time": "2018-02-21T21:05:19",
"url": "https://files.pythonhosted.org/packages/13/f9/e53700941ad2d37aea2723ba29b39b4a0be8c61eab71339679543439d100/HAP-python-1.1.7.tar.gz"
}
],
"1.1.8": [
{
"comment_text": "",
"digests": {
"md5": "244c46fccb0012e6ba17a58f4eeb315f",
"sha256": "b7df3d0195a30ab77dab35d67fc2364074acf72e7edb52bb7cbfcc0f00677a4e"
},
"downloads": -1,
"filename": "HAP-python-1.1.8.tar.gz",
"has_sig": false,
"md5_digest": "244c46fccb0012e6ba17a58f4eeb315f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 47750,
"upload_time": "2018-03-29T19:20:57",
"url": "https://files.pythonhosted.org/packages/f8/d8/558d919096710124141db0c3b5a0d53edeac466b28e68ba32e24d7b01fba/HAP-python-1.1.8.tar.gz"
}
],
"1.1.9": [
{
"comment_text": "",
"digests": {
"md5": "c5a2100829bade71e6b93dab97ea7522",
"sha256": "2d08996d688deff977082671ac78c1aa5474bb2c31c3e4b2483bd0384459108f"
},
"downloads": -1,
"filename": "HAP-python-1.1.9.tar.gz",
"has_sig": false,
"md5_digest": "c5a2100829bade71e6b93dab97ea7522",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 47139,
"upload_time": "2018-04-06T09:48:43",
"url": "https://files.pythonhosted.org/packages/10/7c/bd19cc136dc7f42fc96c4b2fc8b3eaebaa7691525e477f05943717069491/HAP-python-1.1.9.tar.gz"
}
],
"2.0.0": [
{
"comment_text": "",
"digests": {
"md5": "5e9ff57f09893ab1bb608d01efc97540",
"sha256": "ca813ca6d2404d79a5483565ac0ae0d1683e29c5778de321e07a2fd292abd271"
},
"downloads": -1,
"filename": "HAP-python-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "5e9ff57f09893ab1bb608d01efc97540",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 48394,
"upload_time": "2018-05-04T10:37:21",
"url": "https://files.pythonhosted.org/packages/2e/89/c0c46460b268eaa449236708a586db13be8a1ff595324d22497893a887ab/HAP-python-2.0.0.tar.gz"
}
],
"2.1.0": [
{
"comment_text": "",
"digests": {
"md5": "a409c55236f9f82294df56940bfca030",
"sha256": "3befeec72d086a95d4e710c9e96b1bd186e6afc49c674f82464d2b0b96635c61"
},
"downloads": -1,
"filename": "HAP-python-2.1.0.tar.gz",
"has_sig": false,
"md5_digest": "a409c55236f9f82294df56940bfca030",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 42986,
"upload_time": "2018-05-18T05:30:48",
"url": "https://files.pythonhosted.org/packages/10/6a/001c761afb18bc6f0ea490b993e32e3b054bf045b2964508abb2693dce25/HAP-python-2.1.0.tar.gz"
}
],
"2.2.0": [
{
"comment_text": "",
"digests": {
"md5": "3b13766f1728d5749fefab304644eb5f",
"sha256": "5b2e4d650c8c3074fca514751eab1fd1f21f7b4d8c6c552394a8bf6d2caec1f0"
},
"downloads": -1,
"filename": "HAP_python-2.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3b13766f1728d5749fefab304644eb5f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 41537,
"upload_time": "2018-05-26T08:43:05",
"url": "https://files.pythonhosted.org/packages/ae/6c/3b4352e988211d8f4ddb19ad881ad8e7bd56a7d01b76a05cb4f5ad80e6ab/HAP_python-2.2.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d49681c335ca2733144b4e00dda1f61f",
"sha256": "584d84bd27bdf0e00cffd2810dd17a789477b35092c7f657ae93cdb70254b500"
},
"downloads": -1,
"filename": "HAP-python-2.2.0.tar.gz",
"has_sig": false,
"md5_digest": "d49681c335ca2733144b4e00dda1f61f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 43727,
"upload_time": "2018-05-26T08:43:07",
"url": "https://files.pythonhosted.org/packages/9b/98/d12bbdab7ad5a7d671ddd35b385ad52d2ebdb5ad3dbe86b4556f4f9d95bc/HAP-python-2.2.0.tar.gz"
}
],
"2.2.1": [
{
"comment_text": "",
"digests": {
"md5": "251794a4fd535dfe6d565f86e2d2d279",
"sha256": "60dd605c5b22d835f6ea329a7c8ed4d680bc16a9e84773c7a416d07c78db696f"
},
"downloads": -1,
"filename": "HAP_python-2.2.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "251794a4fd535dfe6d565f86e2d2d279",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 41541,
"upload_time": "2018-05-29T04:28:07",
"url": "https://files.pythonhosted.org/packages/4a/fa/39aecad7d63c8eb4a8a1e7476179de16eeb4ad6056a62829b8d3e46d25c7/HAP_python-2.2.1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "e67a870fab3147158a7643dccefa8f23",
"sha256": "268285050edd39e346cb6fb9191c1c092fe9a355baf672cdcd7f26bb7593b073"
},
"downloads": -1,
"filename": "HAP-python-2.2.1.tar.gz",
"has_sig": false,
"md5_digest": "e67a870fab3147158a7643dccefa8f23",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 43751,
"upload_time": "2018-05-29T04:28:09",
"url": "https://files.pythonhosted.org/packages/9b/e9/0bc25dcf733f45536642b95778a10d46942df5ba63b75e2c6a05b73af7a9/HAP-python-2.2.1.tar.gz"
}
],
"2.2.2": [
{
"comment_text": "",
"digests": {
"md5": "7b6fdc830904e434f272cfa40ac653b3",
"sha256": "c42cc605e4a47967aabba129985e9ff6c185619fc3fd6dd53d211fa65fd6c4f2"
},
"downloads": -1,
"filename": "HAP_python-2.2.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "7b6fdc830904e434f272cfa40ac653b3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 46582,
"upload_time": "2018-05-29T19:45:11",
"url": "https://files.pythonhosted.org/packages/08/95/67709722b52871cbfe80700f3900f2ec8488b0e782cbcc59fa8f89bf0cab/HAP_python-2.2.2-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "ca20700cc82317c6d3250a3bac51bb94",
"sha256": "4503fc2eb593602c440051a92c9bfc42b9a14b9e114e8190e19c0ae2f67be002"
},
"downloads": -1,
"filename": "HAP-python-2.2.2.tar.gz",
"has_sig": false,
"md5_digest": "ca20700cc82317c6d3250a3bac51bb94",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 43831,
"upload_time": "2018-05-29T19:47:29",
"url": "https://files.pythonhosted.org/packages/40/3f/4875f7a3201974d5714f1ee9988851c7570e9ee806633c82167ca1ee00f2/HAP-python-2.2.2.tar.gz"
}
],
"2.3.0": [
{
"comment_text": "",
"digests": {
"md5": "dc3a630507846ee8575590276416fac1",
"sha256": "c5e3e48b55356dc23549b8da68433ce3fae0ed39fa75e76a2d6ddc8c5c075046"
},
"downloads": -1,
"filename": "HAP_python-2.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "dc3a630507846ee8575590276416fac1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 247356,
"upload_time": "2018-10-24T20:15:09",
"url": "https://files.pythonhosted.org/packages/ff/f5/c15bc95330c1a1b58302be307ce4c2a10d073565d2378cebd28aa3a935bd/HAP_python-2.3.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "6c59ce55e66331dd90623315796b6e72",
"sha256": "345aaf1ac6eb3c44dc68242cd94ee5f06e7f2e421e8b92003160ea91887b2d8f"
},
"downloads": -1,
"filename": "HAP-python-2.3.0.tar.gz",
"has_sig": false,
"md5_digest": "6c59ce55e66331dd90623315796b6e72",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 247169,
"upload_time": "2018-10-24T20:15:11",
"url": "https://files.pythonhosted.org/packages/45/4c/42601861062706aba7613ce278aede93974260818e32476c66d3bf0ca18a/HAP-python-2.3.0.tar.gz"
}
],
"2.4.0": [
{
"comment_text": "",
"digests": {
"md5": "2b3aa44e6fc2a5e8186fde60c36db28d",
"sha256": "d622005903319a88b2b28fd100217a5c423995086f314dd2ae04f8b65343a997"
},
"downloads": -1,
"filename": "HAP_python-2.4.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "2b3aa44e6fc2a5e8186fde60c36db28d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 247459,
"upload_time": "2018-11-10T07:45:43",
"url": "https://files.pythonhosted.org/packages/85/74/f60357c0bcd92ce203e626f986342e5ef4b66bd78edcb170b98b517939c5/HAP_python-2.4.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "984358756550ae1e4181b6f6dfbb1738",
"sha256": "498cbc547f6f9699272d57393dd883962038a3cdc1e5af95a6cb67e87ad8538c"
},
"downloads": -1,
"filename": "HAP-python-2.4.0.tar.gz",
"has_sig": false,
"md5_digest": "984358756550ae1e4181b6f6dfbb1738",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 248779,
"upload_time": "2018-11-10T07:45:46",
"url": "https://files.pythonhosted.org/packages/ae/5b/16229408bec18af73360e1aec4e6b715c07825841a9b8cf4d35fca1f62ad/HAP-python-2.4.0.tar.gz"
}
],
"2.4.1": [
{
"comment_text": "",
"digests": {
"md5": "4436ed41753ad5bbf7dce0e9a626830e",
"sha256": "6012787c82f3eabe98b7dbdb6e2736d72acb20dc8a5189d18234dc79c6adc9d0"
},
"downloads": -1,
"filename": "HAP_python-2.4.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4436ed41753ad5bbf7dce0e9a626830e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 247693,
"upload_time": "2018-11-11T21:16:30",
"url": "https://files.pythonhosted.org/packages/8d/49/438c9a921aa6eb2172ec52051a69100684425775fc3217d3f07c932d1a42/HAP_python-2.4.1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "701a7a3cc7b460c1bd2b32fb70d95a4e",
"sha256": "9d87ea06c3521d87fa5c92ed03d8a37a1b7c564419ca2ed9585dada136ebd736"
},
"downloads": -1,
"filename": "HAP-python-2.4.1.tar.gz",
"has_sig": false,
"md5_digest": "701a7a3cc7b460c1bd2b32fb70d95a4e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 248999,
"upload_time": "2018-11-11T21:16:32",
"url": "https://files.pythonhosted.org/packages/c2/36/0a60bcfa7c16de994a6863ff7afc24c3b493cfea811554efb6fb64ae47ab/HAP-python-2.4.1.tar.gz"
}
],
"2.4.2": [
{
"comment_text": "",
"digests": {
"md5": "6b26007958530c93d6d13c310d8ac751",
"sha256": "41cd78e56aeba967d53b03d2680455da7c9f0b45c2c59dad57906e8abba2d245"
},
"downloads": -1,
"filename": "HAP_python-2.4.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "6b26007958530c93d6d13c310d8ac751",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 248161,
"upload_time": "2019-01-04T19:31:08",
"url": "https://files.pythonhosted.org/packages/1e/e5/83972eb1069e448206964559aad3f132bf5ba5a2f596d286e60a505b3e29/HAP_python-2.4.2-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "e8b531f140ab0ee508c32eaae3f5854d",
"sha256": "1e118f0138f5741ce9852d3157ac15ee093eee03bcf62cc82e79d6858f2b11b3"
},
"downloads": -1,
"filename": "HAP-python-2.4.2.tar.gz",
"has_sig": false,
"md5_digest": "e8b531f140ab0ee508c32eaae3f5854d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 249441,
"upload_time": "2019-01-04T19:31:11",
"url": "https://files.pythonhosted.org/packages/d0/b2/b72308cecbacac7bb16b481efe95eecc17119032f41ce6dffd5b1cdbb8df/HAP-python-2.4.2.tar.gz"
}
],
"2.5.0": [
{
"comment_text": "",
"digests": {
"md5": "5a464bc6c32e492a95d9303d77a40000",
"sha256": "0d09d43f1f6e3a9127100dcabc9fe4d472ca45a6f50213394081e112b46fd971"
},
"downloads": -1,
"filename": "HAP_python-2.5.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5a464bc6c32e492a95d9303d77a40000",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 253030,
"upload_time": "2019-04-10T06:27:53",
"url": "https://files.pythonhosted.org/packages/51/7e/66314448d38345311a3602f5d5bda0905cc89989c144c315bf5ac8ea92e5/HAP_python-2.5.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "f928bc591c21dd6c7322539ee2b6f8c1",
"sha256": "bc7fe565df9ee579427ed7cd600aa29523e6d47102c470e62e9a3549f613252f"
},
"downloads": -1,
"filename": "HAP-python-2.5.0.tar.gz",
"has_sig": false,
"md5_digest": "f928bc591c21dd6c7322539ee2b6f8c1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 254141,
"upload_time": "2019-04-10T06:27:56",
"url": "https://files.pythonhosted.org/packages/33/e0/42140b2fcc85b72f4f6a1165f26997eaf2fd5245d28f74a73ae118f89705/HAP-python-2.5.0.tar.gz"
}
],
"2.6.0": [
{
"comment_text": "",
"digests": {
"md5": "c2f9ebff777568749f489d56f808de8b",
"sha256": "1bcee763212a26e65145a0c5ded3890678664570a3ef702ce58fbd9ec484916b"
},
"downloads": -1,
"filename": "HAP_python-2.6.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c2f9ebff777568749f489d56f808de8b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 257857,
"upload_time": "2019-09-21T10:52:37",
"url": "https://files.pythonhosted.org/packages/ce/ba/5f58a2866ae4131943c2c616e766bdcf63f2f40fe2e300d462f05a4a784c/HAP_python-2.6.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "87542ce2c7ed8db90902a55df7fdb03d",
"sha256": "1422a14b53d68acd10bf442fee78bbdd9137ba95c0024679bd0cc7c5533171e3"
},
"downloads": -1,
"filename": "HAP-python-2.6.0.tar.gz",
"has_sig": false,
"md5_digest": "87542ce2c7ed8db90902a55df7fdb03d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 254408,
"upload_time": "2019-09-21T10:52:40",
"url": "https://files.pythonhosted.org/packages/51/e0/fcbd0d39bd446bf3dc5ec1aada53fb0c218901e83c16ac34971cb3b64e63/HAP-python-2.6.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "c2f9ebff777568749f489d56f808de8b",
"sha256": "1bcee763212a26e65145a0c5ded3890678664570a3ef702ce58fbd9ec484916b"
},
"downloads": -1,
"filename": "HAP_python-2.6.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c2f9ebff777568749f489d56f808de8b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.5",
"size": 257857,
"upload_time": "2019-09-21T10:52:37",
"url": "https://files.pythonhosted.org/packages/ce/ba/5f58a2866ae4131943c2c616e766bdcf63f2f40fe2e300d462f05a4a784c/HAP_python-2.6.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "87542ce2c7ed8db90902a55df7fdb03d",
"sha256": "1422a14b53d68acd10bf442fee78bbdd9137ba95c0024679bd0cc7c5533171e3"
},
"downloads": -1,
"filename": "HAP-python-2.6.0.tar.gz",
"has_sig": false,
"md5_digest": "87542ce2c7ed8db90902a55df7fdb03d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.5",
"size": 254408,
"upload_time": "2019-09-21T10:52:40",
"url": "https://files.pythonhosted.org/packages/51/e0/fcbd0d39bd446bf3dc5ec1aada53fb0c218901e83c16ac34971cb3b64e63/HAP-python-2.6.0.tar.gz"
}
]
}