{"action":"created","comment":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/179655560","pull_request_review_id":109941354,"id":179655560,"diff_hunk":"@@ -1,21 +1,64 @@\n \"\"\"Extend the basic Accessory and Bridge functions.\"\"\"\n+from datetime import timedelta\n+from functools import wraps\n+from inspect import getmodule\n import logging\n \n from pyhap.accessory import Accessory, Bridge, Category\n from pyhap.accessory_driver import AccessoryDriver\n \n-from homeassistant.helpers.event import async_track_state_change\n+from homeassistant.core import callback\n+from homeassistant.helpers.event import (\n+    async_track_state_change, track_point_in_utc_time)\n+from homeassistant.util import dt as dt_util\n \n from .const import (\n-    ACCESSORY_MODEL, ACCESSORY_NAME, BRIDGE_MODEL, BRIDGE_NAME,\n-    MANUFACTURER, SERV_ACCESSORY_INFO, CHAR_MANUFACTURER, CHAR_MODEL,\n-    CHAR_NAME, CHAR_SERIAL_NUMBER)\n+    DEBOUNCE_TIMEOUT, ACCESSORY_MODEL, ACCESSORY_NAME, BRIDGE_MODEL,\n+    BRIDGE_NAME, MANUFACTURER, SERV_ACCESSORY_INFO, CHAR_MANUFACTURER,\n+    CHAR_MODEL, CHAR_NAME, CHAR_SERIAL_NUMBER)\n from .util import (\n     show_setup_message, dismiss_setup_message)\n \n _LOGGER = logging.getLogger(__name__)\n \n \n+def debounce(func):\n+    \"\"\"Decorator function. Debounce callbacks form HomeKit.\"\"\"\n+    @callback\n+    def call_later_listener(*args):\n+        \"\"\"Callback listener called from call_later.\"\"\"\n+        # pylint: disable=unsubscriptable-object\n+        nonlocal lastargs, remove_listener\n+        hass = lastargs[0]\n+        hass.async_add_job(func, *lastargs[1:])","path":"homeassistant/components/homekit/accessories.py","position":37,"original_position":37,"commit_id":"2c2c8306fabf8f28d4ca7d8ed456d825d2ceab65","original_commit_id":"2c2c8306fabf8f28d4ca7d8ed456d825d2ceab65","user":{"login":"balloob","id":1444314,"avatar_url":"https://avatars3.githubusercontent.com/u/1444314?v=4","gravatar_id":"","url":"https://api.github.com/users/balloob","html_url":"https://github.com/balloob","followers_url":"https://api.github.com/users/balloob/followers","following_url":"https://api.github.com/users/balloob/following{/other_user}","gists_url":"https://api.github.com/users/balloob/gists{/gist_id}","starred_url":"https://api.github.com/users/balloob/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/balloob/subscriptions","organizations_url":"https://api.github.com/users/balloob/orgs","repos_url":"https://api.github.com/users/balloob/repos","events_url":"https://api.github.com/users/balloob/events{/privacy}","received_events_url":"https://api.github.com/users/balloob/received_events","type":"User","site_admin":false},"body":"Oh I see now how you're storing this. Can we store it in a dictionary? That makes things a lot more readable.","created_at":"2018-04-06T03:58:45Z","updated_at":"2018-04-06T03:58:45Z","html_url":"https://github.com/home-assistant/home-assistant/pull/13534#discussion_r179655560","pull_request_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13534","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/179655560"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/13534#discussion_r179655560"},"pull_request":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13534"}},"in_reply_to_id":179655513},"pull_request":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13534","id":178378381,"html_url":"https://github.com/home-assistant/home-assistant/pull/13534","diff_url":"https://github.com/home-assistant/home-assistant/pull/13534.diff","patch_url":"https://github.com/home-assistant/home-assistant/pull/13534.patch","issue_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/13534","number":13534,"state":"open","locked":false,"title":"Add timeout / debounce (for brightness and others)","user":{"login":"cdce8p","id":30130371,"avatar_url":"https://avatars2.githubusercontent.com/u/30130371?v=4","gravatar_id":"","url":"https://api.github.com/users/cdce8p","html_url":"https://github.com/cdce8p","followers_url":"https://api.github.com/users/cdce8p/followers","following_url":"https://api.github.com/users/cdce8p/following{/other_user}","gists_url":"https://api.github.com/users/cdce8p/gists{/gist_id}","starred_url":"https://api.github.com/users/cdce8p/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cdce8p/subscriptions","organizations_url":"https://api.github.com/users/cdce8p/orgs","repos_url":"https://api.github.com/users/cdce8p/repos","events_url":"https://api.github.com/users/cdce8p/events{/privacy}","received_events_url":"https://api.github.com/users/cdce8p/received_events","type":"User","site_admin":false},"body":"## Description:\r\nThis PR fixes an issue, where for continuous characteristics slowly changing the value in the `Home` app caused multiple service calls, instead of just one. ~~Since this timeout feature introduces latency, I decided to add a configuration parameter for it, so users can decide how long the timeout should be (float, between 0 and 5s).~~ The Timeout is set to 0.5s.\r\n\r\nIn addition I did some style cleanup.\r\n\r\n\r\n**Related issue:** fixes #13493\r\n**Discussion belove:** #12819\r\n\r\n~~**Pull request in [home-assistant.github.io](https://github.com/home-assistant/home-assistant.github.io) with documentation (if applicable):** home-assistant/home-assistant.github.io#5050~~\r\n\r\n## Example entry for `configuration.yaml` (if applicable):\r\n```yaml\r\nhomekit:\r\n  timeout: 2\r\n```\r\n\r\n## Checklist:\r\n  - [x] The code change is tested and works locally.\r\n  - [x] Local tests pass with `tox`. **Your PR cannot be merged unless tests pass**\r\n  - [x] Tests have been added to verify that the new code works.\r\n  - [x] ~~Documentation added/updated in [home-assistant.github.io](https://github.com/home-assistant/home-assistant.github.io)~~\r\n\r\n---\r\n\r\ncc: @maxclaey @DaveOke","created_at":"2018-03-29T16:25:12Z","updated_at":"2018-04-06T03:58:45Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3531e444487150a51049307a41e6c0d1b64fc24d","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":527871105,"url":"https://api.github.com/repos/home-assistant/home-assistant/labels/cla-signed","name":"cla-signed","color":"008000","default":false},{"id":840363345,"url":"https://api.github.com/repos/home-assistant/home-assistant/labels/component:%20homekit","name":"component: homekit","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13534/commits","review_comments_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13534/comments","review_comment_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments{/number}","comments_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/13534/comments","statuses_url":"https://api.github.com/repos/home-assistant/home-assistant/statuses/2c2c8306fabf8f28d4ca7d8ed456d825d2ceab65","head":{"label":"cdce8p:homekit-add_timeout","ref":"homekit-add_timeout","sha":"2c2c8306fabf8f28d4ca7d8ed456d825d2ceab65","user":{"login":"cdce8p","id":30130371,"avatar_url":"https://avatars2.githubusercontent.com/u/30130371?v=4","gravatar_id":"","url":"https://api.github.com/users/cdce8p","html_url":"https://github.com/cdce8p","followers_url":"https://api.github.com/users/cdce8p/followers","following_url":"https://api.github.com/users/cdce8p/following{/other_user}","gists_url":"https://api.github.com/users/cdce8p/gists{/gist_id}","starred_url":"https://api.github.com/users/cdce8p/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cdce8p/subscriptions","organizations_url":"https://api.github.com/users/cdce8p/orgs","repos_url":"https://api.github.com/users/cdce8p/repos","events_url":"https://api.github.com/users/cdce8p/events{/privacy}","received_events_url":"https://api.github.com/users/cdce8p/received_events","type":"User","site_admin":false},"repo":{"id":98104524,"name":"home-assistant","full_name":"cdce8p/home-assistant","owner":{"login":"cdce8p","id":30130371,"avatar_url":"https://avatars2.githubusercontent.com/u/30130371?v=4","gravatar_id":"","url":"https://api.github.com/users/cdce8p","html_url":"https://github.com/cdce8p","followers_url":"https://api.github.com/users/cdce8p/followers","following_url":"https://api.github.com/users/cdce8p/following{/other_user}","gists_url":"https://api.github.com/users/cdce8p/gists{/gist_id}","starred_url":"https://api.github.com/users/cdce8p/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cdce8p/subscriptions","organizations_url":"https://api.github.com/users/cdce8p/orgs","repos_url":"https://api.github.com/users/cdce8p/repos","events_url":"https://api.github.com/users/cdce8p/events{/privacy}","received_events_url":"https://api.github.com/users/cdce8p/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/cdce8p/home-assistant","description":":house_with_garden: Open-source home automation platform running on Python 3","fork":true,"url":"https://api.github.com/repos/cdce8p/home-assistant","forks_url":"https://api.github.com/repos/cdce8p/home-assistant/forks","keys_url":"https://api.github.com/repos/cdce8p/home-assistant/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cdce8p/home-assistant/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cdce8p/home-assistant/teams","hooks_url":"https://api.github.com/repos/cdce8p/home-assistant/hooks","issue_events_url":"https://api.github.com/repos/cdce8p/home-assistant/issues/events{/number}","events_url":"https://api.github.com/repos/cdce8p/home-assistant/events","assignees_url":"https://api.github.com/repos/cdce8p/home-assistant/assignees{/user}","branches_url":"https://api.github.com/repos/cdce8p/home-assistant/branches{/branch}","tags_url":"https://api.github.com/repos/cdce8p/home-assistant/tags","blobs_url":"https://api.github.com/repos/cdce8p/home-assistant/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cdce8p/home-assistant/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cdce8p/home-assistant/git/refs{/sha}","trees_url":"https://api.github.com/repos/cdce8p/home-assistant/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cdce8p/home-assistant/statuses/{sha}","languages_url":"https://api.github.com/repos/cdce8p/home-assistant/languages","stargazers_url":"https://api.github.com/repos/cdce8p/home-assistant/stargazers","contributors_url":"https://api.github.com/repos/cdce8p/home-assistant/contributors","subscribers_url":"https://api.github.com/repos/cdce8p/home-assistant/subscribers","subscription_url":"https://api.github.com/repos/cdce8p/home-assistant/subscription","commits_url":"https://api.github.com/repos/cdce8p/home-assistant/commits{/sha}","git_commits_url":"https://api.github.com/repos/cdce8p/home-assistant/git/commits{/sha}","comments_url":"https://api.github.com/repos/cdce8p/home-assistant/comments{/number}","issue_comment_url":"https://api.github.com/repos/cdce8p/home-assistant/issues/comments{/number}","contents_url":"https://api.github.com/repos/cdce8p/home-assistant/contents/{+path}","compare_url":"https://api.github.com/repos/cdce8p/home-assistant/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cdce8p/home-assistant/merges","archive_url":"https://api.github.com/repos/cdce8p/home-assistant/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cdce8p/home-assistant/downloads","issues_url":"https://api.github.com/repos/cdce8p/home-assistant/issues{/number}","pulls_url":"https://api.github.com/repos/cdce8p/home-assistant/pulls{/number}","milestones_url":"https://api.github.com/repos/cdce8p/home-assistant/milestones{/number}","notifications_url":"https://api.github.com/repos/cdce8p/home-assistant/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cdce8p/home-assistant/labels{/name}","releases_url":"https://api.github.com/repos/cdce8p/home-assistant/releases{/id}","deployments_url":"https://api.github.com/repos/cdce8p/home-assistant/deployments","created_at":"2017-07-23T14:46:30Z","updated_at":"2018-04-05T20:51:45Z","pushed_at":"2018-04-05T20:51:40Z","git_url":"git://github.com/cdce8p/home-assistant.git","ssh_url":"git@github.com:cdce8p/home-assistant.git","clone_url":"https://github.com/cdce8p/home-assistant.git","svn_url":"https://github.com/cdce8p/home-assistant","homepage":"https://home-assistant.io","size":80402,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":1,"open_issues":0,"watchers":0,"default_branch":"dev"}},"base":{"label":"home-assistant:dev","ref":"dev","sha":"0081764ddc05f6146de45db091bd5202c3946499","user":{"login":"home-assistant","id":13844975,"avatar_url":"https://avatars3.githubusercontent.com/u/13844975?v=4","gravatar_id":"","url":"https://api.github.com/users/home-assistant","html_url":"https://github.com/home-assistant","followers_url":"https://api.github.com/users/home-assistant/followers","following_url":"https://api.github.com/users/home-assistant/following{/other_user}","gists_url":"https://api.github.com/users/home-assistant/gists{/gist_id}","starred_url":"https://api.github.com/users/home-assistant/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/home-assistant/subscriptions","organizations_url":"https://api.github.com/users/home-assistant/orgs","repos_url":"https://api.github.com/users/home-assistant/repos","events_url":"https://api.github.com/users/home-assistant/events{/privacy}","received_events_url":"https://api.github.com/users/home-assistant/received_events","type":"Organization","site_admin":false},"repo":{"id":12888993,"name":"home-assistant","full_name":"home-assistant/home-assistant","owner":{"login":"home-assistant","id":13844975,"avatar_url":"https://avatars3.githubusercontent.com/u/13844975?v=4","gravatar_id":"","url":"https://api.github.com/users/home-assistant","html_url":"https://github.com/home-assistant","followers_url":"https://api.github.com/users/home-assistant/followers","following_url":"https://api.github.com/users/home-assistant/following{/other_user}","gists_url":"https://api.github.com/users/home-assistant/gists{/gist_id}","starred_url":"https://api.github.com/users/home-assistant/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/home-assistant/subscriptions","organizations_url":"https://api.github.com/users/home-assistant/orgs","repos_url":"https://api.github.com/users/home-assistant/repos","events_url":"https://api.github.com/users/home-assistant/events{/privacy}","received_events_url":"https://api.github.com/users/home-assistant/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/home-assistant/home-assistant","description":":house_with_garden: Open-source home automation platform running on Python 3","fork":false,"url":"https://api.github.com/repos/home-assistant/home-assistant","forks_url":"https://api.github.com/repos/home-assistant/home-assistant/forks","keys_url":"https://api.github.com/repos/home-assistant/home-assistant/keys{/key_id}","collaborators_url":"https://api.github.com/repos/home-assistant/home-assistant/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/home-assistant/home-assistant/teams","hooks_url":"https://api.github.com/repos/home-assistant/home-assistant/hooks","issue_events_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/events{/number}","events_url":"https://api.github.com/repos/home-assistant/home-assistant/events","assignees_url":"https://api.github.com/repos/home-assistant/home-assistant/assignees{/user}","branches_url":"https://api.github.com/repos/home-assistant/home-assistant/branches{/branch}","tags_url":"https://api.github.com/repos/home-assistant/home-assistant/tags","blobs_url":"https://api.github.com/repos/home-assistant/home-assistant/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/home-assistant/home-assistant/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/home-assistant/home-assistant/git/refs{/sha}","trees_url":"https://api.github.com/repos/home-assistant/home-assistant/git/trees{/sha}","statuses_url":"https://api.github.com/repos/home-assistant/home-assistant/statuses/{sha}","languages_url":"https://api.github.com/repos/home-assistant/home-assistant/languages","stargazers_url":"https://api.github.com/repos/home-assistant/home-assistant/stargazers","contributors_url":"https://api.github.com/repos/home-assistant/home-assistant/contributors","subscribers_url":"https://api.github.com/repos/home-assistant/home-assistant/subscribers","subscription_url":"https://api.github.com/repos/home-assistant/home-assistant/subscription","commits_url":"https://api.github.com/repos/home-assistant/home-assistant/commits{/sha}","git_commits_url":"https://api.github.com/repos/home-assistant/home-assistant/git/commits{/sha}","comments_url":"https://api.github.com/repos/home-assistant/home-assistant/comments{/number}","issue_comment_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/comments{/number}","contents_url":"https://api.github.com/repos/home-assistant/home-assistant/contents/{+path}","compare_url":"https://api.github.com/repos/home-assistant/home-assistant/compare/{base}...{head}","merges_url":"https://api.github.com/repos/home-assistant/home-assistant/merges","archive_url":"https://api.github.com/repos/home-assistant/home-assistant/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/home-assistant/home-assistant/downloads","issues_url":"https://api.github.com/repos/home-assistant/home-assistant/issues{/number}","pulls_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls{/number}","milestones_url":"https://api.github.com/repos/home-assistant/home-assistant/milestones{/number}","notifications_url":"https://api.github.com/repos/home-assistant/home-assistant/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/home-assistant/home-assistant/labels{/name}","releases_url":"https://api.github.com/repos/home-assistant/home-assistant/releases{/id}","deployments_url":"https://api.github.com/repos/home-assistant/home-assistant/deployments","created_at":"2013-09-17T07:29:48Z","updated_at":"2018-04-06T01:32:15Z","pushed_at":"2018-04-06T03:20:02Z","git_url":"git://github.com/home-assistant/home-assistant.git","ssh_url":"git@github.com:home-assistant/home-assistant.git","clone_url":"https://github.com/home-assistant/home-assistant.git","svn_url":"https://github.com/home-assistant/home-assistant","homepage":"https://home-assistant.io","size":80518,"stargazers_count":13583,"watchers_count":13583,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":3984,"mirror_url":null,"archived":false,"open_issues_count":710,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":3984,"open_issues":710,"watchers":13583,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13534"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/13534"},"issue":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/13534"},"comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/13534/comments"},"review_comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13534/comments"},"review_comment":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/13534/commits"},"statuses":{"href":"https://api.github.com/repos/home-assistant/home-assistant/statuses/2c2c8306fabf8f28d4ca7d8ed456d825d2ceab65"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"balloob"}}