{"action":"created","comment":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/191411564","pull_request_review_id":123977359,"id":191411564,"diff_hunk":"@@ -359,6 +372,90 @@ def zdo_command(self, tsn, command_id, args):\n         pass\n \n \n+class ZhaEndpointEntity(entity.Entity):\n+    \"\"\"A base class for ZHA endpoints.\"\"\"\n+\n+    _domain = DOMAIN\n+\n+    def __init__(self, endpoint, manufacturer, model, application_listener,\n+                 unique_id, keepalive_interval=7200, **kwargs):\n+        \"\"\"Init ZHA endpoint entity.\"\"\"\n+        self._device_state_attributes = {}\n+        ieee = endpoint.device.ieee\n+        ieeetail = ''.join(['%02x' % (o, ) for o in ieee[-4:]])\n+        if manufacturer and model is not None:\n+            self.entity_id = \"{}.{}_{}_{}_{}\".format(\n+                self._domain,\n+                slugify(manufacturer),\n+                slugify(model),\n+                ieeetail,\n+                endpoint.endpoint_id,\n+            )\n+            self._device_state_attributes['friendly_name'] = \"{} {}\".format(\n+                manufacturer,\n+                model,\n+            )\n+        else:\n+            self.entity_id = \"{}.zha_{}_{}\".format(\n+                self._domain,\n+                ieeetail,\n+                endpoint.endpoint_id,\n+            )\n+\n+        nwk = endpoint.device.nwk\n+        self._device_state_attributes['nwk'] = '0x{0:04x}'.format(nwk)","path":"homeassistant/components/zha/__init__.py","position":76,"original_position":76,"commit_id":"7515da4a50cb885bfd0aee1f92585f8f5608155d","original_commit_id":"7515da4a50cb885bfd0aee1f92585f8f5608155d","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":"If you're assigning this all in the constructor, just do it all at once.\r\n\r\n```python\r\nself._device_state_attributes = {\r\n    'ieee': str(…),\r\n    # etc\r\n}\r\n```","created_at":"2018-05-29T12:55:14Z","updated_at":"2018-05-29T12:55:15Z","html_url":"https://github.com/home-assistant/home-assistant/pull/14579#discussion_r191411564","pull_request_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/14579","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/191411564"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/14579#discussion_r191411564"},"pull_request":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/14579"}}},"pull_request":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/14579","id":189459300,"html_url":"https://github.com/home-assistant/home-assistant/pull/14579","diff_url":"https://github.com/home-assistant/home-assistant/pull/14579.diff","patch_url":"https://github.com/home-assistant/home-assistant/pull/14579.patch","issue_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/14579","number":14579,"state":"open","locked":false,"title":"Add zha endpoint entity","user":{"login":"damarco","id":5352953,"avatar_url":"https://avatars0.githubusercontent.com/u/5352953?v=4","gravatar_id":"","url":"https://api.github.com/users/damarco","html_url":"https://github.com/damarco","followers_url":"https://api.github.com/users/damarco/followers","following_url":"https://api.github.com/users/damarco/following{/other_user}","gists_url":"https://api.github.com/users/damarco/gists{/gist_id}","starred_url":"https://api.github.com/users/damarco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/damarco/subscriptions","organizations_url":"https://api.github.com/users/damarco/orgs","repos_url":"https://api.github.com/users/damarco/repos","events_url":"https://api.github.com/users/damarco/events{/privacy}","received_events_url":"https://api.github.com/users/damarco/received_events","type":"User","site_admin":false},"body":"## Description:\r\n\r\nThis adds a separate entity to expose endpoint level state. The last_seen device attribute is used to derive an online/offline state.\r\n\r\n## Checklist:\r\n  - [x] The code change is tested and works locally.\r\n","created_at":"2018-05-21T18:54:32Z","updated_at":"2018-05-29T12:55:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1ab34fd19cd467f7cac2ead1e49feea40fab53ab","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":548457122,"url":"https://api.github.com/repos/home-assistant/home-assistant/labels/component:%20zha","name":"component: zha","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/14579/commits","review_comments_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/14579/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/14579/comments","statuses_url":"https://api.github.com/repos/home-assistant/home-assistant/statuses/7515da4a50cb885bfd0aee1f92585f8f5608155d","head":{"label":"damarco:zha-endpoint-entity","ref":"zha-endpoint-entity","sha":"7515da4a50cb885bfd0aee1f92585f8f5608155d","user":{"login":"damarco","id":5352953,"avatar_url":"https://avatars0.githubusercontent.com/u/5352953?v=4","gravatar_id":"","url":"https://api.github.com/users/damarco","html_url":"https://github.com/damarco","followers_url":"https://api.github.com/users/damarco/followers","following_url":"https://api.github.com/users/damarco/following{/other_user}","gists_url":"https://api.github.com/users/damarco/gists{/gist_id}","starred_url":"https://api.github.com/users/damarco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/damarco/subscriptions","organizations_url":"https://api.github.com/users/damarco/orgs","repos_url":"https://api.github.com/users/damarco/repos","events_url":"https://api.github.com/users/damarco/events{/privacy}","received_events_url":"https://api.github.com/users/damarco/received_events","type":"User","site_admin":false},"repo":{"id":127727697,"name":"home-assistant","full_name":"damarco/home-assistant","owner":{"login":"damarco","id":5352953,"avatar_url":"https://avatars0.githubusercontent.com/u/5352953?v=4","gravatar_id":"","url":"https://api.github.com/users/damarco","html_url":"https://github.com/damarco","followers_url":"https://api.github.com/users/damarco/followers","following_url":"https://api.github.com/users/damarco/following{/other_user}","gists_url":"https://api.github.com/users/damarco/gists{/gist_id}","starred_url":"https://api.github.com/users/damarco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/damarco/subscriptions","organizations_url":"https://api.github.com/users/damarco/orgs","repos_url":"https://api.github.com/users/damarco/repos","events_url":"https://api.github.com/users/damarco/events{/privacy}","received_events_url":"https://api.github.com/users/damarco/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/damarco/home-assistant","description":":house_with_garden: Open-source home automation platform running on Python 3","fork":true,"url":"https://api.github.com/repos/damarco/home-assistant","forks_url":"https://api.github.com/repos/damarco/home-assistant/forks","keys_url":"https://api.github.com/repos/damarco/home-assistant/keys{/key_id}","collaborators_url":"https://api.github.com/repos/damarco/home-assistant/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/damarco/home-assistant/teams","hooks_url":"https://api.github.com/repos/damarco/home-assistant/hooks","issue_events_url":"https://api.github.com/repos/damarco/home-assistant/issues/events{/number}","events_url":"https://api.github.com/repos/damarco/home-assistant/events","assignees_url":"https://api.github.com/repos/damarco/home-assistant/assignees{/user}","branches_url":"https://api.github.com/repos/damarco/home-assistant/branches{/branch}","tags_url":"https://api.github.com/repos/damarco/home-assistant/tags","blobs_url":"https://api.github.com/repos/damarco/home-assistant/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/damarco/home-assistant/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/damarco/home-assistant/git/refs{/sha}","trees_url":"https://api.github.com/repos/damarco/home-assistant/git/trees{/sha}","statuses_url":"https://api.github.com/repos/damarco/home-assistant/statuses/{sha}","languages_url":"https://api.github.com/repos/damarco/home-assistant/languages","stargazers_url":"https://api.github.com/repos/damarco/home-assistant/stargazers","contributors_url":"https://api.github.com/repos/damarco/home-assistant/contributors","subscribers_url":"https://api.github.com/repos/damarco/home-assistant/subscribers","subscription_url":"https://api.github.com/repos/damarco/home-assistant/subscription","commits_url":"https://api.github.com/repos/damarco/home-assistant/commits{/sha}","git_commits_url":"https://api.github.com/repos/damarco/home-assistant/git/commits{/sha}","comments_url":"https://api.github.com/repos/damarco/home-assistant/comments{/number}","issue_comment_url":"https://api.github.com/repos/damarco/home-assistant/issues/comments{/number}","contents_url":"https://api.github.com/repos/damarco/home-assistant/contents/{+path}","compare_url":"https://api.github.com/repos/damarco/home-assistant/compare/{base}...{head}","merges_url":"https://api.github.com/repos/damarco/home-assistant/merges","archive_url":"https://api.github.com/repos/damarco/home-assistant/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/damarco/home-assistant/downloads","issues_url":"https://api.github.com/repos/damarco/home-assistant/issues{/number}","pulls_url":"https://api.github.com/repos/damarco/home-assistant/pulls{/number}","milestones_url":"https://api.github.com/repos/damarco/home-assistant/milestones{/number}","notifications_url":"https://api.github.com/repos/damarco/home-assistant/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/damarco/home-assistant/labels{/name}","releases_url":"https://api.github.com/repos/damarco/home-assistant/releases{/id}","deployments_url":"https://api.github.com/repos/damarco/home-assistant/deployments","created_at":"2018-04-02T08:28:00Z","updated_at":"2018-05-09T13:40:05Z","pushed_at":"2018-05-24T19:31:02Z","git_url":"git://github.com/damarco/home-assistant.git","ssh_url":"git@github.com:damarco/home-assistant.git","clone_url":"https://github.com/damarco/home-assistant.git","svn_url":"https://github.com/damarco/home-assistant","homepage":"https://home-assistant.io","size":82121,"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":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":0,"open_issues":0,"watchers":0,"default_branch":"dev"}},"base":{"label":"home-assistant:dev","ref":"dev","sha":"6e941af9b21f47307033bbd1d78042f6e784d41f","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-05-29T10:14:36Z","pushed_at":"2018-05-29T10:39:33Z","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":82681,"stargazers_count":14487,"watchers_count":14487,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":4308,"mirror_url":null,"archived":false,"open_issues_count":834,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":4308,"open_issues":834,"watchers":14487,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/14579"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/14579"},"issue":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/14579"},"comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/14579/comments"},"review_comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/14579/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/14579/commits"},"statuses":{"href":"https://api.github.com/repos/home-assistant/home-assistant/statuses/7515da4a50cb885bfd0aee1f92585f8f5608155d"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"balloob"}}