{"action":"created","comment":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/88186137","pull_request_review_id":8766008,"id":88186137,"diff_hunk":"@@ -1,373 +1,749 @@\n-\"\"\"The tests for the MQTT Template light platform.\r\n-\r\n-Configuration example with all features:\r\n-\r\n-light:\r\n-  platform: mqtt_template\r\n-  name: mqtt_template_light_1\r\n-  state_topic: 'home/rgb1'\r\n-  command_topic: 'home/rgb1/set'\r\n-  command_on_template: >\r\n-    on,{{ brightness|d }},{{ red|d }}-{{ green|d }}-{{ blue|d }}\r\n-  command_off_template: 'off'\r\n-  state_template: '{{ value.split(\",\")[0] }}'\r\n-  brightness_template: '{{ value.split(\",\")[1] }}'\r\n-  red_template: '{{ value.split(\",\")[2].split(\"-\")[0] }}'\r\n-  green_template: '{{ value.split(\",\")[2].split(\"-\")[1] }}'\r\n-  blue_template: '{{ value.split(\",\")[2].split(\"-\")[2] }}'\r\n-\r\n-If your light doesn't support brightness feature, omit `brightness_template`.\r\n-\r\n-If your light doesn't support rgb feature, omit `(red|green|blue)_template`.\r\n-\"\"\"\r\n-import unittest\r\n-\r\n-from homeassistant.bootstrap import setup_component\r\n-from homeassistant.const import STATE_ON, STATE_OFF, ATTR_ASSUMED_STATE\r\n-import homeassistant.components.light as light\r\n-from tests.common import (\r\n-    get_test_home_assistant, mock_mqtt_component, fire_mqtt_message,\r\n-    assert_setup_component)\r\n-\r\n-\r\n-class TestLightMQTTTemplate(unittest.TestCase):\r\n-    \"\"\"Test the MQTT Template light.\"\"\"\r\n-\r\n-    def setUp(self):  # pylint: disable=invalid-name\r\n-        \"\"\"Setup things to be run when tests are started.\"\"\"\r\n-        self.hass = get_test_home_assistant()\r\n-        self.mock_publish = mock_mqtt_component(self.hass)\r\n-\r\n-    def tearDown(self):  # pylint: disable=invalid-name\r\n-        \"\"\"Stop everything that was started.\"\"\"\r\n-        self.hass.stop()\r\n-\r\n-    def test_setup_fails(self): \\\r\n-            # pylint: disable=invalid-name\r\n-        \"\"\"Test that setup fails with missing required configuration items.\"\"\"\r\n-        self.hass.config.components = ['mqtt']\r\n-        with assert_setup_component(0):\r\n-            assert setup_component(self.hass, light.DOMAIN, {\r\n-                light.DOMAIN: {\r\n-                    'platform': 'mqtt_template',\r\n-                    'name': 'test',\r\n-                }\r\n-            })\r\n-        self.assertIsNone(self.hass.states.get('light.test'))\r\n-\r\n-    def test_state_change_via_topic(self): \\\r\n-            # pylint: disable=invalid-name\r\n-        \"\"\"Test state change via topic.\"\"\"\r\n-        self.hass.config.components = ['mqtt']\r\n-        with assert_setup_component(1):\r\n-            assert setup_component(self.hass, light.DOMAIN, {\r\n-                light.DOMAIN: {\r\n-                    'platform': 'mqtt_template',\r\n-                    'name': 'test',\r\n-                    'state_topic': 'test_light_rgb',\r\n-                    'command_topic': 'test_light_rgb/set',\r\n-                    'command_on_template': 'on,'\r\n-                                           '{{ brightness|d }},'\r\n-                                           '{{ red|d }}-'\r\n-                                           '{{ green|d }}-'\r\n-                                           '{{ blue|d }}',\r\n-                    'command_off_template': 'off',\r\n-                    'state_template': '{{ value.split(\",\")[0] }}'\r\n-                }\r\n-            })\r\n-\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_OFF, state.state)\r\n-        self.assertIsNone(state.attributes.get('rgb_color'))\r\n-        self.assertIsNone(state.attributes.get('brightness'))\r\n-        self.assertIsNone(state.attributes.get(ATTR_ASSUMED_STATE))\r\n-\r\n-        fire_mqtt_message(self.hass, 'test_light_rgb', 'on')\r\n-        self.hass.block_till_done()\r\n-\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_ON, state.state)\r\n-        self.assertIsNone(state.attributes.get('rgb_color'))\r\n-        self.assertIsNone(state.attributes.get('brightness'))\r\n-\r\n-    def test_state_brightness_color_change_via_topic(self): \\\r\n-            # pylint: disable=invalid-name\r\n-        \"\"\"Test state, brightness and color change via topic.\"\"\"\r\n-        self.hass.config.components = ['mqtt']\r\n-        with assert_setup_component(1):\r\n-            assert setup_component(self.hass, light.DOMAIN, {\r\n-                light.DOMAIN: {\r\n-                    'platform': 'mqtt_template',\r\n-                    'name': 'test',\r\n-                    'state_topic': 'test_light_rgb',\r\n-                    'command_topic': 'test_light_rgb/set',\r\n-                    'command_on_template': 'on,'\r\n-                                           '{{ brightness|d }},'\r\n-                                           '{{ red|d }}-'\r\n-                                           '{{ green|d }}-'\r\n-                                           '{{ blue|d }}',\r\n-                    'command_off_template': 'off',\r\n-                    'state_template': '{{ value.split(\",\")[0] }}',\r\n-                    'brightness_template': '{{ value.split(\",\")[1] }}',\r\n-                    'red_template': '{{ value.split(\",\")[2].'\r\n-                                    'split(\"-\")[0] }}',\r\n-                    'green_template': '{{ value.split(\",\")[2].'\r\n-                                      'split(\"-\")[1] }}',\r\n-                    'blue_template': '{{ value.split(\",\")[2].'\r\n-                                     'split(\"-\")[2] }}'\r\n-                }\r\n-            })\r\n-\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_OFF, state.state)\r\n-        self.assertIsNone(state.attributes.get('rgb_color'))\r\n-        self.assertIsNone(state.attributes.get('brightness'))\r\n-        self.assertIsNone(state.attributes.get(ATTR_ASSUMED_STATE))\r\n-\r\n-        # turn on the light, full white\r\n-        fire_mqtt_message(self.hass, 'test_light_rgb', 'on,255,255-255-255')\r\n-        self.hass.block_till_done()\r\n-\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_ON, state.state)\r\n-        self.assertEqual([255, 255, 255], state.attributes.get('rgb_color'))\r\n-        self.assertEqual(255, state.attributes.get('brightness'))\r\n-\r\n-        # turn the light off\r\n-        fire_mqtt_message(self.hass, 'test_light_rgb', 'off')\r\n-        self.hass.block_till_done()\r\n-\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_OFF, state.state)\r\n-\r\n-        # lower the brightness\r\n-        fire_mqtt_message(self.hass, 'test_light_rgb', 'on,100')\r\n-        self.hass.block_till_done()\r\n-\r\n-        light_state = self.hass.states.get('light.test')\r\n-        self.hass.block_till_done()\r\n-        self.assertEqual(100, light_state.attributes['brightness'])\r\n-\r\n-        # change the color\r\n-        fire_mqtt_message(self.hass, 'test_light_rgb', 'on,,41-42-43')\r\n-        self.hass.block_till_done()\r\n-\r\n-        light_state = self.hass.states.get('light.test')\r\n-        self.assertEqual([41, 42, 43], light_state.attributes.get('rgb_color'))\r\n-\r\n-    def test_optimistic(self): \\\r\n-            # pylint: disable=invalid-name\r\n-        \"\"\"Test optimistic mode.\"\"\"\r\n-        self.hass.config.components = ['mqtt']\r\n-        with assert_setup_component(1):\r\n-            assert setup_component(self.hass, light.DOMAIN, {\r\n-                light.DOMAIN: {\r\n-                    'platform': 'mqtt_template',\r\n-                    'name': 'test',\r\n-                    'command_topic': 'test_light_rgb/set',\r\n-                    'command_on_template': 'on,'\r\n-                                           '{{ brightness|d }},'\r\n-                                           '{{ red|d }}-'\r\n-                                           '{{ green|d }}-'\r\n-                                           '{{ blue|d }}',\r\n-                    'command_off_template': 'off',\r\n-                    'qos': 2\r\n-                }\r\n-            })\r\n-\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_OFF, state.state)\r\n-        self.assertTrue(state.attributes.get(ATTR_ASSUMED_STATE))\r\n-\r\n-        # turn on the light\r\n-        light.turn_on(self.hass, 'light.test')\r\n-        self.hass.block_till_done()\r\n-\r\n-        self.assertEqual(('test_light_rgb/set', 'on,,--', 2, False),\r\n-                         self.mock_publish.mock_calls[-1][1])\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_ON, state.state)\r\n-\r\n-        # turn the light off\r\n-        light.turn_off(self.hass, 'light.test')\r\n-        self.hass.block_till_done()\r\n-\r\n-        self.assertEqual(('test_light_rgb/set', 'off', 2, False),\r\n-                         self.mock_publish.mock_calls[-1][1])\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_OFF, state.state)\r\n-\r\n-        # turn on the light with brightness and color\r\n-        light.turn_on(self.hass, 'light.test', brightness=50,\r\n-                      rgb_color=[75, 75, 75])\r\n-        self.hass.block_till_done()\r\n-\r\n-        self.assertEqual('test_light_rgb/set',\r\n-                         self.mock_publish.mock_calls[-1][1][0])\r\n-        self.assertEqual(2, self.mock_publish.mock_calls[-1][1][2])\r\n-        self.assertEqual(False, self.mock_publish.mock_calls[-1][1][3])\r\n-\r\n-        # check the payload\r\n-        payload = self.mock_publish.mock_calls[-1][1][1]\r\n-        self.assertEqual('on,50,75-75-75', payload)\r\n-\r\n-        # check the state\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_ON, state.state)\r\n-        self.assertEqual((75, 75, 75), state.attributes['rgb_color'])\r\n-        self.assertEqual(50, state.attributes['brightness'])\r\n-\r\n-    def test_flash(self): \\\r\n-            # pylint: disable=invalid-name\r\n-        \"\"\"Test flash.\"\"\"\r\n-        self.hass.config.components = ['mqtt']\r\n-        with assert_setup_component(1):\r\n-            assert setup_component(self.hass, light.DOMAIN, {\r\n-                light.DOMAIN: {\r\n-                    'platform': 'mqtt_template',\r\n-                    'name': 'test',\r\n-                    'command_topic': 'test_light_rgb/set',\r\n-                    'command_on_template': 'on,{{ flash }}',\r\n-                    'command_off_template': 'off',\r\n-                    'qos': 0\r\n-                }\r\n-            })\r\n-\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_OFF, state.state)\r\n-\r\n-        # short flash\r\n-        light.turn_on(self.hass, 'light.test', flash='short')\r\n-        self.hass.block_till_done()\r\n-\r\n-        self.assertEqual('test_light_rgb/set',\r\n-                         self.mock_publish.mock_calls[-1][1][0])\r\n-        self.assertEqual(0, self.mock_publish.mock_calls[-1][1][2])\r\n-        self.assertEqual(False, self.mock_publish.mock_calls[-1][1][3])\r\n-\r\n-        # check the payload\r\n-        payload = self.mock_publish.mock_calls[-1][1][1]\r\n-        self.assertEqual('on,short', payload)\r\n-\r\n-        # long flash\r\n-        light.turn_on(self.hass, 'light.test', flash='long')\r\n-        self.hass.block_till_done()\r\n-\r\n-        self.assertEqual('test_light_rgb/set',\r\n-                         self.mock_publish.mock_calls[-1][1][0])\r\n-        self.assertEqual(0, self.mock_publish.mock_calls[-1][1][2])\r\n-        self.assertEqual(False, self.mock_publish.mock_calls[-1][1][3])\r\n-\r\n-        # check the payload\r\n-        payload = self.mock_publish.mock_calls[-1][1][1]\r\n-        self.assertEqual('on,long', payload)\r\n-\r\n-    def test_transition(self):\r\n-        \"\"\"Test for transition time being sent when included.\"\"\"\r\n-        self.hass.config.components = ['mqtt']\r\n-        with assert_setup_component(1):\r\n-            assert setup_component(self.hass, light.DOMAIN, {\r\n-                light.DOMAIN: {\r\n-                    'platform': 'mqtt_template',\r\n-                    'name': 'test',\r\n-                    'command_topic': 'test_light_rgb/set',\r\n-                    'command_on_template': 'on,{{ transition }}',\r\n-                    'command_off_template': 'off,{{ transition|d }}'\r\n-                }\r\n-            })\r\n-\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_OFF, state.state)\r\n-\r\n-        # transition on\r\n-        light.turn_on(self.hass, 'light.test', transition=10)\r\n-        self.hass.block_till_done()\r\n-\r\n-        self.assertEqual('test_light_rgb/set',\r\n-                         self.mock_publish.mock_calls[-1][1][0])\r\n-        self.assertEqual(0, self.mock_publish.mock_calls[-1][1][2])\r\n-        self.assertEqual(False, self.mock_publish.mock_calls[-1][1][3])\r\n-\r\n-        # check the payload\r\n-        payload = self.mock_publish.mock_calls[-1][1][1]\r\n-        self.assertEqual('on,10', payload)\r\n-\r\n-        # transition off\r\n-        light.turn_off(self.hass, 'light.test', transition=4)\r\n-        self.hass.block_till_done()\r\n-\r\n-        self.assertEqual('test_light_rgb/set',\r\n-                         self.mock_publish.mock_calls[-1][1][0])\r\n-        self.assertEqual(0, self.mock_publish.mock_calls[-1][1][2])\r\n-        self.assertEqual(False, self.mock_publish.mock_calls[-1][1][3])\r\n-\r\n-        # check the payload\r\n-        payload = self.mock_publish.mock_calls[-1][1][1]\r\n-        self.assertEqual('off,4', payload)\r\n-\r\n-    def test_invalid_values(self): \\\r\n-            # pylint: disable=invalid-name\r\n-        \"\"\"Test that invalid values are ignored.\"\"\"\r\n-        self.hass.config.components = ['mqtt']\r\n-        with assert_setup_component(1):\r\n-            assert setup_component(self.hass, light.DOMAIN, {\r\n-                light.DOMAIN: {\r\n-                    'platform': 'mqtt_template',\r\n-                    'name': 'test',\r\n-                    'state_topic': 'test_light_rgb',\r\n-                    'command_topic': 'test_light_rgb/set',\r\n-                    'command_on_template': 'on,'\r\n-                                           '{{ brightness|d }},'\r\n-                                           '{{ red|d }}-'\r\n-                                           '{{ green|d }}-'\r\n-                                           '{{ blue|d }}',\r\n-                    'command_off_template': 'off',\r\n-                    'state_template': '{{ value.split(\",\")[0] }}',\r\n-                    'brightness_template': '{{ value.split(\",\")[1] }}',\r\n-                    'red_template': '{{ value.split(\",\")[2].'\r\n-                                    'split(\"-\")[0] }}',\r\n-                    'green_template': '{{ value.split(\",\")[2].'\r\n-                                      'split(\"-\")[1] }}',\r\n-                    'blue_template': '{{ value.split(\",\")[2].'\r\n-                                     'split(\"-\")[2] }}'\r\n-                }\r\n-            })\r\n-\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_OFF, state.state)\r\n-        self.assertIsNone(state.attributes.get('rgb_color'))\r\n-        self.assertIsNone(state.attributes.get('brightness'))\r\n-        self.assertIsNone(state.attributes.get(ATTR_ASSUMED_STATE))\r\n-\r\n-        # turn on the light, full white\r\n-        fire_mqtt_message(self.hass, 'test_light_rgb', 'on,255,255-255-255')\r\n-        self.hass.block_till_done()\r\n-\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_ON, state.state)\r\n-        self.assertEqual(255, state.attributes.get('brightness'))\r\n-        self.assertEqual([255, 255, 255], state.attributes.get('rgb_color'))\r\n-\r\n-        # bad state value\r\n-        fire_mqtt_message(self.hass, 'test_light_rgb', 'offf')\r\n-        self.hass.block_till_done()\r\n-\r\n-        # state should not have changed\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(STATE_ON, state.state)\r\n-\r\n-        # bad brightness values\r\n-        fire_mqtt_message(self.hass, 'test_light_rgb', 'on,off,255-255-255')\r\n-        self.hass.block_till_done()\r\n-\r\n-        # brightness should not have changed\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual(255, state.attributes.get('brightness'))\r\n-\r\n-        # bad color values\r\n-        fire_mqtt_message(self.hass, 'test_light_rgb', 'on,255,a-b-c')\r\n-        self.hass.block_till_done()\r\n-\r\n-        # color should not have changed\r\n-        state = self.hass.states.get('light.test')\r\n-        self.assertEqual([255, 255, 255], state.attributes.get('rgb_color'))\r\n+<<<<<<< HEAD","path":"tests/components/light/test_mqtt_template.py","position":374,"original_position":374,"commit_id":"f65d79754722ea2506f1815c2d617ad71d7ef298","original_commit_id":"f65d79754722ea2506f1815c2d617ad71d7ef298","user":{"login":"houndci-bot","id":6697940,"avatar_url":"https://avatars.githubusercontent.com/u/6697940?v=3","gravatar_id":"","url":"https://api.github.com/users/houndci-bot","html_url":"https://github.com/houndci-bot","followers_url":"https://api.github.com/users/houndci-bot/followers","following_url":"https://api.github.com/users/houndci-bot/following{/other_user}","gists_url":"https://api.github.com/users/houndci-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/houndci-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/houndci-bot/subscriptions","organizations_url":"https://api.github.com/users/houndci-bot/orgs","repos_url":"https://api.github.com/users/houndci-bot/repos","events_url":"https://api.github.com/users/houndci-bot/events{/privacy}","received_events_url":"https://api.github.com/users/houndci-bot/received_events","type":"User","site_admin":false},"body":"missing whitespace around bitwise or shift operator<br>SyntaxError: invalid syntax<br>missing whitespace around operator","created_at":"2016-11-16T08:11:13Z","updated_at":"2016-11-16T08:11:13Z","html_url":"https://github.com/home-assistant/home-assistant/pull/3932#discussion_r88186137","pull_request_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/3932","_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/88186137"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/3932#discussion_r88186137"},"pull_request":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/3932"}}},"pull_request":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/3932","id":89776095,"html_url":"https://github.com/home-assistant/home-assistant/pull/3932","diff_url":"https://github.com/home-assistant/home-assistant/pull/3932.diff","patch_url":"https://github.com/home-assistant/home-assistant/pull/3932.patch","issue_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/3932","number":3932,"state":"open","locked":false,"title":"Add keypress & output control services to Envisalink component","user":{"login":"jnimmo","id":60687,"avatar_url":"https://avatars.githubusercontent.com/u/60687?v=3","gravatar_id":"","url":"https://api.github.com/users/jnimmo","html_url":"https://github.com/jnimmo","followers_url":"https://api.github.com/users/jnimmo/followers","following_url":"https://api.github.com/users/jnimmo/following{/other_user}","gists_url":"https://api.github.com/users/jnimmo/gists{/gist_id}","starred_url":"https://api.github.com/users/jnimmo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jnimmo/subscriptions","organizations_url":"https://api.github.com/users/jnimmo/orgs","repos_url":"https://api.github.com/users/jnimmo/repos","events_url":"https://api.github.com/users/jnimmo/events{/privacy}","received_events_url":"https://api.github.com/users/jnimmo/received_events","type":"User","site_admin":false},"body":"**Description:**\nAdded two new services to the alarm_control_panel required for Envisalink functionality\n\nalarm_keypress allows a string of custom keypresses to be sent to the alarm \nalarm_output_control activates the specified programmable output on the alarm\n\n**Pull request in [home-assistant.io](https://github.com/home-assistant/home-assistant.io) with documentation (if applicable):** home-assistant/home-assistant.io#1249\n\n**Checklist:**\n\nIf user exposed functionality or configuration variables are added/changed:\n- [x] Documentation added/updated in [home-assistant.io](https://github.com/home-assistant/home-assistant.io)\n\nIf the code communicates with devices, web services, or third-party tools:\n- [x] Local tests with `tox` run successfully. **Your PR cannot be merged unless tests pass**\n- [x] New dependencies have been added to the `REQUIREMENTS` variable ([example](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/keyboard.py#L16)).\n- [x] New dependencies are only imported inside functions that use them ([example](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/keyboard.py#L51)).\n- [x] New dependencies have been added to `requirements_all.txt` by running `script/gen_requirements_all.py`.\n","created_at":"2016-10-18T09:19:33Z","updated_at":"2016-11-16T08:11:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6f415640ebe4f98da45324989cec7d56924c721f","assignee":{"login":"balloob","id":1444314,"avatar_url":"https://avatars.githubusercontent.com/u/1444314?v=3","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},"assignees":[{"login":"balloob","id":1444314,"avatar_url":"https://avatars.githubusercontent.com/u/1444314?v=3","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}],"milestone":null,"commits_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/3932/commits","review_comments_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/3932/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/3932/comments","statuses_url":"https://api.github.com/repos/home-assistant/home-assistant/statuses/f65d79754722ea2506f1815c2d617ad71d7ef298","head":{"label":"jnimmo:alarm-keypress-handler","ref":"alarm-keypress-handler","sha":"f65d79754722ea2506f1815c2d617ad71d7ef298","user":{"login":"jnimmo","id":60687,"avatar_url":"https://avatars.githubusercontent.com/u/60687?v=3","gravatar_id":"","url":"https://api.github.com/users/jnimmo","html_url":"https://github.com/jnimmo","followers_url":"https://api.github.com/users/jnimmo/followers","following_url":"https://api.github.com/users/jnimmo/following{/other_user}","gists_url":"https://api.github.com/users/jnimmo/gists{/gist_id}","starred_url":"https://api.github.com/users/jnimmo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jnimmo/subscriptions","organizations_url":"https://api.github.com/users/jnimmo/orgs","repos_url":"https://api.github.com/users/jnimmo/repos","events_url":"https://api.github.com/users/jnimmo/events{/privacy}","received_events_url":"https://api.github.com/users/jnimmo/received_events","type":"User","site_admin":false},"repo":{"id":71195483,"name":"home-assistant","full_name":"jnimmo/home-assistant","owner":{"login":"jnimmo","id":60687,"avatar_url":"https://avatars.githubusercontent.com/u/60687?v=3","gravatar_id":"","url":"https://api.github.com/users/jnimmo","html_url":"https://github.com/jnimmo","followers_url":"https://api.github.com/users/jnimmo/followers","following_url":"https://api.github.com/users/jnimmo/following{/other_user}","gists_url":"https://api.github.com/users/jnimmo/gists{/gist_id}","starred_url":"https://api.github.com/users/jnimmo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jnimmo/subscriptions","organizations_url":"https://api.github.com/users/jnimmo/orgs","repos_url":"https://api.github.com/users/jnimmo/repos","events_url":"https://api.github.com/users/jnimmo/events{/privacy}","received_events_url":"https://api.github.com/users/jnimmo/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jnimmo/home-assistant","description":":house_with_garden: Open-source home automation platform running on Python 3","fork":true,"url":"https://api.github.com/repos/jnimmo/home-assistant","forks_url":"https://api.github.com/repos/jnimmo/home-assistant/forks","keys_url":"https://api.github.com/repos/jnimmo/home-assistant/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jnimmo/home-assistant/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jnimmo/home-assistant/teams","hooks_url":"https://api.github.com/repos/jnimmo/home-assistant/hooks","issue_events_url":"https://api.github.com/repos/jnimmo/home-assistant/issues/events{/number}","events_url":"https://api.github.com/repos/jnimmo/home-assistant/events","assignees_url":"https://api.github.com/repos/jnimmo/home-assistant/assignees{/user}","branches_url":"https://api.github.com/repos/jnimmo/home-assistant/branches{/branch}","tags_url":"https://api.github.com/repos/jnimmo/home-assistant/tags","blobs_url":"https://api.github.com/repos/jnimmo/home-assistant/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jnimmo/home-assistant/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jnimmo/home-assistant/git/refs{/sha}","trees_url":"https://api.github.com/repos/jnimmo/home-assistant/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jnimmo/home-assistant/statuses/{sha}","languages_url":"https://api.github.com/repos/jnimmo/home-assistant/languages","stargazers_url":"https://api.github.com/repos/jnimmo/home-assistant/stargazers","contributors_url":"https://api.github.com/repos/jnimmo/home-assistant/contributors","subscribers_url":"https://api.github.com/repos/jnimmo/home-assistant/subscribers","subscription_url":"https://api.github.com/repos/jnimmo/home-assistant/subscription","commits_url":"https://api.github.com/repos/jnimmo/home-assistant/commits{/sha}","git_commits_url":"https://api.github.com/repos/jnimmo/home-assistant/git/commits{/sha}","comments_url":"https://api.github.com/repos/jnimmo/home-assistant/comments{/number}","issue_comment_url":"https://api.github.com/repos/jnimmo/home-assistant/issues/comments{/number}","contents_url":"https://api.github.com/repos/jnimmo/home-assistant/contents/{+path}","compare_url":"https://api.github.com/repos/jnimmo/home-assistant/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jnimmo/home-assistant/merges","archive_url":"https://api.github.com/repos/jnimmo/home-assistant/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jnimmo/home-assistant/downloads","issues_url":"https://api.github.com/repos/jnimmo/home-assistant/issues{/number}","pulls_url":"https://api.github.com/repos/jnimmo/home-assistant/pulls{/number}","milestones_url":"https://api.github.com/repos/jnimmo/home-assistant/milestones{/number}","notifications_url":"https://api.github.com/repos/jnimmo/home-assistant/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jnimmo/home-assistant/labels{/name}","releases_url":"https://api.github.com/repos/jnimmo/home-assistant/releases{/id}","deployments_url":"https://api.github.com/repos/jnimmo/home-assistant/deployments","created_at":"2016-10-18T01:16:15Z","updated_at":"2016-10-18T01:16:18Z","pushed_at":"2016-11-16T08:11:02Z","git_url":"git://github.com/jnimmo/home-assistant.git","ssh_url":"git@github.com:jnimmo/home-assistant.git","clone_url":"https://github.com/jnimmo/home-assistant.git","svn_url":"https://github.com/jnimmo/home-assistant","homepage":"https://home-assistant.io","size":41871,"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":"c06c82905ae50aca256917019e5447db84fdd144","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-16T07:19:14Z","pushed_at":"2016-11-16T08:11:03Z","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":86014,"stargazers_count":4646,"watchers_count":4646,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1217,"mirror_url":null,"open_issues_count":328,"forks":1217,"open_issues":328,"watchers":4646,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/3932"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/3932"},"issue":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/3932"},"comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/3932/comments"},"review_comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/3932/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/3932/commits"},"statuses":{"href":"https://api.github.com/repos/home-assistant/home-assistant/statuses/f65d79754722ea2506f1815c2d617ad71d7ef298"}}}}
{"actor":{"display_login":"houndci-bot"}}