From 9e86f0498bfb37a0f9a6ceb24c5b137dfd0f28da Mon Sep 17 00:00:00 2001 From: tadly Date: Sun, 16 Sep 2018 22:53:25 +0200 Subject: [PATCH 01/38] Upgrade zeroconf to 0.21.0 (#16647) --- homeassistant/components/zeroconf.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/zeroconf.py b/homeassistant/components/zeroconf.py index 675c3a65e5f..1f20ebad086 100644 --- a/homeassistant/components/zeroconf.py +++ b/homeassistant/components/zeroconf.py @@ -12,7 +12,7 @@ import voluptuous as vol from homeassistant import util from homeassistant.const import (EVENT_HOMEASSISTANT_STOP, __version__) -REQUIREMENTS = ['zeroconf==0.20.0'] +REQUIREMENTS = ['zeroconf==0.21.0'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 1297d421b67..29036cc3dbd 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1523,7 +1523,7 @@ youtube_dl==2018.09.10 zengge==0.2 # homeassistant.components.zeroconf -zeroconf==0.20.0 +zeroconf==0.21.0 # homeassistant.components.climate.zhong_hong zhong_hong_hvac==1.0.9 From 9dbac9b03341a21aa613e43c107153513d956380 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 18 Sep 2018 15:49:54 +0200 Subject: [PATCH 02/38] Upgrade zeroconf to 0.21.1 (#16687) --- homeassistant/components/zeroconf.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/zeroconf.py b/homeassistant/components/zeroconf.py index 1f20ebad086..d63b532ccbb 100644 --- a/homeassistant/components/zeroconf.py +++ b/homeassistant/components/zeroconf.py @@ -12,7 +12,7 @@ import voluptuous as vol from homeassistant import util from homeassistant.const import (EVENT_HOMEASSISTANT_STOP, __version__) -REQUIREMENTS = ['zeroconf==0.21.0'] +REQUIREMENTS = ['zeroconf==0.21.1'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 29036cc3dbd..b5a4b5e61c7 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1523,7 +1523,7 @@ youtube_dl==2018.09.10 zengge==0.2 # homeassistant.components.zeroconf -zeroconf==0.21.0 +zeroconf==0.21.1 # homeassistant.components.climate.zhong_hong zhong_hong_hvac==1.0.9 From 03d93bea34093a2e9a02fec19f35d6889bebdfcf Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 20 Sep 2018 09:38:35 +0200 Subject: [PATCH 03/38] Upgrade zeroconf to 0.21.2 (#16730) --- homeassistant/components/zeroconf.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/zeroconf.py b/homeassistant/components/zeroconf.py index d63b532ccbb..f3917078f34 100644 --- a/homeassistant/components/zeroconf.py +++ b/homeassistant/components/zeroconf.py @@ -12,7 +12,7 @@ import voluptuous as vol from homeassistant import util from homeassistant.const import (EVENT_HOMEASSISTANT_STOP, __version__) -REQUIREMENTS = ['zeroconf==0.21.1'] +REQUIREMENTS = ['zeroconf==0.21.2'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index b5a4b5e61c7..4102c58022c 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1523,7 +1523,7 @@ youtube_dl==2018.09.10 zengge==0.2 # homeassistant.components.zeroconf -zeroconf==0.21.1 +zeroconf==0.21.2 # homeassistant.components.climate.zhong_hong zhong_hong_hvac==1.0.9 From 44a98fb77ac440955aba217a7525f9cd7c3a8f3d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 20 Sep 2018 20:26:25 +0200 Subject: [PATCH 04/38] Bumped version to 0.78.2 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 4719e934109..2907aed5bd5 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 78 -PATCH_VERSION = '1' +PATCH_VERSION = '2' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 5, 3) From 5ab580ab34de870b7d81e345a726201729caae07 Mon Sep 17 00:00:00 2001 From: edif30 Date: Fri, 21 Sep 2018 15:22:27 -0400 Subject: [PATCH 05/38] Bump gtts-token to 1.1.2 (#16775) * bump gtts-token to 1.1.2 * bump gtts-token to 1.1.2 * bump gtts-token to 1.1.2 --- homeassistant/components/tts/google.py | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/tts/google.py b/homeassistant/components/tts/google.py index cb05795c445..35a07ed8d22 100644 --- a/homeassistant/components/tts/google.py +++ b/homeassistant/components/tts/google.py @@ -17,7 +17,7 @@ import yarl from homeassistant.components.tts import CONF_LANG, PLATFORM_SCHEMA, Provider from homeassistant.helpers.aiohttp_client import async_get_clientsession -REQUIREMENTS = ['gTTS-token==1.1.1'] +REQUIREMENTS = ['gTTS-token==1.1.2'] _LOGGER = logging.getLogger(__name__) diff --git a/requirements_all.txt b/requirements_all.txt index 4102c58022c..5776a7c1944 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -383,7 +383,7 @@ freesms==0.1.2 fritzhome==1.0.4 # homeassistant.components.tts.google -gTTS-token==1.1.1 +gTTS-token==1.1.2 # homeassistant.components.sensor.gearbest gearbest_parser==1.0.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index e1276da644c..e6d64857c4c 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -66,7 +66,7 @@ feedparser==5.2.1 foobot_async==0.3.1 # homeassistant.components.tts.google -gTTS-token==1.1.1 +gTTS-token==1.1.2 # homeassistant.components.ffmpeg ha-ffmpeg==1.9 From 5eda5f2f7b57747d176d0be0299980ae8b51b487 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 22 Sep 2018 11:18:54 +0200 Subject: [PATCH 06/38] Bumped version to 0.78.3 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 2907aed5bd5..e61d406b1fb 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 78 -PATCH_VERSION = '2' +PATCH_VERSION = '3' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 5, 3) From 4c32ad3b48313f1720b10f0d3f7f0f6392953a4a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 25 Sep 2018 07:52:10 +0200 Subject: [PATCH 07/38] Don't warn but info when on dev mode (#16831) --- homeassistant/components/updater.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/updater.py b/homeassistant/components/updater.py index 0cb22bd98dc..4e64e3be2e6 100644 --- a/homeassistant/components/updater.py +++ b/homeassistant/components/updater.py @@ -76,7 +76,7 @@ async def async_setup(hass, config): """Set up the updater component.""" if 'dev' in current_version: # This component only makes sense in release versions - _LOGGER.warning("Running on 'dev', only analytics will be submitted") + _LOGGER.info("Running on 'dev', only analytics will be submitted") config = config.get(DOMAIN, {}) if config.get(CONF_REPORTING): From 0431e38aa2bd758cbbc64fe8b22fb80f99c53c62 Mon Sep 17 00:00:00 2001 From: Rohan Kapoor Date: Mon, 24 Sep 2018 22:53:35 -0700 Subject: [PATCH 08/38] Bump zm-py to 0.0.3 (#16835) --- homeassistant/components/zoneminder.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/zoneminder.py b/homeassistant/components/zoneminder.py index 5cfd324448b..53d6d8b2536 100644 --- a/homeassistant/components/zoneminder.py +++ b/homeassistant/components/zoneminder.py @@ -15,7 +15,7 @@ import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) -REQUIREMENTS = ['zm-py==0.0.2'] +REQUIREMENTS = ['zm-py==0.0.3'] CONF_PATH_ZMS = 'path_zms' diff --git a/requirements_all.txt b/requirements_all.txt index b9550d032ab..e009f2e21a0 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1567,4 +1567,4 @@ zigpy-xbee==0.1.1 zigpy==0.2.0 # homeassistant.components.zoneminder -zm-py==0.0.2 +zm-py==0.0.3 From 356040d50602695896a2a056128201a2abbb5a6f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 25 Sep 2018 11:57:32 +0200 Subject: [PATCH 09/38] Support old tradfri config format (#16841) --- .../components/tradfri/config_flow.py | 4 ++- tests/components/tradfri/test_config_flow.py | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/tradfri/config_flow.py b/homeassistant/components/tradfri/config_flow.py index 4de43c79e0c..8d8f9af79e6 100644 --- a/homeassistant/components/tradfri/config_flow.py +++ b/homeassistant/components/tradfri/config_flow.py @@ -95,7 +95,9 @@ class FlowHandler(config_entries.ConfigFlow): try: data = await get_gateway_info( - self.hass, user_input['host'], user_input['identity'], + self.hass, user_input['host'], + # Old config format had a fixed identity + user_input.get('identity', 'homeassistant'), user_input['key']) data[CONF_IMPORT_GROUPS] = user_input[CONF_IMPORT_GROUPS] diff --git a/tests/components/tradfri/test_config_flow.py b/tests/components/tradfri/test_config_flow.py index 4650fb5d9bc..580e9580d76 100644 --- a/tests/components/tradfri/test_config_flow.py +++ b/tests/components/tradfri/test_config_flow.py @@ -154,3 +154,34 @@ async def test_import_connection(hass, mock_gateway_info, mock_entry_setup): assert len(mock_gateway_info.mock_calls) == 1 assert len(mock_entry_setup.mock_calls) == 1 + + +async def test_import_connection_legacy(hass, mock_gateway_info, + mock_entry_setup): + """Test a connection via import.""" + mock_gateway_info.side_effect = \ + lambda hass, host, identity, key: mock_coro({ + 'host': host, + 'identity': identity, + 'key': key, + 'gateway_id': 'mock-gateway' + }) + + result = await hass.config_entries.flow.async_init( + 'tradfri', context={'source': 'import'}, data={ + 'host': '123.123.123.123', + 'key': 'mock-key', + 'import_groups': True + }) + + assert result['type'] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY + assert result['result'].data == { + 'host': '123.123.123.123', + 'gateway_id': 'mock-gateway', + 'identity': 'homeassistant', + 'key': 'mock-key', + 'import_groups': True + } + + assert len(mock_gateway_info.mock_calls) == 1 + assert len(mock_entry_setup.mock_calls) == 1 From b9043ef7a788c469a7d63be1ac33fb1743b8580d Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 25 Sep 2018 12:22:14 +0200 Subject: [PATCH 10/38] Allow MQTT discovery (#16842) --- .../components/mqtt/.translations/en.json | 1 + homeassistant/components/mqtt/__init__.py | 35 ++++++++++--------- homeassistant/components/mqtt/config_flow.py | 3 +- homeassistant/components/mqtt/const.py | 2 ++ homeassistant/components/mqtt/strings.json | 3 +- tests/components/mqtt/test_config_flow.py | 5 +++ 6 files changed, 31 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/mqtt/.translations/en.json b/homeassistant/components/mqtt/.translations/en.json index 1f0ed341bb6..c0b83a1323f 100644 --- a/homeassistant/components/mqtt/.translations/en.json +++ b/homeassistant/components/mqtt/.translations/en.json @@ -10,6 +10,7 @@ "broker": { "data": { "broker": "Broker", + "discovery": "Enable discovery", "password": "Password", "port": "Port", "username": "Username" diff --git a/homeassistant/components/mqtt/__init__.py b/homeassistant/components/mqtt/__init__.py index abc240a65cb..856d5d01894 100644 --- a/homeassistant/components/mqtt/__init__.py +++ b/homeassistant/components/mqtt/__init__.py @@ -36,7 +36,7 @@ from homeassistant.util.async_ import ( # Loading the config flow file will register the flow from . import config_flow # noqa # pylint: disable=unused-import -from .const import CONF_BROKER +from .const import CONF_BROKER, CONF_DISCOVERY, DEFAULT_DISCOVERY from .server import HBMQTT_CONFIG_SCHEMA REQUIREMENTS = ['paho-mqtt==1.4.0'] @@ -47,13 +47,13 @@ DOMAIN = 'mqtt' DATA_MQTT = 'mqtt' DATA_MQTT_CONFIG = 'mqtt_config' +DATA_MQTT_HASS_CONFIG = 'mqtt_hass_config' SERVICE_PUBLISH = 'publish' CONF_EMBEDDED = 'embedded' CONF_CLIENT_ID = 'client_id' -CONF_DISCOVERY = 'discovery' CONF_DISCOVERY_PREFIX = 'discovery_prefix' CONF_KEEPALIVE = 'keepalive' CONF_CERTIFICATE = 'certificate' @@ -81,7 +81,6 @@ DEFAULT_KEEPALIVE = 60 DEFAULT_QOS = 0 DEFAULT_RETAIN = False DEFAULT_PROTOCOL = PROTOCOL_311 -DEFAULT_DISCOVERY = False DEFAULT_DISCOVERY_PREFIX = 'homeassistant' DEFAULT_TLS_PROTOCOL = 'auto' DEFAULT_PAYLOAD_AVAILABLE = 'online' @@ -321,23 +320,21 @@ async def _async_setup_server(hass: HomeAssistantType, config: ConfigType): return broker_config -async def _async_setup_discovery(hass: HomeAssistantType, - config: ConfigType) -> bool: +async def _async_setup_discovery(hass: HomeAssistantType, conf: ConfigType, + hass_config: ConfigType) -> bool: """Try to start the discovery of MQTT devices. This method is a coroutine. """ - conf = config.get(DOMAIN, {}) # type: ConfigType - discovery = await async_prepare_setup_platform( - hass, config, DOMAIN, 'discovery') + hass, hass_config, DOMAIN, 'discovery') if discovery is None: _LOGGER.error("Unable to load MQTT discovery") return False success = await discovery.async_start( - hass, conf[CONF_DISCOVERY_PREFIX], config) # type: bool + hass, conf[CONF_DISCOVERY_PREFIX], hass_config) # type: bool return success @@ -346,6 +343,11 @@ async def async_setup(hass: HomeAssistantType, config: ConfigType) -> bool: """Start the MQTT protocol service.""" conf = config.get(DOMAIN) # type: Optional[ConfigType] + # We need this because discovery can cause components to be set up and + # otherwise it will not load the users config. + # This needs a better solution. + hass.data[DATA_MQTT_HASS_CONFIG] = config + if conf is None: # If we have a config entry, setup is done by that config entry. # If there is no config entry, this should fail. @@ -390,13 +392,6 @@ async def async_setup(hass: HomeAssistantType, config: ConfigType) -> bool: data={} )) - if conf.get(CONF_DISCOVERY): - async def async_setup_discovery(event): - await _async_setup_discovery(hass, config) - - hass.bus.async_listen_once( - EVENT_HOMEASSISTANT_START, async_setup_discovery) - return True @@ -528,6 +523,14 @@ async def async_setup_entry(hass, entry): DOMAIN, SERVICE_PUBLISH, async_publish_service, schema=MQTT_PUBLISH_SCHEMA) + if conf.get(CONF_DISCOVERY): + async def async_setup_discovery(event): + await _async_setup_discovery( + hass, conf, hass.data[DATA_MQTT_HASS_CONFIG]) + + hass.bus.async_listen_once( + EVENT_HOMEASSISTANT_START, async_setup_discovery) + return True diff --git a/homeassistant/components/mqtt/config_flow.py b/homeassistant/components/mqtt/config_flow.py index a8987a19742..22072857b03 100644 --- a/homeassistant/components/mqtt/config_flow.py +++ b/homeassistant/components/mqtt/config_flow.py @@ -7,7 +7,7 @@ import voluptuous as vol from homeassistant import config_entries from homeassistant.const import CONF_PASSWORD, CONF_PORT, CONF_USERNAME -from .const import CONF_BROKER +from .const import CONF_BROKER, CONF_DISCOVERY, DEFAULT_DISCOVERY @config_entries.HANDLERS.register('mqtt') @@ -44,6 +44,7 @@ class FlowHandler(config_entries.ConfigFlow): fields[vol.Required(CONF_PORT, default=1883)] = vol.Coerce(int) fields[vol.Optional(CONF_USERNAME)] = str fields[vol.Optional(CONF_PASSWORD)] = str + fields[vol.Optional(CONF_DISCOVERY, default=DEFAULT_DISCOVERY)] = bool return self.async_show_form( step_id='broker', data_schema=vol.Schema(fields), errors=errors) diff --git a/homeassistant/components/mqtt/const.py b/homeassistant/components/mqtt/const.py index 8f9d938cf88..3c22001f91c 100644 --- a/homeassistant/components/mqtt/const.py +++ b/homeassistant/components/mqtt/const.py @@ -1,2 +1,4 @@ """Constants used by multiple MQTT modules.""" CONF_BROKER = 'broker' +CONF_DISCOVERY = 'discovery' +DEFAULT_DISCOVERY = False diff --git a/homeassistant/components/mqtt/strings.json b/homeassistant/components/mqtt/strings.json index a38983125ae..0a2cb255cc4 100644 --- a/homeassistant/components/mqtt/strings.json +++ b/homeassistant/components/mqtt/strings.json @@ -9,7 +9,8 @@ "broker": "Broker", "port": "Port", "username": "Username", - "password": "Password" + "password": "Password", + "discovery": "Enable discovery" } } }, diff --git a/tests/components/mqtt/test_config_flow.py b/tests/components/mqtt/test_config_flow.py index 4a4d783940f..9f6be60c68b 100644 --- a/tests/components/mqtt/test_config_flow.py +++ b/tests/components/mqtt/test_config_flow.py @@ -41,6 +41,11 @@ async def test_user_connection_works(hass, mock_try_connection, ) assert result['type'] == 'create_entry' + assert result['result'].data == { + 'broker': '127.0.0.1', + 'port': 1883, + 'discovery': False, + } # Check we tried the connection assert len(mock_try_connection.mock_calls) == 1 # Check config entry got setup From 345c886dec98bc6d104a975c7fdb871d19543e06 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 25 Sep 2018 13:47:12 +0200 Subject: [PATCH 11/38] Add unique ID and device info to Nest camera (#16846) * Add unique ID and device info to Nest camera * Remove sw version --- homeassistant/components/camera/nest.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/homeassistant/components/camera/nest.py b/homeassistant/components/camera/nest.py index e1d26371984..158123989c0 100644 --- a/homeassistant/components/camera/nest.py +++ b/homeassistant/components/camera/nest.py @@ -62,6 +62,23 @@ class NestCamera(Camera): """Return the name of the nest, if any.""" return self._name + @property + def unique_id(self): + """Return the serial number.""" + return self.device.device_id + + @property + def device_info(self): + """Return information about the device.""" + return { + 'identifiers': { + (nest.DOMAIN, self.device.device_id) + }, + 'name': self.device.name_long, + 'manufacturer': 'Nest Labs', + 'model': "Camera", + } + @property def should_poll(self): """Nest camera should poll periodically.""" From 61a2d093427beb611eee54afaac529591b8e8988 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 25 Sep 2018 15:39:42 +0200 Subject: [PATCH 12/38] Bumped version to 0.79.0b1 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 307cbf9fe66..862b1d97a76 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 79 -PATCH_VERSION = '0b0' +PATCH_VERSION = '0b1' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 5, 3) From e375b639020547abe7a8a1f423e0dcef53ed8d2a Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 26 Sep 2018 11:19:34 +0200 Subject: [PATCH 13/38] Update frontend to 20180926.0 --- homeassistant/components/frontend/__init__.py | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/frontend/__init__.py b/homeassistant/components/frontend/__init__.py index d3d25255508..66232f2155b 100644 --- a/homeassistant/components/frontend/__init__.py +++ b/homeassistant/components/frontend/__init__.py @@ -26,7 +26,7 @@ from homeassistant.helpers.translation import async_get_translations from homeassistant.loader import bind_hass from homeassistant.util.yaml import load_yaml -REQUIREMENTS = ['home-assistant-frontend==20180924.0'] +REQUIREMENTS = ['home-assistant-frontend==20180926.0'] DOMAIN = 'frontend' DEPENDENCIES = ['api', 'websocket_api', 'http', 'system_log', diff --git a/requirements_all.txt b/requirements_all.txt index e009f2e21a0..e79feca7fef 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -454,7 +454,7 @@ hole==0.3.0 holidays==0.9.7 # homeassistant.components.frontend -home-assistant-frontend==20180924.0 +home-assistant-frontend==20180926.0 # homeassistant.components.homekit_controller # homekit==0.10 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 44baabc7f5d..691fc641607 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -87,7 +87,7 @@ hdate==0.6.3 holidays==0.9.7 # homeassistant.components.frontend -home-assistant-frontend==20180924.0 +home-assistant-frontend==20180926.0 # homeassistant.components.homematicip_cloud homematicip==0.9.8 From 3aaf619fc337e3c438314abd349f3bb4d40a41f2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 26 Sep 2018 11:19:50 +0200 Subject: [PATCH 14/38] Update translations --- .../components/auth/.translations/ca.json | 21 ++++++++++- .../components/auth/.translations/de.json | 19 +++++++++- .../components/auth/.translations/fr.json | 7 ++++ .../components/auth/.translations/he.json | 35 +++++++++++++++++++ .../components/auth/.translations/ko.json | 19 ++++++++++ .../components/auth/.translations/lb.json | 19 ++++++++++ .../components/auth/.translations/pl.json | 18 ++++++++++ .../components/auth/.translations/ru.json | 19 ++++++++++ .../components/auth/.translations/sl.json | 19 ++++++++++ .../components/auth/.translations/sv.json | 14 ++++++++ .../auth/.translations/zh-Hans.json | 19 ++++++++++ .../auth/.translations/zh-Hant.json | 19 ++++++++++ .../components/cast/.translations/de.json | 2 +- .../components/deconz/.translations/he.json | 3 +- .../components/hangouts/.translations/he.json | 29 +++++++++++++++ .../components/hangouts/.translations/pl.json | 2 ++ .../homematicip_cloud/.translations/de.json | 10 +++--- .../homematicip_cloud/.translations/he.json | 1 + .../components/ios/.translations/he.json | 14 ++++++++ .../components/ios/.translations/sl.json | 14 ++++++++ .../components/ios/.translations/sv.json | 11 ++++++ .../components/mqtt/.translations/ca.json | 1 + .../components/mqtt/.translations/de.json | 6 ++++ .../components/mqtt/.translations/fr.json | 1 + .../components/mqtt/.translations/he.json | 24 +++++++++++++ .../components/mqtt/.translations/lb.json | 1 + .../components/mqtt/.translations/pl.json | 1 + .../components/mqtt/.translations/ru.json | 1 + .../components/mqtt/.translations/sl.json | 24 +++++++++++++ .../components/mqtt/.translations/sv.json | 13 +++++++ .../mqtt/.translations/zh-Hans.json | 1 + .../mqtt/.translations/zh-Hant.json | 1 + .../components/nest/.translations/de.json | 2 +- .../components/openuv/.translations/de.json | 3 +- .../components/openuv/.translations/he.json | 20 +++++++++++ .../sensor/.translations/moon.he.json | 6 +++- .../components/sonos/.translations/de.json | 2 +- .../components/tradfri/.translations/de.json | 22 ++++++++++++ .../components/tradfri/.translations/he.json | 23 ++++++++++++ .../components/tradfri/.translations/pl.json | 22 ++++++++++++ .../components/tradfri/.translations/sl.json | 23 ++++++++++++ .../components/tradfri/.translations/sv.json | 20 +++++++++++ .../tradfri/.translations/zh-Hans.json | 13 ++++++- 43 files changed, 530 insertions(+), 14 deletions(-) create mode 100644 homeassistant/components/auth/.translations/he.json create mode 100644 homeassistant/components/hangouts/.translations/he.json create mode 100644 homeassistant/components/ios/.translations/he.json create mode 100644 homeassistant/components/ios/.translations/sl.json create mode 100644 homeassistant/components/ios/.translations/sv.json create mode 100644 homeassistant/components/mqtt/.translations/he.json create mode 100644 homeassistant/components/mqtt/.translations/sl.json create mode 100644 homeassistant/components/mqtt/.translations/sv.json create mode 100644 homeassistant/components/openuv/.translations/he.json create mode 100644 homeassistant/components/tradfri/.translations/de.json create mode 100644 homeassistant/components/tradfri/.translations/he.json create mode 100644 homeassistant/components/tradfri/.translations/pl.json create mode 100644 homeassistant/components/tradfri/.translations/sl.json create mode 100644 homeassistant/components/tradfri/.translations/sv.json diff --git a/homeassistant/components/auth/.translations/ca.json b/homeassistant/components/auth/.translations/ca.json index 1b3b25dbcff..f4318a0eb21 100644 --- a/homeassistant/components/auth/.translations/ca.json +++ b/homeassistant/components/auth/.translations/ca.json @@ -1,8 +1,27 @@ { "mfa_setup": { + "notify": { + "abort": { + "no_available_service": "No hi ha serveis de notificaci\u00f3 disponibles." + }, + "error": { + "invalid_code": "Codi inv\u00e0lid, si us plau torni a provar-ho." + }, + "step": { + "init": { + "description": "Seleccioneu un dels serveis de notificaci\u00f3:", + "title": "Configureu una contrasenya d'un sol \u00fas a trav\u00e9s del component de notificacions" + }, + "setup": { + "description": "**notify.{notify_service}** ha enviat una contrasenya d'un sol \u00fas. Introdu\u00efu-la a continuaci\u00f3:", + "title": "Verifiqueu la configuraci\u00f3" + } + }, + "title": "Contrasenya d'un sol \u00fas del servei de notificacions" + }, "totp": { "error": { - "invalid_code": "Codi no v\u00e0lid, si us plau torni a provar-ho. Si obteniu aquest error repetidament, assegureu-vos que la data i hora de Home Assistant sigui correcta i precisa." + "invalid_code": "Codi inv\u00e0lid, si us plau torni a provar-ho. Si obteniu aquest error repetidament, assegureu-vos que la data i hora de Home Assistant sigui correcta i precisa." }, "step": { "init": { diff --git a/homeassistant/components/auth/.translations/de.json b/homeassistant/components/auth/.translations/de.json index 67f948e8340..2abc64f5f5d 100644 --- a/homeassistant/components/auth/.translations/de.json +++ b/homeassistant/components/auth/.translations/de.json @@ -1,8 +1,25 @@ { "mfa_setup": { + "notify": { + "abort": { + "no_available_service": "Keine Benachrichtigungsdienste verf\u00fcgbar." + }, + "error": { + "invalid_code": "Ung\u00fcltiger Code, bitte versuche es erneut." + }, + "step": { + "init": { + "description": "Bitte w\u00e4hle einen der Benachrichtigungsdienste:" + }, + "setup": { + "description": "Ein Einmal-Passwort wurde per ** notify gesendet. {notify_service} **. Bitte gebe es unten ein:", + "title": "\u00dcberpr\u00fcfe das Setup" + } + } + }, "totp": { "error": { - "invalid_code": "Ung\u00fcltiger Code, bitte versuche es erneut. Wenn Sie diesen Fehler regelm\u00e4\u00dfig erhalten, stelle sicher, dass die Uhr deines Home Assistant-Systems korrekt ist." + "invalid_code": "Ung\u00fcltiger Code, bitte versuche es erneut. Wenn du diesen Fehler regelm\u00e4\u00dfig erhalten, stelle sicher, dass die Uhr deines Home Assistant-Systems korrekt ist." }, "step": { "init": { diff --git a/homeassistant/components/auth/.translations/fr.json b/homeassistant/components/auth/.translations/fr.json index b8d10dc89d0..85540314af0 100644 --- a/homeassistant/components/auth/.translations/fr.json +++ b/homeassistant/components/auth/.translations/fr.json @@ -1,5 +1,12 @@ { "mfa_setup": { + "notify": { + "step": { + "setup": { + "description": "Un mot de passe unique a \u00e9t\u00e9 envoy\u00e9 par **notify.{notify_service}**. Veuillez le saisir ci-dessous :" + } + } + }, "totp": { "error": { "invalid_code": "Code invalide. Veuillez essayez \u00e0 nouveau. Si cette erreur persiste, assurez-vous que l'horloge de votre syst\u00e8me Home Assistant est correcte." diff --git a/homeassistant/components/auth/.translations/he.json b/homeassistant/components/auth/.translations/he.json new file mode 100644 index 00000000000..bc1826d4d79 --- /dev/null +++ b/homeassistant/components/auth/.translations/he.json @@ -0,0 +1,35 @@ +{ + "mfa_setup": { + "notify": { + "abort": { + "no_available_service": "\u05d0\u05d9\u05df \u05e9\u05d9\u05e8\u05d5\u05ea\u05d9 notify \u05d6\u05de\u05d9\u05e0\u05d9\u05dd." + }, + "error": { + "invalid_code": "\u05e7\u05d5\u05d3 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9, \u05d0\u05e0\u05d0 \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1." + }, + "step": { + "init": { + "description": "\u05d1\u05d7\u05e8 \u05d0\u05ea \u05d0\u05d7\u05d3 \u05de\u05e9\u05e8\u05d5\u05ea\u05d9 notify", + "title": "\u05d4\u05d2\u05d3\u05e8 \u05e1\u05d9\u05e1\u05de\u05d4 \u05d7\u05d3 \u05e4\u05e2\u05de\u05d9\u05ea \u05d4\u05e0\u05e9\u05dc\u05d7\u05ea \u05e2\u05dc \u05d9\u05d3\u05d9 \u05e8\u05db\u05d9\u05d1 notify" + }, + "setup": { + "description": "\u05e1\u05d9\u05e1\u05de\u05d4 \u05d7\u05d3 \u05e4\u05e2\u05de\u05d9\u05ea \u05e0\u05e9\u05dc\u05d7\u05d4 \u05e2\u05dc \u05d9\u05d3\u05d9 **{notify_service}**. \u05d4\u05d6\u05df \u05d0\u05d5\u05ea\u05d4 \u05dc\u05de\u05d8\u05d4:", + "title": "\u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05d4\u05ea\u05e7\u05e0\u05d4" + } + }, + "title": "\u05dc\u05d4\u05d5\u05d3\u05d9\u05e2 \u200b\u200b\u05e2\u05dc \u05e1\u05d9\u05e1\u05de\u05d4 \u05d7\u05d3 \u05e4\u05e2\u05de\u05d9\u05ea" + }, + "totp": { + "error": { + "invalid_code": "\u05e7\u05d5\u05d3 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9, \u05d0\u05e0\u05d0 \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1. \u05d0\u05dd \u05d0\u05ea\u05d4 \u05de\u05e7\u05d1\u05dc \u05d0\u05ea \u05d4\u05e9\u05d2\u05d9\u05d0\u05d4 \u05d4\u05d6\u05d5 \u05d1\u05d0\u05d5\u05e4\u05df \u05e2\u05e7\u05d1\u05d9, \u05d5\u05d3\u05d0 \u05e9\u05d4\u05e9\u05e2\u05d5\u05df \u05e9\u05dc \u05de\u05e2\u05e8\u05db\u05ea \u05d4 - Home Assistant \u05e9\u05dc\u05da \u05de\u05d3\u05d5\u05d9\u05e7." + }, + "step": { + "init": { + "description": "\u05db\u05d3\u05d9 \u05dc\u05d4\u05e4\u05e2\u05d9\u05dc \u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05e1\u05d9\u05e1\u05de\u05d0\u05d5\u05ea \u05d7\u05d3 \u05e4\u05e2\u05de\u05d9\u05d5\u05ea \u05de\u05d1\u05d5\u05e1\u05e1\u05d5\u05ea \u05d6\u05de\u05df, \u05e1\u05e8\u05d5\u05e7 \u05d0\u05ea \u05e7\u05d5\u05d3 QR \u05e2\u05dd \u05d9\u05d9\u05e9\u05d5\u05dd \u05d4\u05d0\u05d9\u05de\u05d5\u05ea \u05e9\u05dc\u05da. \u05d0\u05dd \u05d0\u05d9\u05df \u05dc\u05da \u05d7\u05e9\u05d1\u05d5\u05df \u05db\u05d6\u05d4, \u05d0\u05e0\u05d5 \u05de\u05de\u05dc\u05d9\u05e6\u05d9\u05dd \u05e2\u05dc [Google Authenticator] (https://support.google.com/accounts/answer/1066447) \u05d0\u05d5 [Authy] (https://authy.com/). \n\n {qr_code} \n \n \u05dc\u05d0\u05d7\u05e8 \u05e1\u05e8\u05d9\u05e7\u05ea \u05d4\u05e7\u05d5\u05d3, \u05d4\u05d6\u05df \u05d0\u05ea \u05d4\u05e7\u05d5\u05d3 \u05d1\u05df \u05e9\u05e9 \u05d4\u05e1\u05e4\u05e8\u05d5\u05ea \u05de\u05d4\u05d0\u05e4\u05dc\u05d9\u05e7\u05e6\u05d9\u05d4 \u05e9\u05dc\u05da \u05db\u05d3\u05d9 \u05dc\u05d0\u05de\u05ea \u05d0\u05ea \u05d4\u05d4\u05d2\u05d3\u05e8\u05d4. \u05d0\u05dd \u05d0\u05ea\u05d4 \u05e0\u05ea\u05e7\u05dc \u05d1\u05d1\u05e2\u05d9\u05d5\u05ea \u05d1\u05e1\u05e8\u05d9\u05e7\u05ea \u05e7\u05d5\u05d3 QR, \u05d1\u05e6\u05e2 \u05d4\u05d2\u05d3\u05e8\u05d4 \u05d9\u05d3\u05e0\u05d9\u05ea \u05e2\u05dd \u05e7\u05d5\u05d3 **`{code}`**.", + "title": "\u05d4\u05d2\u05d3\u05e8 \u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea TOTP" + } + }, + "title": "TOTP" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/auth/.translations/ko.json b/homeassistant/components/auth/.translations/ko.json index 17fb5c56f57..e1f26e88bc7 100644 --- a/homeassistant/components/auth/.translations/ko.json +++ b/homeassistant/components/auth/.translations/ko.json @@ -1,5 +1,24 @@ { "mfa_setup": { + "notify": { + "abort": { + "no_available_service": "\uc0ac\uc6a9 \uac00\ub2a5\ud55c \uc54c\ub9bc \uc11c\ube44\uc2a4\uac00 \uc5c6\uc2b5\ub2c8\ub2e4." + }, + "error": { + "invalid_code": "\uc798\ubabb\ub41c \ucf54\ub4dc\uc785\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694." + }, + "step": { + "init": { + "description": "\uc54c\ub9bc \uc11c\ube44\uc2a4 \uc911 \ud558\ub098\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694:", + "title": "\uc54c\ub9bc \uad6c\uc131\uc694\uc18c\uac00 \uc81c\uacf5\ud558\ub294 \uc77c\ud68c\uc6a9 \ube44\ubc00\ubc88\ud638 \uc124\uc815" + }, + "setup": { + "description": "**notify.{notify_service}** \uc5d0\uc11c \uc77c\ud68c\uc6a9 \ube44\ubc00\ubc88\ud638\ub97c \ubcf4\ub0c8\uc2b5\ub2c8\ub2e4. \uc544\ub798\uc758 \uacf5\ub780\uc5d0 \uc785\ub825\ud574 \uc8fc\uc138\uc694:", + "title": "\uc124\uc815 \ud655\uc778" + } + }, + "title": "\uc77c\ud68c\uc6a9 \ube44\ubc00\ubc88\ud638 \uc54c\ub9bc" + }, "totp": { "error": { "invalid_code": "\uc798\ubabb\ub41c \ucf54\ub4dc \uc785\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694. \uc774 \uc624\ub958\uac00 \uc9c0\uc18d\uc801\uc73c\ub85c \ubc1c\uc0dd\ud55c\ub2e4\uba74 Home Assistant \uc758 \uc2dc\uac04\uc124\uc815\uc774 \uc62c\ubc14\ub978\uc9c0 \ud655\uc778\ud574\ubcf4\uc138\uc694." diff --git a/homeassistant/components/auth/.translations/lb.json b/homeassistant/components/auth/.translations/lb.json index f55ae4b97ba..12ced930446 100644 --- a/homeassistant/components/auth/.translations/lb.json +++ b/homeassistant/components/auth/.translations/lb.json @@ -1,5 +1,24 @@ { "mfa_setup": { + "notify": { + "abort": { + "no_available_service": "Keen Notifikatioun's D\u00e9ngscht disponibel." + }, + "error": { + "invalid_code": "Ong\u00ebltege Code, prob\u00e9iert w.e.g. nach emol." + }, + "step": { + "init": { + "description": "Wielt w.e.g. een Notifikatioun's D\u00e9ngscht aus:", + "title": "Eemolegt Passwuert ariichte wat vun engem Notifikatioun's Komponente versch\u00e9ckt g\u00ebtt" + }, + "setup": { + "description": "Een eemolegt Passwuert ass vun **notify.{notify_service}** gesch\u00e9ckt ginn. Gitt et w.e.g hei \u00ebnnen dr\u00ebnner an:", + "title": "Astellungen iwwerpr\u00e9iwen" + } + }, + "title": "Eemolegt Passwuert Notifikatioun" + }, "totp": { "error": { "invalid_code": "Ong\u00ebltege Login, prob\u00e9iert w.e.g. nach emol. Falls d\u00ebse Feeler Message \u00ebmmer er\u00ebm optr\u00ebtt dann iwwerpr\u00e9ift op d'Z\u00e4it vum Home Assistant System richteg ass." diff --git a/homeassistant/components/auth/.translations/pl.json b/homeassistant/components/auth/.translations/pl.json index 78999c34c22..3e320ba8d62 100644 --- a/homeassistant/components/auth/.translations/pl.json +++ b/homeassistant/components/auth/.translations/pl.json @@ -1,5 +1,23 @@ { "mfa_setup": { + "notify": { + "abort": { + "no_available_service": "Brak dost\u0119pnych us\u0142ug powiadamiania." + }, + "error": { + "invalid_code": "Nieprawid\u0142owy kod, spr\u00f3buj ponownie." + }, + "step": { + "init": { + "description": "Prosz\u0119 wybra\u0107 jedn\u0105 z us\u0142ugi powiadamiania:", + "title": "Skonfiguruj has\u0142o jednorazowe dostarczone przez komponent powiadomie\u0144" + }, + "setup": { + "description": "Has\u0142o jednorazowe zosta\u0142o wys\u0142ane przez ** powiadom. {notify_service} **. Wpisz je poni\u017cej:", + "title": "Sprawd\u017a konfiguracj\u0119" + } + } + }, "totp": { "error": { "invalid_code": "Nieprawid\u0142owy kod, spr\u00f3buj ponownie. Je\u015bli b\u0142\u0105d b\u0119dzie si\u0119 powtarza\u0142, upewnij si\u0119, \u017ce czas zegara systemu Home Assistant jest prawid\u0142owy." diff --git a/homeassistant/components/auth/.translations/ru.json b/homeassistant/components/auth/.translations/ru.json index a716425f345..edf136bd7f3 100644 --- a/homeassistant/components/auth/.translations/ru.json +++ b/homeassistant/components/auth/.translations/ru.json @@ -1,5 +1,24 @@ { "mfa_setup": { + "notify": { + "abort": { + "no_available_service": "\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u043b\u0443\u0436\u0431 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439." + }, + "error": { + "invalid_code": "\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443." + }, + "step": { + "init": { + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0434\u043d\u0443 \u0438\u0437 \u0441\u043b\u0443\u0436\u0431 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439:", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u043e\u043b\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439" + }, + "setup": { + "description": "\u041e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0447\u0435\u0440\u0435\u0437 **notify.{notify_service}**. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u0435\u0433\u043e \u043d\u0438\u0436\u0435:", + "title": "\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443" + } + }, + "title": "\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0445 \u043f\u0430\u0440\u043e\u043b\u0435\u0439" + }, "totp": { "error": { "invalid_code": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043d\u043e\u0432\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u044d\u0442\u0443 \u043e\u0448\u0438\u0431\u043a\u0443, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0447\u0430\u0441\u044b \u0432 \u0432\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 Home Assistant \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f." diff --git a/homeassistant/components/auth/.translations/sl.json b/homeassistant/components/auth/.translations/sl.json index 45b57a772f9..2efc23f78f6 100644 --- a/homeassistant/components/auth/.translations/sl.json +++ b/homeassistant/components/auth/.translations/sl.json @@ -1,5 +1,24 @@ { "mfa_setup": { + "notify": { + "abort": { + "no_available_service": "Ni na voljo storitev obve\u0161\u010danja." + }, + "error": { + "invalid_code": "Neveljavna koda, poskusite znova." + }, + "step": { + "init": { + "description": "Prosimo, izberite eno od storitev obve\u0161\u010danja:", + "title": "Nastavite enkratno geslo, ki ga dostavite z obvestilno komponento" + }, + "setup": { + "description": "Enkratno geslo je poslal **notify.{notify_service} **. Vnesite ga spodaj:", + "title": "Preverite nastavitev" + } + }, + "title": "Obvesti Enkratno Geslo" + }, "totp": { "error": { "invalid_code": "Neveljavna koda, prosimo, poskusite znova. \u010ce dobite to sporo\u010dilo ve\u010dkrat, prosimo poskrbite, da bo ura va\u0161ega Home Assistenta to\u010dna." diff --git a/homeassistant/components/auth/.translations/sv.json b/homeassistant/components/auth/.translations/sv.json index cf8227c09a3..604ae3c4fe5 100644 --- a/homeassistant/components/auth/.translations/sv.json +++ b/homeassistant/components/auth/.translations/sv.json @@ -1,5 +1,19 @@ { "mfa_setup": { + "notify": { + "abort": { + "no_available_service": "Inga tillg\u00e4ngliga meddelande tj\u00e4nster." + }, + "error": { + "invalid_code": "Ogiltig kod, var god f\u00f6rs\u00f6k igen." + }, + "step": { + "setup": { + "description": "Ett eng\u00e5ngsl\u00f6senord har skickats av **notify.{notify_service}**. V\u00e4nligen ange det nedan:", + "title": "Verifiera installationen" + } + } + }, "totp": { "error": { "invalid_code": "Ogiltig kod, f\u00f6rs\u00f6k igen. Om du flera g\u00e5nger i rad f\u00e5r detta fel, se till att klockan i din Home Assistant \u00e4r korrekt inst\u00e4lld." diff --git a/homeassistant/components/auth/.translations/zh-Hans.json b/homeassistant/components/auth/.translations/zh-Hans.json index c5b397a8e12..d2a1b97b9b7 100644 --- a/homeassistant/components/auth/.translations/zh-Hans.json +++ b/homeassistant/components/auth/.translations/zh-Hans.json @@ -1,5 +1,24 @@ { "mfa_setup": { + "notify": { + "abort": { + "no_available_service": "\u6ca1\u6709\u53ef\u7528\u7684\u901a\u77e5\u670d\u52a1\u3002" + }, + "error": { + "invalid_code": "\u4ee3\u7801\u65e0\u6548\uff0c\u8bf7\u518d\u8bd5\u4e00\u6b21\u3002" + }, + "step": { + "init": { + "description": "\u8bf7\u9009\u62e9\u4ee5\u4e0b\u4e00\u4e2a\u901a\u77e5\u670d\u52a1\uff1a", + "title": "\u8bbe\u7f6e\u7531\u901a\u77e5\u7ec4\u4ef6\u4f20\u9012\u7684\u4e00\u6b21\u6027\u5bc6\u7801" + }, + "setup": { + "description": "\u4e00\u6b21\u6027\u5bc6\u7801\u5df2\u7531 **notify.{notify_service}**\u53d1\u9001\u3002\u8bf7\u5728\u4e0b\u9762\u8f93\u5165:", + "title": "\u9a8c\u8bc1\u8bbe\u7f6e" + } + }, + "title": "\u4e00\u6b21\u6027\u5bc6\u7801\u901a\u77e5" + }, "totp": { "error": { "invalid_code": "\u53e3\u4ee4\u65e0\u6548\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165\u3002\u5982\u679c\u9519\u8bef\u53cd\u590d\u51fa\u73b0\uff0c\u8bf7\u786e\u4fdd Home Assistant \u7cfb\u7edf\u7684\u65f6\u95f4\u51c6\u786e\u65e0\u8bef\u3002" diff --git a/homeassistant/components/auth/.translations/zh-Hant.json b/homeassistant/components/auth/.translations/zh-Hant.json index ef41ea87248..e791f20a738 100644 --- a/homeassistant/components/auth/.translations/zh-Hant.json +++ b/homeassistant/components/auth/.translations/zh-Hant.json @@ -1,5 +1,24 @@ { "mfa_setup": { + "notify": { + "abort": { + "no_available_service": "\u6c92\u6709\u53ef\u7528\u7684\u901a\u77e5\u670d\u52d9\u3002" + }, + "error": { + "invalid_code": "\u9a57\u8b49\u78bc\u7121\u6548\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002" + }, + "step": { + "init": { + "description": "\u8acb\u9078\u64c7\u4e00\u9805\u901a\u77e5\u670d\u52d9\uff1a", + "title": "\u8a2d\u5b9a\u4e00\u6b21\u6027\u5bc6\u78bc\u50b3\u9001\u7d44\u4ef6" + }, + "setup": { + "description": "\u4e00\u6b21\u6027\u5bc6\u78bc\u5df2\u900f\u904e **notify.{notify_service}** \u50b3\u9001\u3002\u8acb\u65bc\u4e0b\u65b9\u8f38\u5165\uff1a", + "title": "\u9a57\u8b49\u8a2d\u5b9a" + } + }, + "title": "\u901a\u77e5\u4e00\u6b21\u6027\u5bc6\u78bc" + }, "totp": { "error": { "invalid_code": "\u9a57\u8b49\u78bc\u7121\u6548\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002\u5047\u5982\u932f\u8aa4\u6301\u7e8c\u767c\u751f\uff0c\u8acb\u5148\u78ba\u5b9a\u60a8\u7684 Home Assistant \u7cfb\u7d71\u4e0a\u7684\u6642\u9593\u8a2d\u5b9a\u6b63\u78ba\u5f8c\uff0c\u518d\u8a66\u4e00\u6b21\u3002" diff --git a/homeassistant/components/cast/.translations/de.json b/homeassistant/components/cast/.translations/de.json index a37dbd6f5b7..ac1ebbeb236 100644 --- a/homeassistant/components/cast/.translations/de.json +++ b/homeassistant/components/cast/.translations/de.json @@ -6,7 +6,7 @@ }, "step": { "confirm": { - "description": "M\u00f6chten Sie Google Cast einrichten?", + "description": "M\u00f6chtest du Google Cast einrichten?", "title": "Google Cast" } }, diff --git a/homeassistant/components/deconz/.translations/he.json b/homeassistant/components/deconz/.translations/he.json index b4b3d54e075..89a2d69950e 100644 --- a/homeassistant/components/deconz/.translations/he.json +++ b/homeassistant/components/deconz/.translations/he.json @@ -2,7 +2,8 @@ "config": { "abort": { "already_configured": "\u05d4\u05de\u05d2\u05e9\u05e8 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8", - "no_bridges": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05de\u05d2\u05e9\u05e8\u05d9 deCONZ" + "no_bridges": "\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05de\u05d2\u05e9\u05e8\u05d9 deCONZ", + "one_instance_only": "\u05d4\u05e8\u05db\u05d9\u05d1 \u05ea\u05d5\u05de\u05da \u05e8\u05e7 \u05d0\u05d7\u05d3 deCONZ \u05dc\u05de\u05e9\u05dc" }, "error": { "no_key": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05d4\u05d9\u05d4 \u05dc\u05e7\u05d1\u05dc \u05de\u05e4\u05ea\u05d7 API" diff --git a/homeassistant/components/hangouts/.translations/he.json b/homeassistant/components/hangouts/.translations/he.json new file mode 100644 index 00000000000..28326d97142 --- /dev/null +++ b/homeassistant/components/hangouts/.translations/he.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Google Hangouts \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8", + "unknown": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4." + }, + "error": { + "invalid_2fa": "\u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9, \u05d1\u05d1\u05e7\u05e9\u05d4 \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1.", + "invalid_2fa_method": "\u05d3\u05e8\u05da \u05dc\u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9\u05ea (\u05d0\u05de\u05ea \u05d1\u05d8\u05dc\u05e4\u05d5\u05df).", + "invalid_login": "\u05db\u05e0\u05d9\u05e1\u05d4 \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9\u05ea, \u05e0\u05e1\u05d4 \u05e9\u05d5\u05d1." + }, + "step": { + "2fa": { + "data": { + "2fa": "\u05e7\u05d5\u05d3 \u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9" + }, + "title": "\u05d0\u05d9\u05de\u05d5\u05ea \u05d3\u05d5 \u05e9\u05dc\u05d1\u05d9" + }, + "user": { + "data": { + "email": "\u05db\u05ea\u05d5\u05d1\u05ea \u05d3\u05d5\u05d0\"\u05dc", + "password": "\u05e1\u05d9\u05e1\u05de\u05d4" + }, + "title": "\u05d4\u05ea\u05d7\u05d1\u05e8\u05d5\u05ea \u05dc- Google Hangouts" + } + }, + "title": "Google Hangouts" + } +} \ No newline at end of file diff --git a/homeassistant/components/hangouts/.translations/pl.json b/homeassistant/components/hangouts/.translations/pl.json index a8314761f8d..5e0ecfa2900 100644 --- a/homeassistant/components/hangouts/.translations/pl.json +++ b/homeassistant/components/hangouts/.translations/pl.json @@ -14,6 +14,7 @@ "data": { "2fa": "PIN" }, + "description": "Pusty", "title": "Uwierzytelnianie dwusk\u0142adnikowe" }, "user": { @@ -21,6 +22,7 @@ "email": "Adres e-mail", "password": "Has\u0142o" }, + "description": "Pusty", "title": "Logowanie do Google Hangouts" } }, diff --git a/homeassistant/components/homematicip_cloud/.translations/de.json b/homeassistant/components/homematicip_cloud/.translations/de.json index 6b3b9b09480..bd600f7d2ef 100644 --- a/homeassistant/components/homematicip_cloud/.translations/de.json +++ b/homeassistant/components/homematicip_cloud/.translations/de.json @@ -6,10 +6,10 @@ "unknown": "Ein unbekannter Fehler ist aufgetreten." }, "error": { - "invalid_pin": "Ung\u00fcltige PIN, bitte versuchen Sie es erneut.", - "press_the_button": "Bitte dr\u00fccken Sie die blaue Taste.", - "register_failed": "Registrierung fehlgeschlagen, bitte versuchen Sie es erneut.", - "timeout_button": "Zeit\u00fcberschreitung beim Dr\u00fccken der blauen Taste. Bitte versuchen Sie es erneut." + "invalid_pin": "Ung\u00fcltige PIN, bitte versuche es erneut.", + "press_the_button": "Bitte dr\u00fccke die blaue Taste.", + "register_failed": "Registrierung fehlgeschlagen, bitte versuche es erneut.", + "timeout_button": "Zeit\u00fcberschreitung beim Dr\u00fccken der blauen Taste. Bitte versuche es erneut." }, "step": { "init": { @@ -21,7 +21,7 @@ "title": "HometicIP Accesspoint ausw\u00e4hlen" }, "link": { - "description": "Dr\u00fccken Sie den blauen Taster auf dem Accesspoint, sowie den Senden Button um HomematicIP mit Home Assistant zu verbinden.\n\n![Position des Tasters auf dem AP](/static/images/config_flows/config_homematicip_cloud.png)", + "description": "Dr\u00fccke den blauen Taster auf dem Accesspoint, sowie den Senden Button um HomematicIP mit Home Assistant zu verbinden.\n\n![Position des Tasters auf dem AP](/static/images/config_flows/config_homematicip_cloud.png)", "title": "Verkn\u00fcpfe den Accesspoint" } }, diff --git a/homeassistant/components/homematicip_cloud/.translations/he.json b/homeassistant/components/homematicip_cloud/.translations/he.json index 50d5c61b576..c60294e21d5 100644 --- a/homeassistant/components/homematicip_cloud/.translations/he.json +++ b/homeassistant/components/homematicip_cloud/.translations/he.json @@ -2,6 +2,7 @@ "config": { "abort": { "already_configured": "\u05e0\u05e7\u05d5\u05d3\u05ea \u05d4\u05d2\u05d9\u05e9\u05d4 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8\u05ea", + "connection_aborted": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05e9\u05e8\u05ea HMIP", "unknown": "\u05d0\u05d9\u05e8\u05e2\u05d4 \u05e9\u05d2\u05d9\u05d0\u05d4 \u05dc\u05d0 \u05d9\u05d3\u05d5\u05e2\u05d4." }, "error": { diff --git a/homeassistant/components/ios/.translations/he.json b/homeassistant/components/ios/.translations/he.json new file mode 100644 index 00000000000..e786e5ae843 --- /dev/null +++ b/homeassistant/components/ios/.translations/he.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u05e8\u05e7 \u05d4\u05d2\u05d3\u05e8\u05d4 \u05d0\u05d7\u05ea \u05e9\u05dc Home Assistant iOS \u05e0\u05d7\u05d5\u05e6\u05d4." + }, + "step": { + "confirm": { + "description": "\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05d0\u05ea Home Assistant iOS?", + "title": "Home Assistant iOS" + } + }, + "title": "Home Assistant iOS" + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/sl.json b/homeassistant/components/ios/.translations/sl.json new file mode 100644 index 00000000000..28e9102aafd --- /dev/null +++ b/homeassistant/components/ios/.translations/sl.json @@ -0,0 +1,14 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Potrebna je samo ena konfiguracija Home Assistant iOS." + }, + "step": { + "confirm": { + "description": "Ali \u017eelite nastaviti komponento za Home Assistant iOS?", + "title": "Home Assistant iOS" + } + }, + "title": "Home Assistant iOS" + } +} \ No newline at end of file diff --git a/homeassistant/components/ios/.translations/sv.json b/homeassistant/components/ios/.translations/sv.json new file mode 100644 index 00000000000..6806f9bab90 --- /dev/null +++ b/homeassistant/components/ios/.translations/sv.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "confirm": { + "description": "Vill du konfigurera Home Assistants iOS komponent?", + "title": "Home Assistant iOS" + } + }, + "title": "Home Assistant iOS" + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/ca.json b/homeassistant/components/mqtt/.translations/ca.json index 57e9a83d201..b6c73f35f26 100644 --- a/homeassistant/components/mqtt/.translations/ca.json +++ b/homeassistant/components/mqtt/.translations/ca.json @@ -10,6 +10,7 @@ "broker": { "data": { "broker": "Broker", + "discovery": "Activar descobreix automaticament", "password": "Contrasenya", "port": "Port", "username": "Nom d'usuari" diff --git a/homeassistant/components/mqtt/.translations/de.json b/homeassistant/components/mqtt/.translations/de.json index 15b6b3b9731..eeff1ca3041 100644 --- a/homeassistant/components/mqtt/.translations/de.json +++ b/homeassistant/components/mqtt/.translations/de.json @@ -1,5 +1,11 @@ { "config": { + "abort": { + "single_instance_allowed": "Nur eine einzige Konfiguration von MQTT ist zul\u00e4ssig." + }, + "error": { + "cannot_connect": "Es konnte keine Verbindung zum Broker hergestellt werden." + }, "step": { "broker": { "data": { diff --git a/homeassistant/components/mqtt/.translations/fr.json b/homeassistant/components/mqtt/.translations/fr.json index 1870c598e3b..916b4fdaf39 100644 --- a/homeassistant/components/mqtt/.translations/fr.json +++ b/homeassistant/components/mqtt/.translations/fr.json @@ -10,6 +10,7 @@ "broker": { "data": { "broker": "Broker", + "discovery": "Activer la d\u00e9couverte automatique", "password": "Mot de passe", "port": "Port", "username": "Nom d'utilisateur" diff --git a/homeassistant/components/mqtt/.translations/he.json b/homeassistant/components/mqtt/.translations/he.json new file mode 100644 index 00000000000..e1e2ed49748 --- /dev/null +++ b/homeassistant/components/mqtt/.translations/he.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "\u05e8\u05e7 \u05d4\u05d2\u05d3\u05e8\u05d4 \u05d0\u05d7\u05ea \u05e9\u05dc MQTT \u05de\u05d5\u05ea\u05e8\u05ea." + }, + "error": { + "cannot_connect": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05d1\u05e8\u05d5\u05e7\u05e8." + }, + "step": { + "broker": { + "data": { + "broker": "\u05d1\u05e8\u05d5\u05e7\u05e8", + "discovery": "\u05d0\u05e4\u05e9\u05e8 \u05d2\u05d9\u05dc\u05d5\u05d9", + "password": "\u05e1\u05d9\u05e1\u05de\u05d4", + "port": "\u05e4\u05d5\u05e8\u05d8", + "username": "\u05e9\u05dd \u05de\u05e9\u05ea\u05de\u05e9" + }, + "description": "\u05e0\u05d0 \u05dc\u05d4\u05d6\u05d9\u05df \u05d0\u05ea \u05e4\u05e8\u05d8\u05d9 \u05d4\u05d7\u05d9\u05d1\u05d5\u05e8 \u05e9\u05dc \u05d4\u05d1\u05e8\u05d5\u05e7\u05e8 MQTT \u05e9\u05dc\u05da.", + "title": "MQTT" + } + }, + "title": "MQTT" + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/lb.json b/homeassistant/components/mqtt/.translations/lb.json index 82a10194667..166fce9fbfb 100644 --- a/homeassistant/components/mqtt/.translations/lb.json +++ b/homeassistant/components/mqtt/.translations/lb.json @@ -10,6 +10,7 @@ "broker": { "data": { "broker": "Broker", + "discovery": "Entdeckung aktiv\u00e9ieren", "password": "Passwuert", "port": "Port", "username": "Benotzernumm" diff --git a/homeassistant/components/mqtt/.translations/pl.json b/homeassistant/components/mqtt/.translations/pl.json index f3ccaf8f37e..e87e550b98d 100644 --- a/homeassistant/components/mqtt/.translations/pl.json +++ b/homeassistant/components/mqtt/.translations/pl.json @@ -10,6 +10,7 @@ "broker": { "data": { "broker": "Po\u015brednik", + "discovery": "W\u0142\u0105cz wykrywanie", "password": "Has\u0142o", "port": "Port", "username": "Nazwa u\u017cytkownika" diff --git a/homeassistant/components/mqtt/.translations/ru.json b/homeassistant/components/mqtt/.translations/ru.json index c9dc3c2fd60..f1ff498dd72 100644 --- a/homeassistant/components/mqtt/.translations/ru.json +++ b/homeassistant/components/mqtt/.translations/ru.json @@ -10,6 +10,7 @@ "broker": { "data": { "broker": "\u0411\u0440\u043e\u043a\u0435\u0440", + "discovery": "\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435", "password": "\u041f\u0430\u0440\u043e\u043b\u044c", "port": "\u041f\u043e\u0440\u0442", "username": "\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f" diff --git a/homeassistant/components/mqtt/.translations/sl.json b/homeassistant/components/mqtt/.translations/sl.json new file mode 100644 index 00000000000..a12498ac4c2 --- /dev/null +++ b/homeassistant/components/mqtt/.translations/sl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "single_instance_allowed": "Dovoljena je samo ena konfiguracija MQTT." + }, + "error": { + "cannot_connect": "Ne morem se povezati na posrednik." + }, + "step": { + "broker": { + "data": { + "broker": "Posrednik", + "discovery": "Omogo\u010di odkrivanje", + "password": "Geslo", + "port": "port", + "username": "Uporabni\u0161ko ime" + }, + "description": "Prosimo vnesite informacije o povezavi va\u0161ega MQTT posrednika.", + "title": "MQTT" + } + }, + "title": "MQTT" + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/sv.json b/homeassistant/components/mqtt/.translations/sv.json new file mode 100644 index 00000000000..7cf6d75b9c1 --- /dev/null +++ b/homeassistant/components/mqtt/.translations/sv.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "broker": { + "data": { + "password": "L\u00f6senord", + "port": "Port", + "username": "Anv\u00e4ndarnamn" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/.translations/zh-Hans.json b/homeassistant/components/mqtt/.translations/zh-Hans.json index f539bd2a630..98a7d9eb4be 100644 --- a/homeassistant/components/mqtt/.translations/zh-Hans.json +++ b/homeassistant/components/mqtt/.translations/zh-Hans.json @@ -10,6 +10,7 @@ "broker": { "data": { "broker": "\u670d\u52a1\u5668", + "discovery": "\u542f\u7528\u53d1\u73b0", "password": "\u5bc6\u7801", "port": "\u7aef\u53e3", "username": "\u7528\u6237\u540d" diff --git a/homeassistant/components/mqtt/.translations/zh-Hant.json b/homeassistant/components/mqtt/.translations/zh-Hant.json index e6f27a439d5..cf87ceb8f98 100644 --- a/homeassistant/components/mqtt/.translations/zh-Hant.json +++ b/homeassistant/components/mqtt/.translations/zh-Hant.json @@ -10,6 +10,7 @@ "broker": { "data": { "broker": "Broker", + "discovery": "\u958b\u555f\u63a2\u7d22", "password": "\u4f7f\u7528\u8005\u5bc6\u78bc", "port": "\u901a\u8a0a\u57e0", "username": "\u4f7f\u7528\u8005\u540d\u7a31" diff --git a/homeassistant/components/nest/.translations/de.json b/homeassistant/components/nest/.translations/de.json index 86b50ab3c10..975d15e4470 100644 --- a/homeassistant/components/nest/.translations/de.json +++ b/homeassistant/components/nest/.translations/de.json @@ -24,7 +24,7 @@ "data": { "code": "PIN Code" }, - "description": "[Autorisieren Sie ihr Konto] ( {url} ), um ihren Nest-Account zu verkn\u00fcpfen.\n\n F\u00fcgen Sie anschlie\u00dfend den erhaltenen PIN Code hier ein.", + "description": "[Autorisiere dein Konto] ( {url} ), um deinen Nest-Account zu verkn\u00fcpfen.\n\n F\u00fcge anschlie\u00dfend den erhaltenen PIN Code hier ein.", "title": "Nest-Konto verkn\u00fcpfen" } }, diff --git a/homeassistant/components/openuv/.translations/de.json b/homeassistant/components/openuv/.translations/de.json index 1f81ac30f53..7f8121dd96b 100644 --- a/homeassistant/components/openuv/.translations/de.json +++ b/homeassistant/components/openuv/.translations/de.json @@ -11,7 +11,8 @@ "elevation": "H\u00f6he", "latitude": "Breitengrad", "longitude": "L\u00e4ngengrad" - } + }, + "title": "Gebe deine Informationen ein" } }, "title": "OpenUV" diff --git a/homeassistant/components/openuv/.translations/he.json b/homeassistant/components/openuv/.translations/he.json new file mode 100644 index 00000000000..262a3d732a2 --- /dev/null +++ b/homeassistant/components/openuv/.translations/he.json @@ -0,0 +1,20 @@ +{ + "config": { + "error": { + "identifier_exists": "\u05d4\u05e7\u05d5\u05d0\u05d5\u05e8\u05d3\u05d9\u05e0\u05d8\u05d5\u05ea \u05db\u05d1\u05e8 \u05e8\u05e9\u05d5\u05de\u05d5\u05ea", + "invalid_api_key": "\u05de\u05e4\u05ea\u05d7 API \u05dc\u05d0 \u05d7\u05d5\u05e7\u05d9" + }, + "step": { + "user": { + "data": { + "api_key": "\u05de\u05e4\u05ea\u05d7 API \u05e9\u05dc OpenUV", + "elevation": "\u05d2\u05d5\u05d1\u05d4 \u05de\u05e2\u05dc \u05e4\u05e0\u05d9 \u05d4\u05d9\u05dd", + "latitude": "\u05e7\u05d5 \u05e8\u05d5\u05d7\u05d1", + "longitude": "\u05e7\u05d5 \u05d0\u05d5\u05e8\u05da" + }, + "title": "\u05de\u05dc\u05d0 \u05d0\u05ea \u05d4\u05e4\u05e8\u05d8\u05d9\u05dd \u05e9\u05dc\u05da" + } + }, + "title": "OpenUV" + } +} \ No newline at end of file diff --git a/homeassistant/components/sensor/.translations/moon.he.json b/homeassistant/components/sensor/.translations/moon.he.json index 60999f83645..6531d3c8265 100644 --- a/homeassistant/components/sensor/.translations/moon.he.json +++ b/homeassistant/components/sensor/.translations/moon.he.json @@ -3,6 +3,10 @@ "first_quarter": "\u05e8\u05d1\u05e2\u05d5\u05df \u05e8\u05d0\u05e9\u05d5\u05df", "full_moon": "\u05d9\u05e8\u05d7 \u05de\u05dc\u05d0", "last_quarter": "\u05e8\u05d1\u05e2\u05d5\u05df \u05d0\u05d7\u05e8\u05d5\u05df", - "new_moon": "\u05e8\u05d0\u05e9 \u05d7\u05d5\u05d3\u05e9" + "new_moon": "\u05e8\u05d0\u05e9 \u05d7\u05d5\u05d3\u05e9", + "waning_crescent": "Waning crescent", + "waning_gibbous": "Waning gibbous", + "waxing_crescent": "Waxing crescent", + "waxing_gibbous": "Waxing gibbous" } } \ No newline at end of file diff --git a/homeassistant/components/sonos/.translations/de.json b/homeassistant/components/sonos/.translations/de.json index dd44fca5888..920d25a3bfa 100644 --- a/homeassistant/components/sonos/.translations/de.json +++ b/homeassistant/components/sonos/.translations/de.json @@ -6,7 +6,7 @@ }, "step": { "confirm": { - "description": "M\u00f6chten Sie Sonos einrichten?", + "description": "M\u00f6chtest du Sonos einrichten?", "title": "Sonos" } }, diff --git a/homeassistant/components/tradfri/.translations/de.json b/homeassistant/components/tradfri/.translations/de.json new file mode 100644 index 00000000000..5284ae18b6d --- /dev/null +++ b/homeassistant/components/tradfri/.translations/de.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Bridge ist bereits konfiguriert" + }, + "error": { + "cannot_connect": "Verbindung zum Gateway nicht m\u00f6glich.", + "invalid_key": "Fehler beim Registrieren mit dem angegebenen Schl\u00fcssel. Wenn dies weiterhin geschieht, versuche, das Gateway neu zu starten.", + "timeout": "Timeout bei der \u00dcberpr\u00fcfung des Codes." + }, + "step": { + "auth": { + "data": { + "security_code": "Sicherheitscode" + }, + "description": "Du findest den Sicherheitscode auf der R\u00fcckseite deines Gateways.", + "title": "Sicherheitscode eingeben" + } + }, + "title": "IKEA TR\u00c5DFRI" + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/he.json b/homeassistant/components/tradfri/.translations/he.json new file mode 100644 index 00000000000..09af3d09bdc --- /dev/null +++ b/homeassistant/components/tradfri/.translations/he.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\u05d4\u05de\u05d2\u05e9\u05e8 \u05db\u05d1\u05e8 \u05de\u05d5\u05d2\u05d3\u05e8" + }, + "error": { + "cannot_connect": "\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05dc\u05de\u05d2\u05e9\u05e8", + "invalid_key": "\u05d4\u05e8\u05d9\u05e9\u05d5\u05dd \u05e0\u05db\u05e9\u05dc \u05e2\u05dd \u05d4\u05de\u05e4\u05ea\u05d7 \u05e9\u05e1\u05d5\u05e4\u05e7. \u05d0\u05dd \u05d6\u05d4 \u05e7\u05d5\u05e8\u05d4 \u05e9\u05d5\u05d1, \u05e0\u05e1\u05d4 \u05dc\u05d4\u05e4\u05e2\u05d9\u05dc \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05de\u05d2\u05e9\u05e8.", + "timeout": "\u05e2\u05d1\u05e8 \u05d4\u05d6\u05de\u05df \u05d4\u05e7\u05e6\u05d5\u05d1 \u05dc\u05d0\u05d9\u05de\u05d5\u05ea \u05d4\u05e7\u05d5\u05d3" + }, + "step": { + "auth": { + "data": { + "host": "\u05de\u05d0\u05e8\u05d7", + "security_code": "\u05e7\u05d5\u05d3 \u05d0\u05d1\u05d8\u05d7\u05d4" + }, + "description": "\u05ea\u05d5\u05db\u05dc \u05dc\u05de\u05e6\u05d5\u05d0 \u05d0\u05ea \u05e7\u05d5\u05d3 \u05d4\u05d0\u05d1\u05d8\u05d7\u05d4 \u05d1\u05d2\u05d1 \u05d4\u05de\u05d2\u05e9\u05e8 \u05e9\u05dc\u05da.", + "title": "\u05d4\u05d6\u05df \u05e7\u05d5\u05d3 \u05d0\u05d1\u05d8\u05d7\u05d4" + } + }, + "title": "IKEA TR\u00c5DFRI" + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/pl.json b/homeassistant/components/tradfri/.translations/pl.json new file mode 100644 index 00000000000..ec253447ef4 --- /dev/null +++ b/homeassistant/components/tradfri/.translations/pl.json @@ -0,0 +1,22 @@ +{ + "config": { + "abort": { + "already_configured": "Mostek jest ju\u017c skonfigurowany" + }, + "error": { + "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z bram\u0105.", + "invalid_key": "Rejestracja si\u0119 nie powiod\u0142a z podanym kluczem. Je\u015bli tak si\u0119 stanie, spr\u00f3buj ponownie uruchomi\u0107 bramk\u0119.", + "timeout": "Min\u0105\u0142 limit czasu sprawdzania poprawno\u015bci kodu" + }, + "step": { + "auth": { + "data": { + "host": "Host", + "security_code": "Kod bezpiecze\u0144stwa" + }, + "description": "Mo\u017cesz znale\u017a\u0107 kod bezpiecze\u0144stwa z ty\u0142u bramy.", + "title": "Wprowad\u017a kod bezpiecze\u0144stwa" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/sl.json b/homeassistant/components/tradfri/.translations/sl.json new file mode 100644 index 00000000000..ee2bf7d3d2b --- /dev/null +++ b/homeassistant/components/tradfri/.translations/sl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Most je \u017ee konfiguriran" + }, + "error": { + "cannot_connect": "Povezava s prehodom ni mogo\u010de.", + "invalid_key": "Ni se bilo mogo\u010de registrirati s prilo\u017eenim klju\u010dem. \u010ce se to dogaja, poskusite znova zagnati prehod.", + "timeout": "\u010casovna omejitev za potrditev kode je potekla." + }, + "step": { + "auth": { + "data": { + "host": "Gostitelj", + "security_code": "Varnostna koda" + }, + "description": "Varnostno kodo najdete na hrbtni strani va\u0161ega prehoda.", + "title": "Vnesite varnostno kodo" + } + }, + "title": "IKEA TR\u00c5DFRI" + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/sv.json b/homeassistant/components/tradfri/.translations/sv.json new file mode 100644 index 00000000000..ffe8bff22b4 --- /dev/null +++ b/homeassistant/components/tradfri/.translations/sv.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Bryggan \u00e4r redan konfigurerad" + }, + "error": { + "cannot_connect": "Det gick inte att ansluta till gatewayen." + }, + "step": { + "auth": { + "data": { + "security_code": "S\u00e4kerhetskod" + }, + "description": "Du kan hitta s\u00e4kerhetskoden p\u00e5 baksidan av din gateway.", + "title": "Ange s\u00e4kerhetskod" + } + }, + "title": "IKEA TR\u00c5DFRI" + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/.translations/zh-Hans.json b/homeassistant/components/tradfri/.translations/zh-Hans.json index 28a9c676f2e..4791e46062a 100644 --- a/homeassistant/components/tradfri/.translations/zh-Hans.json +++ b/homeassistant/components/tradfri/.translations/zh-Hans.json @@ -7,6 +7,17 @@ "cannot_connect": "\u65e0\u6cd5\u8fde\u63a5\u5230\u7f51\u5173\u3002", "invalid_key": "\u65e0\u6cd5\u7528\u63d0\u4f9b\u7684\u5bc6\u94a5\u6ce8\u518c\u3002\u5982\u679c\u9519\u8bef\u6301\u7eed\u53d1\u751f\uff0c\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u542f\u52a8\u7f51\u5173\u3002", "timeout": "\u4ee3\u7801\u9a8c\u8bc1\u8d85\u65f6" - } + }, + "step": { + "auth": { + "data": { + "host": "\u4e3b\u673a", + "security_code": "\u5b89\u5168\u7801" + }, + "description": "\u60a8\u53ef\u4ee5\u5728\u7f51\u5173\u80cc\u9762\u627e\u5230\u5b89\u5168\u7801\u3002", + "title": "\u8f93\u5165\u5b89\u5168\u7801" + } + }, + "title": "IKEA TR\u00c5DFRI" } } \ No newline at end of file From cf0d0fb33e2d9e3cdeab515d192ef51ee8d28f82 Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Wed, 26 Sep 2018 02:56:23 -0400 Subject: [PATCH 15/38] Device Registry Support for iOS Sensors (#16862) * Add device_info property to iOS sensors for device registry * Remove unused logger import * Fix spacing * lint * Lint --- homeassistant/components/sensor/ios.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/homeassistant/components/sensor/ios.py b/homeassistant/components/sensor/ios.py index a50d1161676..d206cd1df87 100644 --- a/homeassistant/components/sensor/ios.py +++ b/homeassistant/components/sensor/ios.py @@ -46,6 +46,21 @@ class IOSSensor(Entity): self._state = None self._unit_of_measurement = SENSOR_TYPES[sensor_type][1] + @property + def device_info(self): + """Return information about the device.""" + return { + 'identifiers': { + (ios.DOMAIN, + self._device[ios.ATTR_DEVICE][ios.ATTR_DEVICE_PERMANENT_ID]), + }, + 'name': self._device[ios.ATTR_DEVICE][ios.ATTR_DEVICE_NAME], + 'manufacturer': 'Apple', + 'model': self._device[ios.ATTR_DEVICE][ios.ATTR_DEVICE_TYPE], + 'sw_version': + self._device[ios.ATTR_DEVICE][ios.ATTR_DEVICE_SYSTEM_VERSION], + } + @property def name(self): """Return the name of the iOS sensor.""" From ff9377d1d91d57a771ac25194f28992a813db305 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 26 Sep 2018 09:38:50 +0200 Subject: [PATCH 16/38] Fix MQTT discovery (#16864) * Fix MQTT discovery * Update __init__.py --- homeassistant/components/mqtt/__init__.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/mqtt/__init__.py b/homeassistant/components/mqtt/__init__.py index 856d5d01894..70f20453633 100644 --- a/homeassistant/components/mqtt/__init__.py +++ b/homeassistant/components/mqtt/__init__.py @@ -21,7 +21,7 @@ import voluptuous as vol from homeassistant import config_entries from homeassistant.const import ( CONF_PASSWORD, CONF_PAYLOAD, CONF_PORT, CONF_PROTOCOL, CONF_USERNAME, - CONF_VALUE_TEMPLATE, EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP) + CONF_VALUE_TEMPLATE, EVENT_HOMEASSISTANT_STOP) from homeassistant.core import Event, ServiceCall, callback from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import config_validation as cv @@ -524,12 +524,8 @@ async def async_setup_entry(hass, entry): schema=MQTT_PUBLISH_SCHEMA) if conf.get(CONF_DISCOVERY): - async def async_setup_discovery(event): - await _async_setup_discovery( - hass, conf, hass.data[DATA_MQTT_HASS_CONFIG]) - - hass.bus.async_listen_once( - EVENT_HOMEASSISTANT_START, async_setup_discovery) + await _async_setup_discovery( + hass, conf, hass.data[DATA_MQTT_HASS_CONFIG]) return True From 824e59499f26d503583db38a5b255120e68b1404 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 26 Sep 2018 08:52:22 +0200 Subject: [PATCH 17/38] Make ring sync again (#16866) --- homeassistant/components/camera/ring.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/camera/ring.py b/homeassistant/components/camera/ring.py index f629b501819..d0cb6443fc7 100644 --- a/homeassistant/components/camera/ring.py +++ b/homeassistant/components/camera/ring.py @@ -39,9 +39,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ }) -@asyncio.coroutine -def async_setup_platform(hass, config, async_add_entities, - discovery_info=None): +def setup_platform(hass, config, add_entities, discovery_info=None): """Set up a Ring Door Bell and StickUp Camera.""" ring = hass.data[DATA_RING] @@ -67,14 +65,14 @@ def async_setup_platform(hass, config, async_add_entities, ''' following cameras: {}.'''.format(cameras) _LOGGER.error(err_msg) - hass.components.persistent_notification.async_create( + hass.components.persistent_notification.create( 'Error: {}
' 'You will need to restart hass after fixing.' ''.format(err_msg), title=NOTIFICATION_TITLE, notification_id=NOTIFICATION_ID) - async_add_entities(cams, True) + add_entities(cams, True) return True From 7b68f344e3928ac4884d916a5317b1e70b59a37e Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 26 Sep 2018 11:21:22 +0200 Subject: [PATCH 18/38] Bumped version to 0.79.0b2 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 862b1d97a76..4b4153ac89c 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 79 -PATCH_VERSION = '0b1' +PATCH_VERSION = '0b2' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 5, 3) From 71333a15f70b254f0b8548c8ba7b64c6620e98f6 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 27 Sep 2018 23:04:03 +0200 Subject: [PATCH 19/38] Bump frontend to 20180927.0 --- homeassistant/components/frontend/__init__.py | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/frontend/__init__.py b/homeassistant/components/frontend/__init__.py index 66232f2155b..9bd13f316b6 100644 --- a/homeassistant/components/frontend/__init__.py +++ b/homeassistant/components/frontend/__init__.py @@ -26,7 +26,7 @@ from homeassistant.helpers.translation import async_get_translations from homeassistant.loader import bind_hass from homeassistant.util.yaml import load_yaml -REQUIREMENTS = ['home-assistant-frontend==20180926.0'] +REQUIREMENTS = ['home-assistant-frontend==20180927.0'] DOMAIN = 'frontend' DEPENDENCIES = ['api', 'websocket_api', 'http', 'system_log', diff --git a/requirements_all.txt b/requirements_all.txt index e79feca7fef..61a412951f9 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -454,7 +454,7 @@ hole==0.3.0 holidays==0.9.7 # homeassistant.components.frontend -home-assistant-frontend==20180926.0 +home-assistant-frontend==20180927.0 # homeassistant.components.homekit_controller # homekit==0.10 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 691fc641607..e67da9755cd 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -87,7 +87,7 @@ hdate==0.6.3 holidays==0.9.7 # homeassistant.components.frontend -home-assistant-frontend==20180926.0 +home-assistant-frontend==20180927.0 # homeassistant.components.homematicip_cloud homematicip==0.9.8 From 51dbc988f92d99c05e0e46f2f6dfa04216a2a300 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 27 Sep 2018 23:04:28 +0200 Subject: [PATCH 20/38] Update translations --- .../components/auth/.translations/de.json | 3 ++- .../components/auth/.translations/en.json | 6 +++--- .../components/auth/.translations/no.json | 19 +++++++++++++++++++ .../auth/.translations/zh-Hans.json | 4 ++-- .../components/deconz/.translations/de.json | 4 ++-- .../components/mqtt/.translations/de.json | 1 + .../components/mqtt/.translations/ko.json | 1 + .../components/mqtt/.translations/no.json | 1 + .../components/nest/.translations/de.json | 6 +++--- .../components/zone/.translations/de.json | 2 +- 10 files changed, 35 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/auth/.translations/de.json b/homeassistant/components/auth/.translations/de.json index 2abc64f5f5d..21c83290629 100644 --- a/homeassistant/components/auth/.translations/de.json +++ b/homeassistant/components/auth/.translations/de.json @@ -9,7 +9,8 @@ }, "step": { "init": { - "description": "Bitte w\u00e4hle einen der Benachrichtigungsdienste:" + "description": "Bitte w\u00e4hle einen der Benachrichtigungsdienste:", + "title": "Einmal Passwort f\u00fcr Notify einrichten" }, "setup": { "description": "Ein Einmal-Passwort wurde per ** notify gesendet. {notify_service} **. Bitte gebe es unten ein:", diff --git a/homeassistant/components/auth/.translations/en.json b/homeassistant/components/auth/.translations/en.json index 21cb45e3050..66c0e92d9b5 100644 --- a/homeassistant/components/auth/.translations/en.json +++ b/homeassistant/components/auth/.translations/en.json @@ -2,18 +2,18 @@ "mfa_setup": { "notify": { "abort": { - "no_available_service": "No available notify services." + "no_available_service": "No notification services available." }, "error": { "invalid_code": "Invalid code, please try again." }, "step": { "init": { - "description": "Please select one of notify service:", + "description": "Please select one of the notification services:", "title": "Set up one-time password delivered by notify component" }, "setup": { - "description": "A one-time password have sent by **notify.{notify_service}**. Please input it in below:", + "description": "A one-time password has been sent via **notify.{notify_service}**. Please enter it below:", "title": "Verify setup" } }, diff --git a/homeassistant/components/auth/.translations/no.json b/homeassistant/components/auth/.translations/no.json index 43ec497cfb1..48b5db8a3b6 100644 --- a/homeassistant/components/auth/.translations/no.json +++ b/homeassistant/components/auth/.translations/no.json @@ -1,5 +1,24 @@ { "mfa_setup": { + "notify": { + "abort": { + "no_available_service": "Ingen varslingstjenester er tilgjengelig." + }, + "error": { + "invalid_code": "Ugyldig kode, vennligst pr\u00f8v igjen." + }, + "step": { + "init": { + "description": "Vennligst velg en av varslingstjenestene:", + "title": "Sett opp engangspassord levert av varsel komponent" + }, + "setup": { + "description": "Et engangspassord har blitt sendt via **notify.{notify_service}**. Vennligst skriv det inn nedenfor:", + "title": "Bekreft oppsettet" + } + }, + "title": "Varsle engangspassord" + }, "totp": { "error": { "invalid_code": "Ugyldig kode, pr\u00f8v igjen. Hvis du f\u00e5r denne feilen konsekvent, m\u00e5 du s\u00f8rge for at klokken p\u00e5 Home Assistant systemet er riktig." diff --git a/homeassistant/components/auth/.translations/zh-Hans.json b/homeassistant/components/auth/.translations/zh-Hans.json index d2a1b97b9b7..1cb311f016f 100644 --- a/homeassistant/components/auth/.translations/zh-Hans.json +++ b/homeassistant/components/auth/.translations/zh-Hans.json @@ -9,11 +9,11 @@ }, "step": { "init": { - "description": "\u8bf7\u9009\u62e9\u4ee5\u4e0b\u4e00\u4e2a\u901a\u77e5\u670d\u52a1\uff1a", + "description": "\u8bf7\u4ece\u4e0b\u9762\u9009\u62e9\u4e00\u4e2a\u901a\u77e5\u670d\u52a1\uff1a", "title": "\u8bbe\u7f6e\u7531\u901a\u77e5\u7ec4\u4ef6\u4f20\u9012\u7684\u4e00\u6b21\u6027\u5bc6\u7801" }, "setup": { - "description": "\u4e00\u6b21\u6027\u5bc6\u7801\u5df2\u7531 **notify.{notify_service}**\u53d1\u9001\u3002\u8bf7\u5728\u4e0b\u9762\u8f93\u5165:", + "description": "\u4e00\u6b21\u6027\u5bc6\u7801\u5df2\u7531 **notify.{notify_service}** \u53d1\u9001\u3002\u8bf7\u5728\u4e0b\u9762\u8f93\u5165\uff1a", "title": "\u9a8c\u8bc1\u8bbe\u7f6e" } }, diff --git a/homeassistant/components/deconz/.translations/de.json b/homeassistant/components/deconz/.translations/de.json index 51b496906a2..645daa56f6b 100644 --- a/homeassistant/components/deconz/.translations/de.json +++ b/homeassistant/components/deconz/.translations/de.json @@ -14,10 +14,10 @@ "host": "Host", "port": "Port (Standartwert : '80')" }, - "title": "Definieren Sie den deCONZ-Gateway" + "title": "Definiere das deCONZ-Gateway" }, "link": { - "description": "Entsperren Sie Ihr deCONZ-Gateway, um sich bei Home Assistant zu registrieren. \n\n 1. Gehen Sie zu den deCONZ-Systemeinstellungen \n 2. Dr\u00fccken Sie die Taste \"Gateway entsperren\"", + "description": "Entsperre dein deCONZ-Gateway, um dich bei Home Assistant zu registrieren. \n\n 1. Gehe zu den deCONZ-Systemeinstellungen \n 2. Dr\u00fccke die Taste \"Gateway entsperren\"", "title": "Mit deCONZ verbinden" }, "options": { diff --git a/homeassistant/components/mqtt/.translations/de.json b/homeassistant/components/mqtt/.translations/de.json index eeff1ca3041..2a35e95f559 100644 --- a/homeassistant/components/mqtt/.translations/de.json +++ b/homeassistant/components/mqtt/.translations/de.json @@ -9,6 +9,7 @@ "step": { "broker": { "data": { + "discovery": "Suche aktivieren", "password": "Passwort", "username": "Benutzername" }, diff --git a/homeassistant/components/mqtt/.translations/ko.json b/homeassistant/components/mqtt/.translations/ko.json index 3775c8328d1..f20658d252c 100644 --- a/homeassistant/components/mqtt/.translations/ko.json +++ b/homeassistant/components/mqtt/.translations/ko.json @@ -10,6 +10,7 @@ "broker": { "data": { "broker": "\ube0c\ub85c\ucee4", + "discovery": "\uae30\uae30 \uac80\uc0c9 \ud65c\uc131\ud654", "password": "\ube44\ubc00\ubc88\ud638", "port": "\ud3ec\ud2b8", "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" diff --git a/homeassistant/components/mqtt/.translations/no.json b/homeassistant/components/mqtt/.translations/no.json index a9c60fb0c7f..412efd3e107 100644 --- a/homeassistant/components/mqtt/.translations/no.json +++ b/homeassistant/components/mqtt/.translations/no.json @@ -10,6 +10,7 @@ "broker": { "data": { "broker": "Megler", + "discovery": "Aktiver oppdagelse", "password": "Passord", "port": "Port", "username": "Brukernavn" diff --git a/homeassistant/components/nest/.translations/de.json b/homeassistant/components/nest/.translations/de.json index 975d15e4470..500862039a2 100644 --- a/homeassistant/components/nest/.translations/de.json +++ b/homeassistant/components/nest/.translations/de.json @@ -1,10 +1,10 @@ { "config": { "abort": { - "already_setup": "Sie k\u00f6nnen nur ein einziges Nest-Konto konfigurieren.", + "already_setup": "Du kannst nur ein einziges Nest-Konto konfigurieren.", "authorize_url_fail": "Unbekannter Fehler beim Erstellen der Authorisierungs-URL", "authorize_url_timeout": "Zeit\u00fcberschreitung beim Erstellen der Authorisierungs-URL", - "no_flows": "Sie m\u00fcssen Nest konfigurieren, bevor Sie sich authentifizieren k\u00f6nnen. [Bitte lesen Sie die Anweisungen] (https://www.home-assistant.io/components/nest/)." + "no_flows": "Du musst Nest konfigurieren, bevor du dich authentifizieren kannst. [Bitte lese die Anweisungen] (https://www.home-assistant.io/components/nest/)." }, "error": { "internal_error": "Ein interner Fehler ist aufgetreten", @@ -17,7 +17,7 @@ "data": { "flow_impl": "Anbieter" }, - "description": "W\u00e4hlen Sie, \u00fcber welchen Authentifizierungsanbieter Sie sich bei Nest authentifizieren m\u00f6chten.", + "description": "W\u00e4hlen, \u00fcber welchen Authentifizierungsanbieter du dich bei Nest authentifizieren m\u00f6chtest.", "title": "Authentifizierungsanbieter" }, "link": { diff --git a/homeassistant/components/zone/.translations/de.json b/homeassistant/components/zone/.translations/de.json index fc1e3537f33..483c7f065a3 100644 --- a/homeassistant/components/zone/.translations/de.json +++ b/homeassistant/components/zone/.translations/de.json @@ -13,7 +13,7 @@ "passive": "Passiv", "radius": "Radius" }, - "title": "Definieren Sie die Zonenparameter" + "title": "Definiere die Zonenparameter" } }, "title": "Zone" From 7597e30efbc32870e08e17bbb12c6fc5808f735d Mon Sep 17 00:00:00 2001 From: Charles Garwood Date: Wed, 26 Sep 2018 03:19:47 -0400 Subject: [PATCH 21/38] Add unique_id to Nest Sensors (#16869) * Add unique_id * Add device_info * Fix typo * Update __init__.py --- homeassistant/components/nest/__init__.py | 31 +++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/homeassistant/components/nest/__init__.py b/homeassistant/components/nest/__init__.py index 57111350396..f609c774b12 100644 --- a/homeassistant/components/nest/__init__.py +++ b/homeassistant/components/nest/__init__.py @@ -309,6 +309,37 @@ class NestSensorDevice(Entity): """Do not need poll thanks using Nest streaming API.""" return False + @property + def unique_id(self): + """Return unique id based on device serial and variable.""" + return "{}-{}".format(self.device.serial, self.variable) + + @property + def device_info(self): + """Return information about the device.""" + if not hasattr(self.device, 'name_long'): + name = self.structure.name + model = "Structure" + else: + name = self.device.name_long + if self.device.is_thermostat: + model = 'Thermostat' + elif self.device.is_camera: + model = 'Camera' + elif self.device.is_smoke_co_alarm: + model = 'Nest Protect' + else: + model = None + + return { + 'identifiers': { + (DOMAIN, self.device.serial) + }, + 'name': name, + 'manufacturer': 'Nest Labs', + 'model': model, + } + def update(self): """Do not use NestSensorDevice directly.""" raise NotImplementedError From b7e03f6973a99657255582a08c8b1b09949cf0e2 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 26 Sep 2018 18:03:25 +0200 Subject: [PATCH 22/38] Prevent discovered Tradfri while already configured (#16891) * Prevent discovered Tradfri while already configured * Lint --- homeassistant/components/tradfri/__init__.py | 12 +++- .../components/tradfri/config_flow.py | 6 ++ tests/components/tradfri/test_config_flow.py | 34 ++++++++- tests/components/tradfri/test_init.py | 72 +++++++++++++++++++ 4 files changed, 120 insertions(+), 4 deletions(-) create mode 100644 tests/components/tradfri/test_init.py diff --git a/homeassistant/components/tradfri/__init__.py b/homeassistant/components/tradfri/__init__.py index 079381f8b45..6e91ab338a3 100644 --- a/homeassistant/components/tradfri/__init__.py +++ b/homeassistant/components/tradfri/__init__.py @@ -44,10 +44,16 @@ async def async_setup(hass, config): if conf is None: return True - known_hosts = await hass.async_add_executor_job( + configured_hosts = [entry.data['host'] for entry in + hass.config_entries.async_entries(DOMAIN)] + + legacy_hosts = await hass.async_add_executor_job( load_json, hass.config.path(CONFIG_FILE)) - for host, info in known_hosts.items(): + for host, info in legacy_hosts.items(): + if host in configured_hosts: + continue + info[CONF_HOST] = host info[CONF_IMPORT_GROUPS] = conf[CONF_ALLOW_TRADFRI_GROUPS] @@ -58,7 +64,7 @@ async def async_setup(hass, config): host = conf.get(CONF_HOST) - if host is None or host in known_hosts: + if host is None or host in configured_hosts or host in legacy_hosts: return True hass.async_create_task(hass.config_entries.flow.async_init( diff --git a/homeassistant/components/tradfri/config_flow.py b/homeassistant/components/tradfri/config_flow.py index 8d8f9af79e6..29aa768dbb5 100644 --- a/homeassistant/components/tradfri/config_flow.py +++ b/homeassistant/components/tradfri/config_flow.py @@ -77,6 +77,12 @@ class FlowHandler(config_entries.ConfigFlow): async def async_step_discovery(self, user_input): """Handle discovery.""" + for entry in self._async_current_entries(): + if entry.data[CONF_HOST] == user_input['host']: + return self.async_abort( + reason='already_configured' + ) + self._host = user_input['host'] return await self.async_step_auth() diff --git a/tests/components/tradfri/test_config_flow.py b/tests/components/tradfri/test_config_flow.py index 580e9580d76..99566356f61 100644 --- a/tests/components/tradfri/test_config_flow.py +++ b/tests/components/tradfri/test_config_flow.py @@ -6,7 +6,7 @@ import pytest from homeassistant import data_entry_flow from homeassistant.components.tradfri import config_flow -from tests.common import mock_coro +from tests.common import mock_coro, MockConfigEntry @pytest.fixture @@ -185,3 +185,35 @@ async def test_import_connection_legacy(hass, mock_gateway_info, assert len(mock_gateway_info.mock_calls) == 1 assert len(mock_entry_setup.mock_calls) == 1 + + +async def test_discovery_duplicate_aborted(hass): + """Test a duplicate discovery host is ignored.""" + MockConfigEntry( + domain='tradfri', + data={'host': 'some-host'} + ).add_to_hass(hass) + + flow = await hass.config_entries.flow.async_init( + 'tradfri', context={'source': 'discovery'}, data={ + 'host': 'some-host' + }) + + assert flow['type'] == data_entry_flow.RESULT_TYPE_ABORT + assert flow['reason'] == 'already_configured' + + +async def test_import_duplicate_aborted(hass): + """Test a duplicate discovery host is ignored.""" + MockConfigEntry( + domain='tradfri', + data={'host': 'some-host'} + ).add_to_hass(hass) + + flow = await hass.config_entries.flow.async_init( + 'tradfri', context={'source': 'import'}, data={ + 'host': 'some-host' + }) + + assert flow['type'] == data_entry_flow.RESULT_TYPE_ABORT + assert flow['reason'] == 'already_configured' diff --git a/tests/components/tradfri/test_init.py b/tests/components/tradfri/test_init.py new file mode 100644 index 00000000000..4527e87f605 --- /dev/null +++ b/tests/components/tradfri/test_init.py @@ -0,0 +1,72 @@ +"""Tests for Tradfri setup.""" +from unittest.mock import patch + +from homeassistant.setup import async_setup_component + +from tests.common import MockConfigEntry + + +async def test_config_yaml_host_not_imported(hass): + """Test that we don't import a configured host.""" + MockConfigEntry( + domain='tradfri', + data={'host': 'mock-host'} + ).add_to_hass(hass) + + with patch('homeassistant.components.tradfri.load_json', + return_value={}), \ + patch.object(hass.config_entries.flow, 'async_init') as mock_init: + assert await async_setup_component(hass, 'tradfri', { + 'tradfri': { + 'host': 'mock-host' + } + }) + + assert len(mock_init.mock_calls) == 0 + + +async def test_config_yaml_host_imported(hass): + """Test that we import a configured host.""" + with patch('homeassistant.components.tradfri.load_json', + return_value={}): + assert await async_setup_component(hass, 'tradfri', { + 'tradfri': { + 'host': 'mock-host' + } + }) + + progress = hass.config_entries.flow.async_progress() + assert len(progress) == 1 + assert progress[0]['handler'] == 'tradfri' + assert progress[0]['context'] == {'source': 'import'} + + +async def test_config_json_host_not_imported(hass): + """Test that we don't import a configured host.""" + MockConfigEntry( + domain='tradfri', + data={'host': 'mock-host'} + ).add_to_hass(hass) + + with patch('homeassistant.components.tradfri.load_json', + return_value={'mock-host': {'key': 'some-info'}}), \ + patch.object(hass.config_entries.flow, 'async_init') as mock_init: + assert await async_setup_component(hass, 'tradfri', { + 'tradfri': {} + }) + + assert len(mock_init.mock_calls) == 0 + + +async def test_config_json_host_imported(hass): + """Test that we import a configured host.""" + with patch('homeassistant.components.tradfri.load_json', + return_value={'mock-host': {'key': 'some-info'}}): + assert await async_setup_component(hass, 'tradfri', { + 'tradfri': {} + }) + + progress = hass.config_entries.flow.async_progress() + assert len(progress) == 1 + assert progress[0]['handler'] == 'tradfri' + assert progress[0]['context'] == {'source': 'import'} From fb39641eef7cf2d03304591e83a9de06c767ffc3 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 27 Sep 2018 23:10:07 +0200 Subject: [PATCH 23/38] Handle exception handling websocket command (#16927) * Handle exception handling websocket command * lint * Lint2 --- homeassistant/components/websocket_api.py | 9 ++++++++- tests/components/test_websocket_api.py | 19 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/websocket_api.py b/homeassistant/components/websocket_api.py index 9bd4aac4b6a..4e7c186facc 100644 --- a/homeassistant/components/websocket_api.py +++ b/homeassistant/components/websocket_api.py @@ -40,6 +40,7 @@ ERR_ID_REUSE = 1 ERR_INVALID_FORMAT = 2 ERR_NOT_FOUND = 3 ERR_UNKNOWN_COMMAND = 4 +ERR_UNKNOWN_ERROR = 5 TYPE_AUTH = 'auth' TYPE_AUTH_INVALID = 'auth_invalid' @@ -405,7 +406,13 @@ class ActiveConnection: else: handler, schema = handlers[msg['type']] - handler(self.hass, self, schema(msg)) + try: + handler(self.hass, self, schema(msg)) + except Exception: # pylint: disable=broad-except + _LOGGER.exception('Error handling message: %s', msg) + self.to_write.put_nowait(error_message( + cur_id, ERR_UNKNOWN_ERROR, + 'Unknown error.')) last_id = cur_id msg = await wsock.receive_json() diff --git a/tests/components/test_websocket_api.py b/tests/components/test_websocket_api.py index 199a9d804f8..cf74081adb1 100644 --- a/tests/components/test_websocket_api.py +++ b/tests/components/test_websocket_api.py @@ -1,6 +1,6 @@ """Tests for the Home Assistant Websocket API.""" import asyncio -from unittest.mock import patch +from unittest.mock import patch, Mock from aiohttp import WSMsgType from async_timeout import timeout @@ -539,3 +539,20 @@ async def test_call_service_context_no_user(hass, aiohttp_client): assert call.service == 'test_service' assert call.data == {'hello': 'world'} assert call.context.user_id is None + + +async def test_handler_failing(hass, websocket_client): + """Test a command that raises.""" + hass.components.websocket_api.async_register_command( + 'bla', Mock(side_effect=TypeError), + wapi.BASE_COMMAND_MESSAGE_SCHEMA.extend({'type': 'bla'})) + await websocket_client.send_json({ + 'id': 5, + 'type': 'bla', + }) + + msg = await websocket_client.receive_json() + assert msg['id'] == 5 + assert msg['type'] == wapi.TYPE_RESULT + assert not msg['success'] + assert msg['error']['code'] == wapi.ERR_UNKNOWN_ERROR From 7bfe0e1c00ff0cbf4c80042f70d06282f314615c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 27 Sep 2018 23:10:42 +0200 Subject: [PATCH 24/38] Bumped version to 0.79.0b3 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 4b4153ac89c..3afabdb2d3a 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 79 -PATCH_VERSION = '0b2' +PATCH_VERSION = '0b3' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 5, 3) From f476d781eca7e3b6228e5bd952c2b082a5095e6c Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 28 Sep 2018 15:28:24 +0200 Subject: [PATCH 25/38] Version bump to 0.79.0 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 3afabdb2d3a..d3888d2651e 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 79 -PATCH_VERSION = '0b3' +PATCH_VERSION = '0' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 5, 3) From 3e6cf8f59f5d673a002d675850cfd89bce7140ab Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Wed, 26 Sep 2018 15:38:13 -0700 Subject: [PATCH 26/38] Optimize Ring Sensors platform setup (#16886) --- homeassistant/components/binary_sensor/ring.py | 7 ++++--- homeassistant/components/sensor/ring.py | 10 ++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/binary_sensor/ring.py b/homeassistant/components/binary_sensor/ring.py index 102e22cbe2d..3945eb5c926 100644 --- a/homeassistant/components/binary_sensor/ring.py +++ b/homeassistant/components/binary_sensor/ring.py @@ -44,14 +44,15 @@ def setup_platform(hass, config, add_entities, discovery_info=None): ring = hass.data[DATA_RING] sensors = [] - for sensor_type in config.get(CONF_MONITORED_CONDITIONS): - for device in ring.doorbells: + for device in ring.doorbells: # ring.doorbells is doing I/O + for sensor_type in config[CONF_MONITORED_CONDITIONS]: if 'doorbell' in SENSOR_TYPES[sensor_type][1]: sensors.append(RingBinarySensor(hass, device, sensor_type)) - for device in ring.stickup_cams: + for device in ring.stickup_cams: # ring.stickup_cams is doing I/O + for sensor_type in config[CONF_MONITORED_CONDITIONS]: if 'stickup_cams' in SENSOR_TYPES[sensor_type][1]: sensors.append(RingBinarySensor(hass, device, diff --git a/homeassistant/components/sensor/ring.py b/homeassistant/components/sensor/ring.py index 31c0360cc23..408971c60e1 100644 --- a/homeassistant/components/sensor/ring.py +++ b/homeassistant/components/sensor/ring.py @@ -66,16 +66,18 @@ def setup_platform(hass, config, add_entities, discovery_info=None): ring = hass.data[DATA_RING] sensors = [] - for sensor_type in config.get(CONF_MONITORED_CONDITIONS): - for device in ring.chimes: + for device in ring.chimes: # ring.chimes is doing I/O + for sensor_type in config[CONF_MONITORED_CONDITIONS]: if 'chime' in SENSOR_TYPES[sensor_type][1]: sensors.append(RingSensor(hass, device, sensor_type)) - for device in ring.doorbells: + for device in ring.doorbells: # ring.doorbells is doing I/O + for sensor_type in config[CONF_MONITORED_CONDITIONS]: if 'doorbell' in SENSOR_TYPES[sensor_type][1]: sensors.append(RingSensor(hass, device, sensor_type)) - for device in ring.stickup_cams: + for device in ring.stickup_cams: # ring.stickup_cams is doing I/O + for sensor_type in config[CONF_MONITORED_CONDITIONS]: if 'stickup_cams' in SENSOR_TYPES[sensor_type][1]: sensors.append(RingSensor(hass, device, sensor_type)) From 3528f8e647ccb13a4c940bfe8053a9fb4a321e7c Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Sat, 29 Sep 2018 21:22:24 +0200 Subject: [PATCH 27/38] Fix exception during history_stats startup (#16932) * Fix exception during history_stats startup * Do not track changes during startup * Ignore args --- .../components/sensor/history_stats.py | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/homeassistant/components/sensor/history_stats.py b/homeassistant/components/sensor/history_stats.py index c76d2cefca0..a8d9276edc8 100644 --- a/homeassistant/components/sensor/history_stats.py +++ b/homeassistant/components/sensor/history_stats.py @@ -10,6 +10,7 @@ import math import voluptuous as vol +from homeassistant.core import callback from homeassistant.components import history import homeassistant.helpers.config_validation as cv import homeassistant.util.dt as dt_util @@ -19,7 +20,7 @@ from homeassistant.const import ( EVENT_HOMEASSISTANT_START) from homeassistant.exceptions import TemplateError from homeassistant.helpers.entity import Entity -from homeassistant.helpers.event import track_state_change +from homeassistant.helpers.event import async_track_state_change _LOGGER = logging.getLogger(__name__) @@ -94,8 +95,6 @@ class HistoryStatsSensor(Entity): self, hass, entity_id, entity_state, start, end, duration, sensor_type, name): """Initialize the HistoryStats sensor.""" - self._hass = hass - self._entity_id = entity_id self._entity_state = entity_state self._duration = duration @@ -109,15 +108,19 @@ class HistoryStatsSensor(Entity): self.value = None self.count = None - def force_refresh(*args): - """Force the component to refresh.""" - self.schedule_update_ha_state(True) + @callback + def start_refresh(*args): + """Register state tracking.""" + @callback + def force_refresh(*args): + """Force the component to refresh.""" + self.async_schedule_update_ha_state(True) - # Update value when home assistant starts - hass.bus.listen_once(EVENT_HOMEASSISTANT_START, force_refresh) + force_refresh() + async_track_state_change(self.hass, self._entity_id, force_refresh) - # Update value when tracked entity changes its state - track_state_change(hass, entity_id, force_refresh) + # Delay first refresh to keep startup fast + hass.bus.listen_once(EVENT_HOMEASSISTANT_START, start_refresh) @property def name(self): From 32d652884bbdf22bc5727efd057e3f77b1557c75 Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Sat, 29 Sep 2018 11:53:02 -0700 Subject: [PATCH 28/38] Override unique_id of NestActivityZoneSensor (#16961) --- homeassistant/components/binary_sensor/nest.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/homeassistant/components/binary_sensor/nest.py b/homeassistant/components/binary_sensor/nest.py index c60463a8663..7f7278d9789 100644 --- a/homeassistant/components/binary_sensor/nest.py +++ b/homeassistant/components/binary_sensor/nest.py @@ -147,6 +147,11 @@ class NestActivityZoneSensor(NestBinarySensor): self.zone = zone self._name = "{} {} activity".format(self._name, self.zone.name) + @property + def unique_id(self): + """Return unique id based on camera serial and zone id.""" + return "{}-{}".format(self.device.serial, self.zone.zone_id) + @property def device_class(self): """Return the device class of the binary sensor.""" From c45b240026ef04adaa264055c8d3e404f78d380c Mon Sep 17 00:00:00 2001 From: Greg Laabs Date: Sun, 30 Sep 2018 00:21:27 -0700 Subject: [PATCH 29/38] Fix ISY blocking bug (#16978) This fix results in `is_on` returning False if the state is unknown (which was a bug in 0.79). --- homeassistant/components/light/isy994.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/light/isy994.py b/homeassistant/components/light/isy994.py index 4349bfa1467..d54aa3cd4ce 100644 --- a/homeassistant/components/light/isy994.py +++ b/homeassistant/components/light/isy994.py @@ -31,12 +31,14 @@ class ISYLightDevice(ISYDevice, Light): @property def is_on(self) -> bool: """Get whether the ISY994 light is on.""" + if self.is_unknown(): + return False return self.value != 0 @property def brightness(self) -> float: """Get the brightness of the ISY994 light.""" - return self.value + return None if self.is_unknown() else self.value def turn_off(self, **kwargs) -> None: """Send the turn off command to the ISY994 light device.""" From e2aadc3227f7356d21541b514744e9d6626da395 Mon Sep 17 00:00:00 2001 From: Rohan Kapoor Date: Sun, 30 Sep 2018 00:21:07 -0700 Subject: [PATCH 30/38] Bump zm-py to 0.0.4 (#16979) --- homeassistant/components/zoneminder.py | 2 +- requirements_all.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/zoneminder.py b/homeassistant/components/zoneminder.py index 53d6d8b2536..b7f43177200 100644 --- a/homeassistant/components/zoneminder.py +++ b/homeassistant/components/zoneminder.py @@ -15,7 +15,7 @@ import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) -REQUIREMENTS = ['zm-py==0.0.3'] +REQUIREMENTS = ['zm-py==0.0.4'] CONF_PATH_ZMS = 'path_zms' diff --git a/requirements_all.txt b/requirements_all.txt index 61a412951f9..cdcab14d81c 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1567,4 +1567,4 @@ zigpy-xbee==0.1.1 zigpy==0.2.0 # homeassistant.components.zoneminder -zm-py==0.0.3 +zm-py==0.0.4 From 677714ecab4ef7e358c6b014a49a37d43827ae21 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 30 Sep 2018 10:22:49 +0200 Subject: [PATCH 31/38] Bumped version to 0.79.1 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index d3888d2651e..31e05c2c86b 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 79 -PATCH_VERSION = '0' +PATCH_VERSION = '1' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 5, 3) From 1ca2e5226be3e8ecb5c9125601594dc7e0f56b78 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 30 Sep 2018 21:36:27 +0200 Subject: [PATCH 32/38] Fix MQTT certificates (#16999) --- homeassistant/components/mqtt/__init__.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/mqtt/__init__.py b/homeassistant/components/mqtt/__init__.py index 70f20453633..874f21e5168 100644 --- a/homeassistant/components/mqtt/__init__.py +++ b/homeassistant/components/mqtt/__init__.py @@ -424,25 +424,22 @@ async def async_setup_entry(hass, entry): keepalive = conf[CONF_KEEPALIVE] username = conf.get(CONF_USERNAME) password = conf.get(CONF_PASSWORD) + certificate = conf.get(CONF_CERTIFICATE) client_key = conf.get(CONF_CLIENT_KEY) client_cert = conf.get(CONF_CLIENT_CERT) tls_insecure = conf.get(CONF_TLS_INSECURE) protocol = conf[CONF_PROTOCOL] # For cloudmqtt.com, secured connection, auto fill in certificate - if (conf.get(CONF_CERTIFICATE) is None and - 19999 < conf[CONF_PORT] < 30000 and - conf[CONF_BROKER].endswith('.cloudmqtt.com')): + if (certificate is None and 19999 < conf[CONF_PORT] < 30000 and + broker.endswith('.cloudmqtt.com')): certificate = os.path.join( os.path.dirname(__file__), 'addtrustexternalcaroot.crt') # When the certificate is set to auto, use bundled certs from requests - elif conf.get(CONF_CERTIFICATE) == 'auto': + elif certificate == 'auto': certificate = requests.certs.where() - else: - certificate = None - if CONF_WILL_MESSAGE in conf: will_message = Message(**conf[CONF_WILL_MESSAGE]) else: From d09ee8ac827c77a3eb3326340700742e770ff2a1 Mon Sep 17 00:00:00 2001 From: Rohan Kapoor Date: Mon, 1 Oct 2018 01:53:20 -0700 Subject: [PATCH 33/38] Fix switch.zoneminder name (#17026) --- homeassistant/components/switch/zoneminder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/switch/zoneminder.py b/homeassistant/components/switch/zoneminder.py index 265f94fbbb1..c28fe843b90 100644 --- a/homeassistant/components/switch/zoneminder.py +++ b/homeassistant/components/switch/zoneminder.py @@ -57,7 +57,7 @@ class ZMSwitchMonitors(SwitchDevice): @property def name(self): """Return the name of the switch.""" - return '{}\'s State'.format(self._monitor.name) + return '{} State'.format(self._monitor.name) def update(self): """Update the switch value.""" From 33a54043e91cd6404dd6806e96a1761bd84cb823 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 1 Oct 2018 15:08:56 +0200 Subject: [PATCH 34/38] Bumped version to 0.79.2 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 31e05c2c86b..6ae08af5047 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 79 -PATCH_VERSION = '1' +PATCH_VERSION = '2' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 5, 3) From 2feab82396d960cd412e273dc364f1b1cb881b77 Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Tue, 2 Oct 2018 00:21:02 -0700 Subject: [PATCH 35/38] Use Protractor loop in Windows (#17061) * Use Protractor loop in Windows * Add import sys --- homeassistant/util/async_.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/homeassistant/util/async_.py b/homeassistant/util/async_.py index 04456b8cb2f..61fbb60a24f 100644 --- a/homeassistant/util/async_.py +++ b/homeassistant/util/async_.py @@ -2,6 +2,7 @@ import concurrent.futures import threading import logging +import sys from asyncio import coroutines from asyncio.events import AbstractEventLoop from asyncio.futures import Future @@ -22,7 +23,10 @@ except AttributeError: def asyncio_run(main: Awaitable[_T], *, debug: bool = False) -> _T: """Minimal re-implementation of asyncio.run (since 3.7).""" - loop = asyncio.new_event_loop() + if sys.platform == 'win32': + loop = asyncio.ProactorEventLoop() + else: + loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.set_debug(debug) try: From 3f5018459f507353ba2c01fca871e2df0d8ac0a1 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 2 Oct 2018 09:55:37 +0200 Subject: [PATCH 36/38] Proactor policy fix (#17066) * Proactor policy fix * Backport Proactor policy for None: """Attempt to use uvloop.""" import asyncio + from asyncio.events import BaseDefaultEventLoopPolicy + + policy = None if sys.platform == 'win32': - asyncio.set_event_loop(asyncio.ProactorEventLoop()) + if hasattr(asyncio, 'WindowsProactorEventLoopPolicy'): + policy = asyncio.WindowsProactorEventLoopPolicy() + else: + class ProactorPolicy(BaseDefaultEventLoopPolicy): + """Event loop policy to create proactor loops.""" + + _loop_factory = asyncio.ProactorEventLoop + + policy = ProactorPolicy() else: try: import uvloop except ImportError: pass else: - asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) + policy = uvloop.EventLoopPolicy() + + if policy is not None: + asyncio.set_event_loop_policy(policy) def validate_python() -> None: diff --git a/homeassistant/util/async_.py b/homeassistant/util/async_.py index 61fbb60a24f..04456b8cb2f 100644 --- a/homeassistant/util/async_.py +++ b/homeassistant/util/async_.py @@ -2,7 +2,6 @@ import concurrent.futures import threading import logging -import sys from asyncio import coroutines from asyncio.events import AbstractEventLoop from asyncio.futures import Future @@ -23,10 +22,7 @@ except AttributeError: def asyncio_run(main: Awaitable[_T], *, debug: bool = False) -> _T: """Minimal re-implementation of asyncio.run (since 3.7).""" - if sys.platform == 'win32': - loop = asyncio.ProactorEventLoop() - else: - loop = asyncio.new_event_loop() + loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) loop.set_debug(debug) try: From e07b6dfe0b1403e53445bde5ada445d7bf19b14f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 2 Oct 2018 09:57:01 +0200 Subject: [PATCH 37/38] Bumped version to 0.79.3 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 6ae08af5047..59d19d2b29a 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -2,7 +2,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 79 -PATCH_VERSION = '2' +PATCH_VERSION = '3' __short_version__ = '{}.{}'.format(MAJOR_VERSION, MINOR_VERSION) __version__ = '{}.{}'.format(__short_version__, PATCH_VERSION) REQUIRED_PYTHON_VER = (3, 5, 3) From 03845ef4903de37db2b48e98a0bf14b0d05f1407 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 2 Oct 2018 10:35:00 +0200 Subject: [PATCH 38/38] Lint --- homeassistant/__main__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/homeassistant/__main__.py b/homeassistant/__main__.py index 973080c2e61..a424716f0aa 100644 --- a/homeassistant/__main__.py +++ b/homeassistant/__main__.py @@ -28,6 +28,7 @@ def set_loop() -> None: if sys.platform == 'win32': if hasattr(asyncio, 'WindowsProactorEventLoopPolicy'): + # pylint: disable=no-member policy = asyncio.WindowsProactorEventLoopPolicy() else: class ProactorPolicy(BaseDefaultEventLoopPolicy):