{"action":"created","comment":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/73432023","id":73432023,"diff_hunk":"@@ -0,0 +1,349 @@\n+\"\"\"\n+Support to interface with the Emby API.\n+\n+For more details about this platform, please refer to the documentation at\n+https://home-assistant.io/components/media_player.emby/\n+\"\"\"\n+import json\n+import logging\n+import os\n+from datetime import timedelta\n+from urllib.request import Request, urlopen\n+from urllib.parse import urlparse\n+\n+import homeassistant.util as util\n+from homeassistant.components.media_player import (\n+    MEDIA_TYPE_TVSHOW, MEDIA_TYPE_VIDEO, SUPPORT_NEXT_TRACK, SUPPORT_PAUSE, \n+    SUPPORT_SEEK, SUPPORT_STOP, SUPPORT_VOLUME_MUTE, SUPPORT_VOLUME_SET,\n+    SUPPORT_PREVIOUS_TRACK, MediaPlayerDevice)\n+from homeassistant.const import (\n+    DEVICE_DEFAULT_NAME, STATE_IDLE, STATE_OFF, STATE_PAUSED, STATE_PLAYING,\n+    STATE_UNKNOWN)\n+from homeassistant.loader import get_component\n+from homeassistant.helpers.event import (track_utc_time_change)\n+\n+REQUIREMENTS = []\n+MIN_TIME_BETWEEN_SCANS = timedelta(seconds=10)\n+MIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=1)\n+\n+EMBY_CONFIG_FILE = 'emby.conf'\n+\n+# Map ip to request id for configuring\n+_CONFIGURING = {}\n+_LOGGER = logging.getLogger(__name__)\n+\n+SUPPORT_EMBY = SUPPORT_PAUSE | SUPPORT_PREVIOUS_TRACK | SUPPORT_NEXT_TRACK | SUPPORT_STOP | SUPPORT_SEEK\n+\n+\n+def config_from_file(filename, config=None):\n+    \"\"\"Small configuration file management function.\"\"\"\n+    if config:\n+        # We're writing configuration\n+        try:\n+            with open(filename, 'w') as fdesc:\n+                fdesc.write(json.dumps(config))\n+        except IOError as error:\n+            _LOGGER.error('Saving config file failed: %s', error)\n+            return False\n+        return True\n+    else:\n+        # We're reading config\n+        if os.path.isfile(filename):\n+            try:\n+                with open(filename, 'r') as fdesc:\n+                    return json.loads(fdesc.read())\n+            except IOError as error:\n+                _LOGGER.error('Reading config file failed: %s', error)\n+                # This won't work yet\n+                return False\n+        else:\n+            return {}\n+\n+\n+# pylint: disable=abstract-method\n+def setup_platform(hass, config, add_devices_callback, discovery_info=None):\n+    \"\"\"Setup the Emby platform.\"\"\"\n+    config = config_from_file(hass.config.path(EMBY_CONFIG_FILE))\n+    if len(config):\n+        # Setup a configured EmbyServer\n+        host, token = config.popitem()\n+        token = token['token']\n+    else:\n+        return\n+\n+    setup_embyserver(host, token, hass, add_devices_callback)\n+\n+\n+# pylint: disable=too-many-branches\n+def setup_embyserver(host, token, hass, add_devices_callback):\n+    _LOGGER.info('Setting up Emby server at: ' + host)\n+    \"\"\"Setup a embyserver based on host parameter.\"\"\"\n+    embyserver = EmbyRemote(token, host)\n+    \n+    # If we came here and configuring this host, mark as done\n+    if host in _CONFIGURING:\n+        request_id = _CONFIGURING.pop(host)\n+        configurator = get_component('configurator')\n+        configurator.request_done(request_id)\n+        _LOGGER.info('Discovery configuration done!')\n+\n+    # Save config\n+    if not config_from_file(\n+            hass.config.path(EMBY_CONFIG_FILE),\n+            {host: {'token': token}}):\n+        _LOGGER.error('failed to save config file')\n+\n+    _LOGGER.info('Connected to: %s', host)\n+\n+    emby_clients = {}\n+    emby_sessions = {}\n+    track_utc_time_change(hass, lambda now: update_devices(), second=30)\n+\n+    @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS)\n+    def update_devices():\n+        \"\"\"Update the devices objects.\"\"\"\n+        try:\n+            devices = embyserver.getSessions()\n+        except OSError:\n+            _LOGGER.error(\n+                'Could not connect to emby server at %s', host)\n+            return\n+\n+        new_emby_clients = []\n+        for device in devices:\n+            # For now, let's allow all deviceClass types\n+            if not device['SupportsRemoteControl']:\n+                continue\n+\n+            if device['DeviceId'] not in emby_clients:\n+                new_client = EmbyClient(embyserver, device, emby_sessions, update_devices, update_sessions)\n+                emby_clients[device['DeviceId']] = new_client\n+                new_emby_clients.append(new_client)\n+            else:\n+                emby_clients[device['DeviceId']].set_device(device)\n+\n+        if new_emby_clients:\n+            add_devices_callback(new_emby_clients)\n+\n+    @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS)\n+    def update_sessions():\n+        \"\"\"Update the sessions objects.\"\"\"\n+        try:\n+            sessions = embyserver.getSessions()\n+        except:\n+            _LOGGER.exception('Error listing emby sessions')\n+            return\n+\n+        emby_sessions.clear()\n+        for session in sessions:\n+            if not session['SupportsRemoteControl']:\n+                continue\n+            emby_sessions[session['DeviceId']] = session\n+\n+    update_devices()\n+    update_sessions()\n+\n+\n+def request_configuration(host, hass, add_devices_callback):\n+    \"\"\"Request configuration steps from the user.\"\"\"\n+    configurator = get_component('configurator')\n+\n+    # We got an error if this method is called while we are configuring\n+    if host in _CONFIGURING:\n+        configurator.notify_errors(\n+            _CONFIGURING[host], 'Failed to register, please try again.')\n+\n+        return\n+\n+    def emby_configuration_callback(data):\n+        \"\"\"The actions to do when our configuration callback is called.\"\"\"\n+        setup_embyserver(host, data.get('token'), hass, add_devices_callback)\n+\n+\n+class EmbyRemote:\n+    @property\n+    def getSessionsUrl(self):\n+        \"\"\"Return the session url.\"\"\"\n+        return self.serverUrl + 'Sessions?api_key={0}'\n+    \n+    @property\n+    def playstateUrl(self):\n+        return self.serverUrl + 'emby/Sessions/{0}/Playing/{1}?api_key={2}'\n+    \n+    @property\n+    def getImageUrl(self):\n+        return self.serverUrl + 'Items/{0}/Images/{1}?api_key={2}'\n+    \n+    def __init__(self, apiKey, serverUrl):\n+        self.apiKey = apiKey\n+        self.serverUrl = serverUrl\n+    def getSessions(self):\n+        url = self.getSessionsUrl.format(self.apiKey)\n+        request = Request(url)\n+        request.add_header('Content-Type', 'application/json')\n+        request.add_header('Accept', 'application/json')\n+        response = urlopen(request).read().decode('utf-8')\n+        clients = json.loads(response)\n+        return clients\n+\n+    def setPlaystate(self, session, state):\n+        request = Request(self.playstateUrl.format(session['Id'], state, self.apiKey), None, {}, None, False, 'POST')\n+        request.add_header('Content-Type', 'application/json')\n+        request.add_header('Accept', 'application/json')\n+        request.add_header('x-emby-authorization', 'MediaBrowser Client=\"Emby Mobile\", Device=\"Chrome 51.0.2704.103\", DeviceId=\"2d9cfa55b954073d05fbd3cd993ab244\", Version=\"3.0.6020.0\"')\n+        response = urlopen(request).read().decode('utf-8')","path":"homeassistant/components/media_player/emby.py","position":194,"original_position":194,"commit_id":"67323ff9d34242c7668efe6e23b3093890c0db26","original_commit_id":"67323ff9d34242c7668efe6e23b3093890c0db26","user":{"login":"balloobbot","id":16367972,"avatar_url":"https://avatars.githubusercontent.com/u/16367972?v=3","gravatar_id":"","url":"https://api.github.com/users/balloobbot","html_url":"https://github.com/balloobbot","followers_url":"https://api.github.com/users/balloobbot/followers","following_url":"https://api.github.com/users/balloobbot/following{/other_user}","gists_url":"https://api.github.com/users/balloobbot/gists{/gist_id}","starred_url":"https://api.github.com/users/balloobbot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/balloobbot/subscriptions","organizations_url":"https://api.github.com/users/balloobbot/orgs","repos_url":"https://api.github.com/users/balloobbot/repos","events_url":"https://api.github.com/users/balloobbot/events{/privacy}","received_events_url":"https://api.github.com/users/balloobbot/received_events","type":"User","site_admin":false},"body":"_[farcy v1.1](https://github.com/appfolio/farcy)_\n* 9: F841 local variable 'response' is assigned to but never used","created_at":"2016-08-03T22:17:43Z","updated_at":"2016-08-03T22:17:43Z","html_url":"https://github.com/home-assistant/home-assistant/pull/2724#discussion_r73432023","pull_request_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/2724","_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/73432023"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/2724#discussion_r73432023"},"pull_request":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/2724"}}},"pull_request":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/2724","id":79988922,"html_url":"https://github.com/home-assistant/home-assistant/pull/2724","diff_url":"https://github.com/home-assistant/home-assistant/pull/2724.diff","patch_url":"https://github.com/home-assistant/home-assistant/pull/2724.patch","issue_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/2724","number":2724,"state":"open","locked":false,"title":"Added support for Emby Media Server","user":{"login":"Inrego","id":2242329,"avatar_url":"https://avatars.githubusercontent.com/u/2242329?v=3","gravatar_id":"","url":"https://api.github.com/users/Inrego","html_url":"https://github.com/Inrego","followers_url":"https://api.github.com/users/Inrego/followers","following_url":"https://api.github.com/users/Inrego/following{/other_user}","gists_url":"https://api.github.com/users/Inrego/gists{/gist_id}","starred_url":"https://api.github.com/users/Inrego/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Inrego/subscriptions","organizations_url":"https://api.github.com/users/Inrego/orgs","repos_url":"https://api.github.com/users/Inrego/repos","events_url":"https://api.github.com/users/Inrego/events{/privacy}","received_events_url":"https://api.github.com/users/Inrego/received_events","type":"User","site_admin":false},"body":"**Description:**\r\nAdded support for the Emby media server. The file is based off of the plex support, as the 2 systems are very similar.\r\n\r\n**Pull request in [home-assistant.io](https://github.com/home-assistant/home-assistant.io) with documentation (if applicable):** https://github.com/home-assistant/home-assistant.io/pull/732\r\n\r\n**Example entry for `configuration.yaml` (if applicable):**\r\n```yaml\r\n:media_player\r\n  platform: emby\r\n```\r\n\r\n","created_at":"2016-08-03T22:17:10Z","updated_at":"2016-08-03T22:17:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6473b6824ca52c63e4cfe6f77c8858208f2fe0b2","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/2724/commits","review_comments_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/2724/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/2724/comments","statuses_url":"https://api.github.com/repos/home-assistant/home-assistant/statuses/67323ff9d34242c7668efe6e23b3093890c0db26","head":{"label":"Inrego:dev","ref":"dev","sha":"67323ff9d34242c7668efe6e23b3093890c0db26","user":{"login":"Inrego","id":2242329,"avatar_url":"https://avatars.githubusercontent.com/u/2242329?v=3","gravatar_id":"","url":"https://api.github.com/users/Inrego","html_url":"https://github.com/Inrego","followers_url":"https://api.github.com/users/Inrego/followers","following_url":"https://api.github.com/users/Inrego/following{/other_user}","gists_url":"https://api.github.com/users/Inrego/gists{/gist_id}","starred_url":"https://api.github.com/users/Inrego/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Inrego/subscriptions","organizations_url":"https://api.github.com/users/Inrego/orgs","repos_url":"https://api.github.com/users/Inrego/repos","events_url":"https://api.github.com/users/Inrego/events{/privacy}","received_events_url":"https://api.github.com/users/Inrego/received_events","type":"User","site_admin":false},"repo":{"id":64864192,"name":"home-assistant","full_name":"Inrego/home-assistant","owner":{"login":"Inrego","id":2242329,"avatar_url":"https://avatars.githubusercontent.com/u/2242329?v=3","gravatar_id":"","url":"https://api.github.com/users/Inrego","html_url":"https://github.com/Inrego","followers_url":"https://api.github.com/users/Inrego/followers","following_url":"https://api.github.com/users/Inrego/following{/other_user}","gists_url":"https://api.github.com/users/Inrego/gists{/gist_id}","starred_url":"https://api.github.com/users/Inrego/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Inrego/subscriptions","organizations_url":"https://api.github.com/users/Inrego/orgs","repos_url":"https://api.github.com/users/Inrego/repos","events_url":"https://api.github.com/users/Inrego/events{/privacy}","received_events_url":"https://api.github.com/users/Inrego/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Inrego/home-assistant","description":":house_with_garden: Open-source home automation platform running on Python 3","fork":true,"url":"https://api.github.com/repos/Inrego/home-assistant","forks_url":"https://api.github.com/repos/Inrego/home-assistant/forks","keys_url":"https://api.github.com/repos/Inrego/home-assistant/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Inrego/home-assistant/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Inrego/home-assistant/teams","hooks_url":"https://api.github.com/repos/Inrego/home-assistant/hooks","issue_events_url":"https://api.github.com/repos/Inrego/home-assistant/issues/events{/number}","events_url":"https://api.github.com/repos/Inrego/home-assistant/events","assignees_url":"https://api.github.com/repos/Inrego/home-assistant/assignees{/user}","branches_url":"https://api.github.com/repos/Inrego/home-assistant/branches{/branch}","tags_url":"https://api.github.com/repos/Inrego/home-assistant/tags","blobs_url":"https://api.github.com/repos/Inrego/home-assistant/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Inrego/home-assistant/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Inrego/home-assistant/git/refs{/sha}","trees_url":"https://api.github.com/repos/Inrego/home-assistant/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Inrego/home-assistant/statuses/{sha}","languages_url":"https://api.github.com/repos/Inrego/home-assistant/languages","stargazers_url":"https://api.github.com/repos/Inrego/home-assistant/stargazers","contributors_url":"https://api.github.com/repos/Inrego/home-assistant/contributors","subscribers_url":"https://api.github.com/repos/Inrego/home-assistant/subscribers","subscription_url":"https://api.github.com/repos/Inrego/home-assistant/subscription","commits_url":"https://api.github.com/repos/Inrego/home-assistant/commits{/sha}","git_commits_url":"https://api.github.com/repos/Inrego/home-assistant/git/commits{/sha}","comments_url":"https://api.github.com/repos/Inrego/home-assistant/comments{/number}","issue_comment_url":"https://api.github.com/repos/Inrego/home-assistant/issues/comments{/number}","contents_url":"https://api.github.com/repos/Inrego/home-assistant/contents/{+path}","compare_url":"https://api.github.com/repos/Inrego/home-assistant/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Inrego/home-assistant/merges","archive_url":"https://api.github.com/repos/Inrego/home-assistant/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Inrego/home-assistant/downloads","issues_url":"https://api.github.com/repos/Inrego/home-assistant/issues{/number}","pulls_url":"https://api.github.com/repos/Inrego/home-assistant/pulls{/number}","milestones_url":"https://api.github.com/repos/Inrego/home-assistant/milestones{/number}","notifications_url":"https://api.github.com/repos/Inrego/home-assistant/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Inrego/home-assistant/labels{/name}","releases_url":"https://api.github.com/repos/Inrego/home-assistant/releases{/id}","deployments_url":"https://api.github.com/repos/Inrego/home-assistant/deployments","created_at":"2016-08-03T17:11:30Z","updated_at":"2016-08-03T17:11:33Z","pushed_at":"2016-08-03T22:16:16Z","git_url":"git://github.com/Inrego/home-assistant.git","ssh_url":"git@github.com:Inrego/home-assistant.git","clone_url":"https://github.com/Inrego/home-assistant.git","svn_url":"https://github.com/Inrego/home-assistant","homepage":"https://home-assistant.io","size":101119,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"dev"}},"base":{"label":"home-assistant:dev","ref":"dev","sha":"792154a6a718ed9e62a3f1fdb17d16ecccd329e3","user":{"login":"home-assistant","id":13844975,"avatar_url":"https://avatars.githubusercontent.com/u/13844975?v=3","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://avatars.githubusercontent.com/u/13844975?v=3","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":"2016-08-03T20:30:58Z","pushed_at":"2016-08-03T22:17:10Z","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":101417,"stargazers_count":3805,"watchers_count":3805,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":861,"mirror_url":null,"open_issues_count":173,"forks":861,"open_issues":173,"watchers":3805,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/2724"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/2724"},"issue":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/2724"},"comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/2724/comments"},"review_comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/2724/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/2724/commits"},"statuses":{"href":"https://api.github.com/repos/home-assistant/home-assistant/statuses/67323ff9d34242c7668efe6e23b3093890c0db26"}}}}
{"actor":{"display_login":"balloobbot"}}