{"action":"created","comment":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/130564888","pull_request_review_id":53451795,"id":130564888,"diff_hunk":"@@ -0,0 +1,294 @@\n+\"\"\"\n+Support for MQTT climate devices.\n+\n+For more details about this platform, please refer to the documentation\n+https://home-assistant.io/components/climate.mqtt/\n+\"\"\"\n+import asyncio\n+import logging\n+\n+import voluptuous as vol\n+\n+from homeassistant.core import callback\n+import homeassistant.components.mqtt as mqtt\n+\n+from homeassistant.components.climate import (\n+    STATE_HEAT, STATE_COOL, STATE_DRY, STATE_FAN_ONLY, ClimateDevice,\n+    PLATFORM_SCHEMA, STATE_AUTO)\n+from homeassistant.const import (\n+    ATTR_UNIT_OF_MEASUREMENT, STATE_ON, STATE_OFF, ATTR_TEMPERATURE,\n+    CONF_NAME)\n+from homeassistant.components.mqtt import (CONF_QOS, CONF_RETAIN)\n+import homeassistant.helpers.config_validation as cv\n+from homeassistant.helpers.event import (async_track_state_change)\n+from homeassistant.components.fan import (SPEED_LOW, SPEED_MEDIUM,\n+                                          SPEED_HIGH)\n+\n+_LOGGER = logging.getLogger(__name__)\n+\n+DEPENDENCIES = ['mqtt', 'sensor']\n+\n+DEFAULT_NAME = 'MQTT HVAC'\n+\n+CONF_SENSOR = 'target_sensor'\n+CONF_POWER_COMMAND_TOPIC = 'power_command_topic'\n+CONF_MODE_COMMAND_TOPIC = 'mode_command_topic'\n+CONF_TEMPERATURE_COMMAND_TOPIC = 'temperature_command_topic'\n+CONF_FAN_MODE_COMMAND_TOPIC = 'fan_mode_command_topic'\n+CONF_SWING_MODE_COMMAND_TOPIC = 'swing_mode_command_topic'\n+CONF_FAN_MODE_LIST = 'fan_modes'\n+CONF_MODE_LIST = 'modes'\n+CONF_SWING_MODE_LIST = 'swing_modes'\n+\n+PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({\n+    vol.Required(CONF_SENSOR): cv.entity_id,\n+    vol.Optional(CONF_POWER_COMMAND_TOPIC): mqtt.valid_publish_topic,\n+    vol.Optional(CONF_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic,\n+    vol.Optional(CONF_TEMPERATURE_COMMAND_TOPIC): mqtt.valid_publish_topic,\n+    vol.Optional(CONF_FAN_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic,\n+    vol.Optional(CONF_SWING_MODE_COMMAND_TOPIC): mqtt.valid_publish_topic,\n+    vol.Optional(CONF_FAN_MODE_LIST,\n+                 default=[STATE_AUTO, SPEED_LOW,\n+                          SPEED_MEDIUM, SPEED_HIGH]): cv.ensure_list,\n+    vol.Optional(CONF_SWING_MODE_LIST,\n+                 default=[STATE_ON, STATE_OFF]): cv.ensure_list,\n+    vol.Optional(CONF_MODE_LIST,\n+                 default=[STATE_AUTO, STATE_OFF, STATE_COOL, STATE_HEAT,\n+                          STATE_DRY, STATE_FAN_ONLY]): cv.ensure_list,\n+    vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,\n+})\n+\n+\n+@asyncio.coroutine\n+def async_setup_platform(hass, config, async_add_devices, discovery_info=None):\n+    \"\"\"Set up the Demo climate devices.\"\"\"\n+    async_add_devices([\n+        MqttClimate(\n+            hass,\n+            config.get(CONF_NAME),\n+            config.get(CONF_SENSOR),\n+            {\n+                key: config.get(key) for key in (\n+                    CONF_POWER_COMMAND_TOPIC,\n+                    CONF_MODE_COMMAND_TOPIC,\n+                    CONF_TEMPERATURE_COMMAND_TOPIC,\n+                    CONF_FAN_MODE_COMMAND_TOPIC,\n+                    CONF_SWING_MODE_COMMAND_TOPIC,\n+                )\n+            },\n+            config.get(CONF_QOS),\n+            config.get(CONF_RETAIN),\n+            config.get(CONF_MODE_LIST),\n+            config.get(CONF_FAN_MODE_LIST),\n+            config.get(CONF_SWING_MODE_LIST),\n+            24, None, None, SPEED_LOW,\n+            STATE_OFF, STATE_OFF, None)\n+    ])\n+\n+\n+class MqttClimate(ClimateDevice):\n+    \"\"\"Representation of a demo climate device.\"\"\"\n+\n+    def __init__(self, hass, name, sensor_entity_id, topic, qos, retain,\n+                 mode_list, fan_mode_list, swing_mode_list,\n+                 target_temperature,\n+                 away, hold, current_fan_mode,\n+                 current_swing_mode,\n+                 current_operation, aux):\n+        \"\"\"Initialize the climate device.\"\"\"\n+        self.hass = hass\n+        self._name = name\n+        self._topic = topic\n+        self._qos = qos\n+        self._retain = retain\n+        self._target_temperature = target_temperature\n+        self._unit_of_measurement = hass.config.units.temperature_unit\n+        self._away = away\n+        self._hold = hold\n+        self._current_temperature = None\n+        self._current_fan_mode = current_fan_mode\n+        self._current_operation = current_operation\n+        self._aux = aux\n+        self._current_swing_mode = current_swing_mode\n+        self._fan_list = fan_mode_list\n+        self._operation_list = mode_list\n+        self._swing_list = swing_mode_list\n+        self._target_temperature_step = 1\n+        async_track_state_change(\n+            hass, sensor_entity_id, self._async_sensor_changed)\n+\n+        sensor_state = hass.states.get(sensor_entity_id)\n+        if sensor_state:\n+            self._async_update_temp(sensor_state)\n+\n+    @asyncio.coroutine\n+    def _async_sensor_changed(self, entity_id, old_state, new_state):\n+        \"\"\"Handle temperature changes.\"\"\"\n+        if new_state is None:\n+            return\n+\n+        self._async_update_temp(new_state)\n+        yield from self.async_update_ha_state()\n+\n+    @callback\n+    def _async_update_temp(self, state):\n+        \"\"\"Update thermostat with latest state from sensor.\"\"\"\n+        unit = state.attributes.get(ATTR_UNIT_OF_MEASUREMENT)\n+\n+        try:\n+            self._current_temperature = self.hass.config.units.temperature(\n+                float(state.state), unit)\n+        except ValueError as ex:\n+            _LOGGER.error('Unable to update from sensor: %s', ex)\n+\n+    @property\n+    def should_poll(self):\n+        \"\"\"Return the polling state.\"\"\"\n+        return False\n+\n+    @property\n+    def name(self):\n+        \"\"\"Return the name of the climate device.\"\"\"\n+        return self._name\n+\n+    @property\n+    def temperature_unit(self):\n+        \"\"\"Return the unit of measurement.\"\"\"\n+        return self._unit_of_measurement\n+\n+    @property\n+    def current_temperature(self):\n+        \"\"\"Return the current temperature.\"\"\"\n+        return self._current_temperature\n+\n+    @property\n+    def target_temperature(self):\n+        \"\"\"Return the temperature we try to reach.\"\"\"\n+        return self._target_temperature\n+\n+    @property\n+    def current_operation(self):\n+        \"\"\"Return current operation ie. heat, cool, idle.\"\"\"\n+        return self._current_operation\n+\n+    @property\n+    def operation_list(self):\n+        \"\"\"Return the list of available operation modes.\"\"\"\n+        return self._operation_list\n+\n+    @property\n+    def target_temperature_step(self):\n+        \"\"\"Return the supported step of target temperature.\"\"\"\n+        return self._target_temperature_step\n+\n+    @property\n+    def is_away_mode_on(self):\n+        \"\"\"Return if away mode is on.\"\"\"\n+        return self._away\n+\n+    @property\n+    def current_hold_mode(self):\n+        \"\"\"Return hold mode setting.\"\"\"\n+        return self._hold\n+\n+    @property\n+    def is_aux_heat_on(self):\n+        \"\"\"Return true if away mode is on.\"\"\"\n+        return self._aux\n+\n+    @property\n+    def current_fan_mode(self):\n+        \"\"\"Return the fan setting.\"\"\"\n+        return self._current_fan_mode\n+\n+    @property\n+    def fan_list(self):\n+        \"\"\"Return the list of available fan modes.\"\"\"\n+        return self._fan_list\n+\n+    def set_temperature(self, **kwargs):\n+        \"\"\"Set new target temperatures.\"\"\"\n+        if kwargs.get(ATTR_TEMPERATURE) is not None:\n+            self._target_temperature = kwargs.get(ATTR_TEMPERATURE)\n+            if self._current_operation != STATE_OFF:\n+                mqtt.async_publish(\n+                    self.hass, self._topic[CONF_TEMPERATURE_COMMAND_TOPIC],\n+                    self._target_temperature, self._qos, self._retain)\n+\n+        self.schedule_update_ha_state()\n+\n+    def set_swing_mode(self, swing_mode):\n+        \"\"\"Set new swing mode.\"\"\"\n+        if self._current_operation != STATE_OFF:\n+            mqtt.async_publish(\n+                self.hass, self._topic[CONF_SWING_MODE_COMMAND_TOPIC],\n+                swing_mode, self._qos, self._retain)\n+        self._current_swing_mode = swing_mode\n+        self.schedule_update_ha_state()\n+\n+    def set_fan_mode(self, fan):\n+        \"\"\"Set new target temperature.\"\"\"\n+        if self._current_operation != STATE_OFF:\n+            mqtt.async_publish(\n+                self.hass, self._topic[CONF_FAN_MODE_COMMAND_TOPIC],\n+                fan, self._qos, self._retain)\n+        self._current_fan_mode = fan\n+        self.schedule_update_ha_state()\n+\n+    @asyncio.coroutine\n+    def async_set_operation_mode(self, operation_mode) -> None:\n+        \"\"\"Set new operation mode.\"\"\"\n+        if self._topic[CONF_MODE_COMMAND_TOPIC] is None:\n+            return\n+\n+        if self._topic[CONF_POWER_COMMAND_TOPIC] is not None:\n+            if self._current_operation == STATE_OFF and operation_mode != STATE_OFF:\n+                mqtt.async_publish(\n+                    self.hass, self._topic[CONF_POWER_COMMAND_TOPIC],\n+                    STATE_ON, self._qos, self._retain)\n+            elif self._current_operation != STAET_OFF and operation_mode == STATE_OFF:","path":"homeassistant/components/climate/mqtt.py","position":249,"original_position":249,"commit_id":"dec83ad5f633cfb36e04a22e2978cf3f7c339e71","original_commit_id":"dec83ad5f633cfb36e04a22e2978cf3f7c339e71","user":{"login":"houndci-bot","id":6697940,"avatar_url":"https://avatars0.githubusercontent.com/u/6697940?v=4","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":"undefined name 'STAET_OFF'<br>line too long (86 > 79 characters)","created_at":"2017-08-01T09:49:24Z","updated_at":"2017-08-01T09:49:24Z","html_url":"https://github.com/home-assistant/home-assistant/pull/8750#discussion_r130564888","pull_request_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/8750","_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/comments/130564888"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/8750#discussion_r130564888"},"pull_request":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/8750"}}},"pull_request":{"url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/8750","id":133260195,"html_url":"https://github.com/home-assistant/home-assistant/pull/8750","diff_url":"https://github.com/home-assistant/home-assistant/pull/8750.diff","patch_url":"https://github.com/home-assistant/home-assistant/pull/8750.patch","issue_url":"https://api.github.com/repos/home-assistant/home-assistant/issues/8750","number":8750,"state":"open","locked":false,"title":"new climate platform with MQTT","user":{"login":"clkao","id":69736,"avatar_url":"https://avatars3.githubusercontent.com/u/69736?v=4","gravatar_id":"","url":"https://api.github.com/users/clkao","html_url":"https://github.com/clkao","followers_url":"https://api.github.com/users/clkao/followers","following_url":"https://api.github.com/users/clkao/following{/other_user}","gists_url":"https://api.github.com/users/clkao/gists{/gist_id}","starred_url":"https://api.github.com/users/clkao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/clkao/subscriptions","organizations_url":"https://api.github.com/users/clkao/orgs","repos_url":"https://api.github.com/users/clkao/repos","events_url":"https://api.github.com/users/clkao/events{/privacy}","received_events_url":"https://api.github.com/users/clkao/received_events","type":"User","site_admin":false},"body":"## Description:\r\n\r\nThe `mqtt` climate platform let you control your MQTT enabled HVAC devices.\r\n\r\nThe platform currently works in optimistic mode, which means it does not obtain states from MQTT topics, but it sends and remembers control commands.\r\n\r\nIt uses a sensor under the hood to obtain the current temperature.\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#3111\r\n\r\n## Example entry for `configuration.yaml` (if applicable):\r\n```yaml\r\nclimate:\r\n  - platform: mqtt\r\n    name: Study\r\n    target_sensor: sensor.study_temperature\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  - [x] Local tests with `tox` run successfully. **Your PR cannot be merged unless tests pass**\r\n  - [x] New files were added to `.coveragerc`.\r\n\r\n[ex-requir]: https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/keyboard.py#L14\r\n[ex-import]: https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/components/keyboard.py#L54\r\n\r\n","created_at":"2017-07-31T14:34:04Z","updated_at":"2017-08-01T09:49:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5e9c0a8a9482fc813f8e6eeef121e78cda3055ff","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/8750/commits","review_comments_url":"https://api.github.com/repos/home-assistant/home-assistant/pulls/8750/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/8750/comments","statuses_url":"https://api.github.com/repos/home-assistant/home-assistant/statuses/dec83ad5f633cfb36e04a22e2978cf3f7c339e71","head":{"label":"clkao:climate-mqtt","ref":"climate-mqtt","sha":"dec83ad5f633cfb36e04a22e2978cf3f7c339e71","user":{"login":"clkao","id":69736,"avatar_url":"https://avatars3.githubusercontent.com/u/69736?v=4","gravatar_id":"","url":"https://api.github.com/users/clkao","html_url":"https://github.com/clkao","followers_url":"https://api.github.com/users/clkao/followers","following_url":"https://api.github.com/users/clkao/following{/other_user}","gists_url":"https://api.github.com/users/clkao/gists{/gist_id}","starred_url":"https://api.github.com/users/clkao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/clkao/subscriptions","organizations_url":"https://api.github.com/users/clkao/orgs","repos_url":"https://api.github.com/users/clkao/repos","events_url":"https://api.github.com/users/clkao/events{/privacy}","received_events_url":"https://api.github.com/users/clkao/received_events","type":"User","site_admin":false},"repo":{"id":98044531,"name":"home-assistant","full_name":"clkao/home-assistant","owner":{"login":"clkao","id":69736,"avatar_url":"https://avatars3.githubusercontent.com/u/69736?v=4","gravatar_id":"","url":"https://api.github.com/users/clkao","html_url":"https://github.com/clkao","followers_url":"https://api.github.com/users/clkao/followers","following_url":"https://api.github.com/users/clkao/following{/other_user}","gists_url":"https://api.github.com/users/clkao/gists{/gist_id}","starred_url":"https://api.github.com/users/clkao/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/clkao/subscriptions","organizations_url":"https://api.github.com/users/clkao/orgs","repos_url":"https://api.github.com/users/clkao/repos","events_url":"https://api.github.com/users/clkao/events{/privacy}","received_events_url":"https://api.github.com/users/clkao/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/clkao/home-assistant","description":":house_with_garden: Open-source home automation platform running on Python 3","fork":true,"url":"https://api.github.com/repos/clkao/home-assistant","forks_url":"https://api.github.com/repos/clkao/home-assistant/forks","keys_url":"https://api.github.com/repos/clkao/home-assistant/keys{/key_id}","collaborators_url":"https://api.github.com/repos/clkao/home-assistant/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/clkao/home-assistant/teams","hooks_url":"https://api.github.com/repos/clkao/home-assistant/hooks","issue_events_url":"https://api.github.com/repos/clkao/home-assistant/issues/events{/number}","events_url":"https://api.github.com/repos/clkao/home-assistant/events","assignees_url":"https://api.github.com/repos/clkao/home-assistant/assignees{/user}","branches_url":"https://api.github.com/repos/clkao/home-assistant/branches{/branch}","tags_url":"https://api.github.com/repos/clkao/home-assistant/tags","blobs_url":"https://api.github.com/repos/clkao/home-assistant/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/clkao/home-assistant/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/clkao/home-assistant/git/refs{/sha}","trees_url":"https://api.github.com/repos/clkao/home-assistant/git/trees{/sha}","statuses_url":"https://api.github.com/repos/clkao/home-assistant/statuses/{sha}","languages_url":"https://api.github.com/repos/clkao/home-assistant/languages","stargazers_url":"https://api.github.com/repos/clkao/home-assistant/stargazers","contributors_url":"https://api.github.com/repos/clkao/home-assistant/contributors","subscribers_url":"https://api.github.com/repos/clkao/home-assistant/subscribers","subscription_url":"https://api.github.com/repos/clkao/home-assistant/subscription","commits_url":"https://api.github.com/repos/clkao/home-assistant/commits{/sha}","git_commits_url":"https://api.github.com/repos/clkao/home-assistant/git/commits{/sha}","comments_url":"https://api.github.com/repos/clkao/home-assistant/comments{/number}","issue_comment_url":"https://api.github.com/repos/clkao/home-assistant/issues/comments{/number}","contents_url":"https://api.github.com/repos/clkao/home-assistant/contents/{+path}","compare_url":"https://api.github.com/repos/clkao/home-assistant/compare/{base}...{head}","merges_url":"https://api.github.com/repos/clkao/home-assistant/merges","archive_url":"https://api.github.com/repos/clkao/home-assistant/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/clkao/home-assistant/downloads","issues_url":"https://api.github.com/repos/clkao/home-assistant/issues{/number}","pulls_url":"https://api.github.com/repos/clkao/home-assistant/pulls{/number}","milestones_url":"https://api.github.com/repos/clkao/home-assistant/milestones{/number}","notifications_url":"https://api.github.com/repos/clkao/home-assistant/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/clkao/home-assistant/labels{/name}","releases_url":"https://api.github.com/repos/clkao/home-assistant/releases{/id}","deployments_url":"https://api.github.com/repos/clkao/home-assistant/deployments","created_at":"2017-07-22T16:42:50Z","updated_at":"2017-07-22T16:42:58Z","pushed_at":"2017-08-01T09:49:16Z","git_url":"git://github.com/clkao/home-assistant.git","ssh_url":"git@github.com:clkao/home-assistant.git","clone_url":"https://github.com/clkao/home-assistant.git","svn_url":"https://github.com/clkao/home-assistant","homepage":"https://home-assistant.io","size":67912,"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,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"dev"}},"base":{"label":"home-assistant:dev","ref":"dev","sha":"342ec8ec99637f12246110ff4ff1d84e33d77d35","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":"2017-08-01T09:13:51Z","pushed_at":"2017-08-01T09:49:21Z","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":68067,"stargazers_count":7682,"watchers_count":7682,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2317,"mirror_url":null,"open_issues_count":480,"forks":2317,"open_issues":480,"watchers":7682,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/8750"},"html":{"href":"https://github.com/home-assistant/home-assistant/pull/8750"},"issue":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/8750"},"comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/issues/8750/comments"},"review_comments":{"href":"https://api.github.com/repos/home-assistant/home-assistant/pulls/8750/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/8750/commits"},"statuses":{"href":"https://api.github.com/repos/home-assistant/home-assistant/statuses/dec83ad5f633cfb36e04a22e2978cf3f7c339e71"}}}}
{"actor":{"display_login":"houndci-bot"}}