From 19649390d3ce09e98346ec67b17539fb0cca70ed Mon Sep 17 00:00:00 2001 From: Arthur Andersen Date: Sat, 7 Nov 2015 15:52:36 +0100 Subject: [PATCH 01/30] [Zwave] Add binary switch component --- homeassistant/components/switch/__init__.py | 6 +- homeassistant/components/switch/zwave.py | 80 +++++++++++++++++++++ homeassistant/components/zwave.py | 8 +++ 3 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 homeassistant/components/switch/zwave.py diff --git a/homeassistant/components/switch/__init__.py b/homeassistant/components/switch/__init__.py index ac4ae533596..9a0abb4ce7a 100644 --- a/homeassistant/components/switch/__init__.py +++ b/homeassistant/components/switch/__init__.py @@ -16,7 +16,8 @@ from homeassistant.helpers.entity import ToggleEntity from homeassistant.const import ( STATE_ON, SERVICE_TURN_ON, SERVICE_TURN_OFF, ATTR_ENTITY_ID) -from homeassistant.components import group, discovery, wink, isy994, verisure +from homeassistant.components import ( + group, discovery, wink, isy994, verisure, zwave) DOMAIN = 'switch' DEPENDENCIES = [] @@ -38,7 +39,8 @@ DISCOVERY_PLATFORMS = { discovery.SERVICE_WEMO: 'wemo', wink.DISCOVER_SWITCHES: 'wink', isy994.DISCOVER_SWITCHES: 'isy994', - verisure.DISCOVER_SWITCHES: 'verisure' + verisure.DISCOVER_SWITCHES: 'verisure', + zwave.DISCOVER_SWITCHES: 'zwave', } PROP_TO_ATTR = { diff --git a/homeassistant/components/switch/zwave.py b/homeassistant/components/switch/zwave.py new file mode 100644 index 00000000000..12368dc0c22 --- /dev/null +++ b/homeassistant/components/switch/zwave.py @@ -0,0 +1,80 @@ +""" +homeassistant.components.switch.demo +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Demo platform that has two fake switches. +""" +# pylint: disable=import-error +from openzwave.network import ZWaveNetwork +from pydispatch import dispatcher + +import homeassistant.components.zwave as zwave + +from homeassistant.components.switch import SwitchDevice + + +# pylint: disable=unused-argument +def setup_platform(hass, config, add_devices, discovery_info=None): + """ Find and return demo switches. """ + if discovery_info is None: + return + + node = zwave.NETWORK.nodes[discovery_info[zwave.ATTR_NODE_ID]] + value = node.values[discovery_info[zwave.ATTR_VALUE_ID]] + + if value.command_class != zwave.COMMAND_CLASS_SWITCH_BINARY: + return + if value.type != zwave.TYPE_BOOL: + return + if value.genre != zwave.GENRE_USER: + return + + value.set_change_verified(False) + add_devices([ZwaveSwitch(value)]) + + +class ZwaveSwitch(SwitchDevice): + """ Provides a zwave switch. """ + def __init__(self, value): + self._value = value + self._node = value.node + + self._state = value.data + + dispatcher.connect( + self._value_changed, ZWaveNetwork.SIGNAL_VALUE_CHANGED) + + def _value_changed(self, value): + """ Called when a value has changed on the network. """ + if self._value.value_id == value.value_id: + self._state = value.data + self.update_ha_state() + + @property + def should_poll(self): + """ No polling needed for a demo switch. """ + return False + + @property + def name(self): + """ Returns the name of the device if any. """ + name = self._node.name or "{}".format(self._node.product_name) + + return "{}".format(name or self._value.label) + + @property + def is_on(self): + """ True if device is on. """ + return self._state + + def turn_on(self, **kwargs): + """ Turn the device on. """ + if self._node.set_switch(self._value.value_id, True): + self._state = True + self.update_ha_state() + + def turn_off(self, **kwargs): + """ Turn the device off. """ + if self._node.set_switch(self._value.value_id, False): + self._state = False + self.update_ha_state() diff --git a/homeassistant/components/zwave.py b/homeassistant/components/zwave.py index e5b321c989d..b7a8ddce1f4 100644 --- a/homeassistant/components/zwave.py +++ b/homeassistant/components/zwave.py @@ -22,9 +22,12 @@ DEFAULT_CONF_USB_STICK_PATH = "/zwaveusbstick" CONF_DEBUG = "debug" DISCOVER_SENSORS = "zwave.sensors" +DISCOVER_SWITCHES = "zwave.switch" DISCOVER_LIGHTS = "zwave.light" COMMAND_CLASS_SWITCH_MULTILEVEL = 38 + +COMMAND_CLASS_SWITCH_BINARY = 37 COMMAND_CLASS_SENSOR_BINARY = 48 COMMAND_CLASS_SENSOR_MULTILEVEL = 49 COMMAND_CLASS_BATTERY = 128 @@ -49,6 +52,11 @@ DISCOVERY_COMPONENTS = [ [COMMAND_CLASS_SWITCH_MULTILEVEL], TYPE_BYTE, GENRE_USER), + ('switch', + DISCOVER_SWITCHES, + [COMMAND_CLASS_SWITCH_BINARY], + TYPE_BOOL, + GENRE_USER), ] ATTR_NODE_ID = "node_id" From 877926cfee1df9cacdb84be3477d742042e424fe Mon Sep 17 00:00:00 2001 From: Arthur Andersen Date: Tue, 10 Nov 2015 20:04:25 +0100 Subject: [PATCH 02/30] [Zwave] Fix docstring --- homeassistant/components/switch/zwave.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/switch/zwave.py b/homeassistant/components/switch/zwave.py index 12368dc0c22..cc022df18c9 100644 --- a/homeassistant/components/switch/zwave.py +++ b/homeassistant/components/switch/zwave.py @@ -1,8 +1,8 @@ """ -homeassistant.components.switch.demo +homeassistant.components.switch.zwave ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Demo platform that has two fake switches. +Zwave platform that handles simple binary switches. """ # pylint: disable=import-error from openzwave.network import ZWaveNetwork From 85e0db6ade537e2f910d3e4274edc414ebf3109a Mon Sep 17 00:00:00 2001 From: Nolan Gilley Date: Fri, 13 Nov 2015 13:55:22 -0500 Subject: [PATCH 03/30] add exception handling to generic camera requests function. --- homeassistant/components/camera/__init__.py | 30 ++++++++++++--------- homeassistant/components/camera/generic.py | 16 ++++++++--- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/homeassistant/components/camera/__init__.py b/homeassistant/components/camera/__init__.py index 01c6c1b6e03..c44f56ed9f5 100644 --- a/homeassistant/components/camera/__init__.py +++ b/homeassistant/components/camera/__init__.py @@ -87,7 +87,10 @@ def setup(hass, config): if camera: response = camera.camera_image() - handler.wfile.write(response) + if response is not None: + handler.wfile.write(response) + else: + handler.send_response(HTTP_NOT_FOUND) else: handler.send_response(HTTP_NOT_FOUND) @@ -129,20 +132,21 @@ def setup(hass, config): while True: img_bytes = camera.camera_image() + if img_bytes is not None: + headers_str = '\r\n'.join(( + 'Content-length: {}'.format(len(img_bytes)), + 'Content-type: image/jpeg', + )) + '\r\n\r\n' - headers_str = '\r\n'.join(( - 'Content-length: {}'.format(len(img_bytes)), - 'Content-type: image/jpeg', - )) + '\r\n\r\n' - - handler.request.sendall( - bytes(headers_str, 'utf-8') + - img_bytes + - bytes('\r\n', 'utf-8')) - - handler.request.sendall( - bytes('--jpgboundary\r\n', 'utf-8')) + handler.request.sendall( + bytes(headers_str, 'utf-8') + + img_bytes + + bytes('\r\n', 'utf-8')) + handler.request.sendall( + bytes('--jpgboundary\r\n', 'utf-8')) + else: + break except (requests.RequestException, IOError): camera.is_streaming = False camera.update_ha_state() diff --git a/homeassistant/components/camera/generic.py b/homeassistant/components/camera/generic.py index 55fa4ec913f..b8be51292bf 100644 --- a/homeassistant/components/camera/generic.py +++ b/homeassistant/components/camera/generic.py @@ -42,11 +42,19 @@ class GenericCamera(Camera): def camera_image(self): """ Return a still image reponse from the camera. """ if self._username and self._password: - response = requests.get( - self._still_image_url, - auth=HTTPBasicAuth(self._username, self._password)) + try: + response = requests.get( + self._still_image_url, + auth=HTTPBasicAuth(self._username, self._password)) + except requests.exceptions.RequestException as error: + _LOGGER.error('Error getting camera image: %s', error) + return None else: - response = requests.get(self._still_image_url) + try: + response = requests.get(self._still_image_url) + except requests.exceptions.RequestException as error: + _LOGGER.error('Error getting camera image: %s', error) + return None return response.content From 9acb341b9607dd1dd404378a324fdcd10b6e2452 Mon Sep 17 00:00:00 2001 From: Nolan Gilley Date: Sat, 14 Nov 2015 10:51:07 -0500 Subject: [PATCH 04/30] remove break --- homeassistant/components/camera/__init__.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/camera/__init__.py b/homeassistant/components/camera/__init__.py index c44f56ed9f5..77a8eb83ce1 100644 --- a/homeassistant/components/camera/__init__.py +++ b/homeassistant/components/camera/__init__.py @@ -132,7 +132,9 @@ def setup(hass, config): while True: img_bytes = camera.camera_image() - if img_bytes is not None: + if img_bytes is None: + continue + else: headers_str = '\r\n'.join(( 'Content-length: {}'.format(len(img_bytes)), 'Content-type: image/jpeg', @@ -145,8 +147,7 @@ def setup(hass, config): handler.request.sendall( bytes('--jpgboundary\r\n', 'utf-8')) - else: - break + except (requests.RequestException, IOError): camera.is_streaming = False camera.update_ha_state() From cf8e23adbc3fe477468a3370096ef88dea3f6f2b Mon Sep 17 00:00:00 2001 From: happyleaves Date: Sat, 14 Nov 2015 14:14:02 -0500 Subject: [PATCH 05/30] s20 switch support --- .coveragerc | 1 + homeassistant/components/switch/s20.py | 73 ++++++++++++++++++++++++++ requirements_all.txt | 3 ++ 3 files changed, 77 insertions(+) create mode 100644 homeassistant/components/switch/s20.py diff --git a/.coveragerc b/.coveragerc index 5202822b22f..c23238788a4 100644 --- a/.coveragerc +++ b/.coveragerc @@ -99,6 +99,7 @@ omit = homeassistant/components/switch/hikvisioncam.py homeassistant/components/switch/rest.py homeassistant/components/switch/rpi_gpio.py + homeassistant/components/switch/s20.py homeassistant/components/switch/transmission.py homeassistant/components/switch/wemo.py homeassistant/components/thermostat/honeywell.py diff --git a/homeassistant/components/switch/s20.py b/homeassistant/components/switch/s20.py new file mode 100644 index 00000000000..62b36721182 --- /dev/null +++ b/homeassistant/components/switch/s20.py @@ -0,0 +1,73 @@ +""" +homeassistant.components.switch.s20 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Support for Orvibo S20 Wifi Smart Switches. + +For more details about this platform, please refer to the documentation at +https://home-assistant.io/components/switch.s20/ +""" +import logging + +from homeassistant.components.switch import SwitchDevice + +from orvibo.s20 import S20, S20Exception + +DEFAULT_NAME = "Orbivo S20 Switch" +REQUIREMENTS = ['orbivo==1.0.0'] +_LOGGER = logging.getLogger(__name__) + + +# pylint: disable=unused-argument +def setup_platform(hass, config, add_devices_callback, discovery_info=None): + """ Find and return S20 switches. """ + if config.get('host') is None: + _LOGGER.error("Missing required variable: host") + return + try: + s20 = S20(config.get('host')) + add_devices_callback([S20Switch(config.get('name', DEFAULT_NAME), + s20)]) + except S20Exception as exception: + _LOGGER.error(exception) + + +class S20Switch(SwitchDevice): + """ Represents an S20 switch. """ + def __init__(self, name, s20): + self._name = name + self._s20 = s20 + + @property + def should_poll(self): + """ No polling needed. """ + return False + + @property + def name(self): + """ The name of the switch. """ + return self._name + + @property + def is_on(self): + """ True if device is on. """ + try: + return self._s20.on + except S20Exception as exception: + _LOGGER.error(exception) + return False + + def turn_on(self, **kwargs): + """ Turn the device on. """ + try: + self._s20.on = True + except S20Exception as exception: + _LOGGER.error(exception) + self.update_ha_state() + + def turn_off(self, **kwargs): + """ Turn the device off. """ + try: + self._s20.on = False + except S20Exception as exception: + _LOGGER.error(exception) + self.update_ha_state() diff --git a/requirements_all.txt b/requirements_all.txt index 571708ab873..7cb34b22c36 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -156,3 +156,6 @@ evohomeclient==0.2.3 # Pushetta (notify.pushetta) pushetta==1.0.15 + +# Orbivo S10 +orbivo==1.0.0 From 57ec58e255788bbf825b646d1f43748cd14a7141 Mon Sep 17 00:00:00 2001 From: happyleaves Date: Sat, 14 Nov 2015 14:19:47 -0500 Subject: [PATCH 06/30] fixed requirements --- requirements_all.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements_all.txt b/requirements_all.txt index 7cb34b22c36..907c79823bc 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -157,5 +157,5 @@ evohomeclient==0.2.3 # Pushetta (notify.pushetta) pushetta==1.0.15 -# Orbivo S10 -orbivo==1.0.0 +# Orvibo S10 +orvibo==1.0.0 From 70fef3c5b55ad2f28d6f42807fba95a91dbc2768 Mon Sep 17 00:00:00 2001 From: happyleaves Date: Sat, 14 Nov 2015 14:25:53 -0500 Subject: [PATCH 07/30] fixed names --- homeassistant/components/switch/s20.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/switch/s20.py b/homeassistant/components/switch/s20.py index 62b36721182..cefee79201c 100644 --- a/homeassistant/components/switch/s20.py +++ b/homeassistant/components/switch/s20.py @@ -12,8 +12,8 @@ from homeassistant.components.switch import SwitchDevice from orvibo.s20 import S20, S20Exception -DEFAULT_NAME = "Orbivo S20 Switch" -REQUIREMENTS = ['orbivo==1.0.0'] +DEFAULT_NAME = "Orvibo S20 Switch" +REQUIREMENTS = ['orvibo==1.0.0'] _LOGGER = logging.getLogger(__name__) From aabcad59d8d0c47d4261b518fa3c9f46594b9ec5 Mon Sep 17 00:00:00 2001 From: happyleaves Date: Sat, 14 Nov 2015 15:05:22 -0500 Subject: [PATCH 08/30] rename platform to orvibo --- .coveragerc | 2 +- homeassistant/components/switch/{s20.py => orvibo.py} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename homeassistant/components/switch/{s20.py => orvibo.py} (98%) diff --git a/.coveragerc b/.coveragerc index c23238788a4..f19e37d00a1 100644 --- a/.coveragerc +++ b/.coveragerc @@ -84,6 +84,7 @@ omit = homeassistant/components/sensor/glances.py homeassistant/components/sensor/mysensors.py homeassistant/components/sensor/openweathermap.py + homeassistant/components/switch/orvibo.py homeassistant/components/sensor/rest.py homeassistant/components/sensor/rpi_gpio.py homeassistant/components/sensor/sabnzbd.py @@ -99,7 +100,6 @@ omit = homeassistant/components/switch/hikvisioncam.py homeassistant/components/switch/rest.py homeassistant/components/switch/rpi_gpio.py - homeassistant/components/switch/s20.py homeassistant/components/switch/transmission.py homeassistant/components/switch/wemo.py homeassistant/components/thermostat/honeywell.py diff --git a/homeassistant/components/switch/s20.py b/homeassistant/components/switch/orvibo.py similarity index 98% rename from homeassistant/components/switch/s20.py rename to homeassistant/components/switch/orvibo.py index cefee79201c..909f1e89ce5 100644 --- a/homeassistant/components/switch/s20.py +++ b/homeassistant/components/switch/orvibo.py @@ -1,5 +1,5 @@ """ -homeassistant.components.switch.s20 +homeassistant.components.switch.orvibo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Support for Orvibo S20 Wifi Smart Switches. From df264f2ec00dc84a0a7ca637c568a3273f55fd03 Mon Sep 17 00:00:00 2001 From: Nolan Gilley Date: Sat, 14 Nov 2015 15:49:39 -0500 Subject: [PATCH 09/30] remove unnecessary else --- homeassistant/components/camera/__init__.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/homeassistant/components/camera/__init__.py b/homeassistant/components/camera/__init__.py index 77a8eb83ce1..ff5198b7ab1 100644 --- a/homeassistant/components/camera/__init__.py +++ b/homeassistant/components/camera/__init__.py @@ -134,19 +134,18 @@ def setup(hass, config): img_bytes = camera.camera_image() if img_bytes is None: continue - else: - headers_str = '\r\n'.join(( - 'Content-length: {}'.format(len(img_bytes)), - 'Content-type: image/jpeg', - )) + '\r\n\r\n' + headers_str = '\r\n'.join(( + 'Content-length: {}'.format(len(img_bytes)), + 'Content-type: image/jpeg', + )) + '\r\n\r\n' - handler.request.sendall( - bytes(headers_str, 'utf-8') + - img_bytes + - bytes('\r\n', 'utf-8')) + handler.request.sendall( + bytes(headers_str, 'utf-8') + + img_bytes + + bytes('\r\n', 'utf-8')) - handler.request.sendall( - bytes('--jpgboundary\r\n', 'utf-8')) + handler.request.sendall( + bytes('--jpgboundary\r\n', 'utf-8')) except (requests.RequestException, IOError): camera.is_streaming = False From 86b9ae95669d511ee6669d263e43b1d5ead5906a Mon Sep 17 00:00:00 2001 From: happyleaves Date: Sat, 14 Nov 2015 16:14:25 -0500 Subject: [PATCH 10/30] addressed comments --- homeassistant/components/switch/orvibo.py | 32 +++++++++++++---------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/switch/orvibo.py b/homeassistant/components/switch/orvibo.py index 909f1e89ce5..f53b131eabf 100644 --- a/homeassistant/components/switch/orvibo.py +++ b/homeassistant/components/switch/orvibo.py @@ -27,8 +27,8 @@ def setup_platform(hass, config, add_devices_callback, discovery_info=None): s20 = S20(config.get('host')) add_devices_callback([S20Switch(config.get('name', DEFAULT_NAME), s20)]) - except S20Exception as exception: - _LOGGER.error(exception) + except S20Exception: + _LOGGER.exception("S20 couldn't be initialized") class S20Switch(SwitchDevice): @@ -36,11 +36,12 @@ class S20Switch(SwitchDevice): def __init__(self, name, s20): self._name = name self._s20 = s20 + self._state = False @property def should_poll(self): - """ No polling needed. """ - return False + """ Poll. """ + return True @property def name(self): @@ -50,24 +51,27 @@ class S20Switch(SwitchDevice): @property def is_on(self): """ True if device is on. """ + return self._state + + def update(self): + """ Update device state. """ try: - return self._s20.on - except S20Exception as exception: - _LOGGER.error(exception) - return False + self._state = self._s20.on + except S20Exception: + _LOGGER.exception("Error while fetching S20 state") def turn_on(self, **kwargs): """ Turn the device on. """ try: self._s20.on = True - except S20Exception as exception: - _LOGGER.error(exception) - self.update_ha_state() + self._state = True + except S20Exception: + _LOGGER.exception("Error while turning on S20") def turn_off(self, **kwargs): """ Turn the device off. """ try: self._s20.on = False - except S20Exception as exception: - _LOGGER.error(exception) - self.update_ha_state() + self._state = False + except S20Exception: + _LOGGER.exception("Error while turning off S20") From 56c5d345a4cdb4d27fde34835ad42b354075e396 Mon Sep 17 00:00:00 2001 From: Arthur Andersen Date: Tue, 10 Nov 2015 20:04:47 +0100 Subject: [PATCH 11/30] [Zwave] Update HA state on value change --- homeassistant/components/switch/zwave.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/switch/zwave.py b/homeassistant/components/switch/zwave.py index cc022df18c9..7d86605c646 100644 --- a/homeassistant/components/switch/zwave.py +++ b/homeassistant/components/switch/zwave.py @@ -69,12 +69,8 @@ class ZwaveSwitch(SwitchDevice): def turn_on(self, **kwargs): """ Turn the device on. """ - if self._node.set_switch(self._value.value_id, True): - self._state = True - self.update_ha_state() + self._node.set_switch(self._value.value_id, True) def turn_off(self, **kwargs): """ Turn the device off. """ - if self._node.set_switch(self._value.value_id, False): - self._state = False - self.update_ha_state() + self._node.set_switch(self._value.value_id, False) From e2c530b85dcc743b3a134ba890c16715a46a0049 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 14 Nov 2015 15:36:27 -0800 Subject: [PATCH 12/30] Script: new attribute if can cancel --- homeassistant/components/script.py | 7 ++++++- tests/components/test_script.py | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/script.py b/homeassistant/components/script.py index 3feaff3f903..2b18a5143fd 100644 --- a/homeassistant/components/script.py +++ b/homeassistant/components/script.py @@ -37,6 +37,7 @@ CONF_EVENT_DATA = "event_data" CONF_DELAY = "delay" ATTR_LAST_ACTION = 'last_action' +ATTR_CAN_CANCEL = 'can_cancel' _LOGGER = logging.getLogger(__name__) @@ -113,6 +114,8 @@ class Script(ToggleEntity): self._cur = -1 self._last_action = None self._listener = None + self._can_cancel = not any(CONF_DELAY in action for action + in self.sequence) @property def should_poll(self): @@ -126,7 +129,9 @@ class Script(ToggleEntity): @property def state_attributes(self): """ Returns the state attributes. """ - attrs = {} + attrs = { + ATTR_CAN_CANCEL: self._can_cancel + } if self._last_action: attrs[ATTR_LAST_ACTION] = self._last_action diff --git a/tests/components/test_script.py b/tests/components/test_script.py index e4abed18ec9..50cfba55ec5 100644 --- a/tests/components/test_script.py +++ b/tests/components/test_script.py @@ -88,6 +88,8 @@ class TestScript(unittest.TestCase): self.assertEqual(1, len(calls)) self.assertEqual('world', calls[0].data.get('hello')) + self.assertEqual( + True, self.hass.states.get(ENTITY_ID).attributes.get('can_cancel')) def test_calling_service_old(self): calls = [] @@ -172,6 +174,9 @@ class TestScript(unittest.TestCase): self.hass.pool.block_till_done() self.assertTrue(script.is_on(self.hass, ENTITY_ID)) + self.assertEqual( + False, + self.hass.states.get(ENTITY_ID).attributes.get('can_cancel')) self.assertEqual( event, From 88f3a5a50ad18ba0c70d749d9f9d8b4daafdfac1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 15 Nov 2015 00:51:12 -0800 Subject: [PATCH 13/30] Update to new version frontend --- homeassistant/components/frontend/version.py | 2 +- .../components/frontend/www_static/frontend.html | 15 +++++++++------ .../frontend/www_static/home-assistant-polymer | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index 924e46ae814..1240aeac93b 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -1,2 +1,2 @@ """ DO NOT MODIFY. Auto-generated by build_frontend script """ -VERSION = "75532015507fd544f46081ec0eeb5004" +VERSION = "44fc40d6c32d1f5ff94c590d17f9cc2e" diff --git a/homeassistant/components/frontend/www_static/frontend.html b/homeassistant/components/frontend/www_static/frontend.html index 5ae7ce0b002..7dd95eaba3e 100644 --- a/homeassistant/components/frontend/www_static/frontend.html +++ b/homeassistant/components/frontend/www_static/frontend.html @@ -3784,6 +3784,9 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN }