{"action":"created","comment":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/86642721","pull_request_review_id":7294337,"id":86642721,"diff_hunk":"@@ -0,0 +1,211 @@\n+\"\"\"\n+Support for RFXtrx binary sensors.\n+\n+Lighting4 devices (sensors based on PT2262 encoder) are supported and\n+tested. Other types may need some work.\n+\n+\"\"\"\n+\n+import logging\n+import voluptuous as vol\n+from homeassistant.components import rfxtrx\n+from homeassistant.util import slugify\n+from homeassistant.util import dt as dt_util\n+from homeassistant.helpers import config_validation as cv\n+from homeassistant.helpers import event as evt\n+from homeassistant.components.binary_sensor import BinarySensorDevice\n+from homeassistant.components.rfxtrx import (\n+    ATTR_AUTOMATIC_ADD, ATTR_NAME, ATTR_OFF_DELAY, ATTR_FIREEVENT,\n+    ATTR_SENSOR_CLASS, ATTR_DATABITS, ATTR_CMD_ON, ATTR_CMD_OFF, CONF_DEVICES\n+)\n+\n+DEPENDENCIES = [\"rfxtrx\"]\n+\n+_LOGGER = logging.getLogger(__name__)\n+\n+PLATFORM_SCHEMA = vol.Schema({\n+    vol.Required(\"platform\"): rfxtrx.DOMAIN,\n+    vol.Optional(CONF_DEVICES, default={}): vol.All(dict, rfxtrx.valid_binary_sensor),\n+    vol.Optional(ATTR_AUTOMATIC_ADD, default=False):  cv.boolean,\n+}, extra=vol.ALLOW_EXTRA)\n+\n+def setup_platform(hass, config, add_devices_callback, discovery_info=None):\n+    \"\"\"Setup the Binary Sensor platform to rfxtrx.\"\"\"\n+    import RFXtrx as rfxtrxmod\n+    sensors = []\n+\n+    for packet_id, entity in config['devices'].items():\n+        event = rfxtrx.get_rfx_object(packet_id)\n+        device_id = slugify(event.device.id_string.lower())\n+\n+        if device_id in rfxtrx.RFX_DEVICES:\n+            continue\n+\n+        if not entity[ATTR_DATABITS] is None:\n+            _LOGGER.info(\"Masked device id: %s\", (rfxtrx.get_pt2262_deviceid(device_id, 4)))\n+\n+        _LOGGER.info(\"Add %s rfxtrx.binary_sensor (class %s)\",\n+                     entity[ATTR_NAME], entity[ATTR_SENSOR_CLASS])\n+\n+        device = RfxtrxBinarySensor(event, entity[ATTR_NAME],\n+                                    entity[ATTR_SENSOR_CLASS], entity[ATTR_FIREEVENT],\n+                                    entity[ATTR_OFF_DELAY], entity[ATTR_DATABITS],\n+                                    entity[ATTR_CMD_ON], entity[ATTR_CMD_OFF])\n+\n+        sensors.append(device)\n+        rfxtrx.RFX_DEVICES[device_id] = device\n+\n+    add_devices_callback(sensors)\n+\n+    #pylint: disable=too-many-branches\n+    def binary_sensor_update(event):\n+        \"\"\"Callback for control updates from the RFXtrx gateway.\"\"\"\n+        if not isinstance(event, rfxtrxmod.ControlEvent):\n+            return\n+\n+        device_id = slugify(event.device.id_string.lower())\n+\n+        if device_id in rfxtrx.RFX_DEVICES:\n+            sensor = rfxtrx.RFX_DEVICES[device_id]\n+        else:\n+            sensor = rfxtrx.get_pt2262_device(device_id)\n+\n+        if sensor is None:\n+            # Add the entity if not exists and automatic_add is True\n+            if config[ATTR_AUTOMATIC_ADD]:\n+                pkt_id = \"\".join(\"{0:02x}\".format(x) for x in event.data)\n+                sensor = RfxtrxBinarySensor(event, pkt_id)\n+                rfxtrx.RFX_DEVICES[device_id] = sensor\n+                add_devices_callback([sensor])\n+                _LOGGER.info(\"Added binary sensor %s \"\n+                             \"(Device_id: %s Class: %s Sub: %s)\",\n+                             pkt_id,\n+                             slugify(event.device.id_string.lower()),\n+                             event.device.__class__.__name__,\n+                             event.device.subtype)\n+            else:\n+                return\n+        else:\n+            _LOGGER.info(\"Binary sensor update \"\n+                         \"(Device_id: %s Class: %s Sub: %s)\",\n+                         slugify(event.device.id_string.lower()),\n+                         event.device.__class__.__name__,\n+                         event.device.subtype)\n+\n+        if sensor.is_pt2262:\n+            cmd = rfxtrx.get_pt2262_cmd(device_id, sensor.data_bits)\n+            _LOGGER.info(\"applying cmd %s to device_id: %s)\",\n+                         cmd, sensor.masked_id)\n+            sensor.apply_cmd(int(cmd, 16))\n+        else:\n+            if not sensor.is_on or sensor.should_fire_event:\n+                sensor.update_state(True)\n+\n+        if sensor.is_on and not sensor.off_delay is None and sensor.delay_listener is None:\n+            def off_delay_listener(now):\n+                \"\"\"switch device off after a delay.\"\"\"\n+                sensor.delay_listener = None\n+                sensor.update_state(False)\n+\n+            sensor.delay_listener = evt.track_point_in_time(\n+                hass, off_delay_listener, dt_util.utcnow() + sensor.off_delay\n+            )\n+\n+    # Subscribe to main rfxtrx events\n+    if binary_sensor_update not in rfxtrx.RECEIVED_EVT_SUBSCRIBERS:\n+        rfxtrx.RECEIVED_EVT_SUBSCRIBERS.append(binary_sensor_update)\n+\n+#pylint: disable=too-many-instance-attributes,too-many-arguments\n+class RfxtrxBinarySensor(BinarySensorDevice):\n+    \"\"\"An Rfxtrx binary sensor.\"\"\"\n+\n+    def __init__(self, event, name, sensor_class=None,\n+                 should_fire=False, off_delay=None, data_bits=None,\n+                 cmd_on=None, cmd_off=None):\n+        \"\"\"Initialize the sensor.\"\"\"\n+        self.event = event\n+        self._name = name\n+        self._should_fire_event = should_fire\n+        self._sensor_class = sensor_class\n+        self._off_delay = off_delay\n+        self._state = False\n+        self.delay_listener = None\n+        self._data_bits = data_bits\n+        self._cmd_on = cmd_on\n+        self._cmd_off = cmd_off\n+\n+        if not data_bits is None:\n+            self._masked_id = rfxtrx.get_pt2262_deviceid(event.device.id_string.lower(), data_bits)\n+        else:\n+            self._masked_id = None\n+\n+\n+    def __str__(self):\n+        \"\"\"Return the name of the sensor.\"\"\"\n+        return self._name\n+\n+    @property\n+    def name(self):\n+        return self._name\n+\n+    @property\n+    def is_pt2262(self):\n+        \"\"\"Return true if the device is PT2262-based\"\"\"\n+        return not self._data_bits is None\n+\n+    @property\n+    def masked_id(self):\n+        \"\"\"Return the masked device id (isolated address bits)\"\"\"\n+        return self._masked_id\n+\n+    @property\n+    def data_bits(self):\n+        \"\"\"Return the number of data bits\"\"\"\n+        return self._data_bits\n+\n+    @property\n+    def cmd_on(self):\n+        \"\"\"Return the value of the 'On' command \"\"\"\n+        return self._cmd_on\n+\n+    @property\n+    def cmd_off(self):\n+        \"\"\"Return the value of the 'Off' command \"\"\"\n+        return self._cmd_off\n+\n+    @property\n+    def should_poll(self):\n+        \"\"\"No polling needed.\"\"\"\n+        return False\n+\n+    @property\n+    def should_fire_event(self):\n+        \"\"\"Return is the device must fire event.\"\"\"\n+        return self._should_fire_event\n+\n+    @property\n+    def sensor_class(self):\n+        \"\"\"Return the sensor class\"\"\"\n+        return self._sensor_class\n+\n+    @property\n+    def off_delay(self):\n+        \"\"\"Return the off_delay attribute value\"\"\"\n+        return self._off_delay\n+\n+    @property\n+    def is_on(self):\n+        \"\"\"Return true if the sensor state is True\"\"\"\n+        return self._state\n+\n+    def apply_cmd(self, cmd):\n+        \"\"\"Apply a command for updating the state\"\"\"\n+        if cmd == self.cmd_on:\n+            self.update_state(True)\n+        elif cmd == self.cmd_off:\n+            self.update_state(False)\n+\n+    def update_state(self, state):","path":"homeassistant/components/binary_sensor/rfxtrx.py","position":208,"original_position":208,"commit_id":"fda6f8cc93fd132bb940fc3f449539cf2489e894","original_commit_id":"fda6f8cc93fd132bb940fc3f449539cf2489e894","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* D400: First line should end with a period (not 'e')","created_at":"2016-11-04T22:21:22Z","updated_at":"2016-11-04T22:21:22Z","html_url":"https://github.com/home-assistant/home-assistant/pull/4218#discussion_r86642721","pull_request_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/4218","_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/86642721"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/4218#discussion_r86642721"},"pull_request":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/4218"}}},"pull_request":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/4218","id":92424939,"html_url":"https://github.com/home-assistant/home-assistant/pull/4218","diff_url":"https://github.com/home-assistant/home-assistant/pull/4218.diff","patch_url":"https://github.com/home-assistant/home-assistant/pull/4218.patch","issue_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/4218","number":4218,"state":"open","locked":false,"title":"Rfxtrx binary sensors","user":{"login":"y-pollart","id":17440330,"avatar_url":"https://avatars.githubusercontent.com/u/17440330?v=3","gravatar_id":"","url":"https://api.github.com/users/y-pollart","html_url":"https://github.com/y-pollart","followers_url":"https://api.github.com/users/y-pollart/followers","following_url":"https://api.github.com/users/y-pollart/following{/other_user}","gists_url":"https://api.github.com/users/y-pollart/gists{/gist_id}","starred_url":"https://api.github.com/users/y-pollart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/y-pollart/subscriptions","organizations_url":"https://api.github.com/users/y-pollart/orgs","repos_url":"https://api.github.com/users/y-pollart/repos","events_url":"https://api.github.com/users/y-pollart/events{/privacy}","received_events_url":"https://api.github.com/users/y-pollart/received_events","type":"User","site_admin":false},"body":"**Description:**\r\nThis brings a new platform \"rfxtrx\" in the binary sensors components. It mainly supports cheap binary sensors that can be found on some chinese web sites (motion sensors, door / window opening, doorbells...) based on the PT-2262 RF chip.\r\n\r\nIt also provides a few specific configuration options that could be ported to other binary sensor platforms. \r\n\r\n**Related issue (if applicable):** N/A\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#1399\r\n\r\n**Example entry for `configuration.yaml` (if applicable):**\r\n```yaml\r\n# Example configuration.yaml entry\r\nbinary_sensor:\r\n  platform: rfxtrx\r\n  automatic_add: True\r\n  devices:\r\n    091300006ca2c6001080:\r\n    name: motion_hall\r\n    sensor_class: motion\r\n    off_delay:\r\n      seconds: 5\r\n    0913000022670e013b70:\r\n      name: window_room2\r\n      sensor_class: opening\r\n      data_bits: 4\r\n      cmd_on: 0x0e\r\n      cmd_off: 0x07\r\n```\r\n\r\n**Checklist:**\r\n\r\nIf user exposed functionality or configuration variables are added/changed:\r\n  - [x] Documentation added/updated in [home-assistant.github.io](https://github.com/home-assistant/home-assistant.github.io)\r\n\r\nIf the code communicates with devices, web services, or third-party tools:\r\n  - [ ] Local tests with `tox` run successfully. **Your PR cannot be merged unless tests pass**\r\n  - [ ] New dependencies have been added to the `REQUIREMENTS` variable ([example][ex-requir]).\r\n  - [ ] New dependencies are only imported inside functions that use them ([example][ex-import]).\r\n  - [ ] New dependencies have been added to `requirements_all.txt` by running `script/gen_requirements_all.py`.\r\n  - [ ] New files were added to `.coveragerc`.\r\n\r\nIf the code does not interact with devices:\r\n  - [ ] Local tests with `tox` run successfully. **Your PR cannot be merged unless tests pass**\r\n  - [ ] Tests have been added to verify that the new code works.\r\n\r\n[ex-requir]: https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/keyboard.py#L16\r\n[ex-import]: https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/keyboard.py#L51\r\n","created_at":"2016-11-04T22:20:13Z","updated_at":"2016-11-04T22:21:23Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0987c38975634cb3d09e8be744cb12c5539a8a08","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/4218/commits","review_comments_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/4218/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/4218/comments","statuses_url":"https://api.github.com/repos/home-assistant/home-assistant/statuses/fda6f8cc93fd132bb940fc3f449539cf2489e894","head":{"label":"y-pollart:rfxtrx-binary-sensor","ref":"rfxtrx-binary-sensor","sha":"fda6f8cc93fd132bb940fc3f449539cf2489e894","user":{"login":"y-pollart","id":17440330,"avatar_url":"https://avatars.githubusercontent.com/u/17440330?v=3","gravatar_id":"","url":"https://api.github.com/users/y-pollart","html_url":"https://github.com/y-pollart","followers_url":"https://api.github.com/users/y-pollart/followers","following_url":"https://api.github.com/users/y-pollart/following{/other_user}","gists_url":"https://api.github.com/users/y-pollart/gists{/gist_id}","starred_url":"https://api.github.com/users/y-pollart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/y-pollart/subscriptions","organizations_url":"https://api.github.com/users/y-pollart/orgs","repos_url":"https://api.github.com/users/y-pollart/repos","events_url":"https://api.github.com/users/y-pollart/events{/privacy}","received_events_url":"https://api.github.com/users/y-pollart/received_events","type":"User","site_admin":false},"repo":{"id":69228028,"name":"home-assistant","full_name":"y-pollart/home-assistant","owner":{"login":"y-pollart","id":17440330,"avatar_url":"https://avatars.githubusercontent.com/u/17440330?v=3","gravatar_id":"","url":"https://api.github.com/users/y-pollart","html_url":"https://github.com/y-pollart","followers_url":"https://api.github.com/users/y-pollart/followers","following_url":"https://api.github.com/users/y-pollart/following{/other_user}","gists_url":"https://api.github.com/users/y-pollart/gists{/gist_id}","starred_url":"https://api.github.com/users/y-pollart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/y-pollart/subscriptions","organizations_url":"https://api.github.com/users/y-pollart/orgs","repos_url":"https://api.github.com/users/y-pollart/repos","events_url":"https://api.github.com/users/y-pollart/events{/privacy}","received_events_url":"https://api.github.com/users/y-pollart/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/y-pollart/home-assistant","description":":house_with_garden: Open-source home automation platform running on Python 3","fork":true,"url":"https://api.github.com/repos/y-pollart/home-assistant","forks_url":"https://api.github.com/repos/y-pollart/home-assistant/forks","keys_url":"https://api.github.com/repos/y-pollart/home-assistant/keys{/key_id}","collaborators_url":"https://api.github.com/repos/y-pollart/home-assistant/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/y-pollart/home-assistant/teams","hooks_url":"https://api.github.com/repos/y-pollart/home-assistant/hooks","issue_events_url":"https://api.github.com/repos/y-pollart/home-assistant/issues/events{/number}","events_url":"https://api.github.com/repos/y-pollart/home-assistant/events","assignees_url":"https://api.github.com/repos/y-pollart/home-assistant/assignees{/user}","branches_url":"https://api.github.com/repos/y-pollart/home-assistant/branches{/branch}","tags_url":"https://api.github.com/repos/y-pollart/home-assistant/tags","blobs_url":"https://api.github.com/repos/y-pollart/home-assistant/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/y-pollart/home-assistant/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/y-pollart/home-assistant/git/refs{/sha}","trees_url":"https://api.github.com/repos/y-pollart/home-assistant/git/trees{/sha}","statuses_url":"https://api.github.com/repos/y-pollart/home-assistant/statuses/{sha}","languages_url":"https://api.github.com/repos/y-pollart/home-assistant/languages","stargazers_url":"https://api.github.com/repos/y-pollart/home-assistant/stargazers","contributors_url":"https://api.github.com/repos/y-pollart/home-assistant/contributors","subscribers_url":"https://api.github.com/repos/y-pollart/home-assistant/subscribers","subscription_url":"https://api.github.com/repos/y-pollart/home-assistant/subscription","commits_url":"https://api.github.com/repos/y-pollart/home-assistant/commits{/sha}","git_commits_url":"https://api.github.com/repos/y-pollart/home-assistant/git/commits{/sha}","comments_url":"https://api.github.com/repos/y-pollart/home-assistant/comments{/number}","issue_comment_url":"https://api.github.com/repos/y-pollart/home-assistant/issues/comments{/number}","contents_url":"https://api.github.com/repos/y-pollart/home-assistant/contents/{+path}","compare_url":"https://api.github.com/repos/y-pollart/home-assistant/compare/{base}...{head}","merges_url":"https://api.github.com/repos/y-pollart/home-assistant/merges","archive_url":"https://api.github.com/repos/y-pollart/home-assistant/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/y-pollart/home-assistant/downloads","issues_url":"https://api.github.com/repos/y-pollart/home-assistant/issues{/number}","pulls_url":"https://api.github.com/repos/y-pollart/home-assistant/pulls{/number}","milestones_url":"https://api.github.com/repos/y-pollart/home-assistant/milestones{/number}","notifications_url":"https://api.github.com/repos/y-pollart/home-assistant/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/y-pollart/home-assistant/labels{/name}","releases_url":"https://api.github.com/repos/y-pollart/home-assistant/releases{/id}","deployments_url":"https://api.github.com/repos/y-pollart/home-assistant/deployments","created_at":"2016-09-26T08:14:31Z","updated_at":"2016-09-26T10:15:57Z","pushed_at":"2016-11-04T22:04:18Z","git_url":"git://github.com/y-pollart/home-assistant.git","ssh_url":"git@github.com:y-pollart/home-assistant.git","clone_url":"https://github.com/y-pollart/home-assistant.git","svn_url":"https://github.com/y-pollart/home-assistant","homepage":"https://home-assistant.io","size":42541,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"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":"a3db0ec231f467391438bf01c8cf466f4d5ec631","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-11-04T21:19:15Z","pushed_at":"2016-11-04T22:20:13Z","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":85216,"stargazers_count":4535,"watchers_count":4535,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1171,"mirror_url":null,"open_issues_count":329,"forks":1171,"open_issues":329,"watchers":4535,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/4218"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/4218"},"issue":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/4218"},"comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/4218/comments"},"review_comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/4218/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/4218/commits"},"statuses":{"href":"https://api.github.com/repos/home-assistant/home-assistant/statuses/fda6f8cc93fd132bb940fc3f449539cf2489e894"}}}}
{"actor":{"display_login":"balloobbot"}}