From 4431dd278cfbd7d481b9957bd194481d79959c3b Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 22 Apr 2020 20:28:56 +0200 Subject: [PATCH 01/63] Bumped version to 0.109.0b0 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 1605fc751f8..39fff8b6ea9 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -1,7 +1,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 109 -PATCH_VERSION = "0.dev0" +PATCH_VERSION = "0b0" __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER = (3, 7, 0) From 5f1855abf54345463fbdffdf8f3d70e7749b8585 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Thu, 23 Apr 2020 00:05:07 +0000 Subject: [PATCH 02/63] [ci skip] Translation update --- .../components/airvisual/translations/en.json | 24 ++++++++++- .../components/atag/translations/ca.json | 20 +++++++++ .../components/atag/translations/en.json | 20 +++++++++ .../components/atag/translations/fr.json | 12 ++++++ .../components/august/translations/pt.json | 12 ++++++ .../components/axis/translations/pt.json | 3 +- .../binary_sensor/translations/en.json | 4 +- .../binary_sensor/translations/pt.json | 43 +++++++++++++++++++ .../binary_sensor/translations/zh-Hant.json | 4 +- .../components/brother/translations/pt.json | 11 +++++ .../configurator/translations/pl.json | 2 +- .../components/deconz/translations/nl.json | 6 +++ .../components/deconz/translations/pt.json | 25 ++++++++++- .../components/doorbird/translations/pt.json | 17 ++++++++ .../components/elgato/translations/pt.json | 12 ++++++ .../components/elkm1/translations/pt.json | 12 ++++++ .../components/esphome/translations/hu.json | 2 +- .../components/flume/translations/pt.json | 12 ++++++ .../flunearyou/translations/pt.json | 12 ++++++ .../components/fritzbox/translations/fr.json | 21 +++++++++ .../components/fritzbox/translations/nl.json | 21 +++++++++ .../components/fritzbox/translations/pt.json | 21 +++++++++ .../garmin_connect/translations/pt.json | 12 ++++++ .../components/gdacs/translations/pt.json | 11 +++++ .../geonetnz_volcano/translations/pt.json | 11 +++++ .../components/group/translations/en.json | 4 +- .../components/group/translations/ru.json | 4 +- .../group/translations/zh-Hant.json | 4 +- .../homekit_controller/translations/hu.json | 2 +- .../huawei_lte/translations/pt.json | 3 +- .../components/icloud/translations/pt.json | 17 ++++++++ .../media_player/translations/pt.json | 8 ++++ .../media_player/translations/ru.json | 4 +- .../components/melcloud/translations/pt.json | 11 +++++ .../meteo_france/translations/pt.json | 12 ++++++ .../components/mikrotik/translations/pt.json | 12 ++++++ .../minecraft_server/translations/pt.json | 11 +++++ .../components/monoprice/translations/pl.json | 25 +++++++++++ .../components/mqtt/translations/pt.json | 2 +- .../components/myq/translations/pl.json | 21 +++++++++ .../components/myq/translations/pt.json | 12 ++++++ .../components/nexia/translations/pl.json | 21 +++++++++ .../components/nexia/translations/pt.json | 12 ++++++ .../components/notion/translations/pt.json | 3 +- .../components/nuheat/translations/pt.json | 12 ++++++ .../components/nut/translations/pt.json | 19 ++++++++ .../components/nws/translations/nl.json | 11 +++++ .../onboarding/translations/pt.json | 7 +++ .../panasonic_viera/translations/fr.json | 13 ++++++ .../panasonic_viera/translations/nl.json | 21 +++++++++ .../panasonic_viera/translations/pt.json | 10 +++++ .../components/plex/translations/pt.json | 14 +----- .../components/ring/translations/pt.json | 12 ++++++ .../components/roomba/translations/fr.json | 38 ++++------------ .../components/samsungtv/translations/pt.json | 11 +++++ .../season/translations/sensor.fr.json | 6 +++ .../season/translations/sensor.nl.json | 6 +++ .../components/sense/translations/pt.json | 11 +++++ .../simplisafe/translations/pt.json | 2 +- .../smartthings/translations/nl.json | 6 +++ .../components/starline/translations/pt.json | 28 ++++++++++++ .../synology_dsm/translations/ca.json | 4 +- .../synology_dsm/translations/nl.json | 5 +++ .../synology_dsm/translations/pt.json | 19 +++++++- .../components/tado/translations/pt.json | 12 ++++++ .../components/tesla/translations/pt.json | 12 ++++++ .../components/timer/translations/hu.json | 6 +-- .../transmission/translations/pt.json | 3 +- .../components/unifi/translations/pt.json | 9 +++- .../components/upnp/translations/en.json | 2 +- .../components/vacuum/translations/hu.json | 2 +- .../components/vesync/translations/pt.json | 2 +- .../components/vizio/translations/pt.json | 11 +++++ .../components/wled/translations/hu.json | 16 +++---- .../components/zha/translations/pt.json | 10 +++++ .../components/zwave/translations/hu.json | 4 +- .../components/zwave/translations/pl.json | 4 +- 77 files changed, 798 insertions(+), 88 deletions(-) create mode 100644 homeassistant/components/atag/translations/ca.json create mode 100644 homeassistant/components/atag/translations/en.json create mode 100644 homeassistant/components/atag/translations/fr.json create mode 100644 homeassistant/components/august/translations/pt.json create mode 100644 homeassistant/components/brother/translations/pt.json create mode 100644 homeassistant/components/doorbird/translations/pt.json create mode 100644 homeassistant/components/elgato/translations/pt.json create mode 100644 homeassistant/components/elkm1/translations/pt.json create mode 100644 homeassistant/components/flume/translations/pt.json create mode 100644 homeassistant/components/flunearyou/translations/pt.json create mode 100644 homeassistant/components/fritzbox/translations/fr.json create mode 100644 homeassistant/components/fritzbox/translations/nl.json create mode 100644 homeassistant/components/fritzbox/translations/pt.json create mode 100644 homeassistant/components/garmin_connect/translations/pt.json create mode 100644 homeassistant/components/gdacs/translations/pt.json create mode 100644 homeassistant/components/geonetnz_volcano/translations/pt.json create mode 100644 homeassistant/components/icloud/translations/pt.json create mode 100644 homeassistant/components/melcloud/translations/pt.json create mode 100644 homeassistant/components/meteo_france/translations/pt.json create mode 100644 homeassistant/components/mikrotik/translations/pt.json create mode 100644 homeassistant/components/minecraft_server/translations/pt.json create mode 100644 homeassistant/components/monoprice/translations/pl.json create mode 100644 homeassistant/components/myq/translations/pl.json create mode 100644 homeassistant/components/myq/translations/pt.json create mode 100644 homeassistant/components/nexia/translations/pl.json create mode 100644 homeassistant/components/nexia/translations/pt.json create mode 100644 homeassistant/components/nuheat/translations/pt.json create mode 100644 homeassistant/components/nut/translations/pt.json create mode 100644 homeassistant/components/nws/translations/nl.json create mode 100644 homeassistant/components/onboarding/translations/pt.json create mode 100644 homeassistant/components/panasonic_viera/translations/fr.json create mode 100644 homeassistant/components/panasonic_viera/translations/nl.json create mode 100644 homeassistant/components/ring/translations/pt.json create mode 100644 homeassistant/components/samsungtv/translations/pt.json create mode 100644 homeassistant/components/sense/translations/pt.json create mode 100644 homeassistant/components/starline/translations/pt.json create mode 100644 homeassistant/components/tado/translations/pt.json create mode 100644 homeassistant/components/tesla/translations/pt.json create mode 100644 homeassistant/components/vizio/translations/pt.json diff --git a/homeassistant/components/airvisual/translations/en.json b/homeassistant/components/airvisual/translations/en.json index c7f2c32b4e3..a3af2a7031b 100644 --- a/homeassistant/components/airvisual/translations/en.json +++ b/homeassistant/components/airvisual/translations/en.json @@ -13,7 +13,27 @@ "latitude": "Latitude", "longitude": "Longitude" }, - "description": "Monitor air quality in a geographical location.", + "description": "Use the AirVisual cloud API to monitor a geographical location.", + "title": "Configure a Geography" + }, + "node_pro": { + "data": { + "ip_address": "Unit IP Address/Hostname", + "password": "Unit Password" + }, + "description": "Monitor a personal AirVisual unit. The password can be retrieved from the unit's UI.", + "title": "Configure an AirVisual Node/Pro" + }, + "user": { + "data": { + "api_key": "API Key", + "cloud_api": "Geographical Location", + "latitude": "Latitude", + "longitude": "Longitude", + "node_pro": "AirVisual Node Pro", + "type": "Integration Type" + }, + "description": "Pick what type of AirVisual data you want to monitor.", "title": "Configure AirVisual" } } @@ -29,4 +49,4 @@ } } } -} \ No newline at end of file +} diff --git a/homeassistant/components/atag/translations/ca.json b/homeassistant/components/atag/translations/ca.json new file mode 100644 index 00000000000..994cc3c8fbe --- /dev/null +++ b/homeassistant/components/atag/translations/ca.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Nom\u00e9s es pot afegir un sol dispositiu Atag a Home Assistant" + }, + "error": { + "connection_error": "No s'ha pogut connectar, torna-ho a provar" + }, + "step": { + "user": { + "data": { + "host": "Amfitri\u00f3", + "port": "Port (10000)" + }, + "title": "Connexi\u00f3 amb el dispositiu" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/en.json b/homeassistant/components/atag/translations/en.json new file mode 100644 index 00000000000..edee94a8e04 --- /dev/null +++ b/homeassistant/components/atag/translations/en.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Only one Atag device can be added to Home Assistant" + }, + "error": { + "connection_error": "Failed to connect, please try again" + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Port (10000)" + }, + "title": "Connect to the device" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/fr.json b/homeassistant/components/atag/translations/fr.json new file mode 100644 index 00000000000..26b88fe4d20 --- /dev/null +++ b/homeassistant/components/atag/translations/fr.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "port": "Port (10000)" + }, + "title": "Se connecter \u00e0 l'appareil" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/august/translations/pt.json b/homeassistant/components/august/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/august/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/pt.json b/homeassistant/components/axis/translations/pt.json index 77ce7025f70..2dc5a14249f 100644 --- a/homeassistant/components/axis/translations/pt.json +++ b/homeassistant/components/axis/translations/pt.json @@ -10,5 +10,6 @@ } } } - } + }, + "title": "Dispositivo Axis" } \ No newline at end of file diff --git a/homeassistant/components/binary_sensor/translations/en.json b/homeassistant/components/binary_sensor/translations/en.json index 300fad7261f..c9a1ad15a8b 100644 --- a/homeassistant/components/binary_sensor/translations/en.json +++ b/homeassistant/components/binary_sensor/translations/en.json @@ -143,8 +143,8 @@ "on": "Open" }, "presence": { - "off": "[%key:component::device_tracker::state::not_home%]", - "on": "[%key:component::device_tracker::state::home%]" + "off": "Away", + "on": "Home" }, "problem": { "off": "OK", diff --git a/homeassistant/components/binary_sensor/translations/pt.json b/homeassistant/components/binary_sensor/translations/pt.json index 3942e8eff51..c71f43eca72 100644 --- a/homeassistant/components/binary_sensor/translations/pt.json +++ b/homeassistant/components/binary_sensor/translations/pt.json @@ -11,13 +11,56 @@ "is_moist": "{entity_name} est\u00e1 h\u00famido", "is_motion": "{entity_name} est\u00e1 a detectar movimento", "is_moving": "{entity_name} est\u00e1 a mexer", + "is_no_gas": "{entity_name} n\u00e3o est\u00e1 a detectar g\u00e1s", + "is_no_light": "{entity_name} n\u00e3o est\u00e1 a detectar a luz", + "is_no_motion": "{entity_name} n\u00e3o est\u00e1 a detectar movimento", + "is_no_problem": "{entity_name} n\u00e3o est\u00e1 a detectar o problema", + "is_no_smoke": "{entity_name} n\u00e3o est\u00e1 a detectar fumo", + "is_no_sound": "{entity_name} n\u00e3o est\u00e1 a detectar som", + "is_no_vibration": "{entity_name} n\u00e3o est\u00e1 a detectar vibra\u00e7\u00f5es", + "is_not_bat_low": "{entity_name} a bateria est\u00e1 normal", + "is_not_cold": "{entity_name} n\u00e3o est\u00e1 frio", + "is_not_connected": "{entity_name} est\u00e1 desligado", + "is_not_hot": "{entity_name} n\u00e3o est\u00e1 quente", + "is_not_locked": "{entity_name} est\u00e1 destrancado", + "is_not_moist": "{entity_name} est\u00e1 seco", + "is_not_moving": "{entity_name} n\u00e3o est\u00e1 a mexer", + "is_not_occupied": "{entity_name} n\u00e3o est\u00e1 ocupado", "is_not_open": "{entity_name} est\u00e1 fechada", + "is_not_plugged_in": "{entity_name} est\u00e1 desconectado", + "is_not_powered": "{entity_name} n\u00e3o est\u00e1 alimentado", + "is_not_present": "{entity_name} n\u00e3o est\u00e1 presente", + "is_not_unsafe": "{entity_name} est\u00e1 seguro", + "is_occupied": "{entity_name} est\u00e1 ocupado", "is_off": "{entity_name} est\u00e1 desligado", "is_on": "{entity_name} est\u00e1 ligado", + "is_open": "{entity_name} est\u00e1 aberto", + "is_plugged_in": "{entity_name} est\u00e1 conectado", + "is_powered": "{entity_name} est\u00e1 alimentado", + "is_present": "{entity_name} est\u00e1 presente", + "is_problem": "{entity_name} est\u00e1 a detectar um problema", + "is_smoke": "{entity_name} est\u00e1 a detectar fumo", + "is_sound": "{entity_name} est\u00e1 a detectar som", "is_vibration": "{entity_name} est\u00e1 a detectar vibra\u00e7\u00f5es" }, "trigger_type": { "moist": "ficou h\u00famido {entity_name}", + "moving": "{entity_name} come\u00e7ou a mover-se", + "no_gas": "{entity_name} deixou de detectar g\u00e1s", + "no_light": "{entity_name} deixou de detectar luz", + "no_motion": "{entity_name} deixou de detectar movimento", + "no_problem": "{entity_name} deixou de detectar problemas", + "no_smoke": "{entity_name} deixou de detectar fumo", + "no_sound": "{entity_name} deixou de detectar som", + "no_vibration": "{entity_name} deixou de detectar vibra\u00e7\u00e3o", + "not_bat_low": "{entity_name} bateria normal", + "not_cold": "{entity_name} deixou de estar frio", + "not_connected": "{entity_name} est\u00e1 desligado", + "not_hot": "{entity_name} deixou de estar quente", + "not_locked": "{entity_name} destrancado", + "not_moist": "{entity_name} ficou seco", + "not_moving": "{entity_name} deixou de se mover", + "not_occupied": "{entity_name} deixou de estar ocupado", "not_opened": "fechado {entity_name}", "not_plugged_in": "{entity_name} desligado", "not_powered": "{entity_name} n\u00e3o alimentado", diff --git a/homeassistant/components/binary_sensor/translations/zh-Hant.json b/homeassistant/components/binary_sensor/translations/zh-Hant.json index 89307b4c1ff..a78ecdcf8ef 100644 --- a/homeassistant/components/binary_sensor/translations/zh-Hant.json +++ b/homeassistant/components/binary_sensor/translations/zh-Hant.json @@ -143,8 +143,8 @@ "on": "\u958b\u555f" }, "presence": { - "off": "[%key:component::device_tracker::state::not_home%]", - "on": "[%key:component::device_tracker::state::home%]" + "off": "\u96e2\u5bb6", + "on": "\u5728\u5bb6" }, "problem": { "off": "\u78ba\u5b9a", diff --git a/homeassistant/components/brother/translations/pt.json b/homeassistant/components/brother/translations/pt.json new file mode 100644 index 00000000000..4f76c66c4f6 --- /dev/null +++ b/homeassistant/components/brother/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "type": "Tipo de impressora" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/configurator/translations/pl.json b/homeassistant/components/configurator/translations/pl.json index 98a82bd80ae..45e5af46722 100644 --- a/homeassistant/components/configurator/translations/pl.json +++ b/homeassistant/components/configurator/translations/pl.json @@ -1,7 +1,7 @@ { "state": { "_": { - "configure": "Skonfiguruj", + "configure": "skonfiguruj", "configured": "skonfigurowany" } }, diff --git a/homeassistant/components/deconz/translations/nl.json b/homeassistant/components/deconz/translations/nl.json index a139a4b9975..e1a9583e03b 100644 --- a/homeassistant/components/deconz/translations/nl.json +++ b/homeassistant/components/deconz/translations/nl.json @@ -29,6 +29,12 @@ "host": "Host", "port": "Poort" } + }, + "manual_input": { + "data": { + "host": "Host", + "port": "Poort" + } } } }, diff --git a/homeassistant/components/deconz/translations/pt.json b/homeassistant/components/deconz/translations/pt.json index 0cd41e650f9..b385af86ce5 100644 --- a/homeassistant/components/deconz/translations/pt.json +++ b/homeassistant/components/deconz/translations/pt.json @@ -21,18 +21,41 @@ "host": "Servidor", "port": "Porta" } + }, + "manual_input": { + "data": { + "host": "Servidor", + "port": "Porta" + } } } }, "device_automation": { "trigger_subtype": { + "both_buttons": "Ambos os bot\u00f5es", + "bottom_buttons": "Bot\u00f5es inferiores", + "button_1": "Primeiro bot\u00e3o", + "button_2": "Segundo bot\u00e3o", + "button_3": "Terceiro bot\u00e3o", + "button_4": "Quarto bot\u00e3o", + "close": "Fechar", + "dim_down": "Escurecer", + "dim_up": "Clariar", "left": "Esquerda", + "open": "Abrir", + "right": "Direita", "side_1": "Lado 1", "side_2": "Lado 2", "side_3": "Lado 3", "side_4": "Lado 4", "side_5": "Lado 5", - "side_6": "Lado 6" + "side_6": "Lado 6", + "top_buttons": "Bot\u00f5es superiores", + "turn_off": "Desligar", + "turn_on": "Ligar" + }, + "trigger_type": { + "remote_falling": "Dispositivo em queda livre" } } } \ No newline at end of file diff --git a/homeassistant/components/doorbird/translations/pt.json b/homeassistant/components/doorbird/translations/pt.json new file mode 100644 index 00000000000..6515658d6a7 --- /dev/null +++ b/homeassistant/components/doorbird/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "invalid_auth": "Autentica\u00e7\u00e3o inv\u00e1lida", + "unknown": "Erro inesperado" + }, + "step": { + "user": { + "data": { + "name": "Nome do dispositivo", + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elgato/translations/pt.json b/homeassistant/components/elgato/translations/pt.json new file mode 100644 index 00000000000..89c332cea25 --- /dev/null +++ b/homeassistant/components/elgato/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "host": "Nome servidor ou endere\u00e7o IP", + "port": "N\u00famero da porta" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/pt.json b/homeassistant/components/elkm1/translations/pt.json new file mode 100644 index 00000000000..83e574aa2e2 --- /dev/null +++ b/homeassistant/components/elkm1/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe (segura apenas)", + "username": "Nome de utilizador (apenas seguro)." + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/esphome/translations/hu.json b/homeassistant/components/esphome/translations/hu.json index b023bd03cbe..a178860d420 100644 --- a/homeassistant/components/esphome/translations/hu.json +++ b/homeassistant/components/esphome/translations/hu.json @@ -27,7 +27,7 @@ "port": "Port" }, "description": "K\u00e9rlek, add meg az [ESPHome](https://esphomelib.com/) csom\u00f3pontod kapcsol\u00f3d\u00e1si be\u00e1ll\u00edt\u00e1sait.", - "title": "[%key:component::esphome::title%]" + "title": "ESPHome" } } } diff --git a/homeassistant/components/flume/translations/pt.json b/homeassistant/components/flume/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/flume/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/pt.json b/homeassistant/components/flunearyou/translations/pt.json new file mode 100644 index 00000000000..c7081cd694a --- /dev/null +++ b/homeassistant/components/flunearyou/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/fr.json b/homeassistant/components/fritzbox/translations/fr.json new file mode 100644 index 00000000000..8c62d2806c3 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/fr.json @@ -0,0 +1,21 @@ +{ + "config": { + "error": { + "auth_failed": "Le nom d'utilisateur et / ou le mot de passe sont incorrects." + }, + "step": { + "confirm": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur" + } + }, + "user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/nl.json b/homeassistant/components/fritzbox/translations/nl.json new file mode 100644 index 00000000000..4617a07a5b6 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/nl.json @@ -0,0 +1,21 @@ +{ + "config": { + "error": { + "auth_failed": "Ongeldige gebruikersnaam of wachtwoord" + }, + "step": { + "confirm": { + "data": { + "password": "Wachtwoord", + "username": "Gebruikersnaam" + } + }, + "user": { + "data": { + "password": "Wachtwoord", + "username": "Gebruikersnaam" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/pt.json b/homeassistant/components/fritzbox/translations/pt.json new file mode 100644 index 00000000000..bd20deada06 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/pt.json @@ -0,0 +1,21 @@ +{ + "config": { + "error": { + "auth_failed": "Nome de utilizador ou palavra passe incorretos" + }, + "step": { + "confirm": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + }, + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/garmin_connect/translations/pt.json b/homeassistant/components/garmin_connect/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/garmin_connect/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/gdacs/translations/pt.json b/homeassistant/components/gdacs/translations/pt.json new file mode 100644 index 00000000000..98180e11248 --- /dev/null +++ b/homeassistant/components/gdacs/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "radius": "Raio" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/geonetnz_volcano/translations/pt.json b/homeassistant/components/geonetnz_volcano/translations/pt.json new file mode 100644 index 00000000000..98180e11248 --- /dev/null +++ b/homeassistant/components/geonetnz_volcano/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "radius": "Raio" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/en.json b/homeassistant/components/group/translations/en.json index 2f6ee5c2d40..271ada378ca 100644 --- a/homeassistant/components/group/translations/en.json +++ b/homeassistant/components/group/translations/en.json @@ -2,9 +2,9 @@ "state": { "_": { "closed": "Closed", - "home": "[%key:component::device_tracker::state::home%]", + "home": "Home", "locked": "Locked", - "not_home": "[%key:component::device_tracker::state::not_home%]", + "not_home": "Away", "off": "Off", "ok": "OK", "on": "On", diff --git a/homeassistant/components/group/translations/ru.json b/homeassistant/components/group/translations/ru.json index 01fac1581ca..7103b9f75d0 100644 --- a/homeassistant/components/group/translations/ru.json +++ b/homeassistant/components/group/translations/ru.json @@ -3,14 +3,14 @@ "_": { "closed": "\u0417\u0430\u043a\u0440\u044b\u0442\u043e", "home": "\u0414\u043e\u043c\u0430", - "locked": "\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0430", + "locked": "\u0417\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043e", "not_home": "\u041d\u0435 \u0434\u043e\u043c\u0430", "off": "\u0412\u044b\u043a\u043b", "ok": "\u041e\u041a", "on": "\u0412\u043a\u043b", "open": "\u041e\u0442\u043a\u0440\u044b\u0442\u043e", "problem": "\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430", - "unlocked": "\u0420\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0430" + "unlocked": "\u0420\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043e" } }, "title": "\u0413\u0440\u0443\u043f\u043f\u0430" diff --git a/homeassistant/components/group/translations/zh-Hant.json b/homeassistant/components/group/translations/zh-Hant.json index 6bf7487c041..790feb0c5ff 100644 --- a/homeassistant/components/group/translations/zh-Hant.json +++ b/homeassistant/components/group/translations/zh-Hant.json @@ -2,9 +2,9 @@ "state": { "_": { "closed": "\u95dc\u9589", - "home": "[%key:component::device_tracker::state::home%]", + "home": "\u5728\u5bb6", "locked": "\u5df2\u4e0a\u9396", - "not_home": "[%key:component::device_tracker::state::not_home%]", + "not_home": "\u96e2\u5bb6", "off": "\u95dc\u9589", "ok": "\u6b63\u5e38", "on": "\u958b\u555f", diff --git a/homeassistant/components/homekit_controller/translations/hu.json b/homeassistant/components/homekit_controller/translations/hu.json index 53645196388..c6d81d985bb 100644 --- a/homeassistant/components/homekit_controller/translations/hu.json +++ b/homeassistant/components/homekit_controller/translations/hu.json @@ -36,5 +36,5 @@ } } }, - "title": "HomeKit tartoz\u00e9k" + "title": "HomeKit Vez\u00e9rl\u0151" } \ No newline at end of file diff --git a/homeassistant/components/huawei_lte/translations/pt.json b/homeassistant/components/huawei_lte/translations/pt.json index a55c5933260..a71678deecc 100644 --- a/homeassistant/components/huawei_lte/translations/pt.json +++ b/homeassistant/components/huawei_lte/translations/pt.json @@ -5,6 +5,7 @@ "already_in_progress": "Este dispositivo j\u00e1 est\u00e1 a ser configurado" }, "error": { + "connection_timeout": "Liga\u00e7\u00e3o expirou", "incorrect_password": "Palavra-passe incorreta", "incorrect_username": "Nome de Utilizador incorreto", "incorrect_username_or_password": "Nome de utilizador ou palavra passe incorretos" @@ -14,7 +15,7 @@ "data": { "password": "Palavra-passe", "url": "", - "username": "Utilizador" + "username": "Nome do utilizador" }, "title": "Configurar o Huawei LTE" } diff --git a/homeassistant/components/icloud/translations/pt.json b/homeassistant/components/icloud/translations/pt.json new file mode 100644 index 00000000000..420196bb050 --- /dev/null +++ b/homeassistant/components/icloud/translations/pt.json @@ -0,0 +1,17 @@ +{ + "config": { + "step": { + "trusted_device": { + "data": { + "trusted_device": "Dispositivo confi\u00e1vel" + } + }, + "user": { + "data": { + "password": "Palavra-passe", + "username": "Email" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/pt.json b/homeassistant/components/media_player/translations/pt.json index 41399a76ad2..a3c741ce0e2 100644 --- a/homeassistant/components/media_player/translations/pt.json +++ b/homeassistant/components/media_player/translations/pt.json @@ -1,4 +1,12 @@ { + "device_automation": { + "condition_type": { + "is_off": "{entity_name} est\u00e1 desligada", + "is_on": "{entity_name} est\u00e1 ligada", + "is_paused": "{entity_name} est\u00e1 em pausa", + "is_playing": "{entity_name} est\u00e1 a reproduzir" + } + }, "state": { "_": { "idle": "Em espera", diff --git a/homeassistant/components/media_player/translations/ru.json b/homeassistant/components/media_player/translations/ru.json index 6f5a7cd5234..8ed46953675 100644 --- a/homeassistant/components/media_player/translations/ru.json +++ b/homeassistant/components/media_player/translations/ru.json @@ -11,8 +11,8 @@ "state": { "_": { "idle": "\u0411\u0435\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435", - "off": "\u0412\u044b\u043a\u043b", - "on": "\u0412\u043a\u043b", + "off": "\u0412\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u043e", + "on": "\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e", "paused": "\u041f\u0430\u0443\u0437\u0430", "playing": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435", "standby": "\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435" diff --git a/homeassistant/components/melcloud/translations/pt.json b/homeassistant/components/melcloud/translations/pt.json new file mode 100644 index 00000000000..c09e8c63d11 --- /dev/null +++ b/homeassistant/components/melcloud/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe MELCloud" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/meteo_france/translations/pt.json b/homeassistant/components/meteo_france/translations/pt.json new file mode 100644 index 00000000000..025d58f5197 --- /dev/null +++ b/homeassistant/components/meteo_france/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "city": "Cidade" + }, + "title": "" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mikrotik/translations/pt.json b/homeassistant/components/mikrotik/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/mikrotik/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/minecraft_server/translations/pt.json b/homeassistant/components/minecraft_server/translations/pt.json new file mode 100644 index 00000000000..286cd58dd89 --- /dev/null +++ b/homeassistant/components/minecraft_server/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "Nome" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/monoprice/translations/pl.json b/homeassistant/components/monoprice/translations/pl.json new file mode 100644 index 00000000000..d0a3d1751a7 --- /dev/null +++ b/homeassistant/components/monoprice/translations/pl.json @@ -0,0 +1,25 @@ +{ + "config": { + "abort": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "port": "Port szeregowy", + "source_1": "Nazwa \u017ar\u00f3d\u0142a #1", + "source_2": "Nazwa \u017ar\u00f3d\u0142a #2", + "source_3": "Nazwa \u017ar\u00f3d\u0142a #3", + "source_4": "Nazwa \u017ar\u00f3d\u0142a #4", + "source_5": "Nazwa \u017ar\u00f3d\u0142a #5", + "source_6": "Nazwa \u017ar\u00f3d\u0142a #6" + }, + "title": "Po\u0142\u0105cz z urz\u0105dzeniem" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/mqtt/translations/pt.json b/homeassistant/components/mqtt/translations/pt.json index 0776c148e90..ef17b291566 100644 --- a/homeassistant/components/mqtt/translations/pt.json +++ b/homeassistant/components/mqtt/translations/pt.json @@ -13,7 +13,7 @@ "discovery": "Ativar descoberta", "password": "Palavra-passe", "port": "Porto", - "username": "Utilizador" + "username": "Nome de Utilizador" }, "description": "Por favor, insira os detalhes de liga\u00e7\u00e3o ao seu broker MQTT.", "title": "MQTT" diff --git a/homeassistant/components/myq/translations/pl.json b/homeassistant/components/myq/translations/pl.json new file mode 100644 index 00000000000..74220a6518b --- /dev/null +++ b/homeassistant/components/myq/translations/pl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "MyQ jest ju\u017c skonfigurowane." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Po\u0142\u0105czenie z bramk\u0105 MyQ" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/myq/translations/pt.json b/homeassistant/components/myq/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/myq/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/pl.json b/homeassistant/components/nexia/translations/pl.json new file mode 100644 index 00000000000..0819834fcc8 --- /dev/null +++ b/homeassistant/components/nexia/translations/pl.json @@ -0,0 +1,21 @@ +{ + "config": { + "abort": { + "already_configured": "nexia jest ju\u017c skonfigurowane." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Po\u0142\u0105czenie z mynexia.com" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nexia/translations/pt.json b/homeassistant/components/nexia/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/nexia/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/notion/translations/pt.json b/homeassistant/components/notion/translations/pt.json index e379229ec3a..b09d2c55929 100644 --- a/homeassistant/components/notion/translations/pt.json +++ b/homeassistant/components/notion/translations/pt.json @@ -6,7 +6,8 @@ "step": { "user": { "data": { - "password": "Palavra-passe" + "password": "Palavra-passe", + "username": "Nome de utilizador / Endere\u00e7o de e-mail" } } } diff --git a/homeassistant/components/nuheat/translations/pt.json b/homeassistant/components/nuheat/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/nuheat/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/pt.json b/homeassistant/components/nut/translations/pt.json new file mode 100644 index 00000000000..4ebc88bb1cf --- /dev/null +++ b/homeassistant/components/nut/translations/pt.json @@ -0,0 +1,19 @@ +{ + "config": { + "step": { + "ups": { + "data": { + "resources": "Recursos" + } + }, + "user": { + "data": { + "host": "Servidor", + "password": "Palavra-passe", + "port": "Porta", + "username": "Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nws/translations/nl.json b/homeassistant/components/nws/translations/nl.json new file mode 100644 index 00000000000..590b9c90e12 --- /dev/null +++ b/homeassistant/components/nws/translations/nl.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "longitude": "Lengtegraad" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/onboarding/translations/pt.json b/homeassistant/components/onboarding/translations/pt.json new file mode 100644 index 00000000000..d5a09a0b240 --- /dev/null +++ b/homeassistant/components/onboarding/translations/pt.json @@ -0,0 +1,7 @@ +{ + "area": { + "bedroom": "Quarto", + "kitchen": "Cozinha", + "living_room": "Sala de estar" + } +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/fr.json b/homeassistant/components/panasonic_viera/translations/fr.json new file mode 100644 index 00000000000..5cf966fc9e6 --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/fr.json @@ -0,0 +1,13 @@ +{ + "config": { + "step": { + "user": { + "data": { + "host": "Adresse IP", + "name": "Nom" + }, + "title": "Configurer votre t\u00e9l\u00e9viseur" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/nl.json b/homeassistant/components/panasonic_viera/translations/nl.json new file mode 100644 index 00000000000..79bc899c477 --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/nl.json @@ -0,0 +1,21 @@ +{ + "config": { + "error": { + "invalid_pin_code": "De ingevoerde pincode is ongeldig" + }, + "step": { + "pairing": { + "data": { + "pin": "PIN" + } + }, + "user": { + "data": { + "host": "IP-adres", + "name": "Naam" + }, + "title": "Uw tv instellen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/pt.json b/homeassistant/components/panasonic_viera/translations/pt.json index 0d9831f1dc8..e9d63f1114f 100644 --- a/homeassistant/components/panasonic_viera/translations/pt.json +++ b/homeassistant/components/panasonic_viera/translations/pt.json @@ -1,7 +1,17 @@ { "config": { "step": { + "pairing": { + "data": { + "pin": "PIN" + }, + "title": "Emparelhamento" + }, "user": { + "data": { + "host": "Endere\u00e7o IP", + "name": "Nome" + }, "title": "Configure a sua TV" } } diff --git a/homeassistant/components/plex/translations/pt.json b/homeassistant/components/plex/translations/pt.json index 4312910653f..ebf1df9c18f 100644 --- a/homeassistant/components/plex/translations/pt.json +++ b/homeassistant/components/plex/translations/pt.json @@ -1,19 +1,9 @@ { "config": { "step": { - "manual_setup": { + "select_server": { "data": { - "host": "Servidor", - "port": "Porta" - } - } - } - }, - "options": { - "step": { - "plex_mp_settings": { - "data": { - "show_all_controls": "Mostrar todos os controles" + "server": "Servidor" } } } diff --git a/homeassistant/components/ring/translations/pt.json b/homeassistant/components/ring/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/ring/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/fr.json b/homeassistant/components/roomba/translations/fr.json index 5f59144727f..0151782bf1b 100644 --- a/homeassistant/components/roomba/translations/fr.json +++ b/homeassistant/components/roomba/translations/fr.json @@ -1,33 +1,11 @@ { - "config": { - "title": "iRobot Roomba", - "step": { - "user": { - "title": "Connexion au périphérique", - "description": "Actuellement la récupération du BLID et du mot de passe nécessite une procédure manuelle. Veuillez suivre les étapes décrites dans la documentation sur: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", - "data": { - "host": "Nom ou Addresse IP", - "blid": "BLID", - "password": "Mot de passe", - "certificate": "Certificat", - "continuous": "Continue", - "delay": "Delais" + "options": { + "step": { + "init": { + "data": { + "delay": "D\u00e9lai" + } + } } - } - }, - "error": { - "unknown" : "Erreur imprévu", - "cannot_connect": "Impossible de se connecter" } - }, - "options": { - "step": { - "init": { - "data": { - "continuous": "Continue", - "delay": "Delais" - } - } - } - } -} +} \ No newline at end of file diff --git a/homeassistant/components/samsungtv/translations/pt.json b/homeassistant/components/samsungtv/translations/pt.json new file mode 100644 index 00000000000..286cd58dd89 --- /dev/null +++ b/homeassistant/components/samsungtv/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "Nome" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.fr.json b/homeassistant/components/season/translations/sensor.fr.json index cf59614e8ac..cf2e8155dfe 100644 --- a/homeassistant/components/season/translations/sensor.fr.json +++ b/homeassistant/components/season/translations/sensor.fr.json @@ -1,5 +1,11 @@ { "state": { + "season__season": { + "autumn": "Automne", + "spring": "Printemps", + "summer": "\u00c9t\u00e9", + "winter": "Hiver" + }, "season__season__": { "autumn": "Automne", "spring": "Printemps", diff --git a/homeassistant/components/season/translations/sensor.nl.json b/homeassistant/components/season/translations/sensor.nl.json index 4c2511bbc7d..6391dc4d73d 100644 --- a/homeassistant/components/season/translations/sensor.nl.json +++ b/homeassistant/components/season/translations/sensor.nl.json @@ -1,5 +1,11 @@ { "state": { + "season__season": { + "autumn": "Herfst", + "spring": "Lente", + "summer": "Zomer", + "winter": "Winter" + }, "season__season__": { "autumn": "Herfst", "spring": "Lente", diff --git a/homeassistant/components/sense/translations/pt.json b/homeassistant/components/sense/translations/pt.json new file mode 100644 index 00000000000..b8a454fbaba --- /dev/null +++ b/homeassistant/components/sense/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/simplisafe/translations/pt.json b/homeassistant/components/simplisafe/translations/pt.json index d5234ea3011..731ab4ad9a0 100644 --- a/homeassistant/components/simplisafe/translations/pt.json +++ b/homeassistant/components/simplisafe/translations/pt.json @@ -8,7 +8,7 @@ "user": { "data": { "password": "Palavra-passe", - "username": "Endere\u00e7o de e-mail" + "username": "Endere\u00e7o de correio eletr\u00f3nico" }, "title": "Preencha as suas informa\u00e7\u00f5es" } diff --git a/homeassistant/components/smartthings/translations/nl.json b/homeassistant/components/smartthings/translations/nl.json index 7e65645928e..b7e40798e83 100644 --- a/homeassistant/components/smartthings/translations/nl.json +++ b/homeassistant/components/smartthings/translations/nl.json @@ -8,6 +8,12 @@ "webhook_error": "SmartThings kon het in 'base_url` geconfigureerde endpoint niet goedkeuren. Lees de componentvereisten door." }, "step": { + "select_location": { + "data": { + "location_id": "Locatie" + }, + "title": "Locatie selecteren" + }, "user": { "description": "Voer een SmartThings [Personal Access Token]({token_url}) in die is aangemaakt volgens de [instructies]({component_url}).", "title": "Persoonlijk toegangstoken invoeren" diff --git a/homeassistant/components/starline/translations/pt.json b/homeassistant/components/starline/translations/pt.json new file mode 100644 index 00000000000..4bd578b953f --- /dev/null +++ b/homeassistant/components/starline/translations/pt.json @@ -0,0 +1,28 @@ +{ + "config": { + "error": { + "error_auth_mfa": "C\u00f3digo incorreto", + "error_auth_user": "Nome de utilizador ou palavra passe incorretos" + }, + "step": { + "auth_app": { + "data": { + "app_secret": "Segredo" + } + }, + "auth_mfa": { + "data": { + "mfa_code": "C\u00f3digo SMS" + } + }, + "auth_user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + }, + "description": "Conta de email StarLine e palavra-passe", + "title": "Credenciais de utilizador" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/ca.json b/homeassistant/components/synology_dsm/translations/ca.json index 8ed10616a5e..f593ac26182 100644 --- a/homeassistant/components/synology_dsm/translations/ca.json +++ b/homeassistant/components/synology_dsm/translations/ca.json @@ -4,9 +4,11 @@ "already_configured": "L'amfitri\u00f3 ja est\u00e0 configurat" }, "error": { + "connection": "Error de connexi\u00f3: comprova l'amfitri\u00f3, la contrasenya i l'SSL", "login": "Error d\u2019inici de sessi\u00f3: comprova el nom d'usuari i la contrasenya", "missing_data": "Falten dades: torna-ho a provar m\u00e9s tard o prova una altra configuraci\u00f3 diferent", - "otp_failed": "L'autenticaci\u00f3 en dos passos ha fallat, torna-ho a provar amb un nou codi" + "otp_failed": "L'autenticaci\u00f3 en dos passos ha fallat, torna-ho a provar amb un nou codi", + "unknown": "Error desconegut: consulta els registres per a m\u00e9s detalls." }, "flow_title": "Synology DSM {name} ({host})", "step": { diff --git a/homeassistant/components/synology_dsm/translations/nl.json b/homeassistant/components/synology_dsm/translations/nl.json index 5d6f5e53c5d..bda3e337dda 100644 --- a/homeassistant/components/synology_dsm/translations/nl.json +++ b/homeassistant/components/synology_dsm/translations/nl.json @@ -5,6 +5,11 @@ }, "flow_title": "Synology DSM {name} ({host})", "step": { + "2sa": { + "data": { + "otp_code": "Code" + } + }, "link": { "data": { "api_version": "DSM-versie", diff --git a/homeassistant/components/synology_dsm/translations/pt.json b/homeassistant/components/synology_dsm/translations/pt.json index 2c651539321..446b2d6a134 100644 --- a/homeassistant/components/synology_dsm/translations/pt.json +++ b/homeassistant/components/synology_dsm/translations/pt.json @@ -1,9 +1,26 @@ { "config": { + "error": { + "login": "Erro de autentica\u00e7\u00e3o: verifique seu nome de utilizador e palavra-passe" + }, "step": { + "2sa": { + "data": { + "otp_code": "C\u00f3digo" + } + }, + "link": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + }, "user": { "data": { - "port": "Porta (opcional)" + "host": "Servidor", + "password": "Palavra-passe", + "port": "Porta (opcional)", + "username": "Nome de Utilizador" } } } diff --git a/homeassistant/components/tado/translations/pt.json b/homeassistant/components/tado/translations/pt.json new file mode 100644 index 00000000000..b4642359973 --- /dev/null +++ b/homeassistant/components/tado/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Nome de Utilizador" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tesla/translations/pt.json b/homeassistant/components/tesla/translations/pt.json new file mode 100644 index 00000000000..0df67a94182 --- /dev/null +++ b/homeassistant/components/tesla/translations/pt.json @@ -0,0 +1,12 @@ +{ + "config": { + "step": { + "user": { + "data": { + "password": "Palavra-passe", + "username": "Endere\u00e7o de e-mail" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/hu.json b/homeassistant/components/timer/translations/hu.json index da6809f49b1..0f7314e662e 100644 --- a/homeassistant/components/timer/translations/hu.json +++ b/homeassistant/components/timer/translations/hu.json @@ -1,9 +1,9 @@ { "state": { "_": { - "active": "akt\u00edv", - "idle": "t\u00e9tlen", - "paused": "sz\u00fcneteltetve" + "active": "Akt\u00edv", + "idle": "T\u00e9tlen", + "paused": "Sz\u00fcnetel" } } } \ No newline at end of file diff --git a/homeassistant/components/transmission/translations/pt.json b/homeassistant/components/transmission/translations/pt.json index 0421228d0f0..6b238362fd6 100644 --- a/homeassistant/components/transmission/translations/pt.json +++ b/homeassistant/components/transmission/translations/pt.json @@ -7,9 +7,10 @@ "user": { "data": { "host": "Servidor", + "name": "Nome", "password": "Palavra-passe", "port": "Porta", - "username": "Utilizador" + "username": "Nome de Utilizador" } } } diff --git a/homeassistant/components/unifi/translations/pt.json b/homeassistant/components/unifi/translations/pt.json index 3c1bfdbd8be..123385313e9 100644 --- a/homeassistant/components/unifi/translations/pt.json +++ b/homeassistant/components/unifi/translations/pt.json @@ -24,13 +24,17 @@ }, "options": { "step": { + "client_control": { + "title": "Op\u00e7\u00f5es UniFi 2/3" + }, "device_tracker": { "data": { "detection_time": "Tempo em segundos desde a \u00faltima vez que foi visto at\u00e9 ser considerado afastado", "track_clients": "Acompanhar clientes da rede", "track_devices": "Acompanhar dispositivos de rede (dispositivos Ubiquiti)", "track_wired_clients": "Incluir clientes da rede cablada" - } + }, + "title": "Op\u00e7\u00f5es UniFi 1/3" }, "init": { "data": { @@ -41,7 +45,8 @@ "statistics_sensors": { "data": { "allow_bandwidth_sensors": "Criar sensores de uso de largura de banda para clientes da rede" - } + }, + "title": "Op\u00e7\u00f5es UniFi 3/3" } } } diff --git a/homeassistant/components/upnp/translations/en.json b/homeassistant/components/upnp/translations/en.json index a23a0fc7466..6da89c0e3d6 100644 --- a/homeassistant/components/upnp/translations/en.json +++ b/homeassistant/components/upnp/translations/en.json @@ -22,7 +22,7 @@ "enable_sensors": "Add traffic sensors", "igd": "UPnP/IGD" }, - "title": "Configuration options for the UPnP/IGD" + "title": "Configuration options" } } } diff --git a/homeassistant/components/vacuum/translations/hu.json b/homeassistant/components/vacuum/translations/hu.json index ef7a096468a..58d57124db0 100644 --- a/homeassistant/components/vacuum/translations/hu.json +++ b/homeassistant/components/vacuum/translations/hu.json @@ -21,7 +21,7 @@ "idle": "T\u00e9tlen", "off": "Ki", "on": "Be", - "paused": "Sz\u00fcneteltetve", + "paused": "Sz\u00fcnetel", "returning": "Dokkol\u00e1s folyamatban" } }, diff --git a/homeassistant/components/vesync/translations/pt.json b/homeassistant/components/vesync/translations/pt.json index 395907056e9..4df94dd3231 100644 --- a/homeassistant/components/vesync/translations/pt.json +++ b/homeassistant/components/vesync/translations/pt.json @@ -7,7 +7,7 @@ "user": { "data": { "password": "Palavra-passe", - "username": "Endere\u00e7o de e-mail" + "username": "Endere\u00e7o de email" }, "title": "Introduza o nome de utilizador e a palavra-passe" } diff --git a/homeassistant/components/vizio/translations/pt.json b/homeassistant/components/vizio/translations/pt.json new file mode 100644 index 00000000000..286cd58dd89 --- /dev/null +++ b/homeassistant/components/vizio/translations/pt.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "name": "Nome" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/wled/translations/hu.json b/homeassistant/components/wled/translations/hu.json index 45f939cb855..5ffd902214e 100644 --- a/homeassistant/components/wled/translations/hu.json +++ b/homeassistant/components/wled/translations/hu.json @@ -1,24 +1,24 @@ { "config": { "abort": { - "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", - "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + "already_configured": "Ez a WLED eszk\u00f6z m\u00e1r konfigur\u00e1lva van.", + "connection_error": "Nem siker\u00fclt csatlakozni a WLED eszk\u00f6zh\u00f6z." }, "error": { - "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + "connection_error": "Nem siker\u00fclt csatlakozni a WLED eszk\u00f6zh\u00f6z." }, - "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "flow_title": "WLED: {name}", "step": { "user": { "data": { "host": "Hosztn\u00e9v vagy IP c\u00edm" }, - "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", - "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + "description": "\u00c1ll\u00edtsd be a WLED-et a Home Assistant-ba val\u00f3 integr\u00e1l\u00e1shoz.", + "title": "Csatlakoztasd a WLED-et" }, "zeroconf_confirm": { - "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", - "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + "description": "Szeretn\u00e9d hozz\u00e1adni a(z) `{name}` WLED-et a Home Assistant-hoz?", + "title": "Felfedezett WLED eszk\u00f6z" } } } diff --git a/homeassistant/components/zha/translations/pt.json b/homeassistant/components/zha/translations/pt.json index 42221f7ae83..2c810af8eae 100644 --- a/homeassistant/components/zha/translations/pt.json +++ b/homeassistant/components/zha/translations/pt.json @@ -21,6 +21,16 @@ "warn": "Avisar" }, "trigger_subtype": { + "both_buttons": "Ambos os bot\u00f5es", + "button_1": "Primeiro bot\u00e3o", + "button_2": "Segundo bot\u00e3o", + "button_3": "Terceiro bot\u00e3o", + "button_4": "Quarto bot\u00e3o", + "button_5": "Quinto bot\u00e3o", + "button_6": "Sexto bot\u00e3o", + "close": "Fechar", + "dim_down": "Escurecer", + "dim_up": "Clariar", "left": "Esquerda" } } diff --git a/homeassistant/components/zwave/translations/hu.json b/homeassistant/components/zwave/translations/hu.json index 3d5641b45ac..72026949c78 100644 --- a/homeassistant/components/zwave/translations/hu.json +++ b/homeassistant/components/zwave/translations/hu.json @@ -26,8 +26,8 @@ "sleeping": "Alv\u00e1s" }, "query_stage": { - "dead": "Halott ({query_stage})", - "initializing": "Inicializ\u00e1l\u00e1s ({query_stage})" + "dead": "Halott", + "initializing": "Inicializ\u00e1l\u00e1s" } } } \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/pl.json b/homeassistant/components/zwave/translations/pl.json index 8728a3003ed..dd7ae5aead9 100644 --- a/homeassistant/components/zwave/translations/pl.json +++ b/homeassistant/components/zwave/translations/pl.json @@ -26,8 +26,8 @@ "sleeping": "u\u015bpiony" }, "query_stage": { - "dead": "martwy ({query_stage})", - "initializing": "inicjalizacja ({query_stage})" + "dead": "martwy", + "initializing": "inicjalizacja" } } } \ No newline at end of file From 1595ed1228819e48ab50d8e164e9cc418a721555 Mon Sep 17 00:00:00 2001 From: jjlawren Date: Thu, 23 Apr 2020 14:42:17 -0500 Subject: [PATCH 03/63] Add Plex play_media logging and troubleshooting tools (#34412) --- homeassistant/components/plex/media_player.py | 44 ++++++++++++++----- homeassistant/components/plex/server.py | 4 ++ 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/plex/media_player.py b/homeassistant/components/plex/media_player.py index d34899a6213..79d1339bde1 100644 --- a/homeassistant/components/plex/media_player.py +++ b/homeassistant/components/plex/media_player.py @@ -7,9 +7,12 @@ import requests.exceptions from homeassistant.components.media_player import DOMAIN as MP_DOMAIN, MediaPlayerDevice from homeassistant.components.media_player.const import ( + MEDIA_TYPE_EPISODE, MEDIA_TYPE_MOVIE, MEDIA_TYPE_MUSIC, + MEDIA_TYPE_PLAYLIST, MEDIA_TYPE_TVSHOW, + MEDIA_TYPE_VIDEO, SUPPORT_NEXT_TRACK, SUPPORT_PAUSE, SUPPORT_PLAY, @@ -553,27 +556,44 @@ class PlexMediaPlayer(MediaPlayerDevice): def play_media(self, media_type, media_id, **kwargs): """Play a piece of media.""" if not (self.device and "playback" in self._device_protocol_capabilities): + _LOGGER.debug( + "Client is not currently accepting playback controls: %s", self.name + ) return + media_type = media_type.lower() src = json.loads(media_id) - library = src.get("library_name") - shuffle = src.get("shuffle", 0) + if media_type == PLEX_DOMAIN and isinstance(src, int): + try: + media = self.plex_server.fetch_item(src) + except plexapi.exceptions.NotFound: + _LOGGER.error("Media for key %s not found", src) + return + shuffle = 0 + else: + library = src.get("library_name") + shuffle = src.get("shuffle", 0) + media = None - media = None - - if media_type == "MUSIC": - media = self._get_music_media(library, src) - elif media_type == "EPISODE": - media = self._get_tv_media(library, src) - elif media_type == "PLAYLIST": - media = self.plex_server.playlist(src["playlist_name"]) - elif media_type == "VIDEO": - media = self.plex_server.library.section(library).get(src["video_name"]) + try: + if media_type == MEDIA_TYPE_MUSIC: + media = self._get_music_media(library, src) + elif media_type == MEDIA_TYPE_EPISODE: + media = self._get_tv_media(library, src) + elif media_type == MEDIA_TYPE_PLAYLIST: + media = self.plex_server.playlist(src["playlist_name"]) + elif media_type == MEDIA_TYPE_VIDEO: + media = self.plex_server.library.section(library).get(src["video_name"]) + except plexapi.exceptions.NotFound: + _LOGGER.error("Media could not be found: %s", media_id) + return if media is None: _LOGGER.error("Media could not be found: %s", media_id) return + _LOGGER.debug("Attempting to play %s on %s", media, self.name) + playqueue = self.plex_server.create_playqueue(media, shuffle=shuffle) try: self.device.playMedia(playqueue) diff --git a/homeassistant/components/plex/server.py b/homeassistant/components/plex/server.py index d9e2d2bd9cc..ca5e4756cf2 100644 --- a/homeassistant/components/plex/server.py +++ b/homeassistant/components/plex/server.py @@ -332,3 +332,7 @@ class PlexServer: def create_playqueue(self, media, **kwargs): """Create playqueue on Plex server.""" return plexapi.playqueue.PlayQueue.create(self._plex_server, media, **kwargs) + + def fetch_item(self, item): + """Fetch item from Plex server.""" + return self._plex_server.fetchItem(item) From 03d72ff2ecd30eea21c48257a33e9c68f0dcd58d Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Thu, 23 Apr 2020 10:52:11 -0600 Subject: [PATCH 04/63] Handle flaky SimpliSafe notification registration (#34475) --- homeassistant/components/simplisafe/__init__.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/simplisafe/__init__.py b/homeassistant/components/simplisafe/__init__.py index ae0e119c083..963195e6f64 100644 --- a/homeassistant/components/simplisafe/__init__.py +++ b/homeassistant/components/simplisafe/__init__.py @@ -428,20 +428,19 @@ class SimpliSafe: # ready. If that's the case, skip: return - old_notifications = self._system_notifications.get(system.system_id, []) - latest_notifications = system.notifications + latest_notifications = set(system.notifications) - # Save the latest notifications: - self._system_notifications[system.system_id] = latest_notifications - - # Process any notifications that are new: - to_add = set(latest_notifications) - set(old_notifications) + to_add = latest_notifications.difference( + self._system_notifications[system.system_id] + ) if not to_add: return _LOGGER.debug("New system notifications: %s", to_add) + self._system_notifications[system.system_id].update(to_add) + for notification in to_add: text = notification.text if notification.link: @@ -463,6 +462,8 @@ class SimpliSafe: self.systems = await self._api.get_systems() for system in self.systems.values(): + self._system_notifications[system.system_id] = set() + self._hass.async_create_task( async_register_base_station( self._hass, system, self._config_entry.entry_id From eca971084581a990158636fb69bea1d35c0bca36 Mon Sep 17 00:00:00 2001 From: Quentame Date: Wed, 22 Apr 2020 23:28:47 +0200 Subject: [PATCH 05/63] Bump python-synology to 0.7.0 (#34534) --- .../components/synology_dsm/__init__.py | 12 +--- .../components/synology_dsm/config_flow.py | 42 ++++--------- .../components/synology_dsm/const.py | 1 - .../components/synology_dsm/manifest.json | 2 +- .../components/synology_dsm/strings.json | 6 +- .../synology_dsm/translations/en.json | 6 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- .../synology_dsm/test_config_flow.py | 60 ++++++++++++------- 9 files changed, 62 insertions(+), 71 deletions(-) diff --git a/homeassistant/components/synology_dsm/__init__.py b/homeassistant/components/synology_dsm/__init__.py index f2fd3d3af0c..3fbed6955d9 100644 --- a/homeassistant/components/synology_dsm/__init__.py +++ b/homeassistant/components/synology_dsm/__init__.py @@ -9,7 +9,6 @@ import voluptuous as vol from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry from homeassistant.const import ( - CONF_API_VERSION, CONF_DISKS, CONF_HOST, CONF_PASSWORD, @@ -22,14 +21,13 @@ from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.event import async_track_time_interval from homeassistant.helpers.typing import HomeAssistantType -from .const import CONF_VOLUMES, DEFAULT_DSM_VERSION, DEFAULT_SSL, DOMAIN +from .const import CONF_VOLUMES, DEFAULT_SSL, DOMAIN CONFIG_SCHEMA = vol.Schema( { vol.Required(CONF_HOST): cv.string, vol.Optional(CONF_PORT): cv.port, vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean, - vol.Optional(CONF_API_VERSION, default=DEFAULT_DSM_VERSION): cv.positive_int, vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string, vol.Optional(CONF_DISKS): cv.ensure_list, @@ -70,12 +68,9 @@ async def async_setup_entry(hass: HomeAssistantType, entry: ConfigEntry): password = entry.data[CONF_PASSWORD] unit = hass.config.units.temperature_unit use_ssl = entry.data[CONF_SSL] - api_version = entry.data.get(CONF_API_VERSION, DEFAULT_DSM_VERSION) device_token = entry.data.get("device_token") - api = SynoApi( - hass, host, port, username, password, unit, use_ssl, device_token, api_version - ) + api = SynoApi(hass, host, port, username, password, unit, use_ssl, device_token) await api.async_setup() @@ -109,7 +104,6 @@ class SynoApi: temp_unit: str, use_ssl: bool, device_token: str, - api_version: int, ): """Initialize the API wrapper class.""" self._hass = hass @@ -119,7 +113,6 @@ class SynoApi: self._password = password self._use_ssl = use_ssl self._device_token = device_token - self._api_version = api_version self.temp_unit = temp_unit self._dsm: SynologyDSM = None @@ -143,7 +136,6 @@ class SynoApi: self._password, self._use_ssl, device_token=self._device_token, - dsm_version=self._api_version, ) await self._hass.async_add_executor_job(self._fetch_device_configuration) diff --git a/homeassistant/components/synology_dsm/config_flow.py b/homeassistant/components/synology_dsm/config_flow.py index c478270f8b0..c1e8cf553d9 100644 --- a/homeassistant/components/synology_dsm/config_flow.py +++ b/homeassistant/components/synology_dsm/config_flow.py @@ -4,16 +4,17 @@ from urllib.parse import urlparse from synology_dsm import SynologyDSM from synology_dsm.exceptions import ( + SynologyDSMException, SynologyDSMLogin2SAFailedException, SynologyDSMLogin2SARequiredException, SynologyDSMLoginInvalidException, + SynologyDSMRequestException, ) import voluptuous as vol from homeassistant import config_entries, exceptions from homeassistant.components import ssdp from homeassistant.const import ( - CONF_API_VERSION, CONF_DISKS, CONF_HOST, CONF_NAME, @@ -23,13 +24,7 @@ from homeassistant.const import ( CONF_USERNAME, ) -from .const import ( - CONF_VOLUMES, - DEFAULT_DSM_VERSION, - DEFAULT_PORT, - DEFAULT_PORT_SSL, - DEFAULT_SSL, -) +from .const import CONF_VOLUMES, DEFAULT_PORT, DEFAULT_PORT_SSL, DEFAULT_SSL from .const import DOMAIN # pylint: disable=unused-import _LOGGER = logging.getLogger(__name__) @@ -56,12 +51,6 @@ def _ordered_shared_schema(schema_input): vol.Required(CONF_PASSWORD, default=schema_input.get(CONF_PASSWORD, "")): str, vol.Optional(CONF_PORT, default=schema_input.get(CONF_PORT, "")): str, vol.Optional(CONF_SSL, default=schema_input.get(CONF_SSL, DEFAULT_SSL)): bool, - vol.Optional( - CONF_API_VERSION, - default=schema_input.get(CONF_API_VERSION, DEFAULT_DSM_VERSION), - ): vol.All( - vol.Coerce(int), vol.In([5, 6]), # DSM versions supported by the library - ), } @@ -111,7 +100,6 @@ class SynologyDSMFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): username = user_input[CONF_USERNAME] password = user_input[CONF_PASSWORD] use_ssl = user_input.get(CONF_SSL, DEFAULT_SSL) - api_version = user_input.get(CONF_API_VERSION, DEFAULT_DSM_VERSION) otp_code = user_input.get(CONF_OTP_CODE) if not port: @@ -120,9 +108,7 @@ class SynologyDSMFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): else: port = DEFAULT_PORT - api = SynologyDSM( - host, port, username, password, use_ssl, dsm_version=api_version, - ) + api = SynologyDSM(host, port, username, password, use_ssl) try: serial = await self.hass.async_add_executor_job( @@ -134,8 +120,12 @@ class SynologyDSMFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): errors[CONF_OTP_CODE] = "otp_failed" user_input[CONF_OTP_CODE] = None return await self.async_step_2sa(user_input, errors) - except (SynologyDSMLoginInvalidException, InvalidAuth): + except SynologyDSMLoginInvalidException: errors[CONF_USERNAME] = "login" + except SynologyDSMRequestException: + errors[CONF_HOST] = "connection" + except SynologyDSMException: + errors["base"] = "unknown" except InvalidData: errors["base"] = "missing_data" @@ -152,7 +142,6 @@ class SynologyDSMFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): CONF_SSL: use_ssl, CONF_USERNAME: username, CONF_PASSWORD: password, - CONF_API_VERSION: api_version, } if otp_code: config_data["device_token"] = api.device_token @@ -216,28 +205,21 @@ class SynologyDSMFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): def _login_and_fetch_syno_info(api, otp_code): """Login to the NAS and fetch basic data.""" - if not api.login(otp_code): - raise InvalidAuth - # These do i/o - information = api.information + api.login(otp_code) utilisation = api.utilisation storage = api.storage if ( - information.serial is None + api.information.serial is None or utilisation.cpu_user_load is None or storage.disks_ids is None or storage.volumes_ids is None ): raise InvalidData - return information.serial + return api.information.serial class InvalidData(exceptions.HomeAssistantError): """Error to indicate we get invalid data from the nas.""" - - -class InvalidAuth(exceptions.HomeAssistantError): - """Error to indicate there is invalid auth.""" diff --git a/homeassistant/components/synology_dsm/const.py b/homeassistant/components/synology_dsm/const.py index c0b1fe782c4..8c17de5e997 100644 --- a/homeassistant/components/synology_dsm/const.py +++ b/homeassistant/components/synology_dsm/const.py @@ -12,7 +12,6 @@ CONF_VOLUMES = "volumes" DEFAULT_SSL = True DEFAULT_PORT = 5000 DEFAULT_PORT_SSL = 5001 -DEFAULT_DSM_VERSION = 6 UTILISATION_SENSORS = { "cpu_other_load": ["CPU Load (Other)", UNIT_PERCENTAGE, "mdi:chip"], diff --git a/homeassistant/components/synology_dsm/manifest.json b/homeassistant/components/synology_dsm/manifest.json index b54132c6897..c7abd809b87 100644 --- a/homeassistant/components/synology_dsm/manifest.json +++ b/homeassistant/components/synology_dsm/manifest.json @@ -2,7 +2,7 @@ "domain": "synology_dsm", "name": "Synology DSM", "documentation": "https://www.home-assistant.io/integrations/synology_dsm", - "requirements": ["python-synology==0.6.0"], + "requirements": ["python-synology==0.7.0"], "codeowners": ["@ProtoThis", "@Quentame"], "config_flow": true, "ssdp": [ diff --git a/homeassistant/components/synology_dsm/strings.json b/homeassistant/components/synology_dsm/strings.json index b90fd52fe5f..d00525f995d 100644 --- a/homeassistant/components/synology_dsm/strings.json +++ b/homeassistant/components/synology_dsm/strings.json @@ -8,7 +8,6 @@ "host": "Host", "port": "Port (Optional)", "ssl": "Use SSL/TLS to connect to your NAS", - "api_version": "DSM version", "username": "Username", "password": "Password" } @@ -24,7 +23,6 @@ "description": "Do you want to setup {name} ({host})?", "data": { "ssl": "Use SSL/TLS to connect to your NAS", - "api_version": "DSM version", "username": "Username", "password": "Password", "port": "Port (Optional)" @@ -32,9 +30,11 @@ } }, "error": { + "connection": "Connection error: please check your host, password & ssl", "login": "Login error: please check your username & password", "missing_data": "Missing data: please retry later or an other configuration", - "otp_failed": "Two-step authentication failed, retry with a new pass code" + "otp_failed": "Two-step authentication failed, retry with a new pass code", + "unknown": "Unknown error: please check logs to get more details" }, "abort": { "already_configured": "Host already configured" } } diff --git a/homeassistant/components/synology_dsm/translations/en.json b/homeassistant/components/synology_dsm/translations/en.json index 57ee3455840..41814a1e68d 100644 --- a/homeassistant/components/synology_dsm/translations/en.json +++ b/homeassistant/components/synology_dsm/translations/en.json @@ -4,9 +4,11 @@ "already_configured": "Host already configured" }, "error": { + "connection": "Connection error: please check your host, password & ssl", "login": "Login error: please check your username & password", "missing_data": "Missing data: please retry later or an other configuration", - "otp_failed": "Two-step authentication failed, retry with a new pass code" + "otp_failed": "Two-step authentication failed, retry with a new pass code", + "unknown": "Unknown error: please check logs to get more details" }, "flow_title": "Synology DSM {name} ({host})", "step": { @@ -18,7 +20,6 @@ }, "link": { "data": { - "api_version": "DSM version", "password": "Password", "port": "Port (Optional)", "ssl": "Use SSL/TLS to connect to your NAS", @@ -29,7 +30,6 @@ }, "user": { "data": { - "api_version": "DSM version", "host": "Host", "password": "Password", "port": "Port (Optional)", diff --git a/requirements_all.txt b/requirements_all.txt index 16fc13cb56c..f728aa5d8aa 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1680,7 +1680,7 @@ python-sochain-api==0.0.2 python-songpal==0.11.2 # homeassistant.components.synology_dsm -python-synology==0.6.0 +python-synology==0.7.0 # homeassistant.components.tado python-tado==0.8.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 32f0bf37920..e17437f01ec 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -650,7 +650,7 @@ python-miio==0.5.0.1 python-nest==4.1.0 # homeassistant.components.synology_dsm -python-synology==0.6.0 +python-synology==0.7.0 # homeassistant.components.tado python-tado==0.8.1 diff --git a/tests/components/synology_dsm/test_config_flow.py b/tests/components/synology_dsm/test_config_flow.py index 17b98b7c910..9a9283256c5 100644 --- a/tests/components/synology_dsm/test_config_flow.py +++ b/tests/components/synology_dsm/test_config_flow.py @@ -4,8 +4,11 @@ from unittest.mock import MagicMock, Mock, patch import pytest from synology_dsm.exceptions import ( + SynologyDSMException, SynologyDSMLogin2SAFailedException, SynologyDSMLogin2SARequiredException, + SynologyDSMLoginInvalidException, + SynologyDSMRequestException, ) from homeassistant import data_entry_flow, setup @@ -13,7 +16,6 @@ from homeassistant.components import ssdp from homeassistant.components.synology_dsm.config_flow import CONF_OTP_CODE from homeassistant.components.synology_dsm.const import ( CONF_VOLUMES, - DEFAULT_DSM_VERSION, DEFAULT_PORT, DEFAULT_PORT_SSL, DEFAULT_SSL, @@ -21,7 +23,6 @@ from homeassistant.components.synology_dsm.const import ( ) from homeassistant.config_entries import SOURCE_IMPORT, SOURCE_SSDP, SOURCE_USER from homeassistant.const import ( - CONF_API_VERSION, CONF_DISKS, CONF_HOST, CONF_PASSWORD, @@ -76,16 +77,6 @@ def mock_controller_service_2sa(): yield service_mock -@pytest.fixture(name="service_login_failed") -def mock_controller_service_login_failed(): - """Mock a failed login.""" - with patch( - "homeassistant.components.synology_dsm.config_flow.SynologyDSM" - ) as service_mock: - service_mock.return_value.login = Mock(return_value=False) - yield service_mock - - @pytest.fixture(name="service_failed") def mock_controller_service_failed(): """Mock a failed service.""" @@ -117,7 +108,6 @@ async def test_user(hass: HomeAssistantType, service: MagicMock): CONF_SSL: SSL, CONF_USERNAME: USERNAME, CONF_PASSWORD: PASSWORD, - CONF_API_VERSION: 5, }, ) assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY @@ -128,7 +118,6 @@ async def test_user(hass: HomeAssistantType, service: MagicMock): assert result["data"][CONF_SSL] == SSL assert result["data"][CONF_USERNAME] == USERNAME assert result["data"][CONF_PASSWORD] == PASSWORD - assert result["data"][CONF_API_VERSION] == 5 assert result["data"].get("device_token") is None assert result["data"].get(CONF_DISKS) is None assert result["data"].get(CONF_VOLUMES) is None @@ -153,7 +142,6 @@ async def test_user(hass: HomeAssistantType, service: MagicMock): assert not result["data"][CONF_SSL] assert result["data"][CONF_USERNAME] == USERNAME assert result["data"][CONF_PASSWORD] == PASSWORD - assert result["data"][CONF_API_VERSION] == DEFAULT_DSM_VERSION assert result["data"].get("device_token") is None assert result["data"].get(CONF_DISKS) is None assert result["data"].get(CONF_VOLUMES) is None @@ -216,7 +204,6 @@ async def test_import(hass: HomeAssistantType, service: MagicMock): assert result["data"][CONF_SSL] == DEFAULT_SSL assert result["data"][CONF_USERNAME] == USERNAME assert result["data"][CONF_PASSWORD] == PASSWORD - assert result["data"][CONF_API_VERSION] == DEFAULT_DSM_VERSION assert result["data"].get("device_token") is None assert result["data"].get(CONF_DISKS) is None assert result["data"].get(CONF_VOLUMES) is None @@ -232,7 +219,6 @@ async def test_import(hass: HomeAssistantType, service: MagicMock): CONF_SSL: SSL, CONF_USERNAME: USERNAME, CONF_PASSWORD: PASSWORD, - CONF_API_VERSION: 5, CONF_DISKS: ["sda", "sdb", "sdc"], CONF_VOLUMES: ["volume_1"], }, @@ -245,7 +231,6 @@ async def test_import(hass: HomeAssistantType, service: MagicMock): assert result["data"][CONF_SSL] == SSL assert result["data"][CONF_USERNAME] == USERNAME assert result["data"][CONF_PASSWORD] == PASSWORD - assert result["data"][CONF_API_VERSION] == 5 assert result["data"].get("device_token") is None assert result["data"][CONF_DISKS] == ["sda", "sdb", "sdc"] assert result["data"][CONF_VOLUMES] == ["volume_1"] @@ -278,8 +263,12 @@ async def test_abort_if_already_setup(hass: HomeAssistantType, service: MagicMoc assert result["reason"] == "already_configured" -async def test_login_failed(hass: HomeAssistantType, service_login_failed: MagicMock): - """Test when we have errors during connection.""" +async def test_login_failed(hass: HomeAssistantType, service: MagicMock): + """Test when we have errors during login.""" + service.return_value.login = Mock( + side_effect=(SynologyDSMLoginInvalidException(USERNAME)) + ) + result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_USER}, @@ -289,6 +278,36 @@ async def test_login_failed(hass: HomeAssistantType, service_login_failed: Magic assert result["errors"] == {CONF_USERNAME: "login"} +async def test_connection_failed(hass: HomeAssistantType, service: MagicMock): + """Test when we have errors during connection.""" + service.return_value.login = Mock( + side_effect=SynologyDSMRequestException(IOError("arg")) + ) + + result = await hass.config_entries.flow.async_init( + DOMAIN, + context={"source": SOURCE_USER}, + data={CONF_HOST: HOST, CONF_USERNAME: USERNAME, CONF_PASSWORD: PASSWORD}, + ) + + assert result["type"] == data_entry_flow.RESULT_TYPE_FORM + assert result["errors"] == {CONF_HOST: "connection"} + + +async def test_unknown_failed(hass: HomeAssistantType, service: MagicMock): + """Test when we have an unknown error.""" + service.return_value.login = Mock(side_effect=SynologyDSMException) + + result = await hass.config_entries.flow.async_init( + DOMAIN, + context={"source": SOURCE_USER}, + data={CONF_HOST: HOST, CONF_USERNAME: USERNAME, CONF_PASSWORD: PASSWORD}, + ) + + assert result["type"] == data_entry_flow.RESULT_TYPE_FORM + assert result["errors"] == {"base": "unknown"} + + async def test_missing_data_after_login( hass: HomeAssistantType, service_failed: MagicMock ): @@ -329,7 +348,6 @@ async def test_form_ssdp(hass: HomeAssistantType, service: MagicMock): assert result["data"][CONF_SSL] == DEFAULT_SSL assert result["data"][CONF_USERNAME] == USERNAME assert result["data"][CONF_PASSWORD] == PASSWORD - assert result["data"][CONF_API_VERSION] == DEFAULT_DSM_VERSION assert result["data"].get("device_token") is None assert result["data"].get(CONF_DISKS) is None assert result["data"].get(CONF_VOLUMES) is None From 6651844d41658b547d232c7bc2b94dbc543a3262 Mon Sep 17 00:00:00 2001 From: jrester <31157644+jrester@users.noreply.github.com> Date: Wed, 22 Apr 2020 23:10:06 +0200 Subject: [PATCH 06/63] Update tesla-powerwall to version 0.2.8 (#34545) * Update tesla-powerwall to version 0.2.7 * Update tesla-powerwall to version 0.2.8 --- homeassistant/components/powerwall/__init__.py | 5 +++-- homeassistant/components/powerwall/config_flow.py | 5 +++-- homeassistant/components/powerwall/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/powerwall/__init__.py b/homeassistant/components/powerwall/__init__.py index c6c508136b2..a76393e350a 100644 --- a/homeassistant/components/powerwall/__init__.py +++ b/homeassistant/components/powerwall/__init__.py @@ -4,7 +4,7 @@ from datetime import timedelta import logging import requests -from tesla_powerwall import ApiError, Powerwall, PowerwallUnreachableError +from tesla_powerwall import APIError, Powerwall, PowerwallUnreachableError import voluptuous as vol from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry @@ -96,8 +96,9 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): http_session = requests.Session() power_wall = Powerwall(entry.data[CONF_IP_ADDRESS], http_session=http_session) try: + await hass.async_add_executor_job(power_wall.detect_and_pin_version) powerwall_data = await hass.async_add_executor_job(call_base_info, power_wall) - except (PowerwallUnreachableError, ApiError, ConnectionError): + except (PowerwallUnreachableError, APIError, ConnectionError): http_session.close() raise ConfigEntryNotReady diff --git a/homeassistant/components/powerwall/config_flow.py b/homeassistant/components/powerwall/config_flow.py index 403075989e9..ca0e2143454 100644 --- a/homeassistant/components/powerwall/config_flow.py +++ b/homeassistant/components/powerwall/config_flow.py @@ -1,7 +1,7 @@ """Config flow for Tesla Powerwall integration.""" import logging -from tesla_powerwall import ApiError, Powerwall, PowerwallUnreachableError +from tesla_powerwall import APIError, Powerwall, PowerwallUnreachableError import voluptuous as vol from homeassistant import config_entries, core, exceptions @@ -23,8 +23,9 @@ async def validate_input(hass: core.HomeAssistant, data): power_wall = Powerwall(data[CONF_IP_ADDRESS]) try: + await hass.async_add_executor_job(power_wall.detect_and_pin_version) site_info = await hass.async_add_executor_job(power_wall.get_site_info) - except (PowerwallUnreachableError, ApiError, ConnectionError): + except (PowerwallUnreachableError, APIError, ConnectionError): raise CannotConnect # Return info that you want to store in the config entry. diff --git a/homeassistant/components/powerwall/manifest.json b/homeassistant/components/powerwall/manifest.json index 9e4c01e1447..7b2095c4a2a 100644 --- a/homeassistant/components/powerwall/manifest.json +++ b/homeassistant/components/powerwall/manifest.json @@ -3,6 +3,6 @@ "name": "Tesla Powerwall", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/powerwall", - "requirements": ["tesla-powerwall==0.2.5"], + "requirements": ["tesla-powerwall==0.2.8"], "codeowners": ["@bdraco", "@jrester"] } diff --git a/requirements_all.txt b/requirements_all.txt index f728aa5d8aa..8c89391d060 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2026,7 +2026,7 @@ temperusb==1.5.3 # tensorflow==1.13.2 # homeassistant.components.powerwall -tesla-powerwall==0.2.5 +tesla-powerwall==0.2.8 # homeassistant.components.tesla teslajsonpy==0.8.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index e17437f01ec..77c12ead2c7 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -765,7 +765,7 @@ sunwatcher==0.2.1 tellduslive==0.10.10 # homeassistant.components.powerwall -tesla-powerwall==0.2.5 +tesla-powerwall==0.2.8 # homeassistant.components.tesla teslajsonpy==0.8.0 From eb983018adb464c420bf987e1c2c4caf56e8fd57 Mon Sep 17 00:00:00 2001 From: jjlawren Date: Wed, 22 Apr 2020 16:20:14 -0500 Subject: [PATCH 07/63] Add All wrapper to deprecated Plex schema (#34552) --- homeassistant/components/plex/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/plex/__init__.py b/homeassistant/components/plex/__init__.py index 3e52b9f54ba..7f8caf8390b 100644 --- a/homeassistant/components/plex/__init__.py +++ b/homeassistant/components/plex/__init__.py @@ -76,8 +76,10 @@ SERVER_CONFIG_SCHEMA = vol.Schema( ) CONFIG_SCHEMA = vol.Schema( - cv.deprecated(PLEX_DOMAIN, invalidation_version="0.111"), - {PLEX_DOMAIN: SERVER_CONFIG_SCHEMA}, + vol.All( + cv.deprecated(PLEX_DOMAIN, invalidation_version="0.111"), + {PLEX_DOMAIN: SERVER_CONFIG_SCHEMA}, + ), extra=vol.ALLOW_EXTRA, ) From e851fc13dc8061464fcd0a551b320b915c0cca52 Mon Sep 17 00:00:00 2001 From: MatthewFlamm <39341281+MatthewFlamm@users.noreply.github.com> Date: Thu, 23 Apr 2020 06:50:55 -0400 Subject: [PATCH 08/63] Fix deleting and readding nws entry (#34555) * fix deleting and readding nws * Clean up * Fix variable name clash Co-authored-by: Martin Hjelmare --- homeassistant/components/nws/__init__.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/nws/__init__.py b/homeassistant/components/nws/__init__.py index fa0c7554a01..f6cdc7c57cd 100644 --- a/homeassistant/components/nws/__init__.py +++ b/homeassistant/components/nws/__init__.py @@ -53,7 +53,6 @@ def base_unique_id(latitude, longitude): async def async_setup(hass: HomeAssistant, config: dict): """Set up the National Weather Service (NWS) component.""" - hass.data.setdefault(DOMAIN, {}) return True @@ -93,8 +92,8 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): update_method=nws_data.update_forecast_hourly, update_interval=DEFAULT_SCAN_INTERVAL, ) - - hass.data[DOMAIN][entry.entry_id] = { + nws_hass_data = hass.data.setdefault(DOMAIN, {}) + nws_hass_data[entry.entry_id] = { NWS_DATA: nws_data, COORDINATOR_OBSERVATION: coordinator_observation, COORDINATOR_FORECAST: coordinator_forecast, From 38342b2f25d5a6191248c1ffd622767fee9afbd1 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Wed, 22 Apr 2020 23:28:36 +0200 Subject: [PATCH 09/63] Remove reconnect logic from MQTT client. (#34556) --- homeassistant/components/mqtt/__init__.py | 28 +---------------------- tests/components/mqtt/test_init.py | 28 ----------------------- 2 files changed, 1 insertion(+), 55 deletions(-) diff --git a/homeassistant/components/mqtt/__init__.py b/homeassistant/components/mqtt/__init__.py index 5c0f3108960..248769099ae 100644 --- a/homeassistant/components/mqtt/__init__.py +++ b/homeassistant/components/mqtt/__init__.py @@ -9,7 +9,6 @@ from operator import attrgetter import os import ssl import sys -import time from typing import Any, Callable, List, Optional, Union import attr @@ -929,7 +928,6 @@ class MQTT: "Unable to connect to the MQTT broker: %s", mqtt.connack_string(result_code), ) - self._mqttc.disconnect() return self.connected = True @@ -999,31 +997,7 @@ class MQTT: def _mqtt_on_disconnect(self, _mqttc, _userdata, result_code: int) -> None: """Disconnected callback.""" self.connected = False - - # When disconnected because of calling disconnect() - if result_code == 0: - return - - tries = 0 - - while True: - try: - if self._mqttc.reconnect() == 0: - self.connected = True - _LOGGER.info("Successfully reconnected to the MQTT server") - break - except OSError: - pass - - wait_time = min(2 ** tries, MAX_RECONNECT_WAIT) - _LOGGER.warning( - "Disconnected from MQTT (%s). Trying to reconnect in %s s", - result_code, - wait_time, - ) - # It is ok to sleep here as we are in the MQTT thread. - time.sleep(wait_time) - tries += 1 + _LOGGER.warning("Disconnected from MQTT (%s).", result_code) def _raise_on_error(result_code: int) -> None: diff --git a/tests/components/mqtt/test_init.py b/tests/components/mqtt/test_init.py index 9b5f70a95ec..75c6d49d156 100644 --- a/tests/components/mqtt/test_init.py +++ b/tests/components/mqtt/test_init.py @@ -571,34 +571,6 @@ class TestMQTTCallbacks(unittest.TestCase): assert self.calls[0][0].topic == topic assert self.calls[0][0].payload == payload - def test_mqtt_failed_connection_results_in_disconnect(self): - """Test if connection failure leads to disconnect.""" - for result_code in range(1, 6): - self.hass.data["mqtt"]._mqttc = mock.MagicMock() - self.hass.data["mqtt"]._mqtt_on_connect( - None, {"topics": {}}, 0, result_code - ) - assert self.hass.data["mqtt"]._mqttc.disconnect.called - - def test_mqtt_disconnect_tries_no_reconnect_on_stop(self): - """Test the disconnect tries.""" - self.hass.data["mqtt"]._mqtt_on_disconnect(None, None, 0) - assert not self.hass.data["mqtt"]._mqttc.reconnect.called - - @mock.patch("homeassistant.components.mqtt.time.sleep") - def test_mqtt_disconnect_tries_reconnect(self, mock_sleep): - """Test the re-connect tries.""" - self.hass.data["mqtt"].subscriptions = [ - mqtt.Subscription("test/progress", None, 0), - mqtt.Subscription("test/progress", None, 1), - mqtt.Subscription("test/topic", None, 2), - ] - self.hass.data["mqtt"]._mqttc.reconnect.side_effect = [1, 1, 1, 0] - self.hass.data["mqtt"]._mqtt_on_disconnect(None, None, 1) - assert self.hass.data["mqtt"]._mqttc.reconnect.called - assert len(self.hass.data["mqtt"]._mqttc.reconnect.mock_calls) == 4 - assert [call[1][0] for call in mock_sleep.mock_calls] == [1, 2, 4] - def test_retained_message_on_subscribe_received(self): """Test every subscriber receives retained message on subscribe.""" From 3560081efd591b7e3ff51d9dfecbcce02ec30d02 Mon Sep 17 00:00:00 2001 From: Erik Montnemery Date: Wed, 22 Apr 2020 23:38:04 +0200 Subject: [PATCH 10/63] Only subscribe when MQTT client is connected. (#34557) --- homeassistant/components/mqtt/__init__.py | 4 +++- tests/components/mqtt/test_init.py | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/mqtt/__init__.py b/homeassistant/components/mqtt/__init__.py index 248769099ae..25b2b0381ea 100644 --- a/homeassistant/components/mqtt/__init__.py +++ b/homeassistant/components/mqtt/__init__.py @@ -872,7 +872,9 @@ class MQTT: subscription = Subscription(topic, msg_callback, qos, encoding) self.subscriptions.append(subscription) - await self._async_perform_subscription(topic, qos) + # Only subscribe if currently connected. + if self.connected: + await self._async_perform_subscription(topic, qos) @callback def async_remove() -> None: diff --git a/tests/components/mqtt/test_init.py b/tests/components/mqtt/test_init.py index 75c6d49d156..290b70953af 100644 --- a/tests/components/mqtt/test_init.py +++ b/tests/components/mqtt/test_init.py @@ -580,6 +580,9 @@ class TestMQTTCallbacks(unittest.TestCase): self.hass.data["mqtt"]._mqttc.subscribe.side_effect = side_effect + # Fake that the client is connected + self.hass.data["mqtt"].connected = True + calls_a = mock.MagicMock() mqtt.subscribe(self.hass, "test/state", calls_a) self.hass.block_till_done() @@ -592,6 +595,9 @@ class TestMQTTCallbacks(unittest.TestCase): def test_not_calling_unsubscribe_with_active_subscribers(self): """Test not calling unsubscribe() when other subscribers are active.""" + # Fake that the client is connected + self.hass.data["mqtt"].connected = True + unsub = mqtt.subscribe(self.hass, "test/state", None) mqtt.subscribe(self.hass, "test/state", None) self.hass.block_till_done() @@ -603,6 +609,9 @@ class TestMQTTCallbacks(unittest.TestCase): def test_restore_subscriptions_on_reconnect(self): """Test subscriptions are restored on reconnect.""" + # Fake that the client is connected + self.hass.data["mqtt"].connected = True + mqtt.subscribe(self.hass, "test/state", None) self.hass.block_till_done() assert self.hass.data["mqtt"]._mqttc.subscribe.call_count == 1 @@ -614,6 +623,9 @@ class TestMQTTCallbacks(unittest.TestCase): def test_restore_all_active_subscriptions_on_reconnect(self): """Test active subscriptions are restored correctly on reconnect.""" + # Fake that the client is connected + self.hass.data["mqtt"].connected = True + self.hass.data["mqtt"]._mqttc.subscribe.side_effect = ( (0, 1), (0, 2), From 370838ea7bf7d9c9e22aec4a37fc30aa63d15a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Thu, 23 Apr 2020 21:42:01 +0200 Subject: [PATCH 11/63] Limit clone/view stats to repos with push access (#34575) --- homeassistant/components/github/sensor.py | 29 +++++++++++++---------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/github/sensor.py b/homeassistant/components/github/sensor.py index 68b5586207a..dcd81dc68df 100644 --- a/homeassistant/components/github/sensor.py +++ b/homeassistant/components/github/sensor.py @@ -133,13 +133,17 @@ class GitHubSensor(Entity): ATTR_OPEN_PULL_REQUESTS: self._pull_request_count, ATTR_STARGAZERS: self._stargazers, ATTR_FORKS: self._forks, - ATTR_CLONES: self._clones, - ATTR_CLONES_UNIQUE: self._clones_unique, - ATTR_VIEWS: self._views, - ATTR_VIEWS_UNIQUE: self._views_unique, } if self._latest_release_tag is not None: attrs[ATTR_LATEST_RELEASE_TAG] = self._latest_release_tag + if self._clones is not None: + attrs[ATTR_CLONES] = self._clones + if self._clones_unique is not None: + attrs[ATTR_CLONES_UNIQUE] = self._clones_unique + if self._views is not None: + attrs[ATTR_VIEWS] = self._views + if self._views_unique is not None: + attrs[ATTR_VIEWS_UNIQUE] = self._views_unique return attrs @property @@ -244,15 +248,16 @@ class GitHubData: if releases and releases.totalCount > 0: self.latest_release_url = releases[0].html_url - clones = repo.get_clones_traffic() - if clones is not None: - self.clones = clones.get("count") - self.clones_unique = clones.get("uniques") + if repo.permissions.push: + clones = repo.get_clones_traffic() + if clones is not None: + self.clones = clones.get("count") + self.clones_unique = clones.get("uniques") - views = repo.get_views_traffic() - if views is not None: - self.views = views.get("count") - self.views_unique = views.get("uniques") + views = repo.get_views_traffic() + if views is not None: + self.views = views.get("count") + self.views_unique = views.get("uniques") self.available = True except self._github.GithubException as err: From 7c54cd55830ebc462d3a98c61e54c40d4382f885 Mon Sep 17 00:00:00 2001 From: jrester <31157644+jrester@users.noreply.github.com> Date: Thu, 23 Apr 2020 17:00:38 +0200 Subject: [PATCH 12/63] Powerwall sensor add is_active, round state attributes and change thresholding for charging status sensor (#34582) * Change sensor values and thresholding * Update tests --- .../components/powerwall/binary_sensor.py | 15 ++++------ homeassistant/components/powerwall/const.py | 10 ++----- homeassistant/components/powerwall/sensor.py | 12 ++++---- tests/components/powerwall/test_sensor.py | 30 +++++++++++-------- 4 files changed, 33 insertions(+), 34 deletions(-) diff --git a/homeassistant/components/powerwall/binary_sensor.py b/homeassistant/components/powerwall/binary_sensor.py index 889e6c192ef..877efdd68fa 100644 --- a/homeassistant/components/powerwall/binary_sensor.py +++ b/homeassistant/components/powerwall/binary_sensor.py @@ -14,7 +14,6 @@ from .const import ( ATTR_GRID_CODE, ATTR_NOMINAL_SYSTEM_POWER, ATTR_REGION, - CHARGING_MARGIN_OF_ERROR, DOMAIN, POWERWALL_API_DEVICE_TYPE, POWERWALL_API_GRID_STATUS, @@ -139,7 +138,7 @@ class PowerWallGridStatusSensor(PowerWallEntity, BinarySensorDevice): class PowerWallChargingStatusSensor(PowerWallEntity, BinarySensorDevice): - """Representation of an Powerwall grid status sensor.""" + """Representation of an Powerwall charging status sensor.""" @property def name(self): @@ -158,10 +157,8 @@ class PowerWallChargingStatusSensor(PowerWallEntity, BinarySensorDevice): @property def is_on(self): - """Grid is online.""" - return ( - self._coordinator.data[POWERWALL_API_METERS][ - POWERWALL_BATTERY_METER - ].instant_power - < CHARGING_MARGIN_OF_ERROR - ) + """Powerwall is charging.""" + # is_sending_to returns true for values greater than 100 watts + return self._coordinator.data[POWERWALL_API_METERS][ + POWERWALL_BATTERY_METER + ].is_sending_to() diff --git a/homeassistant/components/powerwall/const.py b/homeassistant/components/powerwall/const.py index 91e501da28f..e2daf1e3760 100644 --- a/homeassistant/components/powerwall/const.py +++ b/homeassistant/components/powerwall/const.py @@ -10,10 +10,11 @@ UPDATE_INTERVAL = 30 ATTR_REGION = "region" ATTR_GRID_CODE = "grid_code" ATTR_FREQUENCY = "frequency" -ATTR_ENERGY_EXPORTED = "energy_exported" -ATTR_ENERGY_IMPORTED = "energy_imported" +ATTR_ENERGY_EXPORTED = "energy_exported_(in_kW)" +ATTR_ENERGY_IMPORTED = "energy_imported_(in_kW)" ATTR_INSTANT_AVERAGE_VOLTAGE = "instant_average_voltage" ATTR_NOMINAL_SYSTEM_POWER = "nominal_system_power_kW" +ATTR_IS_ACTIVE = "is_active" SITE_INFO_UTILITY = "utility" SITE_INFO_GRID_CODE = "grid_code" @@ -44,11 +45,6 @@ POWERWALL_RUNNING_KEY = "running" POWERWALL_BATTERY_METER = "battery" -# We only declare charging if they are getting -# at least 40W incoming as measuring the fields -# is not an exact science because of interference -CHARGING_MARGIN_OF_ERROR = -40 - MODEL = "PowerWall 2" MANUFACTURER = "Tesla" diff --git a/homeassistant/components/powerwall/sensor.py b/homeassistant/components/powerwall/sensor.py index 253fae8bd36..e1e968c0353 100644 --- a/homeassistant/components/powerwall/sensor.py +++ b/homeassistant/components/powerwall/sensor.py @@ -1,7 +1,7 @@ """Support for August sensors.""" import logging -from tesla_powerwall import MeterType +from tesla_powerwall import MeterType, convert_to_kw from homeassistant.const import ( DEVICE_CLASS_BATTERY, @@ -14,6 +14,7 @@ from .const import ( ATTR_ENERGY_IMPORTED, ATTR_FREQUENCY, ATTR_INSTANT_AVERAGE_VOLTAGE, + ATTR_IS_ACTIVE, DOMAIN, ENERGY_KILO_WATT, POWERWALL_API_CHARGE, @@ -143,8 +144,9 @@ class PowerWallEnergySensor(PowerWallEntity): """Return the device specific state attributes.""" meter = self._coordinator.data[POWERWALL_API_METERS].get(self._meter) return { - ATTR_FREQUENCY: meter.frequency, - ATTR_ENERGY_EXPORTED: meter.energy_exported, - ATTR_ENERGY_IMPORTED: meter.energy_imported, - ATTR_INSTANT_AVERAGE_VOLTAGE: meter.instant_average_voltage, + ATTR_FREQUENCY: round(meter.frequency, 1), + ATTR_ENERGY_EXPORTED: convert_to_kw(meter.energy_exported), + ATTR_ENERGY_IMPORTED: convert_to_kw(meter.energy_imported), + ATTR_INSTANT_AVERAGE_VOLTAGE: round(meter.instant_average_voltage, 1), + ATTR_IS_ACTIVE: meter.is_active(), } diff --git a/tests/components/powerwall/test_sensor.py b/tests/components/powerwall/test_sensor.py index b6c224080a1..c68d9f0279e 100644 --- a/tests/components/powerwall/test_sensor.py +++ b/tests/components/powerwall/test_sensor.py @@ -36,12 +36,13 @@ async def test_sensors(hass): assert state.state == "0.032" expected_attributes = { "frequency": 60, - "energy_exported": 10429451.9916853, - "energy_imported": 4824191.60668611, - "instant_average_voltage": 120.650001525879, + "energy_exported_(in_kW)": 10429.5, + "energy_imported_(in_kW)": 4824.2, + "instant_average_voltage": 120.7, "unit_of_measurement": "kW", "friendly_name": "Powerwall Site Now", "device_class": "power", + "is_active": False, } # Only test for a subset of attributes in case # HA changes the implementation and a new one appears @@ -52,12 +53,13 @@ async def test_sensors(hass): assert state.state == "1.971" expected_attributes = { "frequency": 60, - "energy_exported": 1056797.48917483, - "energy_imported": 4692987.91889705, - "instant_average_voltage": 120.650001525879, + "energy_exported_(in_kW)": 1056.8, + "energy_imported_(in_kW)": 4693.0, + "instant_average_voltage": 120.7, "unit_of_measurement": "kW", "friendly_name": "Powerwall Load Now", "device_class": "power", + "is_active": True, } # Only test for a subset of attributes in case # HA changes the implementation and a new one appears @@ -67,13 +69,14 @@ async def test_sensors(hass): state = hass.states.get("sensor.powerwall_battery_now") assert state.state == "-8.55" expected_attributes = { - "frequency": 60.014, - "energy_exported": 3620010, - "energy_imported": 4216170, - "instant_average_voltage": 240.56, + "frequency": 60.0, + "energy_exported_(in_kW)": 3620.0, + "energy_imported_(in_kW)": 4216.2, + "instant_average_voltage": 240.6, "unit_of_measurement": "kW", "friendly_name": "Powerwall Battery Now", "device_class": "power", + "is_active": True, } # Only test for a subset of attributes in case # HA changes the implementation and a new one appears @@ -84,12 +87,13 @@ async def test_sensors(hass): assert state.state == "10.49" expected_attributes = { "frequency": 60, - "energy_exported": 9864205.82222448, - "energy_imported": 28177.5358355867, - "instant_average_voltage": 120.685001373291, + "energy_exported_(in_kW)": 9864.2, + "energy_imported_(in_kW)": 28.2, + "instant_average_voltage": 120.7, "unit_of_measurement": "kW", "friendly_name": "Powerwall Solar Now", "device_class": "power", + "is_active": True, } # Only test for a subset of attributes in case # HA changes the implementation and a new one appears From b783927039d667d087ec06ed1d8c6cd71628d91d Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 23 Apr 2020 21:53:22 +0200 Subject: [PATCH 13/63] Remove old style translations from Atag (#34585) --- .../components/atag/.translations/en.json | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 homeassistant/components/atag/.translations/en.json diff --git a/homeassistant/components/atag/.translations/en.json b/homeassistant/components/atag/.translations/en.json deleted file mode 100644 index 094fde70dc9..00000000000 --- a/homeassistant/components/atag/.translations/en.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "title": "Atag", - "config": { - "step": { - "user": { - "title": "Connect to the device", - "data": { - "host": "Host", - "port": "Port (10000)" - } - } - }, - "error": { - "connection_error": "Failed to connect, please try again" - }, - "abort": { - "already_configured": "Only one Atag device can be added to Home Assistant" - } - } -} From dd6322593acd27afb1bf34e5e40d94d4c49423a1 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 23 Apr 2020 12:07:55 -0500 Subject: [PATCH 14/63] Remember homekit aids for entities without a unique id (#34587) * Remember homekit aids for entities without a unique id * add backwards compat * increase cover --- .../components/homekit/aidmanager.py | 62 ++- tests/components/homekit/test_aidmanager.py | 505 ++++++++++++++++++ 2 files changed, 545 insertions(+), 22 deletions(-) diff --git a/homeassistant/components/homekit/aidmanager.py b/homeassistant/components/homekit/aidmanager.py index 61a922d17fa..95181114e79 100644 --- a/homeassistant/components/homekit/aidmanager.py +++ b/homeassistant/components/homekit/aidmanager.py @@ -25,6 +25,9 @@ AID_MANAGER_STORAGE_KEY = f"{DOMAIN}.aids" AID_MANAGER_STORAGE_VERSION = 1 AID_MANAGER_SAVE_DELAY = 2 +ALLOCATIONS_KEY = "allocations" +UNIQUE_IDS_KEY = "unique_ids" + INVALID_AIDS = (0, 1) AID_MIN = 2 @@ -46,10 +49,15 @@ def _generate_aids(unique_id: str, entity_id: str) -> int: # Not robust against collisions yield adler32(entity_id.encode("utf-8")) - # Use fnv1a_32 of the unique id as - # fnv1a_32 has less collisions than - # adler32 - yield fnv1a_32(unique_id.encode("utf-8")) + if unique_id: + # Use fnv1a_32 of the unique id as + # fnv1a_32 has less collisions than + # adler32 + yield fnv1a_32(unique_id.encode("utf-8")) + + # If there is no unique id we use + # fnv1a_32 as it is unlikely to collide + yield fnv1a_32(entity_id.encode("utf-8")) # If called again resort to random allocations. # Given the size of the range its unlikely we'll encounter duplicates @@ -86,34 +94,40 @@ class AccessoryAidStorage: # There is no data about aid allocations yet return - self.allocations = raw_storage.get("unique_ids", {}) + # Remove the UNIQUE_IDS_KEY in 0.112 and later + # The beta version used UNIQUE_IDS_KEY but + # since we now have entity ids in the dict + # we use ALLOCATIONS_KEY but check for + # UNIQUE_IDS_KEY in case the database has not + # been upgraded yet + self.allocations = raw_storage.get( + ALLOCATIONS_KEY, raw_storage.get(UNIQUE_IDS_KEY, {}) + ) self.allocated_aids = set(self.allocations.values()) def get_or_allocate_aid_for_entity_id(self, entity_id: str): """Generate a stable aid for an entity id.""" entity = self._entity_registry.async_get(entity_id) + if not entity: + return self._get_or_allocate_aid(None, entity_id) - if entity: - return self._get_or_allocate_aid( - get_system_unique_id(entity), entity.entity_id - ) - - _LOGGER.warning( - "Entity '%s' does not have a stable unique identifier so aid allocation will be unstable and may cause collisions", - entity_id, - ) - return adler32(entity_id.encode("utf-8")) + sys_unique_id = get_system_unique_id(entity) + return self._get_or_allocate_aid(sys_unique_id, entity_id) def _get_or_allocate_aid(self, unique_id: str, entity_id: str): """Allocate (and return) a new aid for an accessory.""" - if unique_id in self.allocations: - return self.allocations[unique_id] + # Prefer the unique_id over the + # entitiy_id + storage_key = unique_id or entity_id + + if storage_key in self.allocations: + return self.allocations[storage_key] for aid in _generate_aids(unique_id, entity_id): if aid in INVALID_AIDS: continue if aid not in self.allocated_aids: - self.allocations[unique_id] = aid + self.allocations[storage_key] = aid self.allocated_aids.add(aid) self.async_schedule_save() return aid @@ -122,12 +136,12 @@ class AccessoryAidStorage: f"Unable to generate unique aid allocation for {entity_id} [{unique_id}]" ) - def delete_aid(self, unique_id: str): + def delete_aid(self, storage_key: str): """Delete an aid allocation.""" - if unique_id not in self.allocations: + if storage_key not in self.allocations: return - aid = self.allocations.pop(unique_id) + aid = self.allocations.pop(storage_key) self.allocated_aids.discard(aid) self.async_schedule_save() @@ -136,7 +150,11 @@ class AccessoryAidStorage: """Schedule saving the entity map cache.""" self.store.async_delay_save(self._data_to_save, AID_MANAGER_SAVE_DELAY) + async def async_save(self): + """Save the entity map cache.""" + return await self.store.async_save(self._data_to_save()) + @callback def _data_to_save(self): """Return data of entity map to store in a file.""" - return {"unique_ids": self.allocations} + return {ALLOCATIONS_KEY: self.allocations} diff --git a/tests/components/homekit/test_aidmanager.py b/tests/components/homekit/test_aidmanager.py index bcadac953ab..12d12082a33 100644 --- a/tests/components/homekit/test_aidmanager.py +++ b/tests/components/homekit/test_aidmanager.py @@ -1,12 +1,17 @@ """Tests for the HomeKit AID manager.""" +import os +from zlib import adler32 + from asynctest import patch import pytest from homeassistant.components.homekit.aidmanager import ( + AID_MANAGER_STORAGE_KEY, AccessoryAidStorage, get_system_unique_id, ) from homeassistant.helpers import device_registry +from homeassistant.helpers.storage import STORAGE_DIR from tests.common import MockConfigEntry, mock_device_registry, mock_registry @@ -118,3 +123,503 @@ async def test_aid_adler32_collision(hass, device_reg, entity_reg): aid = aid_storage.get_or_allocate_aid_for_entity_id(ent.entity_id) assert aid not in seen_aids seen_aids.add(aid) + + +async def test_aid_generation_no_unique_ids_handles_collision( + hass, device_reg, entity_reg +): + """Test colliding aids is stable.""" + + aid_storage = AccessoryAidStorage(hass) + await aid_storage.async_initialize() + + seen_aids = set() + collisions = [] + + for light_id in range(0, 220): + entity_id = f"light.light{light_id}" + hass.states.async_set(entity_id, "on") + expected_aid = adler32(entity_id.encode("utf-8")) + aid = aid_storage.get_or_allocate_aid_for_entity_id(entity_id) + if aid != expected_aid: + collisions.append(entity_id) + + assert aid not in seen_aids + seen_aids.add(aid) + + assert collisions == [ + "light.light201", + "light.light202", + "light.light203", + "light.light204", + "light.light205", + "light.light206", + "light.light207", + "light.light208", + "light.light209", + "light.light211", + "light.light212", + "light.light213", + "light.light214", + "light.light215", + "light.light216", + "light.light217", + "light.light218", + "light.light219", + ] + + assert aid_storage.allocations == { + "light.light0": 514851983, + "light.light1": 514917520, + "light.light10": 594609344, + "light.light100": 677446896, + "light.light101": 677512433, + "light.light102": 677577970, + "light.light103": 677643507, + "light.light104": 677709044, + "light.light105": 677774581, + "light.light106": 677840118, + "light.light107": 677905655, + "light.light108": 677971192, + "light.light109": 678036729, + "light.light11": 594674881, + "light.light110": 677577969, + "light.light111": 677643506, + "light.light112": 677709043, + "light.light113": 677774580, + "light.light114": 677840117, + "light.light115": 677905654, + "light.light116": 677971191, + "light.light117": 678036728, + "light.light118": 678102265, + "light.light119": 678167802, + "light.light12": 594740418, + "light.light120": 677709042, + "light.light121": 677774579, + "light.light122": 677840116, + "light.light123": 677905653, + "light.light124": 677971190, + "light.light125": 678036727, + "light.light126": 678102264, + "light.light127": 678167801, + "light.light128": 678233338, + "light.light129": 678298875, + "light.light13": 594805955, + "light.light130": 677840115, + "light.light131": 677905652, + "light.light132": 677971189, + "light.light133": 678036726, + "light.light134": 678102263, + "light.light135": 678167800, + "light.light136": 678233337, + "light.light137": 678298874, + "light.light138": 678364411, + "light.light139": 678429948, + "light.light14": 594871492, + "light.light140": 677971188, + "light.light141": 678036725, + "light.light142": 678102262, + "light.light143": 678167799, + "light.light144": 678233336, + "light.light145": 678298873, + "light.light146": 678364410, + "light.light147": 678429947, + "light.light148": 678495484, + "light.light149": 678561021, + "light.light15": 594937029, + "light.light150": 678102261, + "light.light151": 678167798, + "light.light152": 678233335, + "light.light153": 678298872, + "light.light154": 678364409, + "light.light155": 678429946, + "light.light156": 678495483, + "light.light157": 678561020, + "light.light158": 678626557, + "light.light159": 678692094, + "light.light16": 595002566, + "light.light160": 678233334, + "light.light161": 678298871, + "light.light162": 678364408, + "light.light163": 678429945, + "light.light164": 678495482, + "light.light165": 678561019, + "light.light166": 678626556, + "light.light167": 678692093, + "light.light168": 678757630, + "light.light169": 678823167, + "light.light17": 595068103, + "light.light170": 678364407, + "light.light171": 678429944, + "light.light172": 678495481, + "light.light173": 678561018, + "light.light174": 678626555, + "light.light175": 678692092, + "light.light176": 678757629, + "light.light177": 678823166, + "light.light178": 678888703, + "light.light179": 678954240, + "light.light18": 595133640, + "light.light180": 678495480, + "light.light181": 678561017, + "light.light182": 678626554, + "light.light183": 678692091, + "light.light184": 678757628, + "light.light185": 678823165, + "light.light186": 678888702, + "light.light187": 678954239, + "light.light188": 679019776, + "light.light189": 679085313, + "light.light19": 595199177, + "light.light190": 678626553, + "light.light191": 678692090, + "light.light192": 678757627, + "light.light193": 678823164, + "light.light194": 678888701, + "light.light195": 678954238, + "light.light196": 679019775, + "light.light197": 679085312, + "light.light198": 679150849, + "light.light199": 679216386, + "light.light2": 514983057, + "light.light20": 594740417, + "light.light200": 677643505, + "light.light201": 1682157970, + "light.light202": 1665380351, + "light.light203": 1648602732, + "light.light204": 1631825113, + "light.light205": 1615047494, + "light.light206": 1598269875, + "light.light207": 1581492256, + "light.light208": 1833156541, + "light.light209": 1816378922, + "light.light21": 594805954, + "light.light210": 677774578, + "light.light211": 1614900399, + "light.light212": 1631678018, + "light.light213": 1648455637, + "light.light214": 1531012304, + "light.light215": 1547789923, + "light.light216": 1564567542, + "light.light217": 1581345161, + "light.light218": 1732343732, + "light.light219": 1749121351, + "light.light22": 594871491, + "light.light23": 594937028, + "light.light24": 595002565, + "light.light25": 595068102, + "light.light26": 595133639, + "light.light27": 595199176, + "light.light28": 595264713, + "light.light29": 595330250, + "light.light3": 515048594, + "light.light30": 594871490, + "light.light31": 594937027, + "light.light32": 595002564, + "light.light33": 595068101, + "light.light34": 595133638, + "light.light35": 595199175, + "light.light36": 595264712, + "light.light37": 595330249, + "light.light38": 595395786, + "light.light39": 595461323, + "light.light4": 515114131, + "light.light40": 595002563, + "light.light41": 595068100, + "light.light42": 595133637, + "light.light43": 595199174, + "light.light44": 595264711, + "light.light45": 595330248, + "light.light46": 595395785, + "light.light47": 595461322, + "light.light48": 595526859, + "light.light49": 595592396, + "light.light5": 515179668, + "light.light50": 595133636, + "light.light51": 595199173, + "light.light52": 595264710, + "light.light53": 595330247, + "light.light54": 595395784, + "light.light55": 595461321, + "light.light56": 595526858, + "light.light57": 595592395, + "light.light58": 595657932, + "light.light59": 595723469, + "light.light6": 515245205, + "light.light60": 595264709, + "light.light61": 595330246, + "light.light62": 595395783, + "light.light63": 595461320, + "light.light64": 595526857, + "light.light65": 595592394, + "light.light66": 595657931, + "light.light67": 595723468, + "light.light68": 595789005, + "light.light69": 595854542, + "light.light7": 515310742, + "light.light70": 595395782, + "light.light71": 595461319, + "light.light72": 595526856, + "light.light73": 595592393, + "light.light74": 595657930, + "light.light75": 595723467, + "light.light76": 595789004, + "light.light77": 595854541, + "light.light78": 595920078, + "light.light79": 595985615, + "light.light8": 515376279, + "light.light80": 595526855, + "light.light81": 595592392, + "light.light82": 595657929, + "light.light83": 595723466, + "light.light84": 595789003, + "light.light85": 595854540, + "light.light86": 595920077, + "light.light87": 595985614, + "light.light88": 596051151, + "light.light89": 596116688, + "light.light9": 515441816, + "light.light90": 595657928, + "light.light91": 595723465, + "light.light92": 595789002, + "light.light93": 595854539, + "light.light94": 595920076, + "light.light95": 595985613, + "light.light96": 596051150, + "light.light97": 596116687, + "light.light98": 596182224, + "light.light99": 596247761, + } + + await aid_storage.async_save() + await hass.async_block_till_done() + + aid_storage = AccessoryAidStorage(hass) + await aid_storage.async_initialize() + + assert aid_storage.allocations == { + "light.light0": 514851983, + "light.light1": 514917520, + "light.light10": 594609344, + "light.light100": 677446896, + "light.light101": 677512433, + "light.light102": 677577970, + "light.light103": 677643507, + "light.light104": 677709044, + "light.light105": 677774581, + "light.light106": 677840118, + "light.light107": 677905655, + "light.light108": 677971192, + "light.light109": 678036729, + "light.light11": 594674881, + "light.light110": 677577969, + "light.light111": 677643506, + "light.light112": 677709043, + "light.light113": 677774580, + "light.light114": 677840117, + "light.light115": 677905654, + "light.light116": 677971191, + "light.light117": 678036728, + "light.light118": 678102265, + "light.light119": 678167802, + "light.light12": 594740418, + "light.light120": 677709042, + "light.light121": 677774579, + "light.light122": 677840116, + "light.light123": 677905653, + "light.light124": 677971190, + "light.light125": 678036727, + "light.light126": 678102264, + "light.light127": 678167801, + "light.light128": 678233338, + "light.light129": 678298875, + "light.light13": 594805955, + "light.light130": 677840115, + "light.light131": 677905652, + "light.light132": 677971189, + "light.light133": 678036726, + "light.light134": 678102263, + "light.light135": 678167800, + "light.light136": 678233337, + "light.light137": 678298874, + "light.light138": 678364411, + "light.light139": 678429948, + "light.light14": 594871492, + "light.light140": 677971188, + "light.light141": 678036725, + "light.light142": 678102262, + "light.light143": 678167799, + "light.light144": 678233336, + "light.light145": 678298873, + "light.light146": 678364410, + "light.light147": 678429947, + "light.light148": 678495484, + "light.light149": 678561021, + "light.light15": 594937029, + "light.light150": 678102261, + "light.light151": 678167798, + "light.light152": 678233335, + "light.light153": 678298872, + "light.light154": 678364409, + "light.light155": 678429946, + "light.light156": 678495483, + "light.light157": 678561020, + "light.light158": 678626557, + "light.light159": 678692094, + "light.light16": 595002566, + "light.light160": 678233334, + "light.light161": 678298871, + "light.light162": 678364408, + "light.light163": 678429945, + "light.light164": 678495482, + "light.light165": 678561019, + "light.light166": 678626556, + "light.light167": 678692093, + "light.light168": 678757630, + "light.light169": 678823167, + "light.light17": 595068103, + "light.light170": 678364407, + "light.light171": 678429944, + "light.light172": 678495481, + "light.light173": 678561018, + "light.light174": 678626555, + "light.light175": 678692092, + "light.light176": 678757629, + "light.light177": 678823166, + "light.light178": 678888703, + "light.light179": 678954240, + "light.light18": 595133640, + "light.light180": 678495480, + "light.light181": 678561017, + "light.light182": 678626554, + "light.light183": 678692091, + "light.light184": 678757628, + "light.light185": 678823165, + "light.light186": 678888702, + "light.light187": 678954239, + "light.light188": 679019776, + "light.light189": 679085313, + "light.light19": 595199177, + "light.light190": 678626553, + "light.light191": 678692090, + "light.light192": 678757627, + "light.light193": 678823164, + "light.light194": 678888701, + "light.light195": 678954238, + "light.light196": 679019775, + "light.light197": 679085312, + "light.light198": 679150849, + "light.light199": 679216386, + "light.light2": 514983057, + "light.light20": 594740417, + "light.light200": 677643505, + "light.light201": 1682157970, + "light.light202": 1665380351, + "light.light203": 1648602732, + "light.light204": 1631825113, + "light.light205": 1615047494, + "light.light206": 1598269875, + "light.light207": 1581492256, + "light.light208": 1833156541, + "light.light209": 1816378922, + "light.light21": 594805954, + "light.light210": 677774578, + "light.light211": 1614900399, + "light.light212": 1631678018, + "light.light213": 1648455637, + "light.light214": 1531012304, + "light.light215": 1547789923, + "light.light216": 1564567542, + "light.light217": 1581345161, + "light.light218": 1732343732, + "light.light219": 1749121351, + "light.light22": 594871491, + "light.light23": 594937028, + "light.light24": 595002565, + "light.light25": 595068102, + "light.light26": 595133639, + "light.light27": 595199176, + "light.light28": 595264713, + "light.light29": 595330250, + "light.light3": 515048594, + "light.light30": 594871490, + "light.light31": 594937027, + "light.light32": 595002564, + "light.light33": 595068101, + "light.light34": 595133638, + "light.light35": 595199175, + "light.light36": 595264712, + "light.light37": 595330249, + "light.light38": 595395786, + "light.light39": 595461323, + "light.light4": 515114131, + "light.light40": 595002563, + "light.light41": 595068100, + "light.light42": 595133637, + "light.light43": 595199174, + "light.light44": 595264711, + "light.light45": 595330248, + "light.light46": 595395785, + "light.light47": 595461322, + "light.light48": 595526859, + "light.light49": 595592396, + "light.light5": 515179668, + "light.light50": 595133636, + "light.light51": 595199173, + "light.light52": 595264710, + "light.light53": 595330247, + "light.light54": 595395784, + "light.light55": 595461321, + "light.light56": 595526858, + "light.light57": 595592395, + "light.light58": 595657932, + "light.light59": 595723469, + "light.light6": 515245205, + "light.light60": 595264709, + "light.light61": 595330246, + "light.light62": 595395783, + "light.light63": 595461320, + "light.light64": 595526857, + "light.light65": 595592394, + "light.light66": 595657931, + "light.light67": 595723468, + "light.light68": 595789005, + "light.light69": 595854542, + "light.light7": 515310742, + "light.light70": 595395782, + "light.light71": 595461319, + "light.light72": 595526856, + "light.light73": 595592393, + "light.light74": 595657930, + "light.light75": 595723467, + "light.light76": 595789004, + "light.light77": 595854541, + "light.light78": 595920078, + "light.light79": 595985615, + "light.light8": 515376279, + "light.light80": 595526855, + "light.light81": 595592392, + "light.light82": 595657929, + "light.light83": 595723466, + "light.light84": 595789003, + "light.light85": 595854540, + "light.light86": 595920077, + "light.light87": 595985614, + "light.light88": 596051151, + "light.light89": 596116688, + "light.light9": 515441816, + "light.light90": 595657928, + "light.light91": 595723465, + "light.light92": 595789002, + "light.light93": 595854539, + "light.light94": 595920076, + "light.light95": 595985613, + "light.light96": 596051150, + "light.light97": 596116687, + "light.light98": 596182224, + "light.light99": 596247761, + } + + aid_storage_path = hass.config.path(STORAGE_DIR, AID_MANAGER_STORAGE_KEY) + if await hass.async_add_executor_job(os.path.exists, aid_storage_path): + await hass.async_add_executor_job(os.unlink, aid_storage_path) From 73cb06c6afb1dd728b546bffb114fd1af1888af5 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Thu, 23 Apr 2020 21:33:37 +0200 Subject: [PATCH 15/63] Fix Garmin Connect i/o in event loop (#34598) --- homeassistant/components/garmin_connect/__init__.py | 2 +- homeassistant/components/garmin_connect/config_flow.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/garmin_connect/__init__.py b/homeassistant/components/garmin_connect/__init__.py index 1536a875698..8abdbbbbae9 100644 --- a/homeassistant/components/garmin_connect/__init__.py +++ b/homeassistant/components/garmin_connect/__init__.py @@ -38,7 +38,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry): garmin_client = Garmin(username, password) try: - garmin_client.login() + await hass.async_add_executor_job(garmin_client.login) except ( GarminConnectAuthenticationError, GarminConnectTooManyRequestsError, diff --git a/homeassistant/components/garmin_connect/config_flow.py b/homeassistant/components/garmin_connect/config_flow.py index 36c63c7b995..e0b50fa371b 100644 --- a/homeassistant/components/garmin_connect/config_flow.py +++ b/homeassistant/components/garmin_connect/config_flow.py @@ -42,7 +42,7 @@ class GarminConnectConfigFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): errors = {} try: - garmin_client.login() + await self.hass.async_add_executor_job(garmin_client.login) except GarminConnectConnectionError: errors["base"] = "cannot_connect" return await self._show_setup_form(errors) From f02475fede93adad4dc5c0695d3c44ba3676b516 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 23 Apr 2020 12:58:05 -0700 Subject: [PATCH 16/63] Bumped version to 0.109.0b1 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 39fff8b6ea9..67feb6c7b13 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -1,7 +1,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 109 -PATCH_VERSION = "0b0" +PATCH_VERSION = "0b1" __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER = (3, 7, 0) From f3de26444e4894a86bf5da8b578528bc57db6799 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 24 Apr 2020 01:49:11 -0700 Subject: [PATCH 17/63] Delay sync for Google and limit updates to relevant info (#34622) --- .../components/cloud/alexa_config.py | 16 ++++++++-- .../components/cloud/google_config.py | 21 ++++++++----- homeassistant/helpers/entity_registry.py | 12 ++++++++ tests/components/cloud/test_alexa_config.py | 11 +++++++ tests/components/cloud/test_google_config.py | 30 ++++++++++++------- 5 files changed, 69 insertions(+), 21 deletions(-) diff --git a/homeassistant/components/cloud/alexa_config.py b/homeassistant/components/cloud/alexa_config.py index 8d1527b1930..4085233436e 100644 --- a/homeassistant/components/cloud/alexa_config.py +++ b/homeassistant/components/cloud/alexa_config.py @@ -271,15 +271,25 @@ class AlexaConfig(alexa_config.AbstractConfig): if not self.enabled or not self._cloud.is_logged_in: return - action = event.data["action"] entity_id = event.data["entity_id"] + + if not self.should_expose(entity_id): + return + + action = event.data["action"] to_update = [] to_remove = [] - if action == "create" and self.should_expose(entity_id): + if action == "create": to_update.append(entity_id) - elif action == "remove" and self.should_expose(entity_id): + elif action == "remove": to_remove.append(entity_id) + elif action == "update" and bool( + set(event.data["changes"]) & entity_registry.ENTITY_DESCRIBING_ATTRIBUTES + ): + to_update.append(entity_id) + if "old_entity_id" in event.data: + to_remove.append(event.data["old_entity_id"]) try: await self._sync_helper(to_update, to_remove) diff --git a/homeassistant/components/cloud/google_config.py b/homeassistant/components/cloud/google_config.py index 1074aaa68b3..25c6adeac5a 100644 --- a/homeassistant/components/cloud/google_config.py +++ b/homeassistant/components/cloud/google_config.py @@ -33,12 +33,6 @@ class CloudGoogleConfig(AbstractConfig): self._cur_entity_prefs = self._prefs.google_entity_configs self._sync_entities_lock = asyncio.Lock() - prefs.async_listen_updates(self._async_prefs_updated) - hass.bus.async_listen( - entity_registry.EVENT_ENTITY_REGISTRY_UPDATED, - self._handle_entity_registry_updated, - ) - @property def enabled(self): """Return if Google is enabled.""" @@ -83,6 +77,13 @@ class CloudGoogleConfig(AbstractConfig): # Remove bad data that was there until 0.103.6 - Jan 6, 2020 self._store.pop_agent_user_id(self._user) + self._prefs.async_listen_updates(self._async_prefs_updated) + + self.hass.bus.async_listen( + entity_registry.EVENT_ENTITY_REGISTRY_UPDATED, + self._handle_entity_registry_updated, + ) + def should_expose(self, state): """If a state object should be exposed.""" return self._should_expose_entity_id(state.entity_id) @@ -160,8 +161,14 @@ class CloudGoogleConfig(AbstractConfig): if not self.enabled or not self._cloud.is_logged_in: return + # Only consider entity registry updates if info relevant for Google has changed + if event.data["action"] == "update" and not bool( + set(event.data["changes"]) & entity_registry.ENTITY_DESCRIBING_ATTRIBUTES + ): + return + entity_id = event.data["entity_id"] # Schedule a sync if a change was made to an entity that Google knows about if self._should_expose_entity_id(entity_id): - await self.async_sync_entities_all() + self.async_schedule_google_sync_all() diff --git a/homeassistant/helpers/entity_registry.py b/homeassistant/helpers/entity_registry.py index b8e54155922..dba35ae1388 100644 --- a/homeassistant/helpers/entity_registry.py +++ b/homeassistant/helpers/entity_registry.py @@ -53,6 +53,18 @@ ATTR_RESTORED = "restored" STORAGE_VERSION = 1 STORAGE_KEY = "core.entity_registry" +# Attributes relevant to describing entity +# to external services. +ENTITY_DESCRIBING_ATTRIBUTES = { + "entity_id", + "name", + "original_name", + "capabilities", + "supported_features", + "device_class", + "unit_of_measurement", +} + @attr.s(slots=True, frozen=True) class RegistryEntry: diff --git a/tests/components/cloud/test_alexa_config.py b/tests/components/cloud/test_alexa_config.py index 508626b43f0..f65b810d690 100644 --- a/tests/components/cloud/test_alexa_config.py +++ b/tests/components/cloud/test_alexa_config.py @@ -165,10 +165,21 @@ async def test_alexa_entity_registry_sync(hass, mock_cloud_login, cloud_prefs): "action": "update", "entity_id": "light.kitchen", "changes": ["entity_id"], + "old_entity_id": "light.living_room", }, ) await hass.async_block_till_done() + assert to_update == ["light.kitchen"] + assert to_remove == ["light.living_room"] + + with patch_sync_helper() as (to_update, to_remove): + hass.bus.async_fire( + EVENT_ENTITY_REGISTRY_UPDATED, + {"action": "update", "entity_id": "light.kitchen", "changes": ["icon"]}, + ) + await hass.async_block_till_done() + assert to_update == [] assert to_remove == [] diff --git a/tests/components/cloud/test_google_config.py b/tests/components/cloud/test_google_config.py index 4f08c4c37d0..cbe6dcdb18d 100644 --- a/tests/components/cloud/test_google_config.py +++ b/tests/components/cloud/test_google_config.py @@ -1,5 +1,7 @@ """Test the Cloud Google Config.""" -from unittest.mock import Mock, patch +from unittest.mock import Mock + +from asynctest import patch from homeassistant.components.cloud import GACTIONS_SCHEMA from homeassistant.components.cloud.google_config import CloudGoogleConfig @@ -104,30 +106,27 @@ async def test_google_entity_registry_sync(hass, mock_cloud_login, cloud_prefs): await config.async_connect_agent_user("mock-user-id") with patch.object( - config, "async_sync_entities", side_effect=mock_coro + config, "async_schedule_google_sync_all", side_effect=mock_coro ) as mock_sync, patch.object(ga_helpers, "SYNC_DELAY", 0): + # Created entity hass.bus.async_fire( EVENT_ENTITY_REGISTRY_UPDATED, {"action": "create", "entity_id": "light.kitchen"}, ) await hass.async_block_till_done() - assert len(mock_sync.mock_calls) == 1 + assert len(mock_sync.mock_calls) == 1 - with patch.object( - config, "async_sync_entities", side_effect=mock_coro - ) as mock_sync, patch.object(ga_helpers, "SYNC_DELAY", 0): + # Removed entity hass.bus.async_fire( EVENT_ENTITY_REGISTRY_UPDATED, {"action": "remove", "entity_id": "light.kitchen"}, ) await hass.async_block_till_done() - assert len(mock_sync.mock_calls) == 1 + assert len(mock_sync.mock_calls) == 2 - with patch.object( - config, "async_sync_entities", side_effect=mock_coro - ) as mock_sync, patch.object(ga_helpers, "SYNC_DELAY", 0): + # Entity registry updated with relevant changes hass.bus.async_fire( EVENT_ENTITY_REGISTRY_UPDATED, { @@ -138,4 +137,13 @@ async def test_google_entity_registry_sync(hass, mock_cloud_login, cloud_prefs): ) await hass.async_block_till_done() - assert len(mock_sync.mock_calls) == 1 + assert len(mock_sync.mock_calls) == 3 + + # Entity registry updated with non-relevant changes + hass.bus.async_fire( + EVENT_ENTITY_REGISTRY_UPDATED, + {"action": "update", "entity_id": "light.kitchen", "changes": ["icon"]}, + ) + await hass.async_block_till_done() + + assert len(mock_sync.mock_calls) == 3 From 73535200c287cb552853c06d4777032707b3e9bf Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 24 Apr 2020 09:56:18 -0700 Subject: [PATCH 18/63] Bumped version to 0.108.9 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index cdad3f6da90..385f410b7ae 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -1,7 +1,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 108 -PATCH_VERSION = "8" +PATCH_VERSION = "9" __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER = (3, 7, 0) From 7b35f5d66d95423a8a21fe973db3309fad523f04 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Fri, 24 Apr 2020 12:09:38 -0500 Subject: [PATCH 19/63] Restore Expected Behavior of Sonarr Upcoming Sensor (#34408) --- homeassistant/components/sonarr/sensor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/sonarr/sensor.py b/homeassistant/components/sonarr/sensor.py index c0350353b4c..65513db3571 100644 --- a/homeassistant/components/sonarr/sensor.py +++ b/homeassistant/components/sonarr/sensor.py @@ -206,7 +206,8 @@ class SonarrSensor(Entity): def update(self): """Update the data for the sensor.""" - start = dt_util.utcnow().replace(microsecond=0) + local = dt_util.start_of_local_day().replace(microsecond=0) + start = dt_util.as_utc(local) end = start + timedelta(days=self.days) try: res = requests.get( From 513f33f45461e230add2c93e9b93303af45433d3 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 23 Apr 2020 15:52:36 -0700 Subject: [PATCH 20/63] Fix UVC doing I/O in event loop (#34610) --- homeassistant/components/uvc/camera.py | 29 ++++++++++++++++---------- tests/components/uvc/test_camera.py | 1 + 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/homeassistant/components/uvc/camera.py b/homeassistant/components/uvc/camera.py index 431785f7c6a..05937cc3ee9 100644 --- a/homeassistant/components/uvc/camera.py +++ b/homeassistant/components/uvc/camera.py @@ -66,7 +66,8 @@ def setup_platform(hass, config, add_entities, discovery_info=None): [ UnifiVideoCamera(nvrconn, camera[identifier], camera["name"], password) for camera in cameras - ] + ], + True, ) return True @@ -85,17 +86,22 @@ class UnifiVideoCamera(Camera): self._connect_addr = None self._camera = None self._motion_status = False + self._caminfo = None @property def name(self): """Return the name of this camera.""" return self._name + @property + def should_poll(self): + """If this entity should be polled.""" + return True + @property def supported_features(self): """Return supported features.""" - caminfo = self._nvr.get_camera(self._uuid) - channels = caminfo["channels"] + channels = self._caminfo["channels"] for channel in channels: if channel["isRtspEnabled"]: return SUPPORT_STREAM @@ -105,14 +111,12 @@ class UnifiVideoCamera(Camera): @property def is_recording(self): """Return true if the camera is recording.""" - caminfo = self._nvr.get_camera(self._uuid) - return caminfo["recordingSettings"]["fullTimeRecordEnabled"] + return self._caminfo["recordingSettings"]["fullTimeRecordEnabled"] @property def motion_detection_enabled(self): """Camera Motion Detection Status.""" - caminfo = self._nvr.get_camera(self._uuid) - return caminfo["recordingSettings"]["motionRecordEnabled"] + return self._caminfo["recordingSettings"]["motionRecordEnabled"] @property def brand(self): @@ -122,13 +126,11 @@ class UnifiVideoCamera(Camera): @property def model(self): """Return the model of this camera.""" - caminfo = self._nvr.get_camera(self._uuid) - return caminfo["model"] + return self._caminfo["model"] def _login(self): """Login to the camera.""" - - caminfo = self._nvr.get_camera(self._uuid) + caminfo = self._caminfo if self._connect_addr: addrs = [self._connect_addr] else: @@ -164,6 +166,7 @@ class UnifiVideoCamera(Camera): return None self._camera = camera + self._caminfo = caminfo return True def camera_image(self): @@ -219,3 +222,7 @@ class UnifiVideoCamera(Camera): return channel["rtspUris"][0] return None + + def update(self): + """Update the info.""" + self._caminfo = self._nvr.get_camera(self._uuid) diff --git a/tests/components/uvc/test_camera.py b/tests/components/uvc/test_camera.py index 2ca7fdf46e3..2b1e9c7782e 100644 --- a/tests/components/uvc/test_camera.py +++ b/tests/components/uvc/test_camera.py @@ -213,6 +213,7 @@ class TestUVC(unittest.TestCase): ], } self.nvr.server_version = (3, 2, 0) + self.uvc.update() def test_properties(self): """Test the properties.""" From 93aa47851a72f46e6e9fe75f1314b05f8e5aaab0 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 23 Apr 2020 15:53:31 -0500 Subject: [PATCH 21/63] Restore ability to overwrite homekit max temp bound (#34612) --- homeassistant/components/homekit/type_thermostats.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/homekit/type_thermostats.py b/homeassistant/components/homekit/type_thermostats.py index 8691dc51c05..0a488917381 100644 --- a/homeassistant/components/homekit/type_thermostats.py +++ b/homeassistant/components/homekit/type_thermostats.py @@ -119,9 +119,11 @@ class Thermostat(HomeAccessory): self._unit = self.hass.config.units.temperature_unit min_temp, max_temp = self.get_temperature_range() - # Homekit only supports 10-38 + # Homekit only supports 10-38, overwriting + # the max to appears to work, but less than 10 causes + # a crash on the home app hc_min_temp = max(min_temp, HC_MIN_TEMP) - hc_max_temp = min(max_temp, HC_MAX_TEMP) + hc_max_temp = max_temp min_humidity = self.hass.states.get(self.entity_id).attributes.get( ATTR_MIN_HUMIDITY, DEFAULT_MIN_HUMIDITY From 5b4cfc6b252f5ea285bc9d00e7d37e0b54fef5ff Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Fri, 24 Apr 2020 01:00:57 +0200 Subject: [PATCH 22/63] Fix BloomSky KeyError: 'monitored_conditions' (#34613) Co-Authored-By: Paulus Schoutsen --- homeassistant/components/bloomsky/binary_sensor.py | 3 +++ homeassistant/components/bloomsky/camera.py | 3 +++ homeassistant/components/bloomsky/sensor.py | 3 +++ 3 files changed, 9 insertions(+) diff --git a/homeassistant/components/bloomsky/binary_sensor.py b/homeassistant/components/bloomsky/binary_sensor.py index 140d7e638a7..4e6fc867f2d 100644 --- a/homeassistant/components/bloomsky/binary_sensor.py +++ b/homeassistant/components/bloomsky/binary_sensor.py @@ -25,6 +25,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the available BloomSky weather binary sensors.""" # Default needed in case of discovery + if discovery_info is not None: + return + sensors = config[CONF_MONITORED_CONDITIONS] bloomsky = hass.data[DOMAIN] diff --git a/homeassistant/components/bloomsky/camera.py b/homeassistant/components/bloomsky/camera.py index 43bae9dc3bf..e14e2f5c68b 100644 --- a/homeassistant/components/bloomsky/camera.py +++ b/homeassistant/components/bloomsky/camera.py @@ -10,6 +10,9 @@ from . import DOMAIN def setup_platform(hass, config, add_entities, discovery_info=None): """Set up access to BloomSky cameras.""" + if discovery_info is not None: + return + bloomsky = hass.data[DOMAIN] for device in bloomsky.devices.values(): diff --git a/homeassistant/components/bloomsky/sensor.py b/homeassistant/components/bloomsky/sensor.py index 2b4563dab83..0a2c19a8cd8 100644 --- a/homeassistant/components/bloomsky/sensor.py +++ b/homeassistant/components/bloomsky/sensor.py @@ -60,6 +60,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the available BloomSky weather sensors.""" # Default needed in case of discovery + if discovery_info is not None: + return + sensors = config[CONF_MONITORED_CONDITIONS] bloomsky = hass.data[DOMAIN] From a7f4b4d248a141ec58aaa0dd08c71a0d4a087755 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 24 Apr 2020 01:49:11 -0700 Subject: [PATCH 23/63] Delay sync for Google and limit updates to relevant info (#34622) --- .../components/cloud/alexa_config.py | 16 ++++++++-- .../components/cloud/google_config.py | 21 ++++++++----- homeassistant/helpers/entity_registry.py | 12 ++++++++ tests/components/cloud/test_alexa_config.py | 11 +++++++ tests/components/cloud/test_google_config.py | 30 ++++++++++++------- 5 files changed, 69 insertions(+), 21 deletions(-) diff --git a/homeassistant/components/cloud/alexa_config.py b/homeassistant/components/cloud/alexa_config.py index dc1f5c11b5d..a45469c8f97 100644 --- a/homeassistant/components/cloud/alexa_config.py +++ b/homeassistant/components/cloud/alexa_config.py @@ -271,15 +271,25 @@ class AlexaConfig(alexa_config.AbstractConfig): if not self.enabled or not self._cloud.is_logged_in: return - action = event.data["action"] entity_id = event.data["entity_id"] + + if not self.should_expose(entity_id): + return + + action = event.data["action"] to_update = [] to_remove = [] - if action == "create" and self.should_expose(entity_id): + if action == "create": to_update.append(entity_id) - elif action == "remove" and self.should_expose(entity_id): + elif action == "remove": to_remove.append(entity_id) + elif action == "update" and bool( + set(event.data["changes"]) & entity_registry.ENTITY_DESCRIBING_ATTRIBUTES + ): + to_update.append(entity_id) + if "old_entity_id" in event.data: + to_remove.append(event.data["old_entity_id"]) try: await self._sync_helper(to_update, to_remove) diff --git a/homeassistant/components/cloud/google_config.py b/homeassistant/components/cloud/google_config.py index 8420a1bea7e..bb6dcaa2fe2 100644 --- a/homeassistant/components/cloud/google_config.py +++ b/homeassistant/components/cloud/google_config.py @@ -33,12 +33,6 @@ class CloudGoogleConfig(AbstractConfig): self._cur_entity_prefs = self._prefs.google_entity_configs self._sync_entities_lock = asyncio.Lock() - prefs.async_listen_updates(self._async_prefs_updated) - hass.bus.async_listen( - entity_registry.EVENT_ENTITY_REGISTRY_UPDATED, - self._handle_entity_registry_updated, - ) - @property def enabled(self): """Return if Google is enabled.""" @@ -83,6 +77,13 @@ class CloudGoogleConfig(AbstractConfig): # Remove bad data that was there until 0.103.6 - Jan 6, 2020 self._store.pop_agent_user_id(self._user) + self._prefs.async_listen_updates(self._async_prefs_updated) + + self.hass.bus.async_listen( + entity_registry.EVENT_ENTITY_REGISTRY_UPDATED, + self._handle_entity_registry_updated, + ) + def should_expose(self, state): """If a state object should be exposed.""" return self._should_expose_entity_id(state.entity_id) @@ -160,8 +161,14 @@ class CloudGoogleConfig(AbstractConfig): if not self.enabled or not self._cloud.is_logged_in: return + # Only consider entity registry updates if info relevant for Google has changed + if event.data["action"] == "update" and not bool( + set(event.data["changes"]) & entity_registry.ENTITY_DESCRIBING_ATTRIBUTES + ): + return + entity_id = event.data["entity_id"] # Schedule a sync if a change was made to an entity that Google knows about if self._should_expose_entity_id(entity_id): - await self.async_sync_entities_all() + self.async_schedule_google_sync_all() diff --git a/homeassistant/helpers/entity_registry.py b/homeassistant/helpers/entity_registry.py index d73812c207b..10de8564fca 100644 --- a/homeassistant/helpers/entity_registry.py +++ b/homeassistant/helpers/entity_registry.py @@ -62,6 +62,18 @@ ATTR_RESTORED = "restored" STORAGE_VERSION = 1 STORAGE_KEY = "core.entity_registry" +# Attributes relevant to describing entity +# to external services. +ENTITY_DESCRIBING_ATTRIBUTES = { + "entity_id", + "name", + "original_name", + "capabilities", + "supported_features", + "device_class", + "unit_of_measurement", +} + @attr.s(slots=True, frozen=True) class RegistryEntry: diff --git a/tests/components/cloud/test_alexa_config.py b/tests/components/cloud/test_alexa_config.py index 508626b43f0..f65b810d690 100644 --- a/tests/components/cloud/test_alexa_config.py +++ b/tests/components/cloud/test_alexa_config.py @@ -165,10 +165,21 @@ async def test_alexa_entity_registry_sync(hass, mock_cloud_login, cloud_prefs): "action": "update", "entity_id": "light.kitchen", "changes": ["entity_id"], + "old_entity_id": "light.living_room", }, ) await hass.async_block_till_done() + assert to_update == ["light.kitchen"] + assert to_remove == ["light.living_room"] + + with patch_sync_helper() as (to_update, to_remove): + hass.bus.async_fire( + EVENT_ENTITY_REGISTRY_UPDATED, + {"action": "update", "entity_id": "light.kitchen", "changes": ["icon"]}, + ) + await hass.async_block_till_done() + assert to_update == [] assert to_remove == [] diff --git a/tests/components/cloud/test_google_config.py b/tests/components/cloud/test_google_config.py index 1070730ba96..2474851cce8 100644 --- a/tests/components/cloud/test_google_config.py +++ b/tests/components/cloud/test_google_config.py @@ -1,5 +1,7 @@ """Test the Cloud Google Config.""" -from unittest.mock import Mock, patch +from unittest.mock import Mock + +from asynctest import patch from homeassistant.components.cloud import GACTIONS_SCHEMA from homeassistant.components.cloud.google_config import CloudGoogleConfig @@ -105,30 +107,27 @@ async def test_google_entity_registry_sync(hass, mock_cloud_login, cloud_prefs): await config.async_connect_agent_user("mock-user-id") with patch.object( - config, "async_sync_entities", side_effect=mock_coro + config, "async_schedule_google_sync_all", side_effect=mock_coro ) as mock_sync, patch.object(ga_helpers, "SYNC_DELAY", 0): + # Created entity hass.bus.async_fire( EVENT_ENTITY_REGISTRY_UPDATED, {"action": "create", "entity_id": "light.kitchen"}, ) await hass.async_block_till_done() - assert len(mock_sync.mock_calls) == 1 + assert len(mock_sync.mock_calls) == 1 - with patch.object( - config, "async_sync_entities", side_effect=mock_coro - ) as mock_sync, patch.object(ga_helpers, "SYNC_DELAY", 0): + # Removed entity hass.bus.async_fire( EVENT_ENTITY_REGISTRY_UPDATED, {"action": "remove", "entity_id": "light.kitchen"}, ) await hass.async_block_till_done() - assert len(mock_sync.mock_calls) == 1 + assert len(mock_sync.mock_calls) == 2 - with patch.object( - config, "async_sync_entities", side_effect=mock_coro - ) as mock_sync, patch.object(ga_helpers, "SYNC_DELAY", 0): + # Entity registry updated with relevant changes hass.bus.async_fire( EVENT_ENTITY_REGISTRY_UPDATED, { @@ -139,4 +138,13 @@ async def test_google_entity_registry_sync(hass, mock_cloud_login, cloud_prefs): ) await hass.async_block_till_done() - assert len(mock_sync.mock_calls) == 1 + assert len(mock_sync.mock_calls) == 3 + + # Entity registry updated with non-relevant changes + hass.bus.async_fire( + EVENT_ENTITY_REGISTRY_UPDATED, + {"action": "update", "entity_id": "light.kitchen", "changes": ["icon"]}, + ) + await hass.async_block_till_done() + + assert len(mock_sync.mock_calls) == 3 From 1063594bf0741d8c6abfd32e76b40b5b4281f4a2 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 23 Apr 2020 19:53:18 -0500 Subject: [PATCH 24/63] Handle synology_dsm discovery broadcasting on multiple ip addresses (#34623) --- .../components/synology_dsm/config_flow.py | 9 ++++++- .../synology_dsm/test_config_flow.py | 25 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/synology_dsm/config_flow.py b/homeassistant/components/synology_dsm/config_flow.py index c1e8cf553d9..025b2959026 100644 --- a/homeassistant/components/synology_dsm/config_flow.py +++ b/homeassistant/components/synology_dsm/config_flow.py @@ -133,7 +133,7 @@ class SynologyDSMFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): return await self._show_setup_form(user_input, errors) # Check if already configured - await self.async_set_unique_id(serial) + await self.async_set_unique_id(serial, raise_on_progress=False) self._abort_if_unique_id_configured() config_data = { @@ -162,6 +162,13 @@ class SynologyDSMFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): if self._host_already_configured(parsed_url.hostname): return self.async_abort(reason="already_configured") + if ssdp.ATTR_UPNP_SERIAL in discovery_info: + # Synology can broadcast on multiple IP addresses + await self.async_set_unique_id( + discovery_info[ssdp.ATTR_UPNP_SERIAL].upper() + ) + self._abort_if_unique_id_configured() + self.discovered_conf = { CONF_NAME: friendly_name, CONF_HOST: parsed_url.hostname, diff --git a/tests/components/synology_dsm/test_config_flow.py b/tests/components/synology_dsm/test_config_flow.py index 9a9283256c5..66f752ffaf4 100644 --- a/tests/components/synology_dsm/test_config_flow.py +++ b/tests/components/synology_dsm/test_config_flow.py @@ -321,6 +321,30 @@ async def test_missing_data_after_login( assert result["errors"] == {"base": "missing_data"} +async def test_form_ssdp_already_configured( + hass: HomeAssistantType, service: MagicMock +): + """Test ssdp abort when the serial number is already configured.""" + await setup.async_setup_component(hass, "persistent_notification", {}) + + MockConfigEntry( + domain=DOMAIN, + data={CONF_HOST: HOST, CONF_USERNAME: USERNAME, CONF_PASSWORD: PASSWORD}, + unique_id=SERIAL.upper(), + ).add_to_hass(hass) + + result = await hass.config_entries.flow.async_init( + DOMAIN, + context={"source": SOURCE_SSDP}, + data={ + ssdp.ATTR_SSDP_LOCATION: "http://192.168.1.5:5000", + ssdp.ATTR_UPNP_FRIENDLY_NAME: "mydsm", + ssdp.ATTR_UPNP_SERIAL: SERIAL, + }, + ) + assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT + + async def test_form_ssdp(hass: HomeAssistantType, service: MagicMock): """Test we can setup from ssdp.""" await setup.async_setup_component(hass, "persistent_notification", {}) @@ -331,6 +355,7 @@ async def test_form_ssdp(hass: HomeAssistantType, service: MagicMock): data={ ssdp.ATTR_SSDP_LOCATION: "http://192.168.1.5:5000", ssdp.ATTR_UPNP_FRIENDLY_NAME: "mydsm", + ssdp.ATTR_UPNP_SERIAL: SERIAL, }, ) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM From a65bb6d8046a8e75c4b3f9cec632a2720f768e7b Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Fri, 24 Apr 2020 17:40:36 +0200 Subject: [PATCH 25/63] Updated frontend to 20200424.0 (#34645) --- homeassistant/components/frontend/manifest.json | 2 +- homeassistant/package_constraints.txt | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/frontend/manifest.json b/homeassistant/components/frontend/manifest.json index dfef5795599..f75605eaafc 100644 --- a/homeassistant/components/frontend/manifest.json +++ b/homeassistant/components/frontend/manifest.json @@ -2,7 +2,7 @@ "domain": "frontend", "name": "Home Assistant Frontend", "documentation": "https://www.home-assistant.io/integrations/frontend", - "requirements": ["home-assistant-frontend==20200422.0"], + "requirements": ["home-assistant-frontend==20200424.0"], "dependencies": [ "api", "auth", diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index c760440e63b..a6d72ca222f 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -12,7 +12,7 @@ cryptography==2.9 defusedxml==0.6.0 distro==1.5.0 hass-nabucasa==0.34.1 -home-assistant-frontend==20200422.0 +home-assistant-frontend==20200424.0 importlib-metadata==1.6.0 jinja2>=2.11.1 netdisco==2.6.0 diff --git a/requirements_all.txt b/requirements_all.txt index 8c89391d060..94af7482def 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -713,7 +713,7 @@ hole==0.5.1 holidays==0.10.2 # homeassistant.components.frontend -home-assistant-frontend==20200422.0 +home-assistant-frontend==20200424.0 # homeassistant.components.zwave homeassistant-pyozw==0.1.10 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 77c12ead2c7..fe3a3fea75b 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -291,7 +291,7 @@ hole==0.5.1 holidays==0.10.2 # homeassistant.components.frontend -home-assistant-frontend==20200422.0 +home-assistant-frontend==20200424.0 # homeassistant.components.zwave homeassistant-pyozw==0.1.10 From f3f2aa807bb8289607ec92fefaee090d7c9d41a3 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 24 Apr 2020 09:52:23 -0700 Subject: [PATCH 26/63] Fix identifying Plex schema when used in packages (#34651) --- homeassistant/config.py | 25 +++++++++++++++++++------ tests/test_config.py | 1 + 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/homeassistant/config.py b/homeassistant/config.py index b9fdcb085ef..56bbe76a045 100644 --- a/homeassistant/config.py +++ b/homeassistant/config.py @@ -559,12 +559,23 @@ def _log_pkg_error(package: str, component: str, config: Dict, message: str) -> def _identify_config_schema(module: ModuleType) -> Optional[str]: """Extract the schema and identify list or dict based.""" - try: - key = next(k for k in module.CONFIG_SCHEMA.schema if k == module.DOMAIN) # type: ignore - except (AttributeError, StopIteration): - return None + schema = module.CONFIG_SCHEMA.schema # type: ignore - schema = module.CONFIG_SCHEMA.schema[key] # type: ignore + if isinstance(schema, vol.All): + for subschema in schema.validators: + if isinstance(subschema, dict): + schema = subschema + break + else: + return None + + try: + key = next(k for k in schema if k == module.DOMAIN) # type: ignore + except (TypeError, AttributeError, StopIteration): + return None + except Exception: # pylint: disable=broad-except + _LOGGER.exception("Unexpected error identifying config schema") + return None if hasattr(key, "default") and not isinstance( key.default, vol.schema_builder.Undefined @@ -581,7 +592,9 @@ def _identify_config_schema(module: ModuleType) -> Optional[str]: return None - t_schema = str(schema) + domain_schema = schema[key] + + t_schema = str(domain_schema) if t_schema.startswith("{") or "schema_with_slug_keys" in t_schema: return "dict" if t_schema.startswith(("[", "All( Date: Fri, 24 Apr 2020 14:13:39 -0700 Subject: [PATCH 27/63] Add Home Assistant Started event (#34657) --- .../components/automation/__init__.py | 16 +++++---- .../components/automation/homeassistant.py | 4 +-- .../components/cloud/google_config.py | 27 ++++++++++++-- homeassistant/const.py | 1 + homeassistant/core.py | 2 ++ .../automation/test_homeassistant.py | 2 ++ tests/components/automation/test_init.py | 5 +-- tests/components/cloud/test_google_config.py | 36 +++++++++++++------ 8 files changed, 68 insertions(+), 25 deletions(-) diff --git a/homeassistant/components/automation/__init__.py b/homeassistant/components/automation/__init__.py index 76fe619cc1c..ea6c1e81e66 100644 --- a/homeassistant/components/automation/__init__.py +++ b/homeassistant/components/automation/__init__.py @@ -14,7 +14,7 @@ from homeassistant.const import ( CONF_PLATFORM, CONF_ZONE, EVENT_AUTOMATION_TRIGGERED, - EVENT_HOMEASSISTANT_START, + EVENT_HOMEASSISTANT_STARTED, SERVICE_RELOAD, SERVICE_TOGGLE, SERVICE_TURN_OFF, @@ -408,7 +408,7 @@ class AutomationEntity(ToggleEntity, RestoreEntity): # HomeAssistant is starting up if self.hass.state != CoreState.not_running: - self._async_detach_triggers = await self._async_attach_triggers() + self._async_detach_triggers = await self._async_attach_triggers(False) self.async_write_ha_state() return @@ -418,10 +418,10 @@ class AutomationEntity(ToggleEntity, RestoreEntity): if not self._is_enabled or self._async_detach_triggers is not None: return - self._async_detach_triggers = await self._async_attach_triggers() + self._async_detach_triggers = await self._async_attach_triggers(True) self.hass.bus.async_listen_once( - EVENT_HOMEASSISTANT_START, async_enable_automation + EVENT_HOMEASSISTANT_STARTED, async_enable_automation ) self.async_write_ha_state() @@ -438,15 +438,17 @@ class AutomationEntity(ToggleEntity, RestoreEntity): self.async_write_ha_state() - async def _async_attach_triggers(self): + async def _async_attach_triggers( + self, home_assistant_start: bool + ) -> Optional[Callable[[], None]]: """Set up the triggers.""" removes = [] - info = {"name": self._name} + info = {"name": self._name, "home_assistant_start": home_assistant_start} for conf in self._trigger_config: platform = importlib.import_module(f".{conf[CONF_PLATFORM]}", __name__) - remove = await platform.async_attach_trigger( + remove = await platform.async_attach_trigger( # type: ignore self.hass, conf, self.async_trigger, info ) diff --git a/homeassistant/components/automation/homeassistant.py b/homeassistant/components/automation/homeassistant.py index 743b169c86c..91b67e28c7c 100644 --- a/homeassistant/components/automation/homeassistant.py +++ b/homeassistant/components/automation/homeassistant.py @@ -4,7 +4,7 @@ import logging import voluptuous as vol from homeassistant.const import CONF_EVENT, CONF_PLATFORM, EVENT_HOMEASSISTANT_STOP -from homeassistant.core import CoreState, callback +from homeassistant.core import callback # mypy: allow-untyped-defs @@ -40,7 +40,7 @@ async def async_attach_trigger(hass, config, action, automation_info): # Automation are enabled while hass is starting up, fire right away # Check state because a config reload shouldn't trigger it. - if hass.state == CoreState.starting: + if automation_info["home_assistant_start"]: hass.async_run_job( action({"trigger": {"platform": "homeassistant", "event": event}}) ) diff --git a/homeassistant/components/cloud/google_config.py b/homeassistant/components/cloud/google_config.py index bb6dcaa2fe2..9b94b77ca45 100644 --- a/homeassistant/components/cloud/google_config.py +++ b/homeassistant/components/cloud/google_config.py @@ -6,7 +6,12 @@ from hass_nabucasa import cloud_api from hass_nabucasa.google_report_state import ErrorResponse from homeassistant.components.google_assistant.helpers import AbstractConfig -from homeassistant.const import CLOUD_NEVER_EXPOSED_ENTITIES, HTTP_OK +from homeassistant.const import ( + CLOUD_NEVER_EXPOSED_ENTITIES, + EVENT_HOMEASSISTANT_STARTED, + HTTP_OK, +) +from homeassistant.core import CoreState, callback from homeassistant.helpers import entity_registry from .const import ( @@ -32,6 +37,7 @@ class CloudGoogleConfig(AbstractConfig): self._cloud = cloud self._cur_entity_prefs = self._prefs.google_entity_configs self._sync_entities_lock = asyncio.Lock() + self._sync_on_started = False @property def enabled(self): @@ -169,6 +175,21 @@ class CloudGoogleConfig(AbstractConfig): entity_id = event.data["entity_id"] - # Schedule a sync if a change was made to an entity that Google knows about - if self._should_expose_entity_id(entity_id): + if not self._should_expose_entity_id(entity_id): + return + + if self.hass.state == CoreState.running: self.async_schedule_google_sync_all() + return + + if self._sync_on_started: + return + + self._sync_on_started = True + + @callback + async def sync_google(_): + """Sync entities to Google.""" + await self.async_sync_entities_all() + + self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STARTED, sync_google) diff --git a/homeassistant/const.py b/homeassistant/const.py index 67feb6c7b13..1366103113c 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -183,6 +183,7 @@ EVENT_COMPONENT_LOADED = "component_loaded" EVENT_CORE_CONFIG_UPDATE = "core_config_updated" EVENT_HOMEASSISTANT_CLOSE = "homeassistant_close" EVENT_HOMEASSISTANT_START = "homeassistant_start" +EVENT_HOMEASSISTANT_STARTED = "homeassistant_started" EVENT_HOMEASSISTANT_STOP = "homeassistant_stop" EVENT_HOMEASSISTANT_FINAL_WRITE = "homeassistant_final_write" EVENT_LOGBOOK_ENTRY = "logbook_entry" diff --git a/homeassistant/core.py b/homeassistant/core.py index c8c5fc4d499..c799656df89 100644 --- a/homeassistant/core.py +++ b/homeassistant/core.py @@ -50,6 +50,7 @@ from homeassistant.const import ( EVENT_HOMEASSISTANT_CLOSE, EVENT_HOMEASSISTANT_FINAL_WRITE, EVENT_HOMEASSISTANT_START, + EVENT_HOMEASSISTANT_STARTED, EVENT_HOMEASSISTANT_STOP, EVENT_SERVICE_REGISTERED, EVENT_SERVICE_REMOVED, @@ -279,6 +280,7 @@ class HomeAssistant: self.state = CoreState.running _async_create_timer(self) + self.bus.async_fire(EVENT_HOMEASSISTANT_STARTED) def add_job(self, target: Callable[..., Any], *args: Any) -> None: """Add job to the executor pool. diff --git a/tests/components/automation/test_homeassistant.py b/tests/components/automation/test_homeassistant.py index ee4293effe3..a0985e54976 100644 --- a/tests/components/automation/test_homeassistant.py +++ b/tests/components/automation/test_homeassistant.py @@ -25,6 +25,7 @@ async def test_if_fires_on_hass_start(hass): assert len(calls) == 0 await hass.async_start() + await hass.async_block_till_done() assert automation.is_on(hass, "automation.hello") assert len(calls) == 1 @@ -61,6 +62,7 @@ async def test_if_fires_on_hass_shutdown(hass): await hass.async_start() assert automation.is_on(hass, "automation.hello") + await hass.async_block_till_done() assert len(calls) == 0 with patch.object(hass.loop, "stop"): diff --git a/tests/components/automation/test_init.py b/tests/components/automation/test_init.py index c27a0262a4e..cd4a01e9a28 100644 --- a/tests/components/automation/test_init.py +++ b/tests/components/automation/test_init.py @@ -10,7 +10,7 @@ from homeassistant.const import ( ATTR_ENTITY_ID, ATTR_NAME, EVENT_AUTOMATION_TRIGGERED, - EVENT_HOMEASSISTANT_START, + EVENT_HOMEASSISTANT_STARTED, STATE_OFF, STATE_ON, ) @@ -700,6 +700,7 @@ async def test_initial_value_on(hass): assert automation.is_on(hass, "automation.hello") await hass.async_start() + await hass.async_block_till_done() hass.bus.async_fire("test_event") await hass.async_block_till_done() assert len(calls) == 1 @@ -822,7 +823,7 @@ async def test_automation_not_trigger_on_bootstrap(hass): await hass.async_block_till_done() assert len(calls) == 0 - hass.bus.async_fire(EVENT_HOMEASSISTANT_START) + hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED) await hass.async_block_till_done() assert automation.is_on(hass, "automation.hello") diff --git a/tests/components/cloud/test_google_config.py b/tests/components/cloud/test_google_config.py index 2474851cce8..b08b950a590 100644 --- a/tests/components/cloud/test_google_config.py +++ b/tests/components/cloud/test_google_config.py @@ -6,7 +6,8 @@ from asynctest import patch from homeassistant.components.cloud import GACTIONS_SCHEMA from homeassistant.components.cloud.google_config import CloudGoogleConfig from homeassistant.components.google_assistant import helpers as ga_helpers -from homeassistant.const import HTTP_NOT_FOUND +from homeassistant.const import EVENT_HOMEASSISTANT_STARTED, HTTP_NOT_FOUND +from homeassistant.core import CoreState from homeassistant.helpers.entity_registry import EVENT_ENTITY_REGISTRY_UPDATED from homeassistant.util.dt import utcnow @@ -25,9 +26,7 @@ async def test_google_update_report_state(hass, cloud_prefs): await config.async_initialize() await config.async_connect_agent_user("mock-user-id") - with patch.object( - config, "async_sync_entities", side_effect=mock_coro - ) as mock_sync, patch( + with patch.object(config, "async_sync_entities") as mock_sync, patch( "homeassistant.components.google_assistant.report_state.async_enable_report_state" ) as mock_report_state: await cloud_prefs.async_update(google_report_state=True) @@ -67,9 +66,9 @@ async def test_google_update_expose_trigger_sync(hass, cloud_prefs): await config.async_initialize() await config.async_connect_agent_user("mock-user-id") - with patch.object( - config, "async_sync_entities", side_effect=mock_coro - ) as mock_sync, patch.object(ga_helpers, "SYNC_DELAY", 0): + with patch.object(config, "async_sync_entities") as mock_sync, patch.object( + ga_helpers, "SYNC_DELAY", 0 + ): await cloud_prefs.async_update_google_entity_config( entity_id="light.kitchen", should_expose=True ) @@ -79,9 +78,9 @@ async def test_google_update_expose_trigger_sync(hass, cloud_prefs): assert len(mock_sync.mock_calls) == 1 - with patch.object( - config, "async_sync_entities", side_effect=mock_coro - ) as mock_sync, patch.object(ga_helpers, "SYNC_DELAY", 0): + with patch.object(config, "async_sync_entities") as mock_sync, patch.object( + ga_helpers, "SYNC_DELAY", 0 + ): await cloud_prefs.async_update_google_entity_config( entity_id="light.kitchen", should_expose=False ) @@ -107,7 +106,7 @@ async def test_google_entity_registry_sync(hass, mock_cloud_login, cloud_prefs): await config.async_connect_agent_user("mock-user-id") with patch.object( - config, "async_schedule_google_sync_all", side_effect=mock_coro + config, "async_schedule_google_sync_all" ) as mock_sync, patch.object(ga_helpers, "SYNC_DELAY", 0): # Created entity hass.bus.async_fire( @@ -148,3 +147,18 @@ async def test_google_entity_registry_sync(hass, mock_cloud_login, cloud_prefs): await hass.async_block_till_done() assert len(mock_sync.mock_calls) == 3 + + # When hass is not started yet we wait till started + hass.state = CoreState.starting + hass.bus.async_fire( + EVENT_ENTITY_REGISTRY_UPDATED, + {"action": "create", "entity_id": "light.kitchen"}, + ) + await hass.async_block_till_done() + + assert len(mock_sync.mock_calls) == 3 + + with patch.object(config, "async_sync_entities_all") as mock_sync: + hass.bus.async_fire(EVENT_HOMEASSISTANT_STARTED) + await hass.async_block_till_done() + assert len(mock_sync.mock_calls) == 1 From e3b91f4ce7107504c548bdd66df982c62cf6556b Mon Sep 17 00:00:00 2001 From: Alexei Chetroi Date: Fri, 24 Apr 2020 16:29:13 -0400 Subject: [PATCH 28/63] Update ZHA dependency (#34661) Bump up zigpy-deconz --- homeassistant/components/zha/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/zha/manifest.json b/homeassistant/components/zha/manifest.json index 82023eb9e15..e49f4f1407a 100644 --- a/homeassistant/components/zha/manifest.json +++ b/homeassistant/components/zha/manifest.json @@ -7,7 +7,7 @@ "bellows-homeassistant==0.15.2", "zha-quirks==0.0.38", "zigpy-cc==0.3.1", - "zigpy-deconz==0.8.0", + "zigpy-deconz==0.8.1", "zigpy-homeassistant==0.19.0", "zigpy-xbee-homeassistant==0.11.0", "zigpy-zigate==0.5.1" diff --git a/requirements_all.txt b/requirements_all.txt index 94af7482def..91a20789578 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -2199,7 +2199,7 @@ ziggo-mediabox-xl==1.1.0 zigpy-cc==0.3.1 # homeassistant.components.zha -zigpy-deconz==0.8.0 +zigpy-deconz==0.8.1 # homeassistant.components.zha zigpy-homeassistant==0.19.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index fe3a3fea75b..83fa0a4a752 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -836,7 +836,7 @@ zha-quirks==0.0.38 zigpy-cc==0.3.1 # homeassistant.components.zha -zigpy-deconz==0.8.0 +zigpy-deconz==0.8.1 # homeassistant.components.zha zigpy-homeassistant==0.19.0 From 2452f3504c0fad2a43e6cae2ed417442cb0bf1ed Mon Sep 17 00:00:00 2001 From: Quentame Date: Fri, 24 Apr 2020 23:10:57 +0200 Subject: [PATCH 29/63] Log config flow errors (#34665) --- homeassistant/components/synology_dsm/config_flow.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/synology_dsm/config_flow.py b/homeassistant/components/synology_dsm/config_flow.py index 025b2959026..4b09e516451 100644 --- a/homeassistant/components/synology_dsm/config_flow.py +++ b/homeassistant/components/synology_dsm/config_flow.py @@ -120,11 +120,14 @@ class SynologyDSMFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): errors[CONF_OTP_CODE] = "otp_failed" user_input[CONF_OTP_CODE] = None return await self.async_step_2sa(user_input, errors) - except SynologyDSMLoginInvalidException: + except SynologyDSMLoginInvalidException as ex: + _LOGGER.error(ex) errors[CONF_USERNAME] = "login" - except SynologyDSMRequestException: + except SynologyDSMRequestException as ex: + _LOGGER.error(ex) errors[CONF_HOST] = "connection" - except SynologyDSMException: + except SynologyDSMException as ex: + _LOGGER.error(ex) errors["base"] = "unknown" except InvalidData: errors["base"] = "missing_data" From e757c47bc86208091e81b4982a74e3b68abe4e75 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 24 Apr 2020 14:21:12 -0700 Subject: [PATCH 30/63] Bumped version to 0.109.0b2 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 1366103113c..212c860b107 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -1,7 +1,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 109 -PATCH_VERSION = "0b1" +PATCH_VERSION = "0b2" __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER = (3, 7, 0) From f474631ac0b8741da97c41796fc54e4fb829d25c Mon Sep 17 00:00:00 2001 From: escoand Date: Sun, 26 Apr 2020 00:40:26 +0200 Subject: [PATCH 31/63] Fix fritzbox integration errors (#34639) --- homeassistant/components/fritzbox/config_flow.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/fritzbox/config_flow.py b/homeassistant/components/fritzbox/config_flow.py index 1b086f58159..ffcdb499c30 100644 --- a/homeassistant/components/fritzbox/config_flow.py +++ b/homeassistant/components/fritzbox/config_flow.py @@ -83,7 +83,7 @@ class FritzboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): if user_input is not None: for entry in self.hass.config_entries.async_entries(DOMAIN): - if entry.data[CONF_HOST] == user_input[CONF_HOST]: + if entry.data.get(CONF_HOST) == user_input[CONF_HOST]: if entry.data != user_input: self.hass.config_entries.async_update_entry( entry, data=user_input @@ -117,7 +117,7 @@ class FritzboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return self.async_abort(reason="already_in_progress") for entry in self.hass.config_entries.async_entries(DOMAIN): - if entry.data[CONF_HOST] == host: + if entry.data.get(CONF_HOST) == host: if entry.data != user_input: self.hass.config_entries.async_update_entry(entry, data=user_input) return self.async_abort(reason="already_configured") From 9def9464e99583e230a3245c84182c48fe311a10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Sun, 26 Apr 2020 00:40:44 +0200 Subject: [PATCH 32/63] Add retry at startup (#34656) --- homeassistant/components/webostv/__init__.py | 32 ++++++++++++++----- tests/components/webostv/test_media_player.py | 1 + 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/homeassistant/components/webostv/__init__.py b/homeassistant/components/webostv/__init__.py index 0790ece9333..f0a059fc5b8 100644 --- a/homeassistant/components/webostv/__init__.py +++ b/homeassistant/components/webostv/__init__.py @@ -28,6 +28,7 @@ from homeassistant.const import ( ) import homeassistant.helpers.config_validation as cv from homeassistant.helpers.dispatcher import async_dispatcher_send +from homeassistant.helpers.event import async_call_later from .const import ATTR_SOUND_OUTPUT @@ -138,15 +139,30 @@ async def async_setup_tv_finalize(hass, config, conf, client): client.clear_state_update_callbacks() await client.disconnect() - hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, async_on_stop) + async def async_load_platforms(_): + """Load platforms and event listener.""" + await async_connect(client) - await async_connect(client) - hass.async_create_task( - hass.helpers.discovery.async_load_platform("media_player", DOMAIN, conf, config) - ) - hass.async_create_task( - hass.helpers.discovery.async_load_platform("notify", DOMAIN, conf, config) - ) + if client.connection is None: + async_call_later(hass, 60, async_load_platforms) + _LOGGER.warning( + "No connection could be made with host %s, retrying in 60 seconds", + conf.get(CONF_HOST), + ) + return + + hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, async_on_stop) + + hass.async_create_task( + hass.helpers.discovery.async_load_platform( + "media_player", DOMAIN, conf, config + ) + ) + hass.async_create_task( + hass.helpers.discovery.async_load_platform("notify", DOMAIN, conf, config) + ) + + await async_load_platforms(None) async def async_request_configuration(hass, config, conf, client): diff --git a/tests/components/webostv/test_media_player.py b/tests/components/webostv/test_media_player.py index 2685064a946..9ba35a510dd 100644 --- a/tests/components/webostv/test_media_player.py +++ b/tests/components/webostv/test_media_player.py @@ -41,6 +41,7 @@ def client_fixture(): "homeassistant.components.webostv.WebOsClient", autospec=True ) as mock_client_class: client = mock_client_class.return_value + client.connection = True client.software_info = {"device_id": "a1:b1:c1:d1:e1:f1"} yield client From 7fa3950001b671157c9ffd4ff66895a1eb93539d Mon Sep 17 00:00:00 2001 From: cgtobi Date: Sat, 25 Apr 2020 22:15:31 +0200 Subject: [PATCH 33/63] Fix zero value state rendering sensor unavailable (#34694) Co-Authored-By: Franck Nijhof --- homeassistant/components/netatmo/sensor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/netatmo/sensor.py b/homeassistant/components/netatmo/sensor.py index be7e0f3e971..327d9ecc52f 100644 --- a/homeassistant/components/netatmo/sensor.py +++ b/homeassistant/components/netatmo/sensor.py @@ -223,7 +223,7 @@ class NetatmoSensor(Entity): @property def available(self): """Return True if entity is available.""" - return bool(self._state) + return self._state is not None def update(self): """Get the latest data from Netatmo API and updates the states.""" From 17c31ed6403c33cb1ecff2006fc039e1a93b9977 Mon Sep 17 00:00:00 2001 From: Quentame Date: Sun, 26 Apr 2020 00:37:41 +0200 Subject: [PATCH 34/63] Fix Synology DSM translation (#34696) --- homeassistant/components/synology_dsm/strings.json | 2 +- homeassistant/components/synology_dsm/translations/en.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/synology_dsm/strings.json b/homeassistant/components/synology_dsm/strings.json index d00525f995d..c58b0d819ea 100644 --- a/homeassistant/components/synology_dsm/strings.json +++ b/homeassistant/components/synology_dsm/strings.json @@ -30,7 +30,7 @@ } }, "error": { - "connection": "Connection error: please check your host, password & ssl", + "connection": "Connection error: please check your host, port & ssl", "login": "Login error: please check your username & password", "missing_data": "Missing data: please retry later or an other configuration", "otp_failed": "Two-step authentication failed, retry with a new pass code", diff --git a/homeassistant/components/synology_dsm/translations/en.json b/homeassistant/components/synology_dsm/translations/en.json index 41814a1e68d..50860f96639 100644 --- a/homeassistant/components/synology_dsm/translations/en.json +++ b/homeassistant/components/synology_dsm/translations/en.json @@ -4,7 +4,7 @@ "already_configured": "Host already configured" }, "error": { - "connection": "Connection error: please check your host, password & ssl", + "connection": "Connection error: please check your host, port & ssl", "login": "Login error: please check your username & password", "missing_data": "Missing data: please retry later or an other configuration", "otp_failed": "Two-step authentication failed, retry with a new pass code", From 86ae02e5c5d7c8b44d9e3a2fe948510ba62ec111 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 25 Apr 2020 17:30:15 -0700 Subject: [PATCH 35/63] Add frontend version WS command (#34701) --- homeassistant/components/frontend/__init__.py | 36 ++++++++++++------- tests/components/frontend/test_init.py | 22 ++++++++++++ 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/homeassistant/components/frontend/__init__.py b/homeassistant/components/frontend/__init__.py index f6a16205755..e5b93399c43 100644 --- a/homeassistant/components/frontend/__init__.py +++ b/homeassistant/components/frontend/__init__.py @@ -19,7 +19,7 @@ from homeassistant.core import callback from homeassistant.helpers import service import homeassistant.helpers.config_validation as cv from homeassistant.helpers.translation import async_get_translations -from homeassistant.loader import bind_hass +from homeassistant.loader import async_get_integration, bind_hass from .storage import async_setup_frontend_storage @@ -248,6 +248,7 @@ async def async_setup(hass, config): hass.components.websocket_api.async_register_command(websocket_get_panels) hass.components.websocket_api.async_register_command(websocket_get_themes) hass.components.websocket_api.async_register_command(websocket_get_translations) + hass.components.websocket_api.async_register_command(websocket_get_version) hass.http.register_view(ManifestJSONView) conf = config.get(DOMAIN, {}) @@ -486,10 +487,7 @@ class ManifestJSONView(HomeAssistantView): @callback @websocket_api.websocket_command({"type": "get_panels"}) def websocket_get_panels(hass, connection, msg): - """Handle get panels command. - - Async friendly. - """ + """Handle get panels command.""" user_is_admin = connection.user.is_admin panels = { panel_key: panel.to_response() @@ -503,10 +501,7 @@ def websocket_get_panels(hass, connection, msg): @callback @websocket_api.websocket_command({"type": "frontend/get_themes"}) def websocket_get_themes(hass, connection, msg): - """Handle get themes command. - - Async friendly. - """ + """Handle get themes command.""" if hass.config.safe_mode: connection.send_message( websocket_api.result_message( @@ -546,10 +541,7 @@ def websocket_get_themes(hass, connection, msg): ) @websocket_api.async_response async def websocket_get_translations(hass, connection, msg): - """Handle get translations command. - - Async friendly. - """ + """Handle get translations command.""" resources = await async_get_translations( hass, msg["language"], @@ -560,3 +552,21 @@ async def websocket_get_translations(hass, connection, msg): connection.send_message( websocket_api.result_message(msg["id"], {"resources": resources}) ) + + +@websocket_api.websocket_command({"type": "frontend/get_version"}) +@websocket_api.async_response +async def websocket_get_version(hass, connection, msg): + """Handle get version command.""" + integration = await async_get_integration(hass, "frontend") + + frontend = None + + for req in integration.requirements: + if req.startswith("home-assistant-frontend=="): + frontend = req.split("==", 1)[1] + + if frontend is None: + connection.send_error(msg["id"], "unknown_version", "Version not found") + else: + connection.send_result(msg["id"], {"version": frontend}) diff --git a/tests/components/frontend/test_init.py b/tests/components/frontend/test_init.py index 7297812249c..ef254871830 100644 --- a/tests/components/frontend/test_init.py +++ b/tests/components/frontend/test_init.py @@ -14,6 +14,7 @@ from homeassistant.components.frontend import ( ) from homeassistant.components.websocket_api.const import TYPE_RESULT from homeassistant.const import HTTP_NOT_FOUND +from homeassistant.loader import async_get_integration from homeassistant.setup import async_setup_component from tests.common import async_capture_events @@ -336,3 +337,24 @@ async def test_auth_authorize(mock_http_client): resp = await mock_http_client.get(authorizejs.groups(0)[0]) assert resp.status == 200 assert "public" in resp.headers.get("cache-control") + + +async def test_get_version(hass, hass_ws_client): + """Test get_version command.""" + frontend = await async_get_integration(hass, "frontend") + cur_version = next( + req.split("==", 1)[1] + for req in frontend.requirements + if req.startswith("home-assistant-frontend==") + ) + + await async_setup_component(hass, "frontend", {}) + client = await hass_ws_client(hass) + + await client.send_json({"id": 5, "type": "frontend/get_version"}) + msg = await client.receive_json() + + assert msg["id"] == 5 + assert msg["type"] == TYPE_RESULT + assert msg["success"] + assert msg["result"] == {"version": cur_version} From 0c066a0944221ba437af9bdf41fbe92bc952f79f Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sat, 25 Apr 2020 17:30:56 -0700 Subject: [PATCH 36/63] Bumped version to 0.109.0b3 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index 212c860b107..b39da044269 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -1,7 +1,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 109 -PATCH_VERSION = "0b2" +PATCH_VERSION = "0b3" __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER = (3, 7, 0) From 79135f59fdc416a4b07c5f2e2ab6f150fb9804bc Mon Sep 17 00:00:00 2001 From: escoand Date: Sun, 26 Apr 2020 08:57:44 +0200 Subject: [PATCH 37/63] Fix fritzbox errors again (#34710) --- homeassistant/components/fritzbox/config_flow.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/fritzbox/config_flow.py b/homeassistant/components/fritzbox/config_flow.py index ffcdb499c30..816855b46a8 100644 --- a/homeassistant/components/fritzbox/config_flow.py +++ b/homeassistant/components/fritzbox/config_flow.py @@ -42,8 +42,6 @@ class FritzboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): def __init__(self): """Initialize flow.""" self._host = None - self._manufacturer = None - self._model = None self._name = None self._password = None self._username = None @@ -83,7 +81,7 @@ class FritzboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): if user_input is not None: for entry in self.hass.config_entries.async_entries(DOMAIN): - if entry.data.get(CONF_HOST) == user_input[CONF_HOST]: + if entry.data[CONF_HOST] == user_input[CONF_HOST]: if entry.data != user_input: self.hass.config_entries.async_update_entry( entry, data=user_input @@ -117,9 +115,7 @@ class FritzboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return self.async_abort(reason="already_in_progress") for entry in self.hass.config_entries.async_entries(DOMAIN): - if entry.data.get(CONF_HOST) == host: - if entry.data != user_input: - self.hass.config_entries.async_update_entry(entry, data=user_input) + if entry.data[CONF_HOST] == host: return self.async_abort(reason="already_configured") self._host = host From d7fbb8ed8ec42443882e5c97ed1860fa109cf640 Mon Sep 17 00:00:00 2001 From: Quentame Date: Sun, 26 Apr 2020 22:25:13 +0200 Subject: [PATCH 38/63] Bump python-synology to 0.7.1 (#34728) --- homeassistant/components/synology_dsm/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/synology_dsm/manifest.json b/homeassistant/components/synology_dsm/manifest.json index c7abd809b87..f3fd52a74a5 100644 --- a/homeassistant/components/synology_dsm/manifest.json +++ b/homeassistant/components/synology_dsm/manifest.json @@ -2,7 +2,7 @@ "domain": "synology_dsm", "name": "Synology DSM", "documentation": "https://www.home-assistant.io/integrations/synology_dsm", - "requirements": ["python-synology==0.7.0"], + "requirements": ["python-synology==0.7.1"], "codeowners": ["@ProtoThis", "@Quentame"], "config_flow": true, "ssdp": [ diff --git a/requirements_all.txt b/requirements_all.txt index 91a20789578..77514b1bd58 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1680,7 +1680,7 @@ python-sochain-api==0.0.2 python-songpal==0.11.2 # homeassistant.components.synology_dsm -python-synology==0.7.0 +python-synology==0.7.1 # homeassistant.components.tado python-tado==0.8.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 83fa0a4a752..e31e6699f5b 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -650,7 +650,7 @@ python-miio==0.5.0.1 python-nest==4.1.0 # homeassistant.components.synology_dsm -python-synology==0.7.0 +python-synology==0.7.1 # homeassistant.components.tado python-tado==0.8.1 From 961327f76bcf8fe4b73d9f16548d0ab25493fbf8 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 27 Apr 2020 15:38:14 +0200 Subject: [PATCH 39/63] Updated frontend to 20200427.0 (#34766) --- homeassistant/components/frontend/manifest.json | 2 +- homeassistant/package_constraints.txt | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/frontend/manifest.json b/homeassistant/components/frontend/manifest.json index f75605eaafc..f75f164aca5 100644 --- a/homeassistant/components/frontend/manifest.json +++ b/homeassistant/components/frontend/manifest.json @@ -2,7 +2,7 @@ "domain": "frontend", "name": "Home Assistant Frontend", "documentation": "https://www.home-assistant.io/integrations/frontend", - "requirements": ["home-assistant-frontend==20200424.0"], + "requirements": ["home-assistant-frontend==20200427.0"], "dependencies": [ "api", "auth", diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index a6d72ca222f..2d3ae822273 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -12,7 +12,7 @@ cryptography==2.9 defusedxml==0.6.0 distro==1.5.0 hass-nabucasa==0.34.1 -home-assistant-frontend==20200424.0 +home-assistant-frontend==20200427.0 importlib-metadata==1.6.0 jinja2>=2.11.1 netdisco==2.6.0 diff --git a/requirements_all.txt b/requirements_all.txt index 77514b1bd58..123b5226e82 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -713,7 +713,7 @@ hole==0.5.1 holidays==0.10.2 # homeassistant.components.frontend -home-assistant-frontend==20200424.0 +home-assistant-frontend==20200427.0 # homeassistant.components.zwave homeassistant-pyozw==0.1.10 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index e31e6699f5b..4215169f16d 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -291,7 +291,7 @@ hole==0.5.1 holidays==0.10.2 # homeassistant.components.frontend -home-assistant-frontend==20200424.0 +home-assistant-frontend==20200427.0 # homeassistant.components.zwave homeassistant-pyozw==0.1.10 From 097b1d112b69adcfa45ea4a22e31338ac0253cfc Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Mon, 27 Apr 2020 15:43:28 +0200 Subject: [PATCH 40/63] Bumped version to 0.109.0b4 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index b39da044269..d585411c98d 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -1,7 +1,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 109 -PATCH_VERSION = "0b3" +PATCH_VERSION = "0b4" __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER = (3, 7, 0) From e4d320d5f5465636b4a803164a2dcbe38828f23f Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Fri, 24 Apr 2020 00:04:36 +0000 Subject: [PATCH 41/63] [ci skip] Translation update --- .../components/airvisual/translations/ca.json | 26 ++++++++++++++-- .../components/airvisual/translations/es.json | 26 ++++++++++++++-- .../components/airvisual/translations/no.json | 26 ++++++++++++++-- .../components/airvisual/translations/pl.json | 3 +- .../components/airvisual/translations/ru.json | 30 ++++++++++++++++--- .../airvisual/translations/zh-Hant.json | 30 ++++++++++++++++--- .../components/atag/translations/es.json | 20 +++++++++++++ .../components/atag/translations/no.json | 20 +++++++++++++ .../components/atag/translations/ru.json | 20 +++++++++++++ .../components/atag/translations/zh-Hant.json | 20 +++++++++++++ .../components/cover/translations/no.json | 6 ++++ .../homekit_controller/translations/ru.json | 2 +- .../synology_dsm/translations/es.json | 4 ++- .../synology_dsm/translations/no.json | 4 ++- .../synology_dsm/translations/ru.json | 4 ++- .../synology_dsm/translations/zh-Hant.json | 4 ++- .../components/upnp/translations/zh-Hant.json | 2 +- 17 files changed, 226 insertions(+), 21 deletions(-) create mode 100644 homeassistant/components/atag/translations/es.json create mode 100644 homeassistant/components/atag/translations/no.json create mode 100644 homeassistant/components/atag/translations/ru.json create mode 100644 homeassistant/components/atag/translations/zh-Hant.json diff --git a/homeassistant/components/airvisual/translations/ca.json b/homeassistant/components/airvisual/translations/ca.json index d8866051c6c..2d9a644c704 100644 --- a/homeassistant/components/airvisual/translations/ca.json +++ b/homeassistant/components/airvisual/translations/ca.json @@ -4,15 +4,37 @@ "already_configured": "Aquesta clau API ja est\u00e0 sent utilitzada." }, "error": { - "invalid_api_key": "Clau API inv\u00e0lida" + "general_error": "S'ha produ\u00eft un error desconegut.", + "invalid_api_key": "Clau API inv\u00e0lida", + "unable_to_connect": "No s'ha pogut connectar a la unitat Node/Pro." }, "step": { - "user": { + "geography": { "data": { "api_key": "Clau API", "latitude": "Latitud", "longitude": "Longitud" }, + "description": "Utilitza l'API d'AirVisual per monitoritzar una ubicaci\u00f3 geogr\u00e0fica.", + "title": "Configuraci\u00f3 localitzaci\u00f3 geogr\u00e0fica" + }, + "node_pro": { + "data": { + "ip_address": "Adre\u00e7a IP o amfitri\u00f3 de la unitat", + "password": "Contrasenya de la unitat" + }, + "description": "Monitoritza una unitat personal d'AirVisual. Pots obtenir la contrasenya des de la interf\u00edcie d'usuari (UI) de la unitat.", + "title": "Configuraci\u00f3 d'AirVisual Node/Pro" + }, + "user": { + "data": { + "api_key": "Clau API", + "cloud_api": "Ubicaci\u00f3 geogr\u00e0fica", + "latitude": "Latitud", + "longitude": "Longitud", + "node_pro": "AirVisual Node Pro", + "type": "Tipus d'integraci\u00f3" + }, "description": "Monitoritzaci\u00f3 de la qualitat de l'aire per ubicaci\u00f3 geogr\u00e0fica.", "title": "Configura AirVisual" } diff --git a/homeassistant/components/airvisual/translations/es.json b/homeassistant/components/airvisual/translations/es.json index 2c442f5c3a5..e64b2f31691 100644 --- a/homeassistant/components/airvisual/translations/es.json +++ b/homeassistant/components/airvisual/translations/es.json @@ -4,15 +4,37 @@ "already_configured": "Esta clave API ya est\u00e1 en uso." }, "error": { - "invalid_api_key": "Clave API inv\u00e1lida" + "general_error": "Se ha producido un error desconocido.", + "invalid_api_key": "Clave API inv\u00e1lida", + "unable_to_connect": "No se puede conectar a la unidad Node/Pro." }, "step": { - "user": { + "geography": { "data": { "api_key": "Clave API", "latitude": "Latitud", "longitude": "Longitud" }, + "description": "Utilizar la API en la nube de AirVisual para monitorizar una ubicaci\u00f3n geogr\u00e1fica.", + "title": "Configurar una Geograf\u00eda" + }, + "node_pro": { + "data": { + "ip_address": "Direcci\u00f3n IP/Nombre de host de la Unidad", + "password": "Contrase\u00f1a de la Unidad" + }, + "description": "Monitorizar una unidad personal AirVisual. La contrase\u00f1a puede ser recuperada desde la interfaz de la unidad.", + "title": "Configurar un AirVisual Node/Pro" + }, + "user": { + "data": { + "api_key": "Clave API", + "cloud_api": "Ubicaci\u00f3n Geogr\u00e1fica", + "latitude": "Latitud", + "longitude": "Longitud", + "node_pro": "AirVisual Node Pro", + "type": "Tipo de Integraci\u00f3n" + }, "description": "Monitorizar la calidad del aire en una ubicaci\u00f3n geogr\u00e1fica.", "title": "Configurar AirVisual" } diff --git a/homeassistant/components/airvisual/translations/no.json b/homeassistant/components/airvisual/translations/no.json index 1a9463da15e..77ab1425c87 100644 --- a/homeassistant/components/airvisual/translations/no.json +++ b/homeassistant/components/airvisual/translations/no.json @@ -4,15 +4,37 @@ "already_configured": "Disse koordinatene er allerede registrert." }, "error": { - "invalid_api_key": "Ugyldig API-n\u00f8kkel" + "general_error": "Det oppstod en ukjent feil.", + "invalid_api_key": "Ugyldig API-n\u00f8kkel", + "unable_to_connect": "Kan ikke koble til Node / Pro-enheten." }, "step": { - "user": { + "geography": { "data": { "api_key": "API-n\u00f8kkel", "latitude": "Breddegrad", "longitude": "Lengdegrad" }, + "description": "Bruk AirVisual cloud API til \u00e5 overv\u00e5ke en geografisk plassering.", + "title": "Konfigurer en geografi" + }, + "node_pro": { + "data": { + "ip_address": "Enhetens IP-adresse / vertsnavn", + "password": "Passord for enhet" + }, + "description": "Overv\u00e5ke en personlig AirVisual-enhet. Passordet kan hentes fra enhetens brukergrensesnitt.", + "title": "Konfigurer en AirVisual Node / Pro" + }, + "user": { + "data": { + "api_key": "API-n\u00f8kkel", + "cloud_api": "Geografisk plassering", + "latitude": "Breddegrad", + "longitude": "Lengdegrad", + "node_pro": "AirVisual Node Pro", + "type": "Integrasjonstype" + }, "description": "Overv\u00e5k luftkvaliteten p\u00e5 et geografisk sted.", "title": "Konfigurer AirVisual" } diff --git a/homeassistant/components/airvisual/translations/pl.json b/homeassistant/components/airvisual/translations/pl.json index 8258c0e86ed..cb73ed656f2 100644 --- a/homeassistant/components/airvisual/translations/pl.json +++ b/homeassistant/components/airvisual/translations/pl.json @@ -11,7 +11,8 @@ "data": { "api_key": "Klucz API", "latitude": "Szeroko\u015b\u0107 geograficzna", - "longitude": "D\u0142ugo\u015b\u0107 geograficzna" + "longitude": "D\u0142ugo\u015b\u0107 geograficzna", + "type": "Typ integracji" }, "description": "Monitoruj jako\u015b\u0107 powietrza w okre\u015blonej lokalizacji geograficznej.", "title": "Konfiguracja AirVisual" diff --git a/homeassistant/components/airvisual/translations/ru.json b/homeassistant/components/airvisual/translations/ru.json index 1d2a5edd96d..3479d59ee90 100644 --- a/homeassistant/components/airvisual/translations/ru.json +++ b/homeassistant/components/airvisual/translations/ru.json @@ -1,19 +1,41 @@ { "config": { "abort": { - "already_configured": "\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b." + "already_configured": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e." }, "error": { - "invalid_api_key": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API." + "general_error": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430.", + "invalid_api_key": "\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 API.", + "unable_to_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443." }, "step": { - "user": { + "geography": { "data": { "api_key": "\u041a\u043b\u044e\u0447 API", "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430" }, - "description": "\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0439\u0442\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438.", + "description": "\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e API AirVisual.", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f" + }, + "node_pro": { + "data": { + "ip_address": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", + "password": "\u041f\u0430\u0440\u043e\u043b\u044c" + }, + "description": "\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0412\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 AirVisual. \u041f\u0430\u0440\u043e\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", + "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 AirVisual Node / Pro" + }, + "user": { + "data": { + "api_key": "\u041a\u043b\u044e\u0447 API", + "cloud_api": "\u041c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435", + "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", + "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", + "node_pro": "AirVisual Node Pro", + "type": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438" + }, + "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 AirVisual, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c.", "title": "AirVisual" } } diff --git a/homeassistant/components/airvisual/translations/zh-Hant.json b/homeassistant/components/airvisual/translations/zh-Hant.json index a655743685c..1153d7c3b99 100644 --- a/homeassistant/components/airvisual/translations/zh-Hant.json +++ b/homeassistant/components/airvisual/translations/zh-Hant.json @@ -1,19 +1,41 @@ { "config": { "abort": { - "already_configured": "\u6b64\u4e9b\u5ea7\u6a19\u5df2\u8a3b\u518a\u3002" + "already_configured": "\u6b64\u5ea7\u6a19\u6216 Node/Pro ID \u5df2\u8a3b\u518a\u3002" }, "error": { - "invalid_api_key": "API \u5bc6\u78bc\u7121\u6548" + "general_error": "\u767c\u751f\u672a\u77e5\u932f\u8aa4\u3002", + "invalid_api_key": "API \u5bc6\u78bc\u7121\u6548\u3002", + "unable_to_connect": "\u7121\u6cd5\u9023\u7dda\u81f3 Node/Pro \u8a2d\u5099\u3002" }, "step": { - "user": { + "geography": { "data": { "api_key": "API \u5bc6\u9470", "latitude": "\u7def\u5ea6", "longitude": "\u7d93\u5ea6" }, - "description": "\u4f9d\u5730\u7406\u4f4d\u7f6e\u76e3\u63a7\u7a7a\u6c23\u54c1\u8cea\u3002", + "description": "\u4f7f\u7528 AirVisual \u96f2\u7aef API \u4ee5\u76e3\u63a7\u5730\u7406\u5ea7\u6a19\u3002", + "title": "\u8a2d\u5b9a\u5730\u7406\u5ea7\u6a19" + }, + "node_pro": { + "data": { + "ip_address": "\u8a2d\u5099 IP \u4f4d\u5740/\u4e3b\u6a5f\u540d\u7a31", + "password": "\u8a2d\u5099\u5bc6\u78bc" + }, + "description": "\u76e3\u63a7\u500b\u4eba AirVisual \u8a2d\u5099\uff0c\u5bc6\u78bc\u53ef\u4ee5\u900f\u904e\u8a2d\u5099 UI \u7372\u5f97\u3002", + "title": "\u8a2d\u5b9a AirVisual Node/Pro" + }, + "user": { + "data": { + "api_key": "API \u5bc6\u9470", + "cloud_api": "\u5730\u7406\u5ea7\u6a19", + "latitude": "\u7def\u5ea6", + "longitude": "\u7d93\u5ea6", + "node_pro": "AirVisual Node Pro", + "type": "\u6574\u5408\u985e\u578b" + }, + "description": "\u9078\u64c7\u6240\u8981\u76e3\u63a7\u7684 AirVisual \u8cc7\u6599\u985e\u578b\u3002", "title": "\u8a2d\u5b9a AirVisual" } } diff --git a/homeassistant/components/atag/translations/es.json b/homeassistant/components/atag/translations/es.json new file mode 100644 index 00000000000..b02a20e09a1 --- /dev/null +++ b/homeassistant/components/atag/translations/es.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "S\u00f3lo se puede a\u00f1adir un dispositivo Atag a Home Assistant" + }, + "error": { + "connection_error": "No se pudo conectar, por favor, int\u00e9ntalo de nuevo" + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Puerto (10000)" + }, + "title": "Conectarse al dispositivo" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/no.json b/homeassistant/components/atag/translations/no.json new file mode 100644 index 00000000000..4b4a5346558 --- /dev/null +++ b/homeassistant/components/atag/translations/no.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Bare en Atag-enhet kan legges til Home Assistant" + }, + "error": { + "connection_error": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen" + }, + "step": { + "user": { + "data": { + "host": "Vert", + "port": "Port (10000)" + }, + "title": "Koble til enheten" + } + } + }, + "title": "Atag " +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/ru.json b/homeassistant/components/atag/translations/ru.json new file mode 100644 index 00000000000..f1c734dc933 --- /dev/null +++ b/homeassistant/components/atag/translations/ru.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u041c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e." + }, + "error": { + "connection_error": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437." + }, + "step": { + "user": { + "data": { + "host": "\u0425\u043e\u0441\u0442", + "port": "\u041f\u043e\u0440\u0442 (10000)" + }, + "title": "\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/zh-Hant.json b/homeassistant/components/atag/translations/zh-Hant.json new file mode 100644 index 00000000000..aa1c6a90d2b --- /dev/null +++ b/homeassistant/components/atag/translations/zh-Hant.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "\u50c5\u80fd\u65b0\u589e\u4e00\u7d44 Atag \u8a2d\u5099\u81f3 Home Assistant" + }, + "error": { + "connection_error": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21" + }, + "step": { + "user": { + "data": { + "host": "\u4e3b\u6a5f\u7aef", + "port": "\u901a\u8a0a\u57e0\uff0810000\uff09" + }, + "title": "\u9023\u7dda\u81f3\u8a2d\u5099" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/cover/translations/no.json b/homeassistant/components/cover/translations/no.json index e13feac92b8..840ede020f4 100644 --- a/homeassistant/components/cover/translations/no.json +++ b/homeassistant/components/cover/translations/no.json @@ -25,5 +25,11 @@ "tilt_position": "{entity_name} endringer i vippeposisjon" } }, + "state": { + "_": { + "closing": "Lukker", + "stopped": "Stoppet" + } + }, "title": "Dekke" } \ No newline at end of file diff --git a/homeassistant/components/homekit_controller/translations/ru.json b/homeassistant/components/homekit_controller/translations/ru.json index d37ef1b014c..95f8a4d6efe 100644 --- a/homeassistant/components/homekit_controller/translations/ru.json +++ b/homeassistant/components/homekit_controller/translations/ru.json @@ -36,5 +36,5 @@ } } }, - "title": "\u0410\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440 HomeKit" + "title": "HomeKit Controller" } \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/es.json b/homeassistant/components/synology_dsm/translations/es.json index 5a045e14a98..ad15de831c4 100644 --- a/homeassistant/components/synology_dsm/translations/es.json +++ b/homeassistant/components/synology_dsm/translations/es.json @@ -4,9 +4,11 @@ "already_configured": "El host ya est\u00e1 configurado." }, "error": { + "connection": "Error de conexi\u00f3n: comprueba tu host, contrase\u00f1a y ssl", "login": "Error de inicio de sesi\u00f3n: comprueba tu nombre de usuario y contrase\u00f1a", "missing_data": "Faltan datos: por favor, vuelva a intentarlo m\u00e1s tarde o pruebe con otra configuraci\u00f3n", - "otp_failed": "La autenticaci\u00f3n de dos pasos fall\u00f3, vuelva a intentar con un nuevo c\u00f3digo de acceso" + "otp_failed": "La autenticaci\u00f3n de dos pasos fall\u00f3, vuelva a intentar con un nuevo c\u00f3digo de acceso", + "unknown": "Error desconocido: por favor, consulta logs para obtener m\u00e1s detalles" }, "flow_title": "Synology DSM {name} ({host})", "step": { diff --git a/homeassistant/components/synology_dsm/translations/no.json b/homeassistant/components/synology_dsm/translations/no.json index f0f19754b0b..5b79e58e121 100644 --- a/homeassistant/components/synology_dsm/translations/no.json +++ b/homeassistant/components/synology_dsm/translations/no.json @@ -4,9 +4,11 @@ "already_configured": "Verten er allerede konfigurert" }, "error": { + "connection": "Tilkoblingsfeil: sjekk verten, passordet og ssl", "login": "P\u00e5loggingsfeil: Vennligst sjekk brukernavnet ditt og passordet ditt", "missing_data": "Manglende data: Pr\u00f8v p\u00e5 nytt senere eller en annen konfigurasjon", - "otp_failed": "To-trinns autentisering mislyktes. Pr\u00f8v p\u00e5 nytt med en ny passkode" + "otp_failed": "To-trinns autentisering mislyktes. Pr\u00f8v p\u00e5 nytt med en ny passkode", + "unknown": "Ukjent feil: sjekk loggene for \u00e5 f\u00e5 flere detaljer" }, "flow_title": "Synology DSM {name} ( {host} )", "step": { diff --git a/homeassistant/components/synology_dsm/translations/ru.json b/homeassistant/components/synology_dsm/translations/ru.json index 2ac458963f2..837af047853 100644 --- a/homeassistant/components/synology_dsm/translations/ru.json +++ b/homeassistant/components/synology_dsm/translations/ru.json @@ -4,9 +4,11 @@ "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." }, "error": { + "connection": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0445\u043e\u0441\u0442, \u043f\u0430\u0440\u043e\u043b\u044c \u0438 SSL.", "login": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0445\u043e\u0434\u0430: \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c.", "missing_data": "\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435: \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e.", - "otp_failed": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0434\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0441 \u043d\u043e\u0432\u044b\u043c \u043f\u0430\u0440\u043e\u043b\u0435\u043c." + "otp_failed": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0434\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0441 \u043d\u043e\u0432\u044b\u043c \u043f\u0430\u0440\u043e\u043b\u0435\u043c.", + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043b\u043e\u0433\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." }, "flow_title": "Synology DSM {name} ({host})", "step": { diff --git a/homeassistant/components/synology_dsm/translations/zh-Hant.json b/homeassistant/components/synology_dsm/translations/zh-Hant.json index 1d1bde6a26f..6ca0b54106d 100644 --- a/homeassistant/components/synology_dsm/translations/zh-Hant.json +++ b/homeassistant/components/synology_dsm/translations/zh-Hant.json @@ -4,9 +4,11 @@ "already_configured": "\u4e3b\u6a5f\u7aef\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" }, "error": { + "connection": "\u9023\u7dda\u932f\u8aa4\uff1a\u8acb\u6aa2\u67e5\u4e3b\u6a5f\u7aef\u3001\u5bc6\u78bc\u8207 SSL", "login": "\u767b\u5165\u932f\u8aa4\uff1a\u8acb\u78ba\u8a8d\u96fb\u5b50\u90f5\u4ef6\u8207\u5bc6\u78bc", "missing_data": "\u7f3a\u5c11\u8cc7\u6599\uff1a\u8acb\u7a0d\u5f8c\u91cd\u8a66\u6216\u4f7f\u7528\u5176\u4ed6\u8a2d\u5b9a", - "otp_failed": "\u5169\u6b65\u9a5f\u9a57\u8b49\u5931\u6557\uff0c\u8acb\u91cd\u65b0\u53d6\u5f97\u4ee3\u78bc\u5f8c\u91cd\u8a66" + "otp_failed": "\u5169\u6b65\u9a5f\u9a57\u8b49\u5931\u6557\uff0c\u8acb\u91cd\u65b0\u53d6\u5f97\u4ee3\u78bc\u5f8c\u91cd\u8a66", + "unknown": "\u672a\u77e5\u932f\u8aa4\uff1a\u8acb\u53c3\u95b1\u65e5\u8a8c\u4ee5\u7372\u5f97\u66f4\u8a73\u7d30\u8cc7\u8a0a" }, "flow_title": "\u7fa4\u6689 DSM {name} ({host})", "step": { diff --git a/homeassistant/components/upnp/translations/zh-Hant.json b/homeassistant/components/upnp/translations/zh-Hant.json index 74911d92d04..5464ce9e74b 100644 --- a/homeassistant/components/upnp/translations/zh-Hant.json +++ b/homeassistant/components/upnp/translations/zh-Hant.json @@ -22,7 +22,7 @@ "enable_sensors": "\u65b0\u589e\u6d41\u91cf\u611f\u61c9\u5668", "igd": "UPnP/IGD" }, - "title": "UPnP/IGD \u8a2d\u5b9a\u9078\u9805" + "title": "\u8a2d\u5b9a\u9078\u9805" } } } From 511366f329c5c2dddc7ed9502782c2709abad766 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Sat, 25 Apr 2020 00:08:30 +0000 Subject: [PATCH 42/63] [ci skip] Translation update --- .../components/airvisual/translations/lb.json | 26 +++++++++++++++++-- .../components/airvisual/translations/vi.json | 11 ++++++++ .../components/atag/translations/lb.json | 20 ++++++++++++++ .../components/atag/translations/nl.json | 20 ++++++++++++++ .../components/braviatv/translations/lb.json | 3 +++ .../coronavirus/translations/nl.json | 15 +++++++++++ .../components/deconz/translations/lb.json | 2 ++ .../components/deconz/translations/nl.json | 12 +++++++-- .../components/flume/translations/lb.json | 3 ++- .../components/fritzbox/translations/nl.json | 15 +++++++++-- .../geonetnz_quakes/translations/nl.json | 3 +++ .../components/harmony/translations/nl.json | 24 +++++++++++++++++ .../components/hue/translations/lb.json | 6 ++++- .../islamic_prayer_times/translations/nl.json | 23 ++++++++++++++++ .../components/local_ip/translations/lb.json | 3 +++ .../components/nuheat/translations/pl.json | 24 +++++++++++++++++ .../components/nut/translations/lb.json | 6 +++-- .../components/nws/translations/lb.json | 4 ++- .../panasonic_viera/translations/lb.json | 2 ++ .../panasonic_viera/translations/nl.json | 16 +++++++++--- .../pvpc_hourly_pricing/translations/pl.json | 17 ++++++++++++ .../components/roomba/translations/lb.json | 7 ++++- .../smartthings/translations/lb.json | 4 +++ .../synology_dsm/translations/lb.json | 8 ++++-- .../components/tado/translations/lb.json | 14 +++++++++- .../components/tesla/translations/pl.json | 1 + .../components/timer/translations/nl.json | 6 ++--- .../totalconnect/translations/lb.json | 3 ++- .../components/unifi/translations/lb.json | 1 + .../components/vacuum/translations/nl.json | 2 +- .../components/wwlln/translations/nl.json | 3 +++ .../components/zha/translations/nl.json | 8 ++++++ 32 files changed, 289 insertions(+), 23 deletions(-) create mode 100644 homeassistant/components/airvisual/translations/vi.json create mode 100644 homeassistant/components/atag/translations/lb.json create mode 100644 homeassistant/components/atag/translations/nl.json create mode 100644 homeassistant/components/coronavirus/translations/nl.json create mode 100644 homeassistant/components/harmony/translations/nl.json create mode 100644 homeassistant/components/islamic_prayer_times/translations/nl.json create mode 100644 homeassistant/components/nuheat/translations/pl.json create mode 100644 homeassistant/components/pvpc_hourly_pricing/translations/pl.json diff --git a/homeassistant/components/airvisual/translations/lb.json b/homeassistant/components/airvisual/translations/lb.json index 69e8ea6d380..d5f78eccf0b 100644 --- a/homeassistant/components/airvisual/translations/lb.json +++ b/homeassistant/components/airvisual/translations/lb.json @@ -4,15 +4,37 @@ "already_configured": "D\u00ebs Koordinate si schon registr\u00e9iert." }, "error": { - "invalid_api_key": "Ong\u00ebltegen API Schl\u00ebssel" + "general_error": "Onbekannten Feeler", + "invalid_api_key": "Ong\u00ebltegen API Schl\u00ebssel", + "unable_to_connect": "Kann sech net mat der Node/Pri verbannen." }, "step": { - "user": { + "geography": { "data": { "api_key": "API Schl\u00ebssel", "latitude": "Breedegrad", "longitude": "L\u00e4ngegrad" }, + "description": "Benotz Airvisual cloud API fir eng geografescher Lag z'iwwerwaachen.", + "title": "Geografie ariichten" + }, + "node_pro": { + "data": { + "ip_address": "IP Adresse / Numm vun der Unit\u00e9it", + "password": "Passwuert vun der Unit\u00e9it" + }, + "description": "Pers\u00e9inlech Airvisual Unit\u00e9it iwwerwaachen. Passwuert kann vum UI vum Apparat ausgelies ginn.", + "title": "Airvisual Node/Pro ariichten" + }, + "user": { + "data": { + "api_key": "API Schl\u00ebssel", + "cloud_api": "Geografesche Standuert", + "latitude": "Breedegrad", + "longitude": "L\u00e4ngegrad", + "node_pro": "Airvisual Node Pro", + "type": "Typ vun der Integratioun" + }, "description": "Loft Qualit\u00e9it an enger geografescher Lag iwwerwaachen.", "title": "AirVisual konfigur\u00e9ieren" } diff --git a/homeassistant/components/airvisual/translations/vi.json b/homeassistant/components/airvisual/translations/vi.json new file mode 100644 index 00000000000..6246d8997da --- /dev/null +++ b/homeassistant/components/airvisual/translations/vi.json @@ -0,0 +1,11 @@ +{ + "config": { + "step": { + "user": { + "data": { + "type": "Lo\u1ea1i t\u00edch h\u1ee3p" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/lb.json b/homeassistant/components/atag/translations/lb.json new file mode 100644 index 00000000000..dcb32f3eedc --- /dev/null +++ b/homeassistant/components/atag/translations/lb.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "N\u00ebmmen 1 Atag Apparat kann am Home Assistant dob\u00e4igesat ginn" + }, + "error": { + "connection_error": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol." + }, + "step": { + "user": { + "data": { + "host": "Apparat", + "port": "Port (10000)" + }, + "title": "Mam Apparat verbannen" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/nl.json b/homeassistant/components/atag/translations/nl.json new file mode 100644 index 00000000000..14da45b8eb9 --- /dev/null +++ b/homeassistant/components/atag/translations/nl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Er kan slechts \u00e9\u00e9n Atag-apparaat worden toegevoegd aan Home Assistant " + }, + "error": { + "connection_error": "Verbinding mislukt, probeer het opnieuw" + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Poort (10000)" + }, + "title": "Verbinding maken met het apparaat" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/lb.json b/homeassistant/components/braviatv/translations/lb.json index 9a64abadb63..37366eee6dd 100644 --- a/homeassistant/components/braviatv/translations/lb.json +++ b/homeassistant/components/braviatv/translations/lb.json @@ -4,6 +4,7 @@ "already_configured": "D\u00ebse Fernseh ass scho konfigur\u00e9iert." }, "error": { + "cannot_connect": "Feeler beim verbannen, ong\u00ebltege Numm oder PIN code.", "invalid_host": "Ong\u00ebltege Numm oder IP Adresse.", "unsupported_model": "D\u00e4in TV Modell g\u00ebtt net \u00ebnnerst\u00ebtzt." }, @@ -12,12 +13,14 @@ "data": { "pin": "PIN Code" }, + "description": "G\u00ebff de PIN code an deen op der Sony Bravia TV ugewise g\u00ebtt.\n\nFalls kee PIN code ugewise g\u00ebtt muss den Home Assistant um Fernseh ofgemellt ginn, um TV: Settings -> Network -> Remote device settings -> Unregister remote device.", "title": "Sony Bravia TV erlaaben" }, "user": { "data": { "host": "TV Host Numm oder IP Adresse" }, + "description": "Sony Bravia TV Integratioun ariichten. Falls et Problemer mat der Konfiguratioun g\u00ebtt g\u00e9i op:\nhttps://www.home-assistant.io/integrations/braviatv\nStell s\u00e9cher dass d\u00e4in Fernseh un ass.", "title": "Sony Bravia TV" } } diff --git a/homeassistant/components/coronavirus/translations/nl.json b/homeassistant/components/coronavirus/translations/nl.json new file mode 100644 index 00000000000..d306894f7d0 --- /dev/null +++ b/homeassistant/components/coronavirus/translations/nl.json @@ -0,0 +1,15 @@ +{ + "config": { + "abort": { + "already_configured": "Dit land is al geconfigureerd." + }, + "step": { + "user": { + "data": { + "country": "Land" + }, + "title": "Kies een land om te monitoren" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/lb.json b/homeassistant/components/deconz/translations/lb.json index ab96460dc79..c6f2dfbf189 100644 --- a/homeassistant/components/deconz/translations/lb.json +++ b/homeassistant/components/deconz/translations/lb.json @@ -48,6 +48,7 @@ "device_automation": { "trigger_subtype": { "both_buttons": "B\u00e9id Kn\u00e4ppchen", + "bottom_buttons": "\u00cbnnescht Kn\u00e4ppchen", "button_1": "\u00c9ischte Kn\u00e4ppchen", "button_2": "Zweete Kn\u00e4ppchen", "button_3": "Dr\u00ebtte Kn\u00e4ppchen", @@ -64,6 +65,7 @@ "side_4": "S\u00e4it 4", "side_5": "S\u00e4it 5", "side_6": "S\u00e4it 6", + "top_buttons": "Iewescht Kn\u00e4ppchen", "turn_off": "Ausschalten", "turn_on": "Uschalten" }, diff --git a/homeassistant/components/deconz/translations/nl.json b/homeassistant/components/deconz/translations/nl.json index e1a9583e03b..d9d64070c88 100644 --- a/homeassistant/components/deconz/translations/nl.json +++ b/homeassistant/components/deconz/translations/nl.json @@ -34,7 +34,14 @@ "data": { "host": "Host", "port": "Poort" - } + }, + "title": "Configureer deCONZ gateway" + }, + "user": { + "data": { + "host": "Selecteer gevonden deCONZ gateway" + }, + "title": "Selecteer DeCONZ gateway" } } }, @@ -97,7 +104,8 @@ "allow_clip_sensor": "DeCONZ CLIP sensoren toestaan", "allow_deconz_groups": "Sta deCONZ-lichtgroepen toe" }, - "description": "Configureer de zichtbaarheid van deCONZ-apparaattypen" + "description": "Configureer de zichtbaarheid van deCONZ-apparaattypen", + "title": "deCONZ opties" } } } diff --git a/homeassistant/components/flume/translations/lb.json b/homeassistant/components/flume/translations/lb.json index 33afc930e8e..aad8a496a11 100644 --- a/homeassistant/components/flume/translations/lb.json +++ b/homeassistant/components/flume/translations/lb.json @@ -15,7 +15,8 @@ "client_secret": "Client Schl\u00ebssel", "password": "Passwuert", "username": "Benotzernumm" - } + }, + "title": "Verbann dech mat dengem Flume Kont." } } } diff --git a/homeassistant/components/fritzbox/translations/nl.json b/homeassistant/components/fritzbox/translations/nl.json index 4617a07a5b6..3d8c94ab5b6 100644 --- a/homeassistant/components/fritzbox/translations/nl.json +++ b/homeassistant/components/fritzbox/translations/nl.json @@ -1,20 +1,31 @@ { "config": { + "abort": { + "already_configured": "Deze AVM FRITZ!Box is al geconfigureerd.", + "already_in_progress": "AVM FRITZ!Box configuratie is al bezig.", + "not_found": "Geen ondersteunde AVM FRITZ!Box gevonden op het netwerk." + }, "error": { "auth_failed": "Ongeldige gebruikersnaam of wachtwoord" }, + "flow_title": "AVM FRITZ!Box: {name}", "step": { "confirm": { "data": { "password": "Wachtwoord", "username": "Gebruikersnaam" - } + }, + "description": "Wilt u {name} instellen?", + "title": "AVM FRITZ!Box" }, "user": { "data": { + "host": "Host- of IP-adres", "password": "Wachtwoord", "username": "Gebruikersnaam" - } + }, + "description": "Voer uw AVM FRITZ!Box informatie in.", + "title": "AVM FRITZ!Box" } } } diff --git a/homeassistant/components/geonetnz_quakes/translations/nl.json b/homeassistant/components/geonetnz_quakes/translations/nl.json index 4fb50788fc9..865860a5adf 100644 --- a/homeassistant/components/geonetnz_quakes/translations/nl.json +++ b/homeassistant/components/geonetnz_quakes/translations/nl.json @@ -1,5 +1,8 @@ { "config": { + "abort": { + "already_configured": "Locatie is al geconfigureerd." + }, "step": { "user": { "data": { diff --git a/homeassistant/components/harmony/translations/nl.json b/homeassistant/components/harmony/translations/nl.json new file mode 100644 index 00000000000..a896cab0877 --- /dev/null +++ b/homeassistant/components/harmony/translations/nl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Apparaat is al geconfigureerd" + }, + "error": { + "cannot_connect": "Verbinding mislukt, probeer het opnieuw" + }, + "flow_title": "Logitech Harmony Hub {name}", + "step": { + "link": { + "description": "Wil je {name} ({host}) instellen?", + "title": "Logitech Harmony Hub instellen" + }, + "user": { + "data": { + "host": "Hostnaam of IP-adres", + "name": "Naam van hub" + }, + "title": "Logitech Harmony Hub instellen" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hue/translations/lb.json b/homeassistant/components/hue/translations/lb.json index cbdb31e3b36..02a4924d59f 100644 --- a/homeassistant/components/hue/translations/lb.json +++ b/homeassistant/components/hue/translations/lb.json @@ -35,13 +35,17 @@ "button_4": "V\u00e9ierte Kn\u00e4ppchen", "dim_down": "Verd\u00e4ischteren", "dim_up": "Erhellen", + "double_buttons_1_3": "\u00c9ischte an Dr\u00ebtte Kn\u00e4ppchen", + "double_buttons_2_4": "Zweete a V\u00e9ierte Kn\u00e4ppchen", "turn_off": "Ausschalten", "turn_on": "Uschalten" }, "trigger_type": { "remote_button_long_release": "\"{subtype}\" Kn\u00e4ppche no laangem unhalen lassgelooss", "remote_button_short_press": "\"{subtype}\" Kn\u00e4ppche gedr\u00e9ckt", - "remote_button_short_release": "\"{subtype}\" Kn\u00e4ppche lassgelooss" + "remote_button_short_release": "\"{subtype}\" Kn\u00e4ppche lassgelooss", + "remote_double_button_long_press": "B\u00e9id \"{subtype}\" no laangem unhalen lassgelooss", + "remote_double_button_short_press": "B\u00e9id \"{subtype}\" lassgeloss" } } } \ No newline at end of file diff --git a/homeassistant/components/islamic_prayer_times/translations/nl.json b/homeassistant/components/islamic_prayer_times/translations/nl.json new file mode 100644 index 00000000000..b0cab2d938d --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/nl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Slechts \u00e9\u00e9n exemplaar is nodig." + }, + "step": { + "user": { + "description": "Wil je Islamic Prayer Times opzetten?", + "title": "Stel Islamitische gebedstijden in" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "calc_method": "Berekeningsmethode voor het gebed" + } + } + } + }, + "title": "Islamitische gebedstijden" +} \ No newline at end of file diff --git a/homeassistant/components/local_ip/translations/lb.json b/homeassistant/components/local_ip/translations/lb.json index a404e1747e9..8d141a5f35f 100644 --- a/homeassistant/components/local_ip/translations/lb.json +++ b/homeassistant/components/local_ip/translations/lb.json @@ -1,5 +1,8 @@ { "config": { + "abort": { + "single_instance_allowed": "N\u00ebmmen eng eenzeg Konfiguratioun vun Local IP ass erlaabt." + }, "step": { "user": { "data": { diff --git a/homeassistant/components/nuheat/translations/pl.json b/homeassistant/components/nuheat/translations/pl.json new file mode 100644 index 00000000000..bff4192f018 --- /dev/null +++ b/homeassistant/components/nuheat/translations/pl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "Termostat jest ju\u017c skonfigurowany." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie.", + "invalid_thermostat": "Numer seryjny termostatu jest nieprawid\u0142owy.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "serial_number": "Numer seryjny termostatu", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Musisz uzyska\u0107 numeryczny numer seryjny lub identyfikator termostatu, loguj\u0105c si\u0119 na https://MyNuHeat.com i wybieraj\u0105c termostat(y).", + "title": "Po\u0142\u0105cz z NuHeat" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/nut/translations/lb.json b/homeassistant/components/nut/translations/lb.json index 49f47d3fa3e..fa7dc4da26d 100644 --- a/homeassistant/components/nut/translations/lb.json +++ b/homeassistant/components/nut/translations/lb.json @@ -18,7 +18,8 @@ "data": { "alias": "Alias", "resources": "Ressourcen" - } + }, + "title": "UPS fir z'iwwerwaachen auswielen" }, "user": { "data": { @@ -35,7 +36,8 @@ "step": { "init": { "data": { - "resources": "Ressourcen" + "resources": "Ressourcen", + "scan_interval": "Scan Intervall (sekonnen)" }, "description": "Sensor Ressourcen auswielen" } diff --git a/homeassistant/components/nws/translations/lb.json b/homeassistant/components/nws/translations/lb.json index 6a3e33222f3..054e3bf9642 100644 --- a/homeassistant/components/nws/translations/lb.json +++ b/homeassistant/components/nws/translations/lb.json @@ -14,7 +14,9 @@ "latitude": "Breedegrad", "longitude": "L\u00e4ngegrad", "station": "METAR Statioun's Code" - } + }, + "description": "Falls kee METAR Statioun's Code uginn ass, ginn L\u00e4ngegrad a Breedegrad benotzt fir d'Statioun auszewielen.", + "title": "Mam Nationale Wieder D\u00e9ngscht verbannen" } } } diff --git a/homeassistant/components/panasonic_viera/translations/lb.json b/homeassistant/components/panasonic_viera/translations/lb.json index b35af6e1ba8..0fb2a8c703f 100644 --- a/homeassistant/components/panasonic_viera/translations/lb.json +++ b/homeassistant/components/panasonic_viera/translations/lb.json @@ -1,6 +1,8 @@ { "config": { "abort": { + "already_configured": "D\u00ebs Panasonic Viera TA ass scho konfigur\u00e9iert.", + "not_connected": "Verbindung mam Panasonic Viera TV as \u00ebnnerbrach. Kuck Log fir w\u00e9ider Informatiounen.", "unknown": "Onbekannte Feeler opgetrueden. Kuck d'Logs fir m\u00e9i Informatiounen." }, "error": { diff --git a/homeassistant/components/panasonic_viera/translations/nl.json b/homeassistant/components/panasonic_viera/translations/nl.json index 79bc899c477..1f38ff9c441 100644 --- a/homeassistant/components/panasonic_viera/translations/nl.json +++ b/homeassistant/components/panasonic_viera/translations/nl.json @@ -1,21 +1,31 @@ { "config": { + "abort": { + "already_configured": "Deze Panasonic Viera TV is al geconfigureerd.", + "not_connected": "De externe verbinding met uw Panasonic Viera-tv was verbroken. Controleer de logs voor meer informatie.", + "unknown": "Er is een onbekende fout opgetreden. Controleer de logs voor meer informatie." + }, "error": { - "invalid_pin_code": "De ingevoerde pincode is ongeldig" + "invalid_pin_code": "De ingevoerde pincode is ongeldig", + "not_connected": "Kon geen externe verbinding met uw Panasonic Viera TV tot stand brengen" }, "step": { "pairing": { "data": { "pin": "PIN" - } + }, + "description": "Voer de PIN-code in die op uw TV wordt weergegeven", + "title": "Koppelen" }, "user": { "data": { "host": "IP-adres", "name": "Naam" }, + "description": "Voer het IP-adres van uw Panasonic Viera TV in", "title": "Uw tv instellen" } } - } + }, + "title": "Panasonic Viera" } \ No newline at end of file diff --git a/homeassistant/components/pvpc_hourly_pricing/translations/pl.json b/homeassistant/components/pvpc_hourly_pricing/translations/pl.json new file mode 100644 index 00000000000..ae5f27fb7c2 --- /dev/null +++ b/homeassistant/components/pvpc_hourly_pricing/translations/pl.json @@ -0,0 +1,17 @@ +{ + "config": { + "abort": { + "already_configured": "Integracja jest ju\u017c skonfigurowana z istniej\u0105cym sensorem dla tej taryfy." + }, + "step": { + "user": { + "data": { + "name": "Nazwa sensora", + "tariff": "Zakontraktowana taryfa (1, 2 lub 3 okresy)" + }, + "description": "Ten czujnik u\u017cywa oficjalnego interfejsu API w celu uzyskania [godzinowej ceny energii elektrycznej (PVPC)] (https://www.esios.ree.es/es/pvpc) w Hiszpanii. \n Aby uzyska\u0107 bardziej szczeg\u00f3\u0142owe wyja\u015bnienia, odwied\u017a [dokumentacj\u0119 dotycz\u0105c\u0105 integracji] (https://www.home-assistant.io/integrations/pvpc_hourly_pricing/). \n\n Wybierz stawk\u0119 umown\u0105 na podstawie liczby okres\u00f3w rozliczeniowych dziennie: \n - 1 okres: normalny \n - 2 okresy: dyskryminacja (nocna stawka) \n - 3 okresy: samoch\u00f3d elektryczny (stawka nocna za 3 okresy)", + "title": "Wyb\u00f3r taryfy" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/lb.json b/homeassistant/components/roomba/translations/lb.json index 08933fc16f9..70671503e51 100644 --- a/homeassistant/components/roomba/translations/lb.json +++ b/homeassistant/components/roomba/translations/lb.json @@ -1,6 +1,7 @@ { "config": { "error": { + "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", "unknown": "Onerwaarte Feeler" }, "step": { @@ -8,9 +9,12 @@ "data": { "blid": "BLID", "certificate": "Zertifikat", + "continuous": "Kontinu\u00e9ierlech", + "delay": "Delai", "host": "Host Numm oder IP Adresse", "password": "Passwuert" - } + }, + "title": "Mam Apparat verbannen" } } }, @@ -18,6 +22,7 @@ "step": { "init": { "data": { + "continuous": "Kontinu\u00e9ierlech", "delay": "Delai" } } diff --git a/homeassistant/components/smartthings/translations/lb.json b/homeassistant/components/smartthings/translations/lb.json index 9c601917055..623e00870b8 100644 --- a/homeassistant/components/smartthings/translations/lb.json +++ b/homeassistant/components/smartthings/translations/lb.json @@ -1,5 +1,8 @@ { "config": { + "abort": { + "no_available_locations": "Keng disponibel Smartthings Standuerte fir am Home Assistant anzeriichten." + }, "error": { "app_setup_error": "Kann SmartApp net install\u00e9ieren. Prob\u00e9iert w.e.g. nach emol.", "token_forbidden": "De Jeton huet net d\u00e9i n\u00e9ideg OAuth M\u00e9iglechkeeten.", @@ -15,6 +18,7 @@ "data": { "access_token": "Acc\u00e8ss Jeton" }, + "description": "G\u00ebff w.e.g. ee pers\u00e9inlechen SmartThings [Acc\u00e8s Jeton]({token_url}) un dee via [d'Instruktiounen] ({component_url}) erstallt gouf. D\u00ebse g\u00ebtte benotzt fir d'Integratioun vum SmartThings Kont am Home Assistant.", "title": "Pers\u00e9inlechen Acc\u00e8ss Jeton uginn" }, "select_location": { diff --git a/homeassistant/components/synology_dsm/translations/lb.json b/homeassistant/components/synology_dsm/translations/lb.json index 3c5f2c2a6b9..5453b078a3e 100644 --- a/homeassistant/components/synology_dsm/translations/lb.json +++ b/homeassistant/components/synology_dsm/translations/lb.json @@ -4,15 +4,19 @@ "already_configured": "Apparat ass scho konfigur\u00e9iert" }, "error": { + "connection": "Feeler beim verbannen Iwwerpr\u00e9if w.e.g. den Numm, Passwuert & SSL", "login": "Feeler beim Login: iwwerpr\u00e9if de Benotzernumm & Passwuert", - "otp_failed": "Feeler mam 2-Faktor-Authentifikatiouns, prob\u00e9ier mat engem neie Code" + "missing_data": "Donn\u00e9\u00ebe feelen, prob\u00e9ier sp\u00e9ider oder mat enger aner Konfiguratioun", + "otp_failed": "Feeler mam 2-Faktor-Authentifikatiouns, prob\u00e9ier mat engem neie Code", + "unknown": "Onbekannte Feeler opgetrueden. Kuck d'Logs fir m\u00e9i Informatiounen." }, "flow_title": "Synology DSM {name} ({host})", "step": { "2sa": { "data": { "otp_code": "Code" - } + }, + "title": "Synology DSM: 2-Faktor-Authentifikatioun" }, "link": { "data": { diff --git a/homeassistant/components/tado/translations/lb.json b/homeassistant/components/tado/translations/lb.json index ba10353948c..e84720a2de1 100644 --- a/homeassistant/components/tado/translations/lb.json +++ b/homeassistant/components/tado/translations/lb.json @@ -6,6 +6,7 @@ "error": { "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", "invalid_auth": "Ong\u00eblteg Authentifikatioun", + "no_homes": "Keng Immobilien mat d\u00ebsem Tado Kont verbonnen.", "unknown": "Onerwaarte Feeler" }, "step": { @@ -13,7 +14,18 @@ "data": { "password": "Passwuert", "username": "Benotzernumm" - } + }, + "title": "Verbann dech mat dengem Tado Kont." + } + } + }, + "options": { + "step": { + "init": { + "data": { + "fallback": "Fallback Modus aktiv\u00e9ieren" + }, + "title": "Tado Optiounen \u00e4nneren" } } } diff --git a/homeassistant/components/tesla/translations/pl.json b/homeassistant/components/tesla/translations/pl.json index b961d12e5a8..e2a6b6a09c8 100644 --- a/homeassistant/components/tesla/translations/pl.json +++ b/homeassistant/components/tesla/translations/pl.json @@ -21,6 +21,7 @@ "step": { "init": { "data": { + "enable_wake_on_start": "Wymu\u015b wybudzenie samochod\u00f3w podczas uruchamiania", "scan_interval": "Cz\u0119stotliwo\u015b\u0107 aktualizacji" } } diff --git a/homeassistant/components/timer/translations/nl.json b/homeassistant/components/timer/translations/nl.json index c7811e2cd02..1cfd9c72c46 100644 --- a/homeassistant/components/timer/translations/nl.json +++ b/homeassistant/components/timer/translations/nl.json @@ -1,9 +1,9 @@ { "state": { "_": { - "active": "actief", - "idle": "inactief", - "paused": "gepauzeerd" + "active": "Actief", + "idle": "Inactief", + "paused": "Gepauzeerd" } } } \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/lb.json b/homeassistant/components/totalconnect/translations/lb.json index 23825000fdb..a75e63e9b58 100644 --- a/homeassistant/components/totalconnect/translations/lb.json +++ b/homeassistant/components/totalconnect/translations/lb.json @@ -11,7 +11,8 @@ "data": { "password": "Passwuert", "username": "Benotzernumm" - } + }, + "title": "Total Connect" } } } diff --git a/homeassistant/components/unifi/translations/lb.json b/homeassistant/components/unifi/translations/lb.json index f6e9a6c2c4b..901cde0dab4 100644 --- a/homeassistant/components/unifi/translations/lb.json +++ b/homeassistant/components/unifi/translations/lb.json @@ -37,6 +37,7 @@ "device_tracker": { "data": { "detection_time": "Z\u00e4it a Sekonne vum leschten Z\u00e4itpunkt un bis den Apparat als \u00ebnnerwee consider\u00e9iert g\u00ebtt", + "ignore_wired_bug": "UniFi wired bug log ausschalten", "ssid_filter": "SSIDs auswielen fir Clienten ze verfollegen", "track_clients": "Netzwierk Cliente verfollegen", "track_devices": "Netzwierk Apparater (Ubiquiti Apparater) verfollegen", diff --git a/homeassistant/components/vacuum/translations/nl.json b/homeassistant/components/vacuum/translations/nl.json index f773ec18509..3fbb0ae50be 100644 --- a/homeassistant/components/vacuum/translations/nl.json +++ b/homeassistant/components/vacuum/translations/nl.json @@ -21,7 +21,7 @@ "idle": "Inactief", "off": "Uit", "on": "Aan", - "paused": "Gepauseerd", + "paused": "Gepauzeerd", "returning": "Terugkeren naar dock" } }, diff --git a/homeassistant/components/wwlln/translations/nl.json b/homeassistant/components/wwlln/translations/nl.json index 442420b1c5d..34388295976 100644 --- a/homeassistant/components/wwlln/translations/nl.json +++ b/homeassistant/components/wwlln/translations/nl.json @@ -1,5 +1,8 @@ { "config": { + "abort": { + "already_configured": "Deze locatie is al geregistreerd." + }, "step": { "user": { "data": { diff --git a/homeassistant/components/zha/translations/nl.json b/homeassistant/components/zha/translations/nl.json index c82271a9ffb..f3eb4009f02 100644 --- a/homeassistant/components/zha/translations/nl.json +++ b/homeassistant/components/zha/translations/nl.json @@ -53,6 +53,14 @@ "device_shaken": "Apparaat geschud", "device_slid": "Apparaat geschoven \"{subtype}\"\".", "device_tilted": "Apparaat gekanteld", + "remote_button_alt_double_press": "\" {subtype} \" knop tweemaal aangeklikt (alternate mode)", + "remote_button_alt_long_press": "\" {subtype} \" knop continu ingedrukt (alternate mode)", + "remote_button_alt_long_release": "\"{subtype}\" knop losgelaten (alternate mode)", + "remote_button_alt_quadruple_press": "\" {subtype} \" knop viervoudig aangeklikt (alternate mode)", + "remote_button_alt_quintuple_press": "\" {subtype} \" knop vijfmaal geklikt (alternate mode)", + "remote_button_alt_short_press": "\" {subtype} \" knop ingedrukt (alternate mode)", + "remote_button_alt_short_release": "\"{subtype}\" knop losgelaten (alternate mode)", + "remote_button_alt_triple_press": "\" {subtype} \" knop driemaal geklikt (alternate mode)", "remote_button_double_press": "\"{subtype}\" knop dubbel geklikt", "remote_button_long_press": "\" {subtype} \" knop continu ingedrukt", "remote_button_long_release": "\"{subtype}\" knop losgelaten na lang indrukken van de knop", From 77cec174b8019b47963efe94e28acb9ae893626e Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Sun, 26 Apr 2020 00:02:45 +0000 Subject: [PATCH 43/63] [ci skip] Translation update --- .../components/abode/translations/ko.json | 2 +- .../components/adguard/translations/ko.json | 2 +- .../components/airvisual/translations/de.json | 28 ++++++++++++-- .../components/airvisual/translations/ru.json | 8 ++-- .../components/almond/translations/ko.json | 2 +- .../components/atag/translations/de.json | 20 ++++++++++ .../components/braviatv/translations/ko.json | 38 +++++++++++++++++++ .../components/cast/translations/ko.json | 2 +- .../components/deconz/translations/ko.json | 8 ++++ .../components/flume/translations/ko.json | 24 ++++++++++++ .../components/fritzbox/translations/de.json | 32 ++++++++++++++++ .../hisense_aehw4a1/translations/ko.json | 2 +- .../components/hue/translations/ko.json | 6 ++- .../components/iaqualink/translations/ko.json | 2 +- .../components/ios/translations/ko.json | 2 +- .../components/ipp/translations/ko.json | 5 ++- .../islamic_prayer_times/translations/de.json | 7 ++++ .../components/izone/translations/ko.json | 2 +- .../components/lifx/translations/ko.json | 2 +- .../components/light/translations/ko.json | 1 + .../components/local_ip/translations/ko.json | 3 ++ .../logi_circle/translations/ko.json | 2 +- .../components/mqtt/translations/ko.json | 2 +- .../components/nest/translations/ko.json | 6 +-- .../components/netatmo/translations/ko.json | 2 +- .../components/nut/translations/ko.json | 16 +++++++- .../components/nws/translations/ko.json | 23 +++++++++++ .../components/point/translations/ko.json | 2 +- .../components/roomba/translations/ko.json | 32 ++++++++++++++++ .../season/translations/sensor.de.json | 6 +++ .../season/translations/sensor.ko.json | 6 +++ .../smartthings/translations/ko.json | 21 ++++++++++ .../components/soma/translations/ko.json | 2 +- .../components/somfy/translations/ko.json | 2 +- .../components/sonos/translations/ko.json | 2 +- .../components/spotify/translations/ko.json | 2 +- .../synology_dsm/translations/ca.json | 1 - .../synology_dsm/translations/de.json | 3 +- .../synology_dsm/translations/es.json | 1 - .../synology_dsm/translations/fr.json | 11 +++++- .../synology_dsm/translations/ko.json | 12 ++++++ .../synology_dsm/translations/lb.json | 1 - .../synology_dsm/translations/no.json | 1 - .../synology_dsm/translations/ru.json | 3 +- .../synology_dsm/translations/zh-Hant.json | 1 - .../components/tado/translations/ko.json | 33 ++++++++++++++++ .../totalconnect/translations/ko.json | 19 ++++++++++ .../components/tplink/translations/ko.json | 2 +- .../components/upnp/translations/de.json | 2 +- .../components/upnp/translations/ko.json | 2 +- .../components/wemo/translations/ko.json | 2 +- .../components/zha/translations/ko.json | 2 +- 52 files changed, 375 insertions(+), 45 deletions(-) create mode 100644 homeassistant/components/atag/translations/de.json create mode 100644 homeassistant/components/braviatv/translations/ko.json create mode 100644 homeassistant/components/flume/translations/ko.json create mode 100644 homeassistant/components/fritzbox/translations/de.json create mode 100644 homeassistant/components/islamic_prayer_times/translations/de.json create mode 100644 homeassistant/components/nws/translations/ko.json create mode 100644 homeassistant/components/roomba/translations/ko.json create mode 100644 homeassistant/components/tado/translations/ko.json create mode 100644 homeassistant/components/totalconnect/translations/ko.json diff --git a/homeassistant/components/abode/translations/ko.json b/homeassistant/components/abode/translations/ko.json index 857a460fa0f..46363382407 100644 --- a/homeassistant/components/abode/translations/ko.json +++ b/homeassistant/components/abode/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "single_instance_allowed": "\ud558\ub098\uc758 Abode \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 Abode \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "error": { "connection_error": "Abode \uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", diff --git a/homeassistant/components/adguard/translations/ko.json b/homeassistant/components/adguard/translations/ko.json index 95ce591747e..1bcc60c80f0 100644 --- a/homeassistant/components/adguard/translations/ko.json +++ b/homeassistant/components/adguard/translations/ko.json @@ -4,7 +4,7 @@ "adguard_home_addon_outdated": "\uc774 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub294 AdGuard Home {minimal_version} \uc774\uc0c1\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ud604\uc7ac \ubc84\uc804\uc740 {current_version} \uc785\ub2c8\ub2e4. Hass.io AdGuard Home \uc560\ub4dc\uc628\uc744 \uc5c5\ub370\uc774\ud2b8 \ud574\uc8fc\uc138\uc694.", "adguard_home_outdated": "\uc774 \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub294 AdGuard Home {minimal_version} \uc774\uc0c1\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ud604\uc7ac \ubc84\uc804\uc740 {current_version} \uc785\ub2c8\ub2e4.", "existing_instance_updated": "\uae30\uc874 \uad6c\uc131\uc744 \uc5c5\ub370\uc774\ud2b8\ud588\uc2b5\ub2c8\ub2e4.", - "single_instance_allowed": "\ud558\ub098\uc758 AdGuard Home \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 AdGuard Home \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "error": { "connection_error": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4." diff --git a/homeassistant/components/airvisual/translations/de.json b/homeassistant/components/airvisual/translations/de.json index 82e4c122c33..a8b2d296560 100644 --- a/homeassistant/components/airvisual/translations/de.json +++ b/homeassistant/components/airvisual/translations/de.json @@ -1,19 +1,39 @@ { "config": { "abort": { - "already_configured": "Diese Koordinaten wurden bereits registriert." + "already_configured": "Diese Koordinaten oder Node/Pro ID sind bereits registriert." }, "error": { - "invalid_api_key": "Ung\u00fcltiger API-Schl\u00fcssel" + "general_error": "Es gab einen unbekannten Fehler.", + "invalid_api_key": "Ung\u00fcltiger API-Schl\u00fcssel bereitgestellt.", + "unable_to_connect": "Verbindung zum Node/Pro-Ger\u00e4t nicht m\u00f6glich." }, "step": { - "user": { + "geography": { "data": { "api_key": "API-Schl\u00fcssel", "latitude": "Breitengrad", "longitude": "L\u00e4ngengrad" + } + }, + "node_pro": { + "data": { + "ip_address": "IP-Adresse/Hostname des Ger\u00e4ts", + "password": "Ger\u00e4tekennwort" }, - "description": "\u00dcberwachen Sie die Luftqualit\u00e4t an einem geografischen Ort.", + "description": "\u00dcberwachen Sie eine pers\u00f6nliche AirVisual-Einheit. Das Passwort kann von der Benutzeroberfl\u00e4che des Ger\u00e4ts abgerufen werden.", + "title": "Konfigurieren Sie einen AirVisual Node/Pro" + }, + "user": { + "data": { + "api_key": "API-Schl\u00fcssel", + "cloud_api": "Geografische Position", + "latitude": "Breitengrad", + "longitude": "L\u00e4ngengrad", + "node_pro": "AirVisual Node Pro", + "type": "Integrationstyp" + }, + "description": "W\u00e4hlen Sie aus, welche Art von AirVisual-Daten Sie \u00fcberwachen m\u00f6chten.", "title": "Konfigurieren Sie AirVisual" } } diff --git a/homeassistant/components/airvisual/translations/ru.json b/homeassistant/components/airvisual/translations/ru.json index 3479d59ee90..ecc8999fd18 100644 --- a/homeassistant/components/airvisual/translations/ru.json +++ b/homeassistant/components/airvisual/translations/ru.json @@ -15,15 +15,15 @@ "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430" }, - "description": "\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e API AirVisual.", + "description": "\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0433\u043e API AirVisual.", "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f" }, "node_pro": { "data": { - "ip_address": "\u0414\u043e\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0438\u043b\u0438 IP-\u0430\u0434\u0440\u0435\u0441", + "ip_address": "IP-\u0430\u0434\u0440\u0435\u0441/\u0418\u043c\u044f \u0445\u043e\u0441\u0442\u0430", "password": "\u041f\u0430\u0440\u043e\u043b\u044c" }, - "description": "\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0412\u0430\u0448\u0435\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 AirVisual. \u041f\u0430\u0440\u043e\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430.", + "description": "\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 AirVisual. \u041f\u0430\u0440\u043e\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432.", "title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 AirVisual Node / Pro" }, "user": { @@ -33,7 +33,7 @@ "latitude": "\u0428\u0438\u0440\u043e\u0442\u0430", "longitude": "\u0414\u043e\u043b\u0433\u043e\u0442\u0430", "node_pro": "AirVisual Node Pro", - "type": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438" + "type": "\u0422\u0438\u043f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438" }, "description": "\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 AirVisual, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c.", "title": "AirVisual" diff --git a/homeassistant/components/almond/translations/ko.json b/homeassistant/components/almond/translations/ko.json index f8791895d50..695ca3a752c 100644 --- a/homeassistant/components/almond/translations/ko.json +++ b/homeassistant/components/almond/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "already_setup": "\ud558\ub098\uc758 Almond \uacc4\uc815\ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "already_setup": "\ud558\ub098\uc758 Almond \uacc4\uc815\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", "cannot_connect": "Almond \uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", "missing_configuration": "Almond \uc124\uc815 \ubc29\ubc95\uc5d0 \ub300\ud55c \uc124\uba85\uc11c\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694." }, diff --git a/homeassistant/components/atag/translations/de.json b/homeassistant/components/atag/translations/de.json new file mode 100644 index 00000000000..f9d40a035a3 --- /dev/null +++ b/homeassistant/components/atag/translations/de.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Nur ein Atag-Ger\u00e4t kann mit Home Assistant verbunden werden." + }, + "error": { + "connection_error": "Verbindung fehlgeschlagen, versuchen Sie es erneut" + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "Port (10000)" + }, + "title": "Stellen Sie eine Verbindung zum Ger\u00e4t her" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/ko.json b/homeassistant/components/braviatv/translations/ko.json new file mode 100644 index 00000000000..3652210f7b7 --- /dev/null +++ b/homeassistant/components/braviatv/translations/ko.json @@ -0,0 +1,38 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 TV \ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ud638\uc2a4\ud2b8 \ub610\ub294 PIN \ucf54\ub4dc\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "invalid_host": "\ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c\uac00 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", + "unsupported_model": "\uc774 TV \ubaa8\ub378\uc740 \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4." + }, + "step": { + "authorize": { + "data": { + "pin": "PIN \ucf54\ub4dc" + }, + "description": "Sony Bravia TV \uc5d0 \ud45c\uc2dc\ub41c PIN \ucf54\ub4dc\ub97c \uc785\ub825\ud574\uc8fc\uc138\uc694.\n\nPIN \ucf54\ub4dc\uac00 \ud45c\uc2dc\ub418\uc9c0 \uc54a\uc73c\uba74 TV \uc5d0\uc11c Home Assistant \ub97c \ub4f1\ub85d \ud574\uc81c\ud558\uc5ec\uc57c \ud569\ub2c8\ub2e4. Settings -> Network -> Remote device settings -> Unregister remote device \ub85c \uc774\ub3d9\ud558\uc5ec \ub4f1\ub85d\uc744 \ud574\uc81c\ud574\uc8fc\uc138\uc694.", + "title": "Sony Bravia TV \uc2b9\uc778\ud558\uae30" + }, + "user": { + "data": { + "host": "TV \ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c" + }, + "description": "Sony Bravia TV \ud1b5\ud569 \uad6c\uc131\uc694\uc18c\ub97c \uc124\uc815\ud574\uc8fc\uc138\uc694. \uad6c\uc131\uc5d0 \ubb38\uc81c\uac00 \uc788\ub294 \uacbd\uc6b0 https://www.home-assistant.io/integrations/braviatv \ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694.\n\nTV \uac00 \ucf1c\uc838 \uc788\ub294\uc9c0 \ud655\uc778\ud574\uc8fc\uc138\uc694.", + "title": "Sony Bravia TV" + } + } + }, + "options": { + "step": { + "user": { + "data": { + "ignored_sources": "\ubb34\uc2dc\ub41c \uc785\ub825 \uc18c\uc2a4 \ubaa9\ub85d" + }, + "title": "Sony Bravia TV \uc635\uc158" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/cast/translations/ko.json b/homeassistant/components/cast/translations/ko.json index c41b2407792..1de8e74ec84 100644 --- a/homeassistant/components/cast/translations/ko.json +++ b/homeassistant/components/cast/translations/ko.json @@ -2,7 +2,7 @@ "config": { "abort": { "no_devices_found": "Google \uce90\uc2a4\ud2b8 \uae30\uae30\uac00 \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \ubc1c\uacac\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.", - "single_instance_allowed": "\ud558\ub098\uc758 Google \uce90\uc2a4\ud2b8\ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 Google \uce90\uc2a4\ud2b8\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "step": { "confirm": { diff --git a/homeassistant/components/deconz/translations/ko.json b/homeassistant/components/deconz/translations/ko.json index c3704326d33..e6e22abc332 100644 --- a/homeassistant/components/deconz/translations/ko.json +++ b/homeassistant/components/deconz/translations/ko.json @@ -29,12 +29,19 @@ "host": "\ud638\uc2a4\ud2b8", "port": "\ud3ec\ud2b8" } + }, + "manual_input": { + "data": { + "host": "\ud638\uc2a4\ud2b8", + "port": "\ud3ec\ud2b8" + } } } }, "device_automation": { "trigger_subtype": { "both_buttons": "\ub450 \uac1c", + "bottom_buttons": "\ud558\ub2e8 \ubc84\ud2bc", "button_1": "\uccab \ubc88\uc9f8", "button_2": "\ub450 \ubc88\uc9f8", "button_3": "\uc138 \ubc88\uc9f8", @@ -51,6 +58,7 @@ "side_4": "\uba74 4", "side_5": "\uba74 5", "side_6": "\uba74 6", + "top_buttons": "\uc0c1\ub2e8 \ubc84\ud2bc", "turn_off": "\ub044\uae30", "turn_on": "\ucf1c\uae30" }, diff --git a/homeassistant/components/flume/translations/ko.json b/homeassistant/components/flume/translations/ko.json new file mode 100644 index 00000000000..faac5e9c579 --- /dev/null +++ b/homeassistant/components/flume/translations/ko.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "\uc774 \uacc4\uc815\uc740 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "invalid_auth": "\uc778\uc99d\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "client_id": "\ud074\ub77c\uc774\uc5b8\ud2b8 ID", + "client_secret": "\ud074\ub77c\uc774\uc5b8\ud2b8 \uc2dc\ud06c\ub9bf", + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "description": "Flume Personal API \uc5d0 \uc561\uc138\uc2a4 \ud558\ub824\uba74 https://portal.flumetech.com/settings#token \uc5d0\uc11c '\ud074\ub77c\uc774\uc5b8\ud2b8 ID'\ubc0f '\ud074\ub77c\uc774\uc5b8\ud2b8 \uc2dc\ud06c\ub9bf'\uc744 \uc694\uccad\ud574\uc57c \ud569\ub2c8\ub2e4.", + "title": "Flume \uacc4\uc815\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/de.json b/homeassistant/components/fritzbox/translations/de.json new file mode 100644 index 00000000000..5f16553c64c --- /dev/null +++ b/homeassistant/components/fritzbox/translations/de.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "Diese AVM FRITZ! Box ist bereits konfiguriert.", + "already_in_progress": "Die Konfiguration der AVM FRITZ! Box ist bereits in Bearbeitung.", + "not_found": "Keine unterst\u00fctzte AVM FRITZ! Box im Netzwerk gefunden." + }, + "error": { + "auth_failed": "Benutzername und/oder Passwort sind falsch." + }, + "flow_title": "AVM FRITZ! Box: {name}", + "step": { + "confirm": { + "data": { + "password": "Passwort", + "username": "Benutzername" + }, + "description": "M\u00f6chten Sie {name} einrichten?", + "title": "AVM FRITZ! Box" + }, + "user": { + "data": { + "host": "Host oder IP-Adresse", + "password": "Passwort", + "username": "Benutzername" + }, + "description": "Geben Sie Ihre AVM FRITZ! Box-Informationen ein.", + "title": "AVM FRITZ! Box" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/hisense_aehw4a1/translations/ko.json b/homeassistant/components/hisense_aehw4a1/translations/ko.json index 18199edf856..2c472277b00 100644 --- a/homeassistant/components/hisense_aehw4a1/translations/ko.json +++ b/homeassistant/components/hisense_aehw4a1/translations/ko.json @@ -2,7 +2,7 @@ "config": { "abort": { "no_devices_found": "Hisense AEH-W4A1 \uae30\uae30\uac00 \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \ubc1c\uacac\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.", - "single_instance_allowed": "\ud558\ub098\uc758 Hisense AEH-W4A1 \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 Hisense AEH-W4A1 \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "step": { "confirm": { diff --git a/homeassistant/components/hue/translations/ko.json b/homeassistant/components/hue/translations/ko.json index 31bf427196c..561b3442d2e 100644 --- a/homeassistant/components/hue/translations/ko.json +++ b/homeassistant/components/hue/translations/ko.json @@ -35,13 +35,17 @@ "button_4": "\ub124 \ubc88\uc9f8 \ubc84\ud2bc", "dim_down": "\uc5b4\ub461\uac8c \ud558\uae30", "dim_up": "\ubc1d\uac8c \ud558\uae30", + "double_buttons_1_3": "\uccab \ubc88\uc9f8 \ubc0f \uc138 \ubc88\uc9f8 \ubc84\ud2bc", + "double_buttons_2_4": "\ub450 \ubc88\uc9f8 \ubc0f \ub124 \ubc88\uc9f8 \ubc84\ud2bc", "turn_off": "\ub044\uae30", "turn_on": "\ucf1c\uae30" }, "trigger_type": { "remote_button_long_release": "\"{subtype}\" \ubc84\ud2bc\uc774 \uae38\uac8c \ub20c\ub838\ub2e4\uac00 \uc190\uc744 \ub5c4 \ub54c", "remote_button_short_press": "\"{subtype}\" \ubc84\ud2bc\uc774 \ub20c\ub9b4 \ub54c", - "remote_button_short_release": "\"{subtype}\" \ubc84\ud2bc\uc5d0\uc11c \uc190\uc744 \ub5c4 \ub54c" + "remote_button_short_release": "\"{subtype}\" \ubc84\ud2bc\uc5d0\uc11c \uc190\uc744 \ub5c4 \ub54c", + "remote_double_button_long_press": "\"{subtype}\" \ubaa8\ub450 \uae38\uac8c \ub20c\ub838\ub2e4\uac00 \uc190\uc744 \ub5c4 \ub54c", + "remote_double_button_short_press": "\"{subtype}\" \ubaa8\ub450 \uc190\uc744 \ub5c4 \ub54c" } } } \ No newline at end of file diff --git a/homeassistant/components/iaqualink/translations/ko.json b/homeassistant/components/iaqualink/translations/ko.json index 23b3602744c..3399960dd33 100644 --- a/homeassistant/components/iaqualink/translations/ko.json +++ b/homeassistant/components/iaqualink/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "already_setup": "\ud558\ub098\uc758 iAqualink \uc5f0\uacb0\ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "already_setup": "\ud558\ub098\uc758 iAqualink \uc5f0\uacb0\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "error": { "connection_failure": "iAqualink \uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9\uc790 \uc774\ub984\uacfc \ube44\ubc00\ubc88\ud638\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694." diff --git a/homeassistant/components/ios/translations/ko.json b/homeassistant/components/ios/translations/ko.json index 36c18ea34fe..fdd036f26a8 100644 --- a/homeassistant/components/ios/translations/ko.json +++ b/homeassistant/components/ios/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "single_instance_allowed": "\ud558\ub098\uc758 Home Assistant iOS \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 Home Assistant iOS \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "step": { "confirm": { diff --git a/homeassistant/components/ipp/translations/ko.json b/homeassistant/components/ipp/translations/ko.json index 2f4b9a1171c..a0f79d0417f 100644 --- a/homeassistant/components/ipp/translations/ko.json +++ b/homeassistant/components/ipp/translations/ko.json @@ -3,7 +3,10 @@ "abort": { "already_configured": "\uc774 \ud504\ub9b0\ud130\ub294 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", "connection_error": "\ud504\ub9b0\ud130\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", - "connection_upgrade": "\ud504\ub9b0\ud130\uc5d0 \uc5f0\uacb0\ud558\ub824\uba74 \uc5f0\uacb0\uc744 \uc5c5\uadf8\ub808\uc774\ub4dc\ud574\uc57c \ud569\ub2c8\ub2e4." + "connection_upgrade": "\ud504\ub9b0\ud130\uc5d0 \uc5f0\uacb0\ud558\ub824\uba74 \uc5f0\uacb0\uc744 \uc5c5\uadf8\ub808\uc774\ub4dc\ud574\uc57c \ud569\ub2c8\ub2e4.", + "ipp_error": "IPP \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", + "ipp_version_error": "\ud504\ub9b0\ud130\uc5d0\uc11c IPP \ubc84\uc804\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.", + "parse_error": "\ud504\ub9b0\ud130\uc758 \uc751\ub2f5\uc744 \uc77d\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4." }, "error": { "connection_error": "\ud504\ub9b0\ud130\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.", diff --git a/homeassistant/components/islamic_prayer_times/translations/de.json b/homeassistant/components/islamic_prayer_times/translations/de.json new file mode 100644 index 00000000000..c9c7107d9cf --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/de.json @@ -0,0 +1,7 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Es ist nur eine einzige Instanz erforderlich." + } + } +} \ No newline at end of file diff --git a/homeassistant/components/izone/translations/ko.json b/homeassistant/components/izone/translations/ko.json index 8d8e15d218f..4174226ab55 100644 --- a/homeassistant/components/izone/translations/ko.json +++ b/homeassistant/components/izone/translations/ko.json @@ -2,7 +2,7 @@ "config": { "abort": { "no_devices_found": "iZone \uae30\uae30\uac00 \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \ubc1c\uacac\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.", - "single_instance_allowed": "\ud558\ub098\uc758 iZone \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 iZone \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "step": { "confirm": { diff --git a/homeassistant/components/lifx/translations/ko.json b/homeassistant/components/lifx/translations/ko.json index 8fd7a0ca754..13a5ca08152 100644 --- a/homeassistant/components/lifx/translations/ko.json +++ b/homeassistant/components/lifx/translations/ko.json @@ -2,7 +2,7 @@ "config": { "abort": { "no_devices_found": "LIFX \uae30\uae30\uac00 \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \ubc1c\uacac\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.", - "single_instance_allowed": "\ud558\ub098\uc758 LIFX \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 LIFX \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "step": { "confirm": { diff --git a/homeassistant/components/light/translations/ko.json b/homeassistant/components/light/translations/ko.json index cef5c22c871..969d9b2e4d4 100644 --- a/homeassistant/components/light/translations/ko.json +++ b/homeassistant/components/light/translations/ko.json @@ -3,6 +3,7 @@ "action_type": { "brightness_decrease": "{entity_name} \uc744(\ub97c) \uc5b4\ub461\uac8c \ud558\uae30", "brightness_increase": "{entity_name} \uc744(\ub97c) \ubc1d\uac8c \ud558\uae30", + "flash": "{entity_name} \ud50c\ub798\uc2dc", "toggle": "{entity_name} \ud1a0\uae00", "turn_off": "{entity_name} \ub044\uae30", "turn_on": "{entity_name} \ucf1c\uae30" diff --git a/homeassistant/components/local_ip/translations/ko.json b/homeassistant/components/local_ip/translations/ko.json index 2662eab36e7..050229dbf08 100644 --- a/homeassistant/components/local_ip/translations/ko.json +++ b/homeassistant/components/local_ip/translations/ko.json @@ -1,5 +1,8 @@ { "config": { + "abort": { + "single_instance_allowed": "\ud558\ub098\uc758 \ub85c\uceec IP \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + }, "step": { "user": { "data": { diff --git a/homeassistant/components/logi_circle/translations/ko.json b/homeassistant/components/logi_circle/translations/ko.json index de6ca6f483c..5ecea7db659 100644 --- a/homeassistant/components/logi_circle/translations/ko.json +++ b/homeassistant/components/logi_circle/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "already_setup": "\ud558\ub098\uc758 Logi Circle \uacc4\uc815\ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "already_setup": "\ud558\ub098\uc758 Logi Circle \uacc4\uc815\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", "external_error": "\ub2e4\ub978 Flow \uc5d0\uc11c \uc608\uc678\uc0ac\ud56d\uc774 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", "external_setup": "Logi Circle \uc774 \ub2e4\ub978 Flow \uc5d0\uc11c \uc131\uacf5\uc801\uc73c\ub85c \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", "no_flows": "Logi Circle \uc744 \uc778\uc99d\ud558\ub824\uba74 \uba3c\uc800 Logi Circle \uc744 \uad6c\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. [\uc548\ub0b4](https://www.home-assistant.io/components/logi_circle/) \ub97c \uc77d\uc5b4\ubcf4\uc138\uc694." diff --git a/homeassistant/components/mqtt/translations/ko.json b/homeassistant/components/mqtt/translations/ko.json index 32c3f892e58..659cec20394 100644 --- a/homeassistant/components/mqtt/translations/ko.json +++ b/homeassistant/components/mqtt/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "single_instance_allowed": "\ud558\ub098\uc758 MQTT \ube0c\ub85c\ucee4\ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 MQTT \ube0c\ub85c\ucee4\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "error": { "cannot_connect": "MQTT \ube0c\ub85c\ucee4\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." diff --git a/homeassistant/components/nest/translations/ko.json b/homeassistant/components/nest/translations/ko.json index 2d65458665f..08c2f54ba7a 100644 --- a/homeassistant/components/nest/translations/ko.json +++ b/homeassistant/components/nest/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "already_setup": "\ud558\ub098\uc758 Nest \uacc4\uc815\ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "already_setup": "\ud558\ub098\uc758 Nest \uacc4\uc815\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", "authorize_url_fail": "\uc778\uc99d url \uc0dd\uc131\uc5d0 \uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", "authorize_url_timeout": "\uc778\uc99d url \uc0dd\uc131 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", "no_flows": "Nest \ub97c \uc778\uc99d\ud558\ub824\uba74 \uba3c\uc800 Nest \ub97c \uad6c\uc131\ud574\uc57c \ud569\ub2c8\ub2e4. [\uc548\ub0b4](https://www.home-assistant.io/components/nest/) \ub97c \uc77d\uc5b4\ubcf4\uc138\uc694." @@ -22,9 +22,9 @@ }, "link": { "data": { - "code": "\ud540 \ucf54\ub4dc" + "code": "PIN \ucf54\ub4dc" }, - "description": "Nest \uacc4\uc815\uc744 \uc5f0\uacb0\ud558\ub824\uba74, [\uacc4\uc815 \uc5f0\uacb0 \uc2b9\uc778]({url}) \uc744 \ud574\uc8fc\uc138\uc694.\n\n\uc2b9\uc778 \ud6c4, \uc544\ub798\uc758 \ud540 \ucf54\ub4dc\ub97c \ubcf5\uc0ac\ud558\uc5ec \ubd99\uc5ec\ub123\uc73c\uc138\uc694.", + "description": "Nest \uacc4\uc815\uc744 \uc5f0\uacb0\ud558\ub824\uba74, [\uacc4\uc815 \uc5f0\uacb0 \uc2b9\uc778]({url}) \uc744 \ud574\uc8fc\uc138\uc694.\n\n\uc2b9\uc778 \ud6c4, \uc544\ub798\uc758 PIN \ucf54\ub4dc\ub97c \ubcf5\uc0ac\ud558\uc5ec \ubd99\uc5ec\ub123\uc73c\uc138\uc694.", "title": "Nest \uacc4\uc815 \uc5f0\uacb0" } } diff --git a/homeassistant/components/netatmo/translations/ko.json b/homeassistant/components/netatmo/translations/ko.json index f5749ebf2ca..624298c04e5 100644 --- a/homeassistant/components/netatmo/translations/ko.json +++ b/homeassistant/components/netatmo/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "already_setup": "\ud558\ub098\uc758 Netatmo \uacc4\uc815\ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "already_setup": "\ud558\ub098\uc758 Netatmo \uacc4\uc815\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", "authorize_url_timeout": "\uc778\uc99d url \uc0dd\uc131 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", "missing_configuration": "Netatmo \uad6c\uc131\uc694\uc18c\uac00 \uad6c\uc131\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc124\uba85\uc11c\ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694." }, diff --git a/homeassistant/components/nut/translations/ko.json b/homeassistant/components/nut/translations/ko.json index 74d1e6981b9..6a74c3969b6 100644 --- a/homeassistant/components/nut/translations/ko.json +++ b/homeassistant/components/nut/translations/ko.json @@ -8,6 +8,19 @@ "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" }, "step": { + "resources": { + "data": { + "resources": "\ub9ac\uc18c\uc2a4" + }, + "title": "\ubaa8\ub2c8\ud130\ub9c1\ud560 \ub9ac\uc18c\uc2a4 \uc120\ud0dd" + }, + "ups": { + "data": { + "alias": "\ubcc4\uba85", + "resources": "\ub9ac\uc18c\uc2a4" + }, + "title": "\ubaa8\ub2c8\ud130\ub9c1\ud560 UPS \uc120\ud0dd" + }, "user": { "data": { "host": "\ud638\uc2a4\ud2b8", @@ -23,7 +36,8 @@ "step": { "init": { "data": { - "resources": "\ub9ac\uc18c\uc2a4" + "resources": "\ub9ac\uc18c\uc2a4", + "scan_interval": "\uc2a4\uce94 \uac04\uaca9 (\ucd08)" }, "description": "\uc13c\uc11c \ub9ac\uc18c\uc2a4 \uc120\ud0dd" } diff --git a/homeassistant/components/nws/translations/ko.json b/homeassistant/components/nws/translations/ko.json new file mode 100644 index 00000000000..3b6eae14ba7 --- /dev/null +++ b/homeassistant/components/nws/translations/ko.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "api_key": "API \ud0a4 (\uc774\uba54\uc77c)", + "latitude": "\uc704\ub3c4", + "longitude": "\uacbd\ub3c4", + "station": "METAR \uc2a4\ud14c\uc774\uc158 \ucf54\ub4dc" + }, + "description": "METAR \uc2a4\ud14c\uc774\uc158 \ucf54\ub4dc\ub97c \uc9c0\uc815\ud558\uc9c0 \uc54a\uc73c\uba74 \uac00\uae4c\uc6b4 \uc2a4\ud14c\uc774\uc158\uc744 \ucc3e\ub294\ub370 \uc704\ub3c4\uc640 \uacbd\ub3c4\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.", + "title": "\ubbf8\uad6d \uae30\uc0c1\uccad\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/point/translations/ko.json b/homeassistant/components/point/translations/ko.json index 1f8ca1cc107..a121d9bb460 100644 --- a/homeassistant/components/point/translations/ko.json +++ b/homeassistant/components/point/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "already_setup": "Point \uacc4\uc815 \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "already_setup": "\ud558\ub098\uc758 Point \uacc4\uc815\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", "authorize_url_fail": "\uc778\uc99d url \uc0dd\uc131\uc5d0 \uc54c \uc218 \uc5c6\ub294 \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4.", "authorize_url_timeout": "\uc778\uc99d url \uc0dd\uc131 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", "external_setup": "Point \uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.", diff --git a/homeassistant/components/roomba/translations/ko.json b/homeassistant/components/roomba/translations/ko.json new file mode 100644 index 00000000000..f7278a6c43c --- /dev/null +++ b/homeassistant/components/roomba/translations/ko.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "\uc778\uc99d\uc11c", + "continuous": "\uc5f0\uc18d", + "delay": "\uc9c0\uc5f0", + "host": "\ud638\uc2a4\ud2b8 \uc774\ub984 \ub610\ub294 IP \uc8fc\uc18c", + "password": "\ube44\ubc00\ubc88\ud638" + }, + "description": "\ud604\uc7ac BLID \ubc0f \ube44\ubc00\ubc88\ud638\ub294 \uc218\ub3d9\uc73c\ub85c \uac00\uc838\uc640\uc57c\ud569\ub2c8\ub2e4. \ub2e4\uc74c \ubb38\uc11c\uc5d0 \uc124\uba85\ub41c \uc808\ucc28\ub97c \ub530\ub77c \uc124\uc815\ud574\uc8fc\uc138\uc694: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials", + "title": "\uae30\uae30\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "\uc5f0\uc18d", + "delay": "\uc9c0\uc5f0" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/season/translations/sensor.de.json b/homeassistant/components/season/translations/sensor.de.json index b58e39a6217..5449e1b553b 100644 --- a/homeassistant/components/season/translations/sensor.de.json +++ b/homeassistant/components/season/translations/sensor.de.json @@ -1,5 +1,11 @@ { "state": { + "season__season": { + "autumn": "Herbst", + "spring": "Fr\u00fchling", + "summer": "Sommer", + "winter": "Winter" + }, "season__season__": { "autumn": "Herbst", "spring": "Fr\u00fchling", diff --git a/homeassistant/components/season/translations/sensor.ko.json b/homeassistant/components/season/translations/sensor.ko.json index aacabe11ed5..2af78145755 100644 --- a/homeassistant/components/season/translations/sensor.ko.json +++ b/homeassistant/components/season/translations/sensor.ko.json @@ -1,5 +1,11 @@ { "state": { + "season__season": { + "autumn": "\uac00\uc744", + "spring": "\ubd04", + "summer": "\uc5ec\ub984", + "winter": "\uaca8\uc6b8" + }, "season__season__": { "autumn": "\uac00\uc744", "spring": "\ubd04", diff --git a/homeassistant/components/smartthings/translations/ko.json b/homeassistant/components/smartthings/translations/ko.json index 9c573476511..383b1a9412c 100644 --- a/homeassistant/components/smartthings/translations/ko.json +++ b/homeassistant/components/smartthings/translations/ko.json @@ -1,5 +1,9 @@ { "config": { + "abort": { + "invalid_webhook_url": "Home Assistant \uac00 SmartThings \uc5d0\uc11c \uc5c5\ub370\uc774\ud2b8\ub97c \uc218\uc2e0\ud558\ub3c4\ub85d \uc62c\ubc14\ub974\uac8c \uad6c\uc131\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc6f9 \ud6c4\ud06c URL \uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4:\n> {webhook_url} \n\n[\uc548\ub0b4]({component_url}) \ub97c \ucc38\uace0\ud558\uc5ec \uad6c\uc131\uc744 \uc5c5\ub370\uc774\ud2b8\ud558\uace0 Home Assistant \ub97c \ub2e4\uc2dc \uc2dc\uc791\ud55c \ud6c4 \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "no_available_locations": "Home Assistant \uc5d0\uc11c \uc124\uc815\ud560 \uc218 \uc788\ub294 SmartThings \uc704\uce58\uac00 \uc5c6\uc2b5\ub2c8\ub2e4." + }, "error": { "app_setup_error": "SmartApp \uc744 \uc124\uc815\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", "token_forbidden": "\ud1a0\ud070\uc5d0 \ud544\uc694\ud55c OAuth \ubc94\uc704\ubaa9\ub85d\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.", @@ -8,6 +12,23 @@ "webhook_error": "SmartThings \ub294 `base_url` \uc5d0 \uc124\uc815\ub41c \uc5d4\ub4dc\ud3ec\uc778\ud2b8\uc758 \uc720\ud6a8\uc131\uc744 \uac80\uc0ac \ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uad6c\uc131\uc694\uc18c\uc758 \uc694\uad6c \uc0ac\ud56d\uc744 \uac80\ud1a0\ud574\uc8fc\uc138\uc694." }, "step": { + "authorize": { + "title": "Home Assistant \uc2b9\uc778\ud558\uae30" + }, + "pat": { + "data": { + "access_token": "\uc561\uc138\uc2a4 \ud1a0\ud070" + }, + "description": "[\uc548\ub0b4]({component_url}) \uc5d0 \ub530\ub77c \uc0dd\uc131\ub41c SmartThings [\uac1c\uc778 \uc561\uc138\uc2a4 \ud1a0\ud070]({token_url}) \uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694. SmartThings \uacc4\uc815\uc5d0\uc11c Home Assistant \uc5f0\ub3d9\uc744 \ub9cc\ub4dc\ub294\ub370 \uc0ac\uc6a9\ub429\ub2c8\ub2e4.", + "title": "\uac1c\uc778 \uc561\uc138\uc2a4 \ud1a0\ud070 \uc785\ub825" + }, + "select_location": { + "data": { + "location_id": "\uc704\uce58" + }, + "description": "Home Assistant \uc5d0 \ucd94\uac00\ud558\ub824\ub294 SmartThings \uc704\uce58\ub97c \uc120\ud0dd\ud574\uc8fc\uc138\uc694. \uc0c8\ub86d\uac8c \uc5f4\ub9b0 \ub85c\uadf8\uc778 \ucc3d\uc5d0\uc11c \ub85c\uadf8\uc778\uc744 \ud558\uba74 \uc120\ud0dd\ud55c \uc704\uce58\uc5d0 Home Assistant \uc5f0\ub3d9\uc744 \uc2b9\uc778\ud558\ub77c\ub294 \uba54\uc2dc\uc9c0\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4.", + "title": "\uc704\uce58 \uc120\ud0dd\ud558\uae30" + }, "user": { "description": "[\uc548\ub0b4]({component_url}) \uc5d0 \ub530\ub77c \uc0dd\uc131 \ub41c SmartThings [\uac1c\uc778 \uc561\uc138\uc2a4 \ud1a0\ud070]({token_url}) \uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694.", "title": "\uac1c\uc778 \uc561\uc138\uc2a4 \ud1a0\ud070 \uc785\ub825" diff --git a/homeassistant/components/soma/translations/ko.json b/homeassistant/components/soma/translations/ko.json index ff241531ecf..b987c7b2b73 100644 --- a/homeassistant/components/soma/translations/ko.json +++ b/homeassistant/components/soma/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "already_setup": "\ud558\ub098\uc758 Soma \uacc4\uc815\ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "already_setup": "\ud558\ub098\uc758 Soma \uacc4\uc815\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", "authorize_url_timeout": "\uc778\uc99d url \uc0dd\uc131 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", "connection_error": "SOMA Connect \uc5d0 \uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4.", "missing_configuration": "Soma \uad6c\uc131\uc694\uc18c\uac00 \uad6c\uc131\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc124\uba85\uc11c\ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694.", diff --git a/homeassistant/components/somfy/translations/ko.json b/homeassistant/components/somfy/translations/ko.json index a77d66c02f8..9748da483bf 100644 --- a/homeassistant/components/somfy/translations/ko.json +++ b/homeassistant/components/somfy/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "already_setup": "\ud558\ub098\uc758 Somfy \uacc4\uc815\ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "already_setup": "\ud558\ub098\uc758 Somfy \uacc4\uc815\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", "authorize_url_timeout": "\uc778\uc99d url \uc0dd\uc131 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", "missing_configuration": "Somfy \uad6c\uc131\uc694\uc18c\uac00 \uad6c\uc131\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc124\uba85\uc11c\ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694." }, diff --git a/homeassistant/components/sonos/translations/ko.json b/homeassistant/components/sonos/translations/ko.json index 8ae4c30e156..baa5200f264 100644 --- a/homeassistant/components/sonos/translations/ko.json +++ b/homeassistant/components/sonos/translations/ko.json @@ -2,7 +2,7 @@ "config": { "abort": { "no_devices_found": "Sonos \uae30\uae30\uac00 \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \ubc1c\uacac\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.", - "single_instance_allowed": "\ud558\ub098\uc758 Sonos \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 Sonos \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "step": { "confirm": { diff --git a/homeassistant/components/spotify/translations/ko.json b/homeassistant/components/spotify/translations/ko.json index ce1bba1bb5d..4892d7a45c0 100644 --- a/homeassistant/components/spotify/translations/ko.json +++ b/homeassistant/components/spotify/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "already_setup": "\ud558\ub098\uc758 Spotify \uacc4\uc815\ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", + "already_setup": "\ud558\ub098\uc758 Spotify \uacc4\uc815\ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.", "authorize_url_timeout": "\uc778\uc99d url \uc0dd\uc131 \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.", "missing_configuration": "Spotify \uad6c\uc131\uc694\uc18c\uac00 \uad6c\uc131\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \uc124\uba85\uc11c\ub97c \ucc38\uace0\ud574\uc8fc\uc138\uc694." }, diff --git a/homeassistant/components/synology_dsm/translations/ca.json b/homeassistant/components/synology_dsm/translations/ca.json index f593ac26182..f3ec177fb65 100644 --- a/homeassistant/components/synology_dsm/translations/ca.json +++ b/homeassistant/components/synology_dsm/translations/ca.json @@ -4,7 +4,6 @@ "already_configured": "L'amfitri\u00f3 ja est\u00e0 configurat" }, "error": { - "connection": "Error de connexi\u00f3: comprova l'amfitri\u00f3, la contrasenya i l'SSL", "login": "Error d\u2019inici de sessi\u00f3: comprova el nom d'usuari i la contrasenya", "missing_data": "Falten dades: torna-ho a provar m\u00e9s tard o prova una altra configuraci\u00f3 diferent", "otp_failed": "L'autenticaci\u00f3 en dos passos ha fallat, torna-ho a provar amb un nou codi", diff --git a/homeassistant/components/synology_dsm/translations/de.json b/homeassistant/components/synology_dsm/translations/de.json index 9218af96d51..a0ca9a36273 100644 --- a/homeassistant/components/synology_dsm/translations/de.json +++ b/homeassistant/components/synology_dsm/translations/de.json @@ -6,7 +6,8 @@ "error": { "login": "Login-Fehler: Bitte \u00fcberpr\u00fcfen Sie Ihren Benutzernamen & Passwort", "missing_data": "Fehlende Daten: Bitte versuchen Sie es sp\u00e4ter noch einmal oder eine andere Konfiguration", - "otp_failed": "Die zweistufige Authentifizierung ist fehlgeschlagen. Versuchen Sie es erneut mit einem neuen Code" + "otp_failed": "Die zweistufige Authentifizierung ist fehlgeschlagen. Versuchen Sie es erneut mit einem neuen Code", + "unknown": "Unbekannter Fehler: Bitte \u00fcberpr\u00fcfen Sie die Protokolle, um weitere Details zu erhalten" }, "flow_title": "Synology DSM {name} ({host})", "step": { diff --git a/homeassistant/components/synology_dsm/translations/es.json b/homeassistant/components/synology_dsm/translations/es.json index ad15de831c4..c2f00b0874c 100644 --- a/homeassistant/components/synology_dsm/translations/es.json +++ b/homeassistant/components/synology_dsm/translations/es.json @@ -4,7 +4,6 @@ "already_configured": "El host ya est\u00e1 configurado." }, "error": { - "connection": "Error de conexi\u00f3n: comprueba tu host, contrase\u00f1a y ssl", "login": "Error de inicio de sesi\u00f3n: comprueba tu nombre de usuario y contrase\u00f1a", "missing_data": "Faltan datos: por favor, vuelva a intentarlo m\u00e1s tarde o pruebe con otra configuraci\u00f3n", "otp_failed": "La autenticaci\u00f3n de dos pasos fall\u00f3, vuelva a intentar con un nuevo c\u00f3digo de acceso", diff --git a/homeassistant/components/synology_dsm/translations/fr.json b/homeassistant/components/synology_dsm/translations/fr.json index 5577885f404..4859b10073c 100644 --- a/homeassistant/components/synology_dsm/translations/fr.json +++ b/homeassistant/components/synology_dsm/translations/fr.json @@ -4,11 +4,20 @@ "already_configured": "H\u00f4te d\u00e9j\u00e0 configur\u00e9" }, "error": { + "connection": "Erreur de connexion: veuillez v\u00e9rifier votre h\u00f4te, port et SSL", "login": "Erreur de connexion: veuillez v\u00e9rifier votre nom d'utilisateur et votre mot de passe", - "missing_data": "Donn\u00e9es manquantes: veuillez r\u00e9essayer plus tard ou utilisez une autre configuration" + "missing_data": "Donn\u00e9es manquantes: veuillez r\u00e9essayer plus tard ou utilisez une autre configuration", + "otp_failed": "\u00c9chec de l'authentification en deux \u00e9tapes, r\u00e9essayez avec un nouveau code d'acc\u00e8s", + "unknown": "Erreur inconnue: veuillez consulter les journaux pour obtenir plus de d\u00e9tails" }, "flow_title": "Synology DSM {name} ({host})", "step": { + "2sa": { + "data": { + "otp_code": "Code" + }, + "title": "Synology DSM: authentification en deux \u00e9tapes" + }, "link": { "data": { "api_version": "Version du DSM", diff --git a/homeassistant/components/synology_dsm/translations/ko.json b/homeassistant/components/synology_dsm/translations/ko.json index ff7b3b66610..d2085b7a097 100644 --- a/homeassistant/components/synology_dsm/translations/ko.json +++ b/homeassistant/components/synology_dsm/translations/ko.json @@ -6,7 +6,19 @@ "error": { "login": "\ub85c\uadf8\uc778 \uc624\ub958: \uc0ac\uc6a9\uc790 \uc774\ub984 \ubc0f \ube44\ubc00\ubc88\ud638\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694" }, + "flow_title": "Synology DSM {name} ({host})", "step": { + "link": { + "data": { + "api_version": "DSM \ubc84\uc804", + "password": "\ube44\ubc00\ubc88\ud638", + "port": "\ud3ec\ud2b8 (\uc120\ud0dd \uc0ac\ud56d)", + "ssl": "SSL/TLS \ub97c \uc0ac\uc6a9\ud558\uc5ec NAS \uc5d0 \uc5f0\uacb0", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "description": "{name} ({host}) \uc744(\ub97c) \uc124\uc815\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?", + "title": "Synology DSM" + }, "user": { "data": { "api_version": "DSM \ubc84\uc804", diff --git a/homeassistant/components/synology_dsm/translations/lb.json b/homeassistant/components/synology_dsm/translations/lb.json index 5453b078a3e..1db4f2a193c 100644 --- a/homeassistant/components/synology_dsm/translations/lb.json +++ b/homeassistant/components/synology_dsm/translations/lb.json @@ -4,7 +4,6 @@ "already_configured": "Apparat ass scho konfigur\u00e9iert" }, "error": { - "connection": "Feeler beim verbannen Iwwerpr\u00e9if w.e.g. den Numm, Passwuert & SSL", "login": "Feeler beim Login: iwwerpr\u00e9if de Benotzernumm & Passwuert", "missing_data": "Donn\u00e9\u00ebe feelen, prob\u00e9ier sp\u00e9ider oder mat enger aner Konfiguratioun", "otp_failed": "Feeler mam 2-Faktor-Authentifikatiouns, prob\u00e9ier mat engem neie Code", diff --git a/homeassistant/components/synology_dsm/translations/no.json b/homeassistant/components/synology_dsm/translations/no.json index 5b79e58e121..a10b28b5386 100644 --- a/homeassistant/components/synology_dsm/translations/no.json +++ b/homeassistant/components/synology_dsm/translations/no.json @@ -4,7 +4,6 @@ "already_configured": "Verten er allerede konfigurert" }, "error": { - "connection": "Tilkoblingsfeil: sjekk verten, passordet og ssl", "login": "P\u00e5loggingsfeil: Vennligst sjekk brukernavnet ditt og passordet ditt", "missing_data": "Manglende data: Pr\u00f8v p\u00e5 nytt senere eller en annen konfigurasjon", "otp_failed": "To-trinns autentisering mislyktes. Pr\u00f8v p\u00e5 nytt med en ny passkode", diff --git a/homeassistant/components/synology_dsm/translations/ru.json b/homeassistant/components/synology_dsm/translations/ru.json index 837af047853..c09999b8924 100644 --- a/homeassistant/components/synology_dsm/translations/ru.json +++ b/homeassistant/components/synology_dsm/translations/ru.json @@ -4,11 +4,10 @@ "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." }, "error": { - "connection": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0445\u043e\u0441\u0442, \u043f\u0430\u0440\u043e\u043b\u044c \u0438 SSL.", "login": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0445\u043e\u0434\u0430: \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c.", "missing_data": "\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435: \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e.", "otp_failed": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0434\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0441 \u043d\u043e\u0432\u044b\u043c \u043f\u0430\u0440\u043e\u043b\u0435\u043c.", - "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043b\u043e\u0433\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438." + "unknown": "\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043b\u043e\u0433\u0438 \u0434\u043b\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439" }, "flow_title": "Synology DSM {name} ({host})", "step": { diff --git a/homeassistant/components/synology_dsm/translations/zh-Hant.json b/homeassistant/components/synology_dsm/translations/zh-Hant.json index 6ca0b54106d..1558008cd3b 100644 --- a/homeassistant/components/synology_dsm/translations/zh-Hant.json +++ b/homeassistant/components/synology_dsm/translations/zh-Hant.json @@ -4,7 +4,6 @@ "already_configured": "\u4e3b\u6a5f\u7aef\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" }, "error": { - "connection": "\u9023\u7dda\u932f\u8aa4\uff1a\u8acb\u6aa2\u67e5\u4e3b\u6a5f\u7aef\u3001\u5bc6\u78bc\u8207 SSL", "login": "\u767b\u5165\u932f\u8aa4\uff1a\u8acb\u78ba\u8a8d\u96fb\u5b50\u90f5\u4ef6\u8207\u5bc6\u78bc", "missing_data": "\u7f3a\u5c11\u8cc7\u6599\uff1a\u8acb\u7a0d\u5f8c\u91cd\u8a66\u6216\u4f7f\u7528\u5176\u4ed6\u8a2d\u5b9a", "otp_failed": "\u5169\u6b65\u9a5f\u9a57\u8b49\u5931\u6557\uff0c\u8acb\u91cd\u65b0\u53d6\u5f97\u4ee3\u78bc\u5f8c\u91cd\u8a66", diff --git a/homeassistant/components/tado/translations/ko.json b/homeassistant/components/tado/translations/ko.json new file mode 100644 index 00000000000..08561ee43aa --- /dev/null +++ b/homeassistant/components/tado/translations/ko.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "\uae30\uae30\uac00 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4" + }, + "error": { + "cannot_connect": "\uc5f0\uacb0\ud558\uc9c0 \ubabb\ud588\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \uc2dc\ub3c4\ud574\uc8fc\uc138\uc694.", + "invalid_auth": "\uc778\uc99d\uc774 \uc798\ubabb\ub418\uc5c8\uc2b5\ub2c8\ub2e4", + "no_homes": "\uc774 Tado \uacc4\uc815\uc5d0 \uc5f0\uacb0\ub41c \uc9d1\uc774 \uc5c6\uc2b5\ub2c8\ub2e4.", + "unknown": "\uc608\uc0c1\uce58 \ubabb\ud55c \uc624\ub958\uac00 \ubc1c\uc0dd\ud588\uc2b5\ub2c8\ub2e4" + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "title": "Tado \uacc4\uc815\uc5d0 \uc5f0\uacb0\ud558\uae30" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "fallback": "\ub300\uccb4 \ubaa8\ub4dc\ub97c \ud65c\uc131\ud654\ud569\ub2c8\ub2e4." + }, + "description": "\uc601\uc5ed\uc744 \uc218\ub3d9\uc73c\ub85c \uc804\ud658\ud558\uba74 \ub300\uccb4 \ubaa8\ub4dc\ub294 \ub2e4\uc74c \uc77c\uc815\uc744 \uc2a4\ub9c8\ud2b8 \uc77c\uc815\uc73c\ub85c \uc804\ud658\ud569\ub2c8\ub2e4.", + "title": "Tado \uc635\uc158 \uc870\uc815." + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/ko.json b/homeassistant/components/totalconnect/translations/ko.json new file mode 100644 index 00000000000..fac8916a54f --- /dev/null +++ b/homeassistant/components/totalconnect/translations/ko.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "\uacc4\uc815\uc774 \uc774\ubbf8 \uad6c\uc131\ub418\uc5c8\uc2b5\ub2c8\ub2e4." + }, + "error": { + "login": "\ub85c\uadf8\uc778 \uc624\ub958: \uc0ac\uc6a9\uc790 \uc774\ub984 \ubc0f \ube44\ubc00\ubc88\ud638\ub97c \ud655\uc778\ud574\uc8fc\uc138\uc694" + }, + "step": { + "user": { + "data": { + "password": "\ube44\ubc00\ubc88\ud638", + "username": "\uc0ac\uc6a9\uc790 \uc774\ub984" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tplink/translations/ko.json b/homeassistant/components/tplink/translations/ko.json index 0d4f83366d9..45e5c525e35 100644 --- a/homeassistant/components/tplink/translations/ko.json +++ b/homeassistant/components/tplink/translations/ko.json @@ -2,7 +2,7 @@ "config": { "abort": { "no_devices_found": "TP-Link \uae30\uae30\uac00 \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \ubc1c\uacac\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.", - "single_instance_allowed": "\ud558\ub098\uc758 TP-Link \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 TP-Link \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "step": { "confirm": { diff --git a/homeassistant/components/upnp/translations/de.json b/homeassistant/components/upnp/translations/de.json index 6dc104d71df..14f8f472221 100644 --- a/homeassistant/components/upnp/translations/de.json +++ b/homeassistant/components/upnp/translations/de.json @@ -26,7 +26,7 @@ "enable_sensors": "Verkehrssensoren hinzuf\u00fcgen", "igd": "UPnP/IGD" }, - "title": "Konfigurationsoptionen f\u00fcr UPnP/IGD" + "title": "Konfigurations-Optionen" } } } diff --git a/homeassistant/components/upnp/translations/ko.json b/homeassistant/components/upnp/translations/ko.json index 4cf59263fed..d1581b026cc 100644 --- a/homeassistant/components/upnp/translations/ko.json +++ b/homeassistant/components/upnp/translations/ko.json @@ -6,7 +6,7 @@ "no_devices_discovered": "\ubc1c\uacac\ub41c UPnP/IGD \uac00 \uc5c6\uc2b5\ub2c8\ub2e4", "no_devices_found": "UPnP/IGD \uae30\uae30\uac00 \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \ubc1c\uacac\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.", "no_sensors_or_port_mapping": "\ucd5c\uc18c\ud55c \uc13c\uc11c \ud639\uc740 \ud3ec\ud2b8 \ub9e4\ud551\uc744 \ud65c\uc131\ud654 \ud574\uc57c \ud569\ub2c8\ub2e4", - "single_instance_allowed": "\ud558\ub098\uc758 UPnP/IGD \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 UPnP/IGD \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "step": { "confirm": { diff --git a/homeassistant/components/wemo/translations/ko.json b/homeassistant/components/wemo/translations/ko.json index 52f4ba34e32..41de2e3aaeb 100644 --- a/homeassistant/components/wemo/translations/ko.json +++ b/homeassistant/components/wemo/translations/ko.json @@ -2,7 +2,7 @@ "config": { "abort": { "no_devices_found": "Wemo \uae30\uae30\uac00 \ub124\ud2b8\uc6cc\ud06c\uc5d0\uc11c \ubc1c\uacac\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.", - "single_instance_allowed": "\ud558\ub098\uc758 Wemo \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 Wemo \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "step": { "confirm": { diff --git a/homeassistant/components/zha/translations/ko.json b/homeassistant/components/zha/translations/ko.json index ecd936975bf..99438e10a84 100644 --- a/homeassistant/components/zha/translations/ko.json +++ b/homeassistant/components/zha/translations/ko.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "single_instance_allowed": "\ud558\ub098\uc758 ZHA \ub9cc \uad6c\uc131 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." + "single_instance_allowed": "\ud558\ub098\uc758 ZHA \ub9cc \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4." }, "error": { "cannot_connect": "ZHA \uae30\uae30\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4." From 28a4af89d9f9a356e94bf5ec3af5ab5cffa5c65c Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Mon, 27 Apr 2020 00:02:20 +0000 Subject: [PATCH 44/63] [ci skip] Translation update --- .../components/airvisual/translations/fr.json | 7 ++++ .../components/airvisual/translations/hi.json | 34 ++++++++++++++++++ .../components/atag/translations/fr.json | 1 + .../components/atag/translations/hi.json | 17 +++++++++ .../components/braviatv/translations/hi.json | 9 +++++ .../components/calendar/translations/hi.json | 3 +- .../components/camera/translations/hi.json | 3 +- .../components/deconz/translations/fr.json | 6 ++++ .../components/doorbird/translations/fr.json | 3 +- .../components/doorbird/translations/pl.json | 33 +++++++++++++++++ .../components/elkm1/translations/fr.json | 4 +++ .../components/flume/translations/fr.json | 4 +++ .../components/fritzbox/translations/fr.json | 4 ++- .../components/fritzbox/translations/hi.json | 7 ++++ .../components/group/translations/hi.json | 7 +++- .../components/hue/translations/fr.json | 15 +++++++- .../components/ipp/translations/pl.json | 7 ++++ .../islamic_prayer_times/translations/de.json | 3 +- .../media_player/translations/hi.json | 6 +++- .../components/nut/translations/de.json | 3 +- .../components/nut/translations/fr.json | 24 +++++++++++++ .../components/nws/translations/fr.json | 8 +++++ .../panasonic_viera/translations/fr.json | 11 +++++- .../panasonic_viera/translations/hi.json | 9 +++++ .../components/person/translations/hi.json | 8 +++++ .../components/roomba/translations/fr.json | 15 ++++++++ .../smartthings/translations/fr.json | 10 ++++++ .../synology_dsm/translations/ca.json | 1 + .../synology_dsm/translations/de.json | 1 + .../synology_dsm/translations/hi.json | 8 +++++ .../synology_dsm/translations/pl.json | 35 +++++++++++++++++++ .../synology_dsm/translations/ru.json | 1 + .../synology_dsm/translations/zh-Hant.json | 1 + .../components/tado/translations/fr.json | 19 ++++++++++ .../components/timer/translations/hi.json | 9 +++++ .../totalconnect/translations/fr.json | 7 ++++ .../components/vacuum/translations/hi.json | 14 ++++++++ .../components/vera/translations/fr.json | 7 +++- .../components/vera/translations/hi.json | 9 +++++ .../components/weather/translations/hi.json | 21 +++++++++++ .../components/zwave/translations/hi.json | 2 ++ 41 files changed, 385 insertions(+), 11 deletions(-) create mode 100644 homeassistant/components/airvisual/translations/hi.json create mode 100644 homeassistant/components/atag/translations/hi.json create mode 100644 homeassistant/components/braviatv/translations/hi.json create mode 100644 homeassistant/components/doorbird/translations/pl.json create mode 100644 homeassistant/components/fritzbox/translations/hi.json create mode 100644 homeassistant/components/ipp/translations/pl.json create mode 100644 homeassistant/components/panasonic_viera/translations/hi.json create mode 100644 homeassistant/components/person/translations/hi.json create mode 100644 homeassistant/components/synology_dsm/translations/hi.json create mode 100644 homeassistant/components/synology_dsm/translations/pl.json create mode 100644 homeassistant/components/tado/translations/fr.json create mode 100644 homeassistant/components/timer/translations/hi.json create mode 100644 homeassistant/components/totalconnect/translations/fr.json create mode 100644 homeassistant/components/vacuum/translations/hi.json create mode 100644 homeassistant/components/vera/translations/hi.json create mode 100644 homeassistant/components/weather/translations/hi.json diff --git a/homeassistant/components/airvisual/translations/fr.json b/homeassistant/components/airvisual/translations/fr.json index f53113a6b6a..d2013b0f17d 100644 --- a/homeassistant/components/airvisual/translations/fr.json +++ b/homeassistant/components/airvisual/translations/fr.json @@ -7,6 +7,13 @@ "invalid_api_key": "Cl\u00e9 API invalide" }, "step": { + "geography": { + "data": { + "api_key": "Cl\u00e9 d'API", + "latitude": "Latitude", + "longitude": "Longitude" + } + }, "user": { "data": { "api_key": "Cl\u00e9 API", diff --git a/homeassistant/components/airvisual/translations/hi.json b/homeassistant/components/airvisual/translations/hi.json new file mode 100644 index 00000000000..ff9c8ebe206 --- /dev/null +++ b/homeassistant/components/airvisual/translations/hi.json @@ -0,0 +1,34 @@ +{ + "config": { + "error": { + "general_error": "\u0915\u094b\u0908 \u0905\u091c\u094d\u091e\u093e\u0924 \u0924\u094d\u0930\u0941\u091f\u093f \u0925\u0940\u0964", + "unable_to_connect": "\u0928\u094b\u0921 / \u092a\u094d\u0930\u094b \u0907\u0915\u093e\u0908 \u0938\u0947 \u0915\u0928\u0947\u0915\u094d\u091f \u0915\u0930\u0928\u0947 \u092e\u0947\u0902 \u0905\u0938\u092e\u0930\u094d\u0925\u0964" + }, + "step": { + "geography": { + "data": { + "api_key": "\u090f\u092a\u0940\u0906\u0908 \u0915\u0941\u0902\u091c\u0940", + "latitude": "\u0905\u0915\u094d\u0937\u093e\u0902\u0936", + "longitude": "\u0926\u0947\u0936\u093e\u0928\u094d\u0924\u0930" + }, + "description": "\u092d\u094c\u0917\u094b\u0932\u093f\u0915 \u0938\u094d\u0925\u093f\u0924\u093f \u0915\u0940 \u0928\u093f\u0917\u0930\u093e\u0928\u0940 \u0915\u0947 \u0932\u093f\u090f \u090f\u092f\u0930\u0935\u093f\u091c\u0941\u0905\u0932 \u0915\u094d\u0932\u093e\u0909\u0921 \u090f\u092a\u0940\u0906\u0908 \u0915\u093e \u0909\u092a\u092f\u094b\u0917 \u0915\u0930\u0947\u0902\u0964", + "title": "\u092d\u0942\u0917\u094b\u0932 \u0915\u0949\u0928\u094d\u092b\u093c\u093f\u0917\u0930 \u0915\u0930\u0947\u0902" + }, + "node_pro": { + "data": { + "ip_address": "\u0907\u0915\u093e\u0908 \u0915\u0947 \u0906\u0908\u092a\u0940 \u092a\u0924\u0947/\u0939\u094b\u0938\u094d\u091f\u0928\u093e\u092e", + "password": "\u0907\u0915\u093e\u0908 \u092a\u093e\u0938\u0935\u0930\u094d\u0921" + }, + "description": "\u090f\u0915 \u0935\u094d\u092f\u0915\u094d\u0924\u093f\u0917\u0924 \u090f\u092f\u0930\u0935\u093f\u091c\u0941\u0905\u0932 \u0907\u0915\u093e\u0908 \u0915\u0940 \u0928\u093f\u0917\u0930\u093e\u0928\u0940 \u0915\u0930\u0947\u0902\u0964 \u092a\u093e\u0938\u0935\u0930\u094d\u0921 \u092f\u0942\u0928\u093f\u091f \u0915\u0947 \u092f\u0942\u0906\u0908 \u0938\u0947 \u092a\u094d\u0930\u093e\u092a\u094d\u0924 \u0915\u093f\u092f\u093e \u091c\u093e \u0938\u0915\u0924\u093e \u0939\u0948\u0964", + "title": "\u090f\u092f\u0930\u0935\u093f\u091c\u0941\u0905\u0932 \u0928\u094b\u0921 \u092a\u094d\u0930\u094b" + }, + "user": { + "data": { + "cloud_api": "\u092d\u094c\u0917\u094b\u0932\u093f\u0915 \u0938\u094d\u0925\u093f\u0924\u093f", + "node_pro": "\u090f\u092f\u0930\u0935\u093f\u091c\u0941\u0905\u0932 \u0928\u094b\u0921 \u092a\u094d\u0930\u094b", + "type": "\u090f\u0915\u0940\u0915\u0930\u0923 \u092a\u094d\u0930\u0915\u093e\u0930" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/atag/translations/fr.json b/homeassistant/components/atag/translations/fr.json index 26b88fe4d20..ace565408f6 100644 --- a/homeassistant/components/atag/translations/fr.json +++ b/homeassistant/components/atag/translations/fr.json @@ -3,6 +3,7 @@ "step": { "user": { "data": { + "host": "H\u00f4te", "port": "Port (10000)" }, "title": "Se connecter \u00e0 l'appareil" diff --git a/homeassistant/components/atag/translations/hi.json b/homeassistant/components/atag/translations/hi.json new file mode 100644 index 00000000000..e2b57f18e79 --- /dev/null +++ b/homeassistant/components/atag/translations/hi.json @@ -0,0 +1,17 @@ +{ + "config": { + "error": { + "connection_error": "\u0915\u0928\u0947\u0915\u094d\u091f \u0915\u0930\u0928\u0947 \u092e\u0947\u0902 \u0935\u093f\u092b\u0932, \u0915\u0943\u092a\u092f\u093e \u092a\u0941\u0928\u0903 \u092a\u094d\u0930\u092f\u093e\u0938 \u0915\u0930\u0947\u0902" + }, + "step": { + "user": { + "data": { + "host": "Host", + "port": "\u092a\u094b\u0930\u094d\u091f (10000)" + }, + "title": "\u0921\u093f\u0935\u093e\u0907\u0938 \u0938\u0947 \u0915\u0928\u0947\u0915\u094d\u091f \u0915\u0930\u0947\u0902" + } + } + }, + "title": "A\u091f\u0948\u0917" +} \ No newline at end of file diff --git a/homeassistant/components/braviatv/translations/hi.json b/homeassistant/components/braviatv/translations/hi.json new file mode 100644 index 00000000000..a7a8a15c204 --- /dev/null +++ b/homeassistant/components/braviatv/translations/hi.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "authorize": { + "description": "\u0938\u094b\u0928\u0940 \u092c\u094d\u0930\u093e\u0935\u093f\u092f\u093e \u091f\u0940\u0935\u0940 \u092a\u0930 \u0926\u093f\u0916\u093e\u092f\u093e \u0917\u092f\u093e \u092a\u093f\u0928 \u0915\u094b\u0921 \u0921\u093e\u0932\u0947\u0902\u0964 \n\n \u092f\u0926\u093f \u092a\u093f\u0928 \u0915\u094b\u0921 \u0928\u0939\u0940\u0902 \u0926\u093f\u0916\u093e\u092f\u093e \u0917\u092f\u093e \u0939\u0948, \u0924\u094b \u0906\u092a\u0915\u094b \u0905\u092a\u0928\u0947 \u091f\u0940\u0935\u0940 \u092a\u0930 \u0939\u094b\u092e \u0905\u0938\u093f\u0938\u094d\u091f\u0947\u0902\u091f \u0915\u094b \u0905\u092a\u0902\u091c\u0940\u0915\u0943\u0924 \u0915\u0930\u0928\u093e \u0939\u094b\u0917\u093e, \u0907\u0938\u0915\u0947 \u0932\u093f\u090f \u091c\u093e\u090f\u0902: \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938 - > \u0928\u0947\u091f\u0935\u0930\u094d\u0915 - > \u0926\u0942\u0930\u0938\u094d\u0925 \u0921\u093f\u0935\u093e\u0907\u0938 \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938 - > \u0905\u092a\u0902\u091c\u0940\u0915\u0943\u0924 \u0930\u093f\u092e\u094b\u091f \u0921\u093f\u0935\u093e\u0907\u0938\u0964" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/calendar/translations/hi.json b/homeassistant/components/calendar/translations/hi.json index 654cbbd0bb0..5f1bd39058c 100644 --- a/homeassistant/components/calendar/translations/hi.json +++ b/homeassistant/components/calendar/translations/hi.json @@ -1,7 +1,8 @@ { "state": { "_": { - "off": "\u092c\u0902\u0926" + "off": "\u092c\u0902\u0926", + "on": "\u091a\u093e\u0932\u0942" } } } \ No newline at end of file diff --git a/homeassistant/components/camera/translations/hi.json b/homeassistant/components/camera/translations/hi.json index 911c0011db0..376072b9759 100644 --- a/homeassistant/components/camera/translations/hi.json +++ b/homeassistant/components/camera/translations/hi.json @@ -1,7 +1,8 @@ { "state": { "_": { - "recording": "\u0930\u093f\u0915\u0949\u0930\u094d\u0921\u093f\u0902\u0917" + "recording": "\u0930\u093f\u0915\u0949\u0930\u094d\u0921\u093f\u0902\u0917", + "streaming": "\u0938\u094d\u091f\u094d\u0930\u0940\u092e\u093f\u0902\u0917" } } } \ No newline at end of file diff --git a/homeassistant/components/deconz/translations/fr.json b/homeassistant/components/deconz/translations/fr.json index f82a7f2e90a..b7d77ad7b1e 100644 --- a/homeassistant/components/deconz/translations/fr.json +++ b/homeassistant/components/deconz/translations/fr.json @@ -29,6 +29,12 @@ "host": "H\u00f4te", "port": "Port" } + }, + "manual_input": { + "data": { + "host": "H\u00f4te", + "port": "Port" + } } } }, diff --git a/homeassistant/components/doorbird/translations/fr.json b/homeassistant/components/doorbird/translations/fr.json index 95a7cfb3086..c208e035d5a 100644 --- a/homeassistant/components/doorbird/translations/fr.json +++ b/homeassistant/components/doorbird/translations/fr.json @@ -1,7 +1,8 @@ { "config": { "abort": { - "already_configured": "Ce DoorBird est d\u00e9j\u00e0 configur\u00e9" + "already_configured": "Ce DoorBird est d\u00e9j\u00e0 configur\u00e9", + "not_doorbird_device": "Cet appareil n'est pas un DoorBird" }, "error": { "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", diff --git a/homeassistant/components/doorbird/translations/pl.json b/homeassistant/components/doorbird/translations/pl.json new file mode 100644 index 00000000000..f113b12783d --- /dev/null +++ b/homeassistant/components/doorbird/translations/pl.json @@ -0,0 +1,33 @@ +{ + "config": { + "abort": { + "already_configured": "BoorBird jest ju\u017c skonfigurowany." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "name": "Nazwa urz\u0105dzenia", + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Po\u0142\u0105czenie z DoorBird" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "events": "Lista wydarze\u0144 oddzielona przecinkami" + }, + "description": "Dodaj nazwy wydarze\u0144 oddzielonych przecinkami, kt\u00f3re chcesz \u015bledzi\u0107. Po wprowadzeniu ich tutaj u\u017cyj aplikacji DoorBird, aby przypisa\u0107 je do okre\u015blonych zdarze\u0144. Zapoznaj si\u0119 z dokumentacj\u0105 na stronie https://www.home-assistant.io/integrations/doorbird/#events.\nPrzyk\u0142ad: nacisnienie_przycisku, ruch" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/elkm1/translations/fr.json b/homeassistant/components/elkm1/translations/fr.json index 6dd87e84718..27eac521430 100644 --- a/homeassistant/components/elkm1/translations/fr.json +++ b/homeassistant/components/elkm1/translations/fr.json @@ -1,5 +1,9 @@ { "config": { + "abort": { + "address_already_configured": "Un ElkM1 avec cette adresse est d\u00e9j\u00e0 configur\u00e9", + "already_configured": "Un ElkM1 avec ce pr\u00e9fixe est d\u00e9j\u00e0 configur\u00e9" + }, "error": { "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", "invalid_auth": "Authentification non valide", diff --git a/homeassistant/components/flume/translations/fr.json b/homeassistant/components/flume/translations/fr.json index b44e5fd8945..a1641a24fc7 100644 --- a/homeassistant/components/flume/translations/fr.json +++ b/homeassistant/components/flume/translations/fr.json @@ -10,6 +10,10 @@ }, "step": { "user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur" + }, "description": "Pour acc\u00e9der \u00e0 l'API personnel Flume, vous devez demander un \"Client ID\" et un \"Client Secret\" \u00e0 l'adresse https://portal.flumetech.com/settings#token", "title": "Se connecter \u00e0 votre compte Flume" } diff --git a/homeassistant/components/fritzbox/translations/fr.json b/homeassistant/components/fritzbox/translations/fr.json index 8c62d2806c3..5072d62374b 100644 --- a/homeassistant/components/fritzbox/translations/fr.json +++ b/homeassistant/components/fritzbox/translations/fr.json @@ -8,10 +8,12 @@ "data": { "password": "Mot de passe", "username": "Nom d'utilisateur" - } + }, + "description": "Voulez-vous configurer {name} ?" }, "user": { "data": { + "host": "H\u00f4te ou adresse IP", "password": "Mot de passe", "username": "Nom d'utilisateur" } diff --git a/homeassistant/components/fritzbox/translations/hi.json b/homeassistant/components/fritzbox/translations/hi.json new file mode 100644 index 00000000000..f95cac200e9 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/hi.json @@ -0,0 +1,7 @@ +{ + "config": { + "abort": { + "not_found": "\u0915\u094b\u0908 \u0938\u092e\u0930\u094d\u0925\u093f\u0924 AVM FRITZ! \u092c\u0949\u0915\u094d\u0938 \u0928\u0947\u091f\u0935\u0930\u094d\u0915 \u092a\u0930 \u0928\u0939\u0940\u0902 \u092e\u093f\u0932\u093e\u0964" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/group/translations/hi.json b/homeassistant/components/group/translations/hi.json index bf3b5329d2d..e4b98d10301 100644 --- a/homeassistant/components/group/translations/hi.json +++ b/homeassistant/components/group/translations/hi.json @@ -1,10 +1,15 @@ { "state": { "_": { + "closed": "\u092c\u0902\u0926", "home": "\u0918\u0930", + "locked": "\u0924\u093e\u0932\u093e \u092c\u0902\u0926 \u0939\u0948", "off": "\u092c\u0902\u0926", + "ok": "\u0920\u0940\u0915", "on": "\u091a\u093e\u0932\u0942", - "problem": "\u0938\u092e\u0938\u094d\u092f\u093e" + "open": "\u0916\u0941\u0932\u093e", + "problem": "\u0938\u092e\u0938\u094d\u092f\u093e", + "unlocked": "\u0924\u093e\u0932\u093e \u0916\u0941\u0932\u093e \u0939\u0948" } }, "title": "\u0938\u092e\u0942\u0939" diff --git a/homeassistant/components/hue/translations/fr.json b/homeassistant/components/hue/translations/fr.json index 45d2a28d35c..b92ccd177e1 100644 --- a/homeassistant/components/hue/translations/fr.json +++ b/homeassistant/components/hue/translations/fr.json @@ -29,8 +29,21 @@ }, "device_automation": { "trigger_subtype": { + "button_1": "Premier bouton", + "button_2": "Deuxi\u00e8me bouton", + "button_3": "Troisi\u00e8me bouton", + "button_4": "Quatri\u00e8me bouton", + "dim_down": "Assombrir", + "dim_up": "\u00c9claircir", "double_buttons_1_3": "Premier et troisi\u00e8me boutons", - "double_buttons_2_4": "Deuxi\u00e8me et quatri\u00e8me boutons" + "double_buttons_2_4": "Deuxi\u00e8me et quatri\u00e8me boutons", + "turn_off": "\u00c9teindre", + "turn_on": "Allumer" + }, + "trigger_type": { + "remote_button_long_release": "Bouton \" {subtype} \" rel\u00e2ch\u00e9 apr\u00e8s un appui long", + "remote_button_short_press": "bouton \"{subtype}\" est press\u00e9", + "remote_button_short_release": "Bouton \" {subtype} \" est rel\u00e2ch\u00e9" } } } \ No newline at end of file diff --git a/homeassistant/components/ipp/translations/pl.json b/homeassistant/components/ipp/translations/pl.json new file mode 100644 index 00000000000..0de012d7163 --- /dev/null +++ b/homeassistant/components/ipp/translations/pl.json @@ -0,0 +1,7 @@ +{ + "config": { + "abort": { + "parse_error": "Nie mo\u017cna przeanalizowa\u0107 odpowiedzi z drukarki." + } + } +} \ No newline at end of file diff --git a/homeassistant/components/islamic_prayer_times/translations/de.json b/homeassistant/components/islamic_prayer_times/translations/de.json index c9c7107d9cf..85020d2bf51 100644 --- a/homeassistant/components/islamic_prayer_times/translations/de.json +++ b/homeassistant/components/islamic_prayer_times/translations/de.json @@ -3,5 +3,6 @@ "abort": { "one_instance_allowed": "Es ist nur eine einzige Instanz erforderlich." } - } + }, + "title": "Islamische Gebetszeiten" } \ No newline at end of file diff --git a/homeassistant/components/media_player/translations/hi.json b/homeassistant/components/media_player/translations/hi.json index cdf339d389f..2ed12ab1756 100644 --- a/homeassistant/components/media_player/translations/hi.json +++ b/homeassistant/components/media_player/translations/hi.json @@ -1,8 +1,12 @@ { "state": { "_": { + "idle": "\u0928\u093f\u0937\u094d\u0915\u094d\u0930\u093f\u092f", "off": "\u092c\u0902\u0926", - "on": "\u091a\u093e\u0932\u0942" + "on": "\u091a\u093e\u0932\u0942", + "paused": "\u0935\u093f\u0930\u093e\u092e", + "playing": "\u092c\u091c \u0930\u0939\u093e \u0939\u0948", + "standby": "\u0924\u0948\u092f\u093e\u0930" } }, "title": "\u092e\u0940\u0921\u093f\u092f\u093e \u092a\u094d\u0932\u0947\u092f\u0930" diff --git a/homeassistant/components/nut/translations/de.json b/homeassistant/components/nut/translations/de.json index 5cddc5b0828..793ab5bfa7c 100644 --- a/homeassistant/components/nut/translations/de.json +++ b/homeassistant/components/nut/translations/de.json @@ -18,7 +18,8 @@ "data": { "alias": "Alias", "resources": "Ressourcen" - } + }, + "title": "W\u00e4hle die zu \u00fcberwachende USV" }, "user": { "data": { diff --git a/homeassistant/components/nut/translations/fr.json b/homeassistant/components/nut/translations/fr.json index b83083fd6ed..02927228c3f 100644 --- a/homeassistant/components/nut/translations/fr.json +++ b/homeassistant/components/nut/translations/fr.json @@ -1,5 +1,12 @@ { "config": { + "abort": { + "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", + "unknown": "Erreur inattendue" + }, "step": { "resources": { "data": { @@ -13,6 +20,23 @@ "resources": "Ressources" }, "title": "Choisir l'UPS \u00e0 surveiller" + }, + "user": { + "data": { + "host": "H\u00f4te", + "password": "Mot de passe", + "port": "Port", + "username": "Nom d'utilisateur" + } + } + } + }, + "options": { + "step": { + "init": { + "data": { + "resources": "Ressources" + } } } } diff --git a/homeassistant/components/nws/translations/fr.json b/homeassistant/components/nws/translations/fr.json index bb0eabe7754..94bb529aa62 100644 --- a/homeassistant/components/nws/translations/fr.json +++ b/homeassistant/components/nws/translations/fr.json @@ -6,6 +6,14 @@ "error": { "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "latitude": "Latitude", + "longitude": "Longitude" + } + } } } } \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/fr.json b/homeassistant/components/panasonic_viera/translations/fr.json index 5cf966fc9e6..dc9bfc3c920 100644 --- a/homeassistant/components/panasonic_viera/translations/fr.json +++ b/homeassistant/components/panasonic_viera/translations/fr.json @@ -1,6 +1,14 @@ { "config": { + "abort": { + "unknown": "Une erreur inconnue est survenue. Veuillez consulter les journaux pour obtenir plus de d\u00e9tails." + }, "step": { + "pairing": { + "data": { + "pin": "PIN" + } + }, "user": { "data": { "host": "Adresse IP", @@ -9,5 +17,6 @@ "title": "Configurer votre t\u00e9l\u00e9viseur" } } - } + }, + "title": "Panasonic Viera" } \ No newline at end of file diff --git a/homeassistant/components/panasonic_viera/translations/hi.json b/homeassistant/components/panasonic_viera/translations/hi.json new file mode 100644 index 00000000000..30293524362 --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/hi.json @@ -0,0 +1,9 @@ +{ + "config": { + "step": { + "pairing": { + "description": "\u0905\u092a\u0928\u0947 \u091f\u0940\u0935\u0940 \u092a\u0930 \u092a\u094d\u0930\u0926\u0930\u094d\u0936\u093f\u0924 \u092a\u093f\u0928 \u0926\u0930\u094d\u091c \u0915\u0930\u0947\u0902" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/person/translations/hi.json b/homeassistant/components/person/translations/hi.json new file mode 100644 index 00000000000..4cd5a4897af --- /dev/null +++ b/homeassistant/components/person/translations/hi.json @@ -0,0 +1,8 @@ +{ + "state": { + "_": { + "home": "\u0918\u0930", + "not_home": "\u0926\u0942\u0930" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/roomba/translations/fr.json b/homeassistant/components/roomba/translations/fr.json index 0151782bf1b..0224ce76fcb 100644 --- a/homeassistant/components/roomba/translations/fr.json +++ b/homeassistant/components/roomba/translations/fr.json @@ -1,4 +1,19 @@ { + "config": { + "error": { + "unknown": "Erreur inattendue" + }, + "step": { + "user": { + "data": { + "certificate": "Certificat", + "delay": "D\u00e9lai", + "host": "Nom d'h\u00f4te ou adresse IP", + "password": "Mot de passe" + } + } + } + }, "options": { "step": { "init": { diff --git a/homeassistant/components/smartthings/translations/fr.json b/homeassistant/components/smartthings/translations/fr.json index 8e0acaaaa0f..1fbd4abada4 100644 --- a/homeassistant/components/smartthings/translations/fr.json +++ b/homeassistant/components/smartthings/translations/fr.json @@ -8,6 +8,16 @@ "webhook_error": "SmartThings n'a pas pu valider le point de terminaison configur\u00e9 en \u00ab\u00a0base_url\u00a0\u00bb. Veuillez consulter les exigences du composant." }, "step": { + "pat": { + "data": { + "access_token": "Jeton d'acc\u00e8s" + } + }, + "select_location": { + "data": { + "location_id": "Emplacement" + } + }, "user": { "description": "Veuillez entrer un [jeton d'acc\u00e8s personnel SmartThings] ( {token_url} ) cr\u00e9\u00e9 selon les [instructions] ( {component_url} ).", "title": "Entrer un jeton d'acc\u00e8s personnel" diff --git a/homeassistant/components/synology_dsm/translations/ca.json b/homeassistant/components/synology_dsm/translations/ca.json index f3ec177fb65..f593ac26182 100644 --- a/homeassistant/components/synology_dsm/translations/ca.json +++ b/homeassistant/components/synology_dsm/translations/ca.json @@ -4,6 +4,7 @@ "already_configured": "L'amfitri\u00f3 ja est\u00e0 configurat" }, "error": { + "connection": "Error de connexi\u00f3: comprova l'amfitri\u00f3, la contrasenya i l'SSL", "login": "Error d\u2019inici de sessi\u00f3: comprova el nom d'usuari i la contrasenya", "missing_data": "Falten dades: torna-ho a provar m\u00e9s tard o prova una altra configuraci\u00f3 diferent", "otp_failed": "L'autenticaci\u00f3 en dos passos ha fallat, torna-ho a provar amb un nou codi", diff --git a/homeassistant/components/synology_dsm/translations/de.json b/homeassistant/components/synology_dsm/translations/de.json index a0ca9a36273..625bec2c5ae 100644 --- a/homeassistant/components/synology_dsm/translations/de.json +++ b/homeassistant/components/synology_dsm/translations/de.json @@ -4,6 +4,7 @@ "already_configured": "Host bereits konfiguriert" }, "error": { + "connection": "Verbindungsfehler: Bitte \u00fcberpr\u00fcfe Host, Port und SSL", "login": "Login-Fehler: Bitte \u00fcberpr\u00fcfen Sie Ihren Benutzernamen & Passwort", "missing_data": "Fehlende Daten: Bitte versuchen Sie es sp\u00e4ter noch einmal oder eine andere Konfiguration", "otp_failed": "Die zweistufige Authentifizierung ist fehlgeschlagen. Versuchen Sie es erneut mit einem neuen Code", diff --git a/homeassistant/components/synology_dsm/translations/hi.json b/homeassistant/components/synology_dsm/translations/hi.json new file mode 100644 index 00000000000..de48b719ea7 --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/hi.json @@ -0,0 +1,8 @@ +{ + "config": { + "error": { + "connection": "\u0915\u0928\u0947\u0915\u094d\u0936\u0928 \u0924\u094d\u0930\u0941\u091f\u093f: \u0915\u0943\u092a\u092f\u093e \u0905\u092a\u0928\u0947 \u0939\u094b\u0938\u094d\u091f, \u092a\u094b\u0930\u094d\u091f \u0914\u0930 \u090f\u0938\u090f\u0938\u090f\u0932 \u0915\u0940 \u091c\u093e\u0902\u091a \u0915\u0930\u0947\u0902", + "unknown": "\u0905\u091c\u094d\u091e\u093e\u0924 \u0924\u094d\u0930\u0941\u091f\u093f: \u0905\u0927\u093f\u0915 \u0935\u093f\u0935\u0930\u0923 \u092a\u094d\u0930\u093e\u092a\u094d\u0924 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0932\u0949\u0917 \u0915\u0940 \u091c\u093e\u0902\u091a \u0915\u0930\u0947\u0902" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/pl.json b/homeassistant/components/synology_dsm/translations/pl.json new file mode 100644 index 00000000000..d7045b9d1f6 --- /dev/null +++ b/homeassistant/components/synology_dsm/translations/pl.json @@ -0,0 +1,35 @@ +{ + "config": { + "abort": { + "already_configured": "Host jest ju\u017c skonfigurowany." + }, + "error": { + "login": "B\u0142\u0105d logowania: sprawd\u017a nazw\u0119 u\u017cytkownika i has\u0142o" + }, + "flow_title": "Synology DSM {name} ({host})", + "step": { + "link": { + "data": { + "api_version": "Wersja DSM", + "password": "Has\u0142o", + "port": "Port (opcjonalnie)", + "ssl": "U\u017cyj SSL/TLS, aby po\u0142\u0105czy\u0107 si\u0119 z serwerem NAS", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Czy chcesz skonfigurowa\u0107 {name} ({host})?", + "title": "Synology DSM" + }, + "user": { + "data": { + "api_version": "Wersja DSM", + "host": "Host", + "password": "Has\u0142o", + "port": "Port (opcjonalnie)", + "ssl": "U\u017cyj SSL/TLS, aby po\u0142\u0105czy\u0107 si\u0119 z serwerem NAS", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Synology DSM" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/ru.json b/homeassistant/components/synology_dsm/translations/ru.json index c09999b8924..d136f171397 100644 --- a/homeassistant/components/synology_dsm/translations/ru.json +++ b/homeassistant/components/synology_dsm/translations/ru.json @@ -4,6 +4,7 @@ "already_configured": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430 \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430." }, "error": { + "connection": "\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0445\u043e\u0441\u0442, \u043f\u043e\u0440\u0442 \u0438 SSL.", "login": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0432\u0445\u043e\u0434\u0430: \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043b\u043e\u0433\u0438\u043d \u0438 \u043f\u0430\u0440\u043e\u043b\u044c.", "missing_data": "\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435: \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e.", "otp_failed": "\u041e\u0448\u0438\u0431\u043a\u0430 \u0434\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u0441 \u043d\u043e\u0432\u044b\u043c \u043f\u0430\u0440\u043e\u043b\u0435\u043c.", diff --git a/homeassistant/components/synology_dsm/translations/zh-Hant.json b/homeassistant/components/synology_dsm/translations/zh-Hant.json index 1558008cd3b..4e2173324c3 100644 --- a/homeassistant/components/synology_dsm/translations/zh-Hant.json +++ b/homeassistant/components/synology_dsm/translations/zh-Hant.json @@ -4,6 +4,7 @@ "already_configured": "\u4e3b\u6a5f\u7aef\u5df2\u7d93\u8a2d\u5b9a\u5b8c\u6210" }, "error": { + "connection": "\u9023\u7dda\u932f\u8aa4\uff1a\u8acb\u6aa2\u67e5\u4e3b\u6a5f\u7aef\u3001\u901a\u8a0a\u57e0\u8207 SSL", "login": "\u767b\u5165\u932f\u8aa4\uff1a\u8acb\u78ba\u8a8d\u96fb\u5b50\u90f5\u4ef6\u8207\u5bc6\u78bc", "missing_data": "\u7f3a\u5c11\u8cc7\u6599\uff1a\u8acb\u7a0d\u5f8c\u91cd\u8a66\u6216\u4f7f\u7528\u5176\u4ed6\u8a2d\u5b9a", "otp_failed": "\u5169\u6b65\u9a5f\u9a57\u8b49\u5931\u6557\uff0c\u8acb\u91cd\u65b0\u53d6\u5f97\u4ee3\u78bc\u5f8c\u91cd\u8a66", diff --git a/homeassistant/components/tado/translations/fr.json b/homeassistant/components/tado/translations/fr.json new file mode 100644 index 00000000000..3fa024bb95e --- /dev/null +++ b/homeassistant/components/tado/translations/fr.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "L'appareil est d\u00e9j\u00e0 configur\u00e9" + }, + "error": { + "cannot_connect": "Impossible de se connecter, veuillez r\u00e9essayer", + "invalid_auth": "Authentification non valide" + }, + "step": { + "user": { + "data": { + "password": "Mot de passe", + "username": "Nom d'utilisateur" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/timer/translations/hi.json b/homeassistant/components/timer/translations/hi.json new file mode 100644 index 00000000000..9504ef064ed --- /dev/null +++ b/homeassistant/components/timer/translations/hi.json @@ -0,0 +1,9 @@ +{ + "state": { + "_": { + "active": "\u0938\u0915\u094d\u0930\u093f\u092f", + "idle": "\u0928\u093f\u0937\u094d\u0915\u094d\u0930\u093f\u092f", + "paused": "\u0935\u093f\u0930\u093e\u092e" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/totalconnect/translations/fr.json b/homeassistant/components/totalconnect/translations/fr.json new file mode 100644 index 00000000000..d2c211a7c7c --- /dev/null +++ b/homeassistant/components/totalconnect/translations/fr.json @@ -0,0 +1,7 @@ +{ + "config": { + "abort": { + "already_configured": "Compte d\u00e9j\u00e0 configur\u00e9" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vacuum/translations/hi.json b/homeassistant/components/vacuum/translations/hi.json new file mode 100644 index 00000000000..e8196f3981d --- /dev/null +++ b/homeassistant/components/vacuum/translations/hi.json @@ -0,0 +1,14 @@ +{ + "state": { + "_": { + "cleaning": "\u0938\u092b\u093e\u0908", + "docked": "\u0921\u0949\u0915\u094d\u0921", + "error": "\u0924\u094d\u0930\u0941\u091f\u093f", + "idle": "\u0928\u093f\u0937\u094d\u0915\u094d\u0930\u093f\u092f", + "off": "\u092c\u0902\u0926", + "on": "\u091a\u093e\u0932\u0942", + "paused": "\u0935\u093f\u0930\u093e\u092e", + "returning": "\u0917\u094b\u0926\u0940 \u092e\u0947\u0902 \u0932\u094c\u091f\u0915\u0930" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vera/translations/fr.json b/homeassistant/components/vera/translations/fr.json index 24c7829a14c..4d1b5a7eb6d 100644 --- a/homeassistant/components/vera/translations/fr.json +++ b/homeassistant/components/vera/translations/fr.json @@ -1,3 +1,8 @@ { - "title": "Vera" + "config": { + "abort": { + "already_configured": "Un contr\u00f4leur est d\u00e9j\u00e0 configur\u00e9.", + "cannot_connect": "Impossible de se connecter au contr\u00f4leur avec l'url {base_url}" + } + } } \ No newline at end of file diff --git a/homeassistant/components/vera/translations/hi.json b/homeassistant/components/vera/translations/hi.json new file mode 100644 index 00000000000..0a9092c288b --- /dev/null +++ b/homeassistant/components/vera/translations/hi.json @@ -0,0 +1,9 @@ +{ + "options": { + "step": { + "init": { + "description": "\u0935\u0948\u0915\u0932\u094d\u092a\u093f\u0915 \u092e\u093e\u092a\u0926\u0902\u0921\u094b\u0902 \u0915\u0947 \u0935\u093f\u0935\u0930\u0923 \u0915\u0947 \u0932\u093f\u090f \u0935\u0947\u0930\u093e \u092a\u094d\u0930\u0932\u0947\u0916\u0928 \u0926\u0947\u0916\u0947\u0902: https://www.home-assistant.io/integrations/vera/\u0964 \u0928\u094b\u091f: \u092f\u0939\u093e\u0902 \u0915\u093f\u0938\u0940 \u092d\u0940 \u092c\u0926\u0932\u093e\u0935 \u0915\u0947 \u0932\u093f\u090f \u0939\u094b\u092e \u0905\u0938\u093f\u0938\u094d\u091f\u0947\u0902\u091f \u0938\u0930\u094d\u0935\u0930 \u0915\u094b \u0930\u093f\u0938\u094d\u091f\u093e\u0930\u094d\u091f \u0915\u0930\u0928\u093e \u0939\u094b\u0917\u093e\u0964 \u092e\u0942\u0932\u094d\u092f\u094b\u0902 \u0915\u094b \u0938\u094d\u092a\u0937\u094d\u091f \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f, \u090f\u0915 \u0938\u094d\u0925\u093e\u0928 \u092a\u094d\u0930\u0926\u093e\u0928 \u0915\u0930\u0947\u0902\u0964" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/weather/translations/hi.json b/homeassistant/components/weather/translations/hi.json new file mode 100644 index 00000000000..a4fb25b59cf --- /dev/null +++ b/homeassistant/components/weather/translations/hi.json @@ -0,0 +1,21 @@ +{ + "state": { + "_": { + "clear-night": "\u092c\u093f\u0928\u093e \u092c\u093e\u0926\u0932 \u0935\u093e\u0932\u0940 \u0930\u093e\u0924", + "cloudy": "\u092c\u093e\u0926\u0932", + "exceptional": "\u0905\u0938\u093e\u0927\u093e\u0930\u0923", + "fog": "\u0915\u094b\u0939\u0930\u093e", + "hail": "\u0913\u0932\u0947", + "lightning": "\u092c\u093f\u091c\u0932\u0940", + "lightning-rainy": "\u092c\u093f\u091c\u0932\u0940, \u092c\u0930\u0938\u093e\u0924", + "partlycloudy": "\u0906\u0902\u0936\u093f\u0915 \u0930\u0942\u092a \u0938\u0947 \u092c\u093e\u0926\u0932 \u091b\u093e\u090f\u0902\u0917\u0947", + "pouring": "\u092c\u0930\u0938\u093e\u0924\u0940", + "rainy": "\u092c\u0930\u0938\u093e\u0924\u0940", + "snowy": "\u092c\u0930\u094d\u092b\u0940\u0932\u093e", + "snowy-rainy": "\u092c\u0930\u094d\u092b\u0940\u0932\u0940, \u092c\u0930\u0938\u093e\u0924", + "sunny": "\u0927\u0942\u092a", + "windy": "\u0924\u0942\u092b\u093e\u0928\u0940", + "windy-variant": "\u0924\u0942\u092b\u093e\u0928\u0940" + } + } +} \ No newline at end of file diff --git a/homeassistant/components/zwave/translations/hi.json b/homeassistant/components/zwave/translations/hi.json index b39e5c1669d..99e98c4aa9f 100644 --- a/homeassistant/components/zwave/translations/hi.json +++ b/homeassistant/components/zwave/translations/hi.json @@ -1,6 +1,8 @@ { "state": { "_": { + "dead": "\u092e\u0943\u0924", + "initializing": "\u0906\u0930\u0902\u092d", "ready": "\u0924\u0948\u092f\u093e\u0930", "sleeping": "\u0938\u094b\u092f\u093e \u0939\u0941\u0906" }, From 3f232f3dbd117bd8ac26aa52692da66692559004 Mon Sep 17 00:00:00 2001 From: MatsNl <37705266+MatsNl@users.noreply.github.com> Date: Tue, 28 Apr 2020 16:20:04 +0200 Subject: [PATCH 45/63] Fix atag timezone bug (#34686) Co-authored-by: Boris Nelissen --- homeassistant/components/atag/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/atag/manifest.json b/homeassistant/components/atag/manifest.json index 9534bad6df8..902da2bff75 100644 --- a/homeassistant/components/atag/manifest.json +++ b/homeassistant/components/atag/manifest.json @@ -3,6 +3,6 @@ "name": "Atag", "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/atag/", - "requirements": ["pyatag==0.2.18"], + "requirements": ["pyatag==0.2.19"], "codeowners": ["@MatsNL"] } diff --git a/requirements_all.txt b/requirements_all.txt index 123b5226e82..cc936d74e06 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1182,7 +1182,7 @@ pyalmond==0.0.2 pyarlo==0.2.3 # homeassistant.components.atag -pyatag==0.2.18 +pyatag==0.2.19 # homeassistant.components.netatmo pyatmo==3.3.0 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 4215169f16d..dab571c7a87 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -479,7 +479,7 @@ pyalmond==0.0.2 pyarlo==0.2.3 # homeassistant.components.atag -pyatag==0.2.18 +pyatag==0.2.19 # homeassistant.components.netatmo pyatmo==3.3.0 From e03df374170616aac7622c59dcb4d4b0957fc665 Mon Sep 17 00:00:00 2001 From: escoand Date: Mon, 27 Apr 2020 20:18:32 +0200 Subject: [PATCH 46/63] Add unique_id to fritzbox (#34716) --- .../components/fritzbox/config_flow.py | 20 +++++++++--- tests/components/fritzbox/test_config_flow.py | 32 +++++++++++++++++-- 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/homeassistant/components/fritzbox/config_flow.py b/homeassistant/components/fritzbox/config_flow.py index 816855b46a8..b4265aa01fe 100644 --- a/homeassistant/components/fritzbox/config_flow.py +++ b/homeassistant/components/fritzbox/config_flow.py @@ -5,7 +5,11 @@ from pyfritzhome import Fritzhome, LoginError import voluptuous as vol from homeassistant import config_entries -from homeassistant.components.ssdp import ATTR_SSDP_LOCATION, ATTR_UPNP_FRIENDLY_NAME +from homeassistant.components.ssdp import ( + ATTR_SSDP_LOCATION, + ATTR_UPNP_FRIENDLY_NAME, + ATTR_UPNP_UDN, +) from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME # pylint:disable=unused-import @@ -82,10 +86,6 @@ class FritzboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): for entry in self.hass.config_entries.async_entries(DOMAIN): if entry.data[CONF_HOST] == user_input[CONF_HOST]: - if entry.data != user_input: - self.hass.config_entries.async_update_entry( - entry, data=user_input - ) return self.async_abort(reason="already_configured") self._host = user_input[CONF_HOST] @@ -110,12 +110,22 @@ class FritzboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): host = urlparse(user_input[ATTR_SSDP_LOCATION]).hostname self.context[CONF_HOST] = host + uuid = user_input.get(ATTR_UPNP_UDN) + if uuid: + if uuid.startswith("uuid:"): + uuid = uuid[5:] + await self.async_set_unique_id(uuid) + self._abort_if_unique_id_configured({CONF_HOST: host}) + for progress in self._async_in_progress(): if progress.get("context", {}).get(CONF_HOST) == host: return self.async_abort(reason="already_in_progress") + # update old and user-configured config entries for entry in self.hass.config_entries.async_entries(DOMAIN): if entry.data[CONF_HOST] == host: + if uuid and not entry.unique_id: + self.hass.config_entries.async_update_entry(entry, unique_id=uuid) return self.async_abort(reason="already_configured") self._host = host diff --git a/tests/components/fritzbox/test_config_flow.py b/tests/components/fritzbox/test_config_flow.py index d6b43dc4b71..c73578de646 100644 --- a/tests/components/fritzbox/test_config_flow.py +++ b/tests/components/fritzbox/test_config_flow.py @@ -6,7 +6,11 @@ from pyfritzhome import LoginError import pytest from homeassistant.components.fritzbox.const import DOMAIN -from homeassistant.components.ssdp import ATTR_SSDP_LOCATION, ATTR_UPNP_FRIENDLY_NAME +from homeassistant.components.ssdp import ( + ATTR_SSDP_LOCATION, + ATTR_UPNP_FRIENDLY_NAME, + ATTR_UPNP_UDN, +) from homeassistant.const import CONF_DEVICES, CONF_HOST, CONF_PASSWORD, CONF_USERNAME from homeassistant.helpers.typing import HomeAssistantType @@ -16,6 +20,7 @@ MOCK_USER_DATA = MOCK_CONFIG[DOMAIN][CONF_DEVICES][0] MOCK_SSDP_DATA = { ATTR_SSDP_LOCATION: "https://fake_host:12345/test", ATTR_UPNP_FRIENDLY_NAME: "fake_name", + ATTR_UPNP_UDN: "uuid:only-a-test", } @@ -42,6 +47,7 @@ async def test_user(hass: HomeAssistantType, fritz: Mock): assert result["data"][CONF_HOST] == "fake_host" assert result["data"][CONF_PASSWORD] == "fake_pass" assert result["data"][CONF_USERNAME] == "fake_user" + assert not result["result"].unique_id async def test_user_auth_failed(hass: HomeAssistantType, fritz: Mock): @@ -73,6 +79,7 @@ async def test_user_already_configured(hass: HomeAssistantType, fritz: Mock): DOMAIN, context={"source": "user"}, data=MOCK_USER_DATA ) assert result["type"] == "create_entry" + assert not result["result"].unique_id result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": "user"}, data=MOCK_USER_DATA @@ -91,6 +98,7 @@ async def test_import(hass: HomeAssistantType, fritz: Mock): assert result["data"][CONF_HOST] == "fake_host" assert result["data"][CONF_PASSWORD] == "fake_pass" assert result["data"][CONF_USERNAME] == "fake_user" + assert not result["result"].unique_id async def test_ssdp(hass: HomeAssistantType, fritz: Mock): @@ -110,6 +118,7 @@ async def test_ssdp(hass: HomeAssistantType, fritz: Mock): assert result["data"][CONF_HOST] == "fake_host" assert result["data"][CONF_PASSWORD] == "fake_pass" assert result["data"][CONF_USERNAME] == "fake_user" + assert result["result"].unique_id == "only-a-test" async def test_ssdp_auth_failed(hass: HomeAssistantType, fritz: Mock): @@ -150,7 +159,7 @@ async def test_ssdp_not_successful(hass: HomeAssistantType, fritz: Mock): assert result["reason"] == "not_found" -async def test_ssdp_already_in_progress(hass: HomeAssistantType, fritz: Mock): +async def test_ssdp_already_in_progress_unique_id(hass: HomeAssistantType, fritz: Mock): """Test starting a flow from discovery twice.""" result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": "ssdp"}, data=MOCK_SSDP_DATA @@ -165,15 +174,34 @@ async def test_ssdp_already_in_progress(hass: HomeAssistantType, fritz: Mock): assert result["reason"] == "already_in_progress" +async def test_ssdp_already_in_progress_host(hass: HomeAssistantType, fritz: Mock): + """Test starting a flow from discovery twice.""" + result = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": "ssdp"}, data=MOCK_SSDP_DATA + ) + assert result["type"] == "form" + assert result["step_id"] == "confirm" + + MOCK_NO_UNIQUE_ID = MOCK_SSDP_DATA.copy() + del MOCK_NO_UNIQUE_ID[ATTR_UPNP_UDN] + result = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": "ssdp"}, data=MOCK_NO_UNIQUE_ID + ) + assert result["type"] == "abort" + assert result["reason"] == "already_in_progress" + + async def test_ssdp_already_configured(hass: HomeAssistantType, fritz: Mock): """Test starting a flow from discovery when already configured.""" result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": "user"}, data=MOCK_USER_DATA ) assert result["type"] == "create_entry" + assert not result["result"].unique_id result2 = await hass.config_entries.flow.async_init( DOMAIN, context={"source": "ssdp"}, data=MOCK_SSDP_DATA ) assert result2["type"] == "abort" assert result2["reason"] == "already_configured" + assert result["result"].unique_id == "only-a-test" From fd690db01ffbbc5ed96ccdbd6cfcf9f5bc2c2878 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 27 Apr 2020 11:02:25 -0700 Subject: [PATCH 47/63] Disable upnp SSDP discovery (#34756) --- homeassistant/components/upnp/manifest.json | 10 +--------- homeassistant/generated/ssdp.py | 8 -------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/homeassistant/components/upnp/manifest.json b/homeassistant/components/upnp/manifest.json index e3b30cec9a4..2f6e5de5884 100644 --- a/homeassistant/components/upnp/manifest.json +++ b/homeassistant/components/upnp/manifest.json @@ -5,13 +5,5 @@ "documentation": "https://www.home-assistant.io/integrations/upnp", "requirements": ["async-upnp-client==0.14.13"], "dependencies": [], - "codeowners": ["@StevenLooman"], - "ssdp": [ - { - "st": "urn:schemas-upnp-org:device:InternetGatewayDevice:1" - }, - { - "st": "urn:schemas-upnp-org:device:InternetGatewayDevice:2" - } - ] + "codeowners": ["@StevenLooman"] } diff --git a/homeassistant/generated/ssdp.py b/homeassistant/generated/ssdp.py index f46ba1611a8..5dbef37d9bf 100644 --- a/homeassistant/generated/ssdp.py +++ b/homeassistant/generated/ssdp.py @@ -81,14 +81,6 @@ SSDP = { "manufacturer": "Synology" } ], - "upnp": [ - { - "st": "urn:schemas-upnp-org:device:InternetGatewayDevice:1" - }, - { - "st": "urn:schemas-upnp-org:device:InternetGatewayDevice:2" - } - ], "wemo": [ { "manufacturer": "Belkin International Inc." From e416e0a9e9c46c5b24d1bb83b153f24a0b412660 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Wed, 29 Apr 2020 00:21:10 -0500 Subject: [PATCH 48/63] Remove legacy discovery for directv (#34793) * remove legacy discovery for directv * Update __init__.py * Update __init__.py --- homeassistant/components/discovery/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/homeassistant/components/discovery/__init__.py b/homeassistant/components/discovery/__init__.py index 64816acaaf3..b8d791f0325 100644 --- a/homeassistant/components/discovery/__init__.py +++ b/homeassistant/components/discovery/__init__.py @@ -71,7 +71,6 @@ SERVICE_HANDLERS = { "panasonic_viera": ("media_player", "panasonic_viera"), "yamaha": ("media_player", "yamaha"), "logitech_mediaserver": ("media_player", "squeezebox"), - "directv": ("media_player", "directv"), "denonavr": ("media_player", "denonavr"), "frontier_silicon": ("media_player", "frontier_silicon"), "openhome": ("media_player", "openhome"), From f47055a1b0fef9758f24ac793d6c57a6b73a3207 Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Wed, 29 Apr 2020 00:20:54 -0500 Subject: [PATCH 49/63] Remove legacy discovery for roku (#34794) --- homeassistant/components/discovery/__init__.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/homeassistant/components/discovery/__init__.py b/homeassistant/components/discovery/__init__.py index b8d791f0325..b9b3f51f60d 100644 --- a/homeassistant/components/discovery/__init__.py +++ b/homeassistant/components/discovery/__init__.py @@ -37,7 +37,6 @@ SERVICE_KONNECTED = "konnected" SERVICE_MOBILE_APP = "hass_mobile_app" SERVICE_NETGEAR = "netgear_router" SERVICE_OCTOPRINT = "octoprint" -SERVICE_ROKU = "roku" SERVICE_SABNZBD = "sabnzbd" SERVICE_SAMSUNG_PRINTER = "samsung_printer" SERVICE_TELLDUSLIVE = "tellstick" @@ -59,7 +58,6 @@ SERVICE_HANDLERS = { SERVICE_HASSIO: ("hassio", None), SERVICE_APPLE_TV: ("apple_tv", None), SERVICE_ENIGMA2: ("media_player", "enigma2"), - SERVICE_ROKU: ("roku", None), SERVICE_WINK: ("wink", None), SERVICE_XIAOMI_GW: ("xiaomi_aqara", None), SERVICE_SABNZBD: ("sabnzbd", None), From 996af94bb8143f54eacdd45ea339e2b509af67a8 Mon Sep 17 00:00:00 2001 From: escoand Date: Wed, 29 Apr 2020 07:17:35 +0200 Subject: [PATCH 50/63] Handle more fritzbox edge cases (#34802) --- .../components/fritzbox/config_flow.py | 11 +++-- .../components/fritzbox/strings.json | 3 +- tests/components/fritzbox/test_config_flow.py | 41 +++++++++++++++++++ 3 files changed, 51 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/fritzbox/config_flow.py b/homeassistant/components/fritzbox/config_flow.py index b4265aa01fe..25a81333bd6 100644 --- a/homeassistant/components/fritzbox/config_flow.py +++ b/homeassistant/components/fritzbox/config_flow.py @@ -2,6 +2,7 @@ from urllib.parse import urlparse from pyfritzhome import Fritzhome, LoginError +from requests.exceptions import HTTPError import voluptuous as vol from homeassistant import config_entries @@ -32,6 +33,7 @@ DATA_SCHEMA_CONFIRM = vol.Schema( RESULT_AUTH_FAILED = "auth_failed" RESULT_NOT_FOUND = "not_found" +RESULT_NOT_SUPPORTED = "not_supported" RESULT_SUCCESS = "success" @@ -67,12 +69,15 @@ class FritzboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): ) try: fritzbox.login() + fritzbox.get_device_elements() fritzbox.logout() return RESULT_SUCCESS - except OSError: - return RESULT_NOT_FOUND except LoginError: return RESULT_AUTH_FAILED + except HTTPError: + return RESULT_NOT_SUPPORTED + except OSError: + return RESULT_NOT_FOUND async def async_step_import(self, user_input=None): """Handle configuration by yaml file.""" @@ -129,7 +134,7 @@ class FritzboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): return self.async_abort(reason="already_configured") self._host = host - self._name = user_input[ATTR_UPNP_FRIENDLY_NAME] + self._name = user_input.get(ATTR_UPNP_FRIENDLY_NAME) or host self.context["title_placeholders"] = {"name": self._name} return await self.async_step_confirm() diff --git a/homeassistant/components/fritzbox/strings.json b/homeassistant/components/fritzbox/strings.json index 4cb5b7bcdcc..227aeedf84d 100644 --- a/homeassistant/components/fritzbox/strings.json +++ b/homeassistant/components/fritzbox/strings.json @@ -21,7 +21,8 @@ "abort": { "already_in_progress": "AVM FRITZ!Box configuration is already in progress.", "already_configured": "This AVM FRITZ!Box is already configured.", - "not_found": "No supported AVM FRITZ!Box found on the network." + "not_found": "No supported AVM FRITZ!Box found on the network.", + "not_supported": "Connected to AVM FRITZ!Box but it's unable to control Smart Home devices." }, "error": { "auth_failed": "Username and/or password are incorrect." diff --git a/tests/components/fritzbox/test_config_flow.py b/tests/components/fritzbox/test_config_flow.py index c73578de646..8bfd992347f 100644 --- a/tests/components/fritzbox/test_config_flow.py +++ b/tests/components/fritzbox/test_config_flow.py @@ -4,6 +4,7 @@ from unittest.mock import Mock, patch from pyfritzhome import LoginError import pytest +from requests.exceptions import HTTPError from homeassistant.components.fritzbox.const import DOMAIN from homeassistant.components.ssdp import ( @@ -121,6 +122,28 @@ async def test_ssdp(hass: HomeAssistantType, fritz: Mock): assert result["result"].unique_id == "only-a-test" +async def test_ssdp_no_friendly_name(hass: HomeAssistantType, fritz: Mock): + """Test starting a flow from discovery without friendly name.""" + MOCK_NO_NAME = MOCK_SSDP_DATA.copy() + del MOCK_NO_NAME[ATTR_UPNP_FRIENDLY_NAME] + result = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": "ssdp"}, data=MOCK_NO_NAME + ) + assert result["type"] == "form" + assert result["step_id"] == "confirm" + + result = await hass.config_entries.flow.async_configure( + result["flow_id"], + user_input={CONF_PASSWORD: "fake_pass", CONF_USERNAME: "fake_user"}, + ) + assert result["type"] == "create_entry" + assert result["title"] == "fake_host" + assert result["data"][CONF_HOST] == "fake_host" + assert result["data"][CONF_PASSWORD] == "fake_pass" + assert result["data"][CONF_USERNAME] == "fake_user" + assert result["result"].unique_id == "only-a-test" + + async def test_ssdp_auth_failed(hass: HomeAssistantType, fritz: Mock): """Test starting a flow from discovery with authentication failure.""" fritz().login.side_effect = LoginError("Boom") @@ -159,6 +182,24 @@ async def test_ssdp_not_successful(hass: HomeAssistantType, fritz: Mock): assert result["reason"] == "not_found" +async def test_ssdp_not_supported(hass: HomeAssistantType, fritz: Mock): + """Test starting a flow from discovery with unsupported device.""" + fritz().get_device_elements.side_effect = HTTPError("Boom") + + result = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": "ssdp"}, data=MOCK_SSDP_DATA + ) + assert result["type"] == "form" + assert result["step_id"] == "confirm" + + result = await hass.config_entries.flow.async_configure( + result["flow_id"], + user_input={CONF_PASSWORD: "whatever", CONF_USERNAME: "whatever"}, + ) + assert result["type"] == "abort" + assert result["reason"] == "not_supported" + + async def test_ssdp_already_in_progress_unique_id(hass: HomeAssistantType, fritz: Mock): """Test starting a flow from discovery twice.""" result = await hass.config_entries.flow.async_init( From bf424caf4a3c071f66fac450a2c0c1ad570c5f0b Mon Sep 17 00:00:00 2001 From: Robert Svensson Date: Wed, 29 Apr 2020 07:19:55 +0200 Subject: [PATCH 51/63] UniFi - Add a second roaming event (#34819) --- homeassistant/components/unifi/unifi_client.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/homeassistant/components/unifi/unifi_client.py b/homeassistant/components/unifi/unifi_client.py index 8f91d4e1de3..d8c14105990 100644 --- a/homeassistant/components/unifi/unifi_client.py +++ b/homeassistant/components/unifi/unifi_client.py @@ -24,10 +24,12 @@ LOGGER = logging.getLogger(__name__) CLIENT_BLOCKED = (WIRED_CLIENT_BLOCKED, WIRELESS_CLIENT_BLOCKED) CLIENT_UNBLOCKED = (WIRED_CLIENT_UNBLOCKED, WIRELESS_CLIENT_UNBLOCKED) WIRED_CLIENT = (WIRED_CLIENT_CONNECTED, WIRED_CLIENT_DISCONNECTED) +WIRELESS_CLIENT_ROAMRADIO = "EVT_WU_RoamRadio" WIRELESS_CLIENT = ( WIRELESS_CLIENT_CONNECTED, WIRELESS_CLIENT_DISCONNECTED, WIRELESS_CLIENT_ROAM, + WIRELESS_CLIENT_ROAMRADIO, ) @@ -71,6 +73,7 @@ class UniFiClient(UniFiBase): self.wireless_connection = self.client.event.event in ( WIRELESS_CLIENT_CONNECTED, WIRELESS_CLIENT_ROAM, + WIRELESS_CLIENT_ROAMRADIO, ) elif self.client.event.event in WIRED_CLIENT: From e8314e1d864f1100fb0fd870d067023d891cda8a Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 29 Apr 2020 07:21:34 +0200 Subject: [PATCH 52/63] Fix sync call in async context generic_thermostat (#34822) --- homeassistant/components/generic_thermostat/climate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/generic_thermostat/climate.py b/homeassistant/components/generic_thermostat/climate.py index 9a8d6177214..f153a47e2a4 100644 --- a/homeassistant/components/generic_thermostat/climate.py +++ b/homeassistant/components/generic_thermostat/climate.py @@ -325,7 +325,7 @@ class GenericThermostat(ClimateDevice, RestoreEntity): _LOGGER.error("Unrecognized hvac mode: %s", hvac_mode) return # Ensure we update the current operation after changing the mode - self.schedule_update_ha_state() + self.async_write_ha_state() async def async_set_temperature(self, **kwargs): """Set new target temperature.""" From bdbeb1d68f2b9f669822fea6b2f8c53514d09c02 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 29 Apr 2020 02:18:15 +0200 Subject: [PATCH 53/63] Fix async call in sync context in steam_online (#34823) --- homeassistant/components/steam_online/sensor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/steam_online/sensor.py b/homeassistant/components/steam_online/sensor.py index d25ebb7221b..97109decae2 100644 --- a/homeassistant/components/steam_online/sensor.py +++ b/homeassistant/components/steam_online/sensor.py @@ -11,7 +11,7 @@ from homeassistant.const import CONF_API_KEY from homeassistant.core import callback import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity -from homeassistant.helpers.event import async_track_time_interval +from homeassistant.helpers.event import track_time_interval from homeassistant.util.dt import utc_from_timestamp _LOGGER = logging.getLogger(__name__) @@ -65,7 +65,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): entities[entity_next].async_schedule_update_ha_state(True) entity_next = (entity_next + 1) % len(entities) - async_track_time_interval(hass, do_update, BASE_INTERVAL) + track_time_interval(hass, do_update, BASE_INTERVAL) class SteamSensor(Entity): From d634ed0bbb80a81a254b688ab3d301889230da3a Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 29 Apr 2020 01:59:25 +0200 Subject: [PATCH 54/63] Fix meteoalarm exception handling with instance of KeyError (#34828) --- homeassistant/components/meteoalarm/binary_sensor.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/meteoalarm/binary_sensor.py b/homeassistant/components/meteoalarm/binary_sensor.py index 7d3bea4c995..f7e95c50c86 100644 --- a/homeassistant/components/meteoalarm/binary_sensor.py +++ b/homeassistant/components/meteoalarm/binary_sensor.py @@ -42,7 +42,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None): try: api = Meteoalert(country, province, language) - except KeyError(): + except KeyError: _LOGGER.error("Wrong country digits or province name") return From 1a2e6eae8e48ad515341d0fe465b90af7999ee46 Mon Sep 17 00:00:00 2001 From: Quentame Date: Wed, 29 Apr 2020 00:23:39 +0200 Subject: [PATCH 55/63] Bump python-synology to 0.7.2 (#34830) --- homeassistant/components/synology_dsm/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/synology_dsm/manifest.json b/homeassistant/components/synology_dsm/manifest.json index f3fd52a74a5..5834217b6ea 100644 --- a/homeassistant/components/synology_dsm/manifest.json +++ b/homeassistant/components/synology_dsm/manifest.json @@ -2,7 +2,7 @@ "domain": "synology_dsm", "name": "Synology DSM", "documentation": "https://www.home-assistant.io/integrations/synology_dsm", - "requirements": ["python-synology==0.7.1"], + "requirements": ["python-synology==0.7.2"], "codeowners": ["@ProtoThis", "@Quentame"], "config_flow": true, "ssdp": [ diff --git a/requirements_all.txt b/requirements_all.txt index cc936d74e06..d92897ce29d 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1680,7 +1680,7 @@ python-sochain-api==0.0.2 python-songpal==0.11.2 # homeassistant.components.synology_dsm -python-synology==0.7.1 +python-synology==0.7.2 # homeassistant.components.tado python-tado==0.8.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index dab571c7a87..1d71140dd48 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -650,7 +650,7 @@ python-miio==0.5.0.1 python-nest==4.1.0 # homeassistant.components.synology_dsm -python-synology==0.7.1 +python-synology==0.7.2 # homeassistant.components.tado python-tado==0.8.1 From 72d805d458130e7b2b77ef4862e8bbaae3b9e41a Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Wed, 29 Apr 2020 07:20:06 +0200 Subject: [PATCH 56/63] Updated frontend to 20200427.1 (#34831) --- homeassistant/components/frontend/manifest.json | 2 +- homeassistant/package_constraints.txt | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/frontend/manifest.json b/homeassistant/components/frontend/manifest.json index f75f164aca5..9759c38af7d 100644 --- a/homeassistant/components/frontend/manifest.json +++ b/homeassistant/components/frontend/manifest.json @@ -2,7 +2,7 @@ "domain": "frontend", "name": "Home Assistant Frontend", "documentation": "https://www.home-assistant.io/integrations/frontend", - "requirements": ["home-assistant-frontend==20200427.0"], + "requirements": ["home-assistant-frontend==20200427.1"], "dependencies": [ "api", "auth", diff --git a/homeassistant/package_constraints.txt b/homeassistant/package_constraints.txt index 2d3ae822273..938427eadd4 100644 --- a/homeassistant/package_constraints.txt +++ b/homeassistant/package_constraints.txt @@ -12,7 +12,7 @@ cryptography==2.9 defusedxml==0.6.0 distro==1.5.0 hass-nabucasa==0.34.1 -home-assistant-frontend==20200427.0 +home-assistant-frontend==20200427.1 importlib-metadata==1.6.0 jinja2>=2.11.1 netdisco==2.6.0 diff --git a/requirements_all.txt b/requirements_all.txt index d92897ce29d..3b83396e81d 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -713,7 +713,7 @@ hole==0.5.1 holidays==0.10.2 # homeassistant.components.frontend -home-assistant-frontend==20200427.0 +home-assistant-frontend==20200427.1 # homeassistant.components.zwave homeassistant-pyozw==0.1.10 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 1d71140dd48..60bfa682121 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -291,7 +291,7 @@ hole==0.5.1 holidays==0.10.2 # homeassistant.components.frontend -home-assistant-frontend==20200427.0 +home-assistant-frontend==20200427.1 # homeassistant.components.zwave homeassistant-pyozw==0.1.10 From 66d938fcea735196eb4d7e2bc1cdd8110d422512 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Tue, 28 Apr 2020 22:24:09 -0700 Subject: [PATCH 57/63] Bumped version to 0.109.0b5 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index d585411c98d..a38664dd332 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -1,7 +1,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 109 -PATCH_VERSION = "0b4" +PATCH_VERSION = "0b5" __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER = (3, 7, 0) From a3d048e9c06e6df49cdc920bc87aba9b53ebfd79 Mon Sep 17 00:00:00 2001 From: HomeAssistant Azure Date: Tue, 28 Apr 2020 00:04:52 +0000 Subject: [PATCH 58/63] [ci skip] Translation update --- .../components/adguard/translations/pl.json | 2 +- .../components/airvisual/translations/lb.json | 4 +-- .../components/airvisual/translations/no.json | 4 +-- .../components/airvisual/translations/pl.json | 24 ++++++++++++-- .../components/atag/translations/pl.json | 20 ++++++++++++ .../components/axis/translations/pl.json | 2 +- .../components/climate/translations/no.json | 7 +++- .../configurator/translations/no.json | 6 ++++ .../coolmaster/translations/pl.json | 2 +- .../components/cover/translations/no.json | 1 + .../components/daikin/translations/pl.json | 2 +- .../components/deconz/translations/pl.json | 17 +++++++++- .../components/demo/translations/lb.json | 2 +- .../components/doorbird/translations/pl.json | 5 ++- .../components/elkm1/translations/pl.json | 27 ++++++++++++++++ .../emulated_roku/translations/lb.json | 2 +- .../emulated_roku/translations/pl.json | 2 +- .../components/esphome/translations/lb.json | 2 +- .../components/esphome/translations/pl.json | 2 +- .../components/flume/translations/lb.json | 1 + .../components/flume/translations/pl.json | 24 ++++++++++++++ .../flunearyou/translations/pl.json | 18 +++++++++++ .../components/freebox/translations/pl.json | 2 +- .../components/fritzbox/translations/pl.json | 32 +++++++++++++++++++ .../components/glances/translations/pl.json | 2 +- .../components/group/translations/lb.json | 2 +- .../components/heos/translations/pl.json | 4 +-- .../homekit_controller/translations/lb.json | 2 +- .../components/hue/translations/pl.json | 23 ++++++++++++- .../components/icloud/translations/pl.json | 2 +- .../components/ipp/translations/pl.json | 27 ++++++++++++++++ .../islamic_prayer_times/translations/pl.json | 23 +++++++++++++ .../components/konnected/translations/pl.json | 1 + .../components/local_ip/translations/pl.json | 3 ++ .../components/lock/translations/lb.json | 2 +- .../components/mailgun/translations/lb.json | 2 +- .../components/mikrotik/translations/pl.json | 2 +- .../minecraft_server/translations/pl.json | 2 +- .../components/monoprice/translations/pl.json | 15 +++++++++ .../components/nut/translations/pl.json | 2 +- .../components/nws/translations/pl.json | 23 +++++++++++++ .../components/owntracks/translations/pl.json | 2 +- .../panasonic_viera/translations/pl.json | 31 ++++++++++++++++++ .../components/powerwall/translations/ca.json | 3 +- .../components/powerwall/translations/es.json | 3 +- .../components/powerwall/translations/lb.json | 3 +- .../components/powerwall/translations/no.json | 3 +- .../components/powerwall/translations/pl.json | 3 +- .../components/powerwall/translations/ru.json | 3 +- .../powerwall/translations/zh-Hant.json | 3 +- .../components/roomba/translations/lb.json | 1 + .../components/roomba/translations/pl.json | 32 +++++++++++++++++++ .../smartthings/translations/lb.json | 8 +++-- .../smartthings/translations/pl.json | 19 +++++++++++ .../components/soma/translations/pl.json | 2 +- .../components/sun/translations/no.json | 6 ++++ .../synology_dsm/translations/es.json | 1 + .../synology_dsm/translations/it.json | 4 +-- .../synology_dsm/translations/lb.json | 1 + .../synology_dsm/translations/no.json | 3 +- .../synology_dsm/translations/pl.json | 14 ++++++-- .../components/tado/translations/lb.json | 1 + .../components/tado/translations/pl.json | 29 +++++++++++++++++ .../tellduslive/translations/pl.json | 2 +- .../totalconnect/translations/pl.json | 19 +++++++++++ .../components/tradfri/translations/pl.json | 2 +- .../transmission/translations/pl.json | 2 +- .../components/unifi/translations/pl.json | 5 +-- .../components/upnp/translations/lb.json | 2 +- .../components/vera/translations/pl.json | 31 ++++++++++++++++++ .../components/vizio/translations/lb.json | 12 +++---- .../components/vizio/translations/pl.json | 8 ++++- .../components/wled/translations/lb.json | 16 +++++----- .../components/zwave/translations/lb.json | 6 ++-- 74 files changed, 555 insertions(+), 72 deletions(-) create mode 100644 homeassistant/components/atag/translations/pl.json create mode 100644 homeassistant/components/elkm1/translations/pl.json create mode 100644 homeassistant/components/flume/translations/pl.json create mode 100644 homeassistant/components/flunearyou/translations/pl.json create mode 100644 homeassistant/components/fritzbox/translations/pl.json create mode 100644 homeassistant/components/islamic_prayer_times/translations/pl.json create mode 100644 homeassistant/components/nws/translations/pl.json create mode 100644 homeassistant/components/panasonic_viera/translations/pl.json create mode 100644 homeassistant/components/roomba/translations/pl.json create mode 100644 homeassistant/components/tado/translations/pl.json create mode 100644 homeassistant/components/totalconnect/translations/pl.json create mode 100644 homeassistant/components/vera/translations/pl.json diff --git a/homeassistant/components/adguard/translations/pl.json b/homeassistant/components/adguard/translations/pl.json index 7b2886b660e..71264e906e4 100644 --- a/homeassistant/components/adguard/translations/pl.json +++ b/homeassistant/components/adguard/translations/pl.json @@ -16,7 +16,7 @@ }, "user": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "password": "Has\u0142o", "port": "Port", "ssl": "AdGuard Home u\u017cywa certyfikatu SSL", diff --git a/homeassistant/components/airvisual/translations/lb.json b/homeassistant/components/airvisual/translations/lb.json index d5f78eccf0b..52e55242a05 100644 --- a/homeassistant/components/airvisual/translations/lb.json +++ b/homeassistant/components/airvisual/translations/lb.json @@ -1,11 +1,11 @@ { "config": { "abort": { - "already_configured": "D\u00ebs Koordinate si schon registr\u00e9iert." + "already_configured": "D\u00ebs Koordinate oder ode/Pro ID si schon registr\u00e9iert." }, "error": { "general_error": "Onbekannten Feeler", - "invalid_api_key": "Ong\u00ebltegen API Schl\u00ebssel", + "invalid_api_key": "Ong\u00ebltegen API Schl\u00ebssel uginn", "unable_to_connect": "Kann sech net mat der Node/Pri verbannen." }, "step": { diff --git a/homeassistant/components/airvisual/translations/no.json b/homeassistant/components/airvisual/translations/no.json index 77ab1425c87..a528c98e04c 100644 --- a/homeassistant/components/airvisual/translations/no.json +++ b/homeassistant/components/airvisual/translations/no.json @@ -1,7 +1,7 @@ { "config": { "abort": { - "already_configured": "Disse koordinatene er allerede registrert." + "already_configured": "Disse koordinatene eller Node / Pro ID er allerede registrert." }, "error": { "general_error": "Det oppstod en ukjent feil.", @@ -35,7 +35,7 @@ "node_pro": "AirVisual Node Pro", "type": "Integrasjonstype" }, - "description": "Overv\u00e5k luftkvaliteten p\u00e5 et geografisk sted.", + "description": "Velg hvilken type AirVisual-data du vil overv\u00e5ke.", "title": "Konfigurer AirVisual" } } diff --git a/homeassistant/components/airvisual/translations/pl.json b/homeassistant/components/airvisual/translations/pl.json index cb73ed656f2..8687a2ead03 100644 --- a/homeassistant/components/airvisual/translations/pl.json +++ b/homeassistant/components/airvisual/translations/pl.json @@ -4,14 +4,34 @@ "already_configured": "Ten klucz API jest ju\u017c w u\u017cyciu." }, "error": { - "invalid_api_key": "Nieprawid\u0142owy klucz API" + "general_error": "Nieznany b\u0142\u0105d", + "invalid_api_key": "Nieprawid\u0142owy klucz API", + "unable_to_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z jednostk\u0105 Node/Pro." }, "step": { - "user": { + "geography": { "data": { "api_key": "Klucz API", "latitude": "Szeroko\u015b\u0107 geograficzna", + "longitude": "D\u0142ugo\u015b\u0107 geograficzna" + }, + "title": "Konfiguracja Geography" + }, + "node_pro": { + "data": { + "ip_address": "Nazwa hosta lub adres IP jednostki", + "password": "Has\u0142o jednostki" + }, + "description": "Has\u0142o", + "title": "Konfiguracja AirVisual Node/Pro" + }, + "user": { + "data": { + "api_key": "Klucz API", + "cloud_api": "Lokalizacja geograficzna", + "latitude": "Szeroko\u015b\u0107 geograficzna", "longitude": "D\u0142ugo\u015b\u0107 geograficzna", + "node_pro": "AirVisual Node Pro", "type": "Typ integracji" }, "description": "Monitoruj jako\u015b\u0107 powietrza w okre\u015blonej lokalizacji geograficznej.", diff --git a/homeassistant/components/atag/translations/pl.json b/homeassistant/components/atag/translations/pl.json new file mode 100644 index 00000000000..e931c1fc10f --- /dev/null +++ b/homeassistant/components/atag/translations/pl.json @@ -0,0 +1,20 @@ +{ + "config": { + "abort": { + "already_configured": "Do Home Assistant mo\u017cna doda\u0107 tylko jedno urz\u0105dzenie Atag" + }, + "error": { + "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie." + }, + "step": { + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "port": "Port (10000)" + }, + "title": "Po\u0142\u0105cz z urz\u0105dzeniem" + } + } + }, + "title": "Atag" +} \ No newline at end of file diff --git a/homeassistant/components/axis/translations/pl.json b/homeassistant/components/axis/translations/pl.json index cc53bafb57d..7473c62f668 100644 --- a/homeassistant/components/axis/translations/pl.json +++ b/homeassistant/components/axis/translations/pl.json @@ -16,7 +16,7 @@ "step": { "user": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "password": "Has\u0142o", "port": "Port", "username": "Nazwa u\u017cytkownika" diff --git a/homeassistant/components/climate/translations/no.json b/homeassistant/components/climate/translations/no.json index 900022c4709..4e9722bb207 100644 --- a/homeassistant/components/climate/translations/no.json +++ b/homeassistant/components/climate/translations/no.json @@ -16,7 +16,12 @@ }, "state": { "_": { - "heat": "Varme" + "auto": "Auto", + "cool": "Kj\u00f8le", + "dry": "T\u00f8rr", + "fan_only": "Kun vifte", + "heat": "Varme", + "heat_cool": "Varme/kj\u00f8lig" } }, "title": "Klima" diff --git a/homeassistant/components/configurator/translations/no.json b/homeassistant/components/configurator/translations/no.json index 099945f6201..1f923920583 100644 --- a/homeassistant/components/configurator/translations/no.json +++ b/homeassistant/components/configurator/translations/no.json @@ -1,3 +1,9 @@ { + "state": { + "_": { + "configure": "Konfigurer", + "configured": "Konfigurert" + } + }, "title": "Konfigurator" } \ No newline at end of file diff --git a/homeassistant/components/coolmaster/translations/pl.json b/homeassistant/components/coolmaster/translations/pl.json index 8407a8429b6..9b0e4bc5846 100644 --- a/homeassistant/components/coolmaster/translations/pl.json +++ b/homeassistant/components/coolmaster/translations/pl.json @@ -12,7 +12,7 @@ "fan_only": "Obs\u0142uga trybu \"tylko wentylator\"", "heat": "Obs\u0142uga trybu grzania", "heat_cool": "Obs\u0142uga automatycznego trybu grzanie/ch\u0142odzenie", - "host": "Host", + "host": "Nazwa hosta lub adres IP", "off": "Mo\u017ce by\u0107 wy\u0142\u0105czone" }, "title": "Skonfiguruj szczeg\u00f3\u0142y po\u0142\u0105czenia CoolMasterNet." diff --git a/homeassistant/components/cover/translations/no.json b/homeassistant/components/cover/translations/no.json index 840ede020f4..4d898ec75f8 100644 --- a/homeassistant/components/cover/translations/no.json +++ b/homeassistant/components/cover/translations/no.json @@ -28,6 +28,7 @@ "state": { "_": { "closing": "Lukker", + "opening": "\u00c5pner", "stopped": "Stoppet" } }, diff --git a/homeassistant/components/daikin/translations/pl.json b/homeassistant/components/daikin/translations/pl.json index e4444c3f0c1..2e2f65bc008 100644 --- a/homeassistant/components/daikin/translations/pl.json +++ b/homeassistant/components/daikin/translations/pl.json @@ -8,7 +8,7 @@ "step": { "user": { "data": { - "host": "Host" + "host": "Nazwa hosta lub adres IP" }, "description": "Wprowad\u017a adres IP Daikin AC.", "title": "Konfiguracja Daikin AC" diff --git a/homeassistant/components/deconz/translations/pl.json b/homeassistant/components/deconz/translations/pl.json index 0b9f336e9cd..a9bff098644 100644 --- a/homeassistant/components/deconz/translations/pl.json +++ b/homeassistant/components/deconz/translations/pl.json @@ -26,15 +26,29 @@ }, "manual_confirm": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "port": "Port" } + }, + "manual_input": { + "data": { + "host": "Nazwa hosta lub adres IP", + "port": "Port" + }, + "title": "Konfiguracja bramki deCONZ" + }, + "user": { + "data": { + "host": "Wybierz znalezion\u0105 bramk\u0119 deCONZ" + }, + "title": "Wybierz bramk\u0119 deCONZ" } } }, "device_automation": { "trigger_subtype": { "both_buttons": "oba przyciski", + "bottom_buttons": "Dolne przyciski", "button_1": "pierwszy przycisk", "button_2": "drugi przycisk", "button_3": "trzeci przycisk", @@ -51,6 +65,7 @@ "side_4": "strona 4", "side_5": "strona 5", "side_6": "strona 6", + "top_buttons": "G\u00f3rne przyciski", "turn_off": "nast\u0105pi wy\u0142\u0105czenie", "turn_on": "nast\u0105pi w\u0142\u0105czenie" }, diff --git a/homeassistant/components/demo/translations/lb.json b/homeassistant/components/demo/translations/lb.json index 3787d37750c..864a3603f3d 100644 --- a/homeassistant/components/demo/translations/lb.json +++ b/homeassistant/components/demo/translations/lb.json @@ -4,7 +4,7 @@ "init": { "data": { "one": "Een", - "other": "Aner" + "other": "M\u00e9i" } }, "options_1": { diff --git a/homeassistant/components/doorbird/translations/pl.json b/homeassistant/components/doorbird/translations/pl.json index f113b12783d..61511297468 100644 --- a/homeassistant/components/doorbird/translations/pl.json +++ b/homeassistant/components/doorbird/translations/pl.json @@ -1,13 +1,16 @@ { "config": { "abort": { - "already_configured": "BoorBird jest ju\u017c skonfigurowany." + "already_configured": "BoorBird jest ju\u017c skonfigurowany.", + "link_local_address": "Po\u0142\u0105czenie lokalnego adresu nie jest obs\u0142ugiwane", + "not_doorbird_device": "To urz\u0105dzenie nie jest urz\u0105dzeniem DoorBird" }, "error": { "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", "invalid_auth": "Niepoprawne uwierzytelnienie.", "unknown": "Niespodziewany b\u0142\u0105d." }, + "flow_title": "DoorBird {name} ({host})", "step": { "user": { "data": { diff --git a/homeassistant/components/elkm1/translations/pl.json b/homeassistant/components/elkm1/translations/pl.json new file mode 100644 index 00000000000..3a445b1008c --- /dev/null +++ b/homeassistant/components/elkm1/translations/pl.json @@ -0,0 +1,27 @@ +{ + "config": { + "abort": { + "address_already_configured": "ElkM1 z tym adresem jest ju\u017c skonfigurowany.", + "already_configured": "ElkM1 z tym prefiksem jest ju\u017c skonfigurowany." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "address": "Adres IP, domena lub port szeregowy w przypadku po\u0142\u0105czenia szeregowego.", + "password": "Has\u0142o (tylko bezpieczne).", + "prefix": "Unikatowy prefiks (pozostaw pusty, je\u015bli masz tylko jeden ElkM1).", + "protocol": "Protok\u00f3\u0142", + "temperature_unit": "Jednostka temperatury u\u017cywanej przez ElkM1.", + "username": "Nazwa u\u017cytkownika (tylko bezpieczne)" + }, + "description": "Adres musi by\u0107 w postaci 'adres[:port]' dla tryb\u00f3w 'zabezpieczony' i 'niezabezpieczony'. Przyk\u0142ad: '192.168.1.1'. Port jest opcjonalny i domy\u015blnie ustawiony na 2101 dla po\u0142\u0105cze\u0144 'niezabezpieczonych' i 2601 dla 'zabezpieczonych'. W przypadku protoko\u0142u szeregowego adres musi by\u0107 w formie 'tty[:baudrate]'. Przyk\u0142ad: '/dev/ttyS1'. Warto\u015b\u0107 transmisji jest opcjonalna i domy\u015blnie wynosi 115200.", + "title": "Pod\u0142\u0105czenie do sterownika Elk-M1" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/lb.json b/homeassistant/components/emulated_roku/translations/lb.json index e797c38781e..94ff88f9715 100644 --- a/homeassistant/components/emulated_roku/translations/lb.json +++ b/homeassistant/components/emulated_roku/translations/lb.json @@ -17,5 +17,5 @@ } } }, - "title": "EmulatedRoku" + "title": "Emul\u00e9ierte Roku" } \ No newline at end of file diff --git a/homeassistant/components/emulated_roku/translations/pl.json b/homeassistant/components/emulated_roku/translations/pl.json index fcc37de1d2c..6ce1c17e5d8 100644 --- a/homeassistant/components/emulated_roku/translations/pl.json +++ b/homeassistant/components/emulated_roku/translations/pl.json @@ -8,7 +8,7 @@ "data": { "advertise_ip": "IP rozg\u0142aszania", "advertise_port": "Port rozg\u0142aszania", - "host_ip": "IP hosta", + "host_ip": "Adres IP", "listen_port": "Port nas\u0142uchu", "name": "Nazwa", "upnp_bind_multicast": "Powi\u0105\u017c multicast (prawda/fa\u0142sz)" diff --git a/homeassistant/components/esphome/translations/lb.json b/homeassistant/components/esphome/translations/lb.json index 8d00a3d98e5..9bfc78af28c 100644 --- a/homeassistant/components/esphome/translations/lb.json +++ b/homeassistant/components/esphome/translations/lb.json @@ -27,7 +27,7 @@ "port": "Port" }, "description": "Gitt Verbindungs Informatioune vun \u00e4rem [ESPHome](https://esphomelib.com/) an.", - "title": "[%key:component::esphome::title%]" + "title": "ESPHome" } } } diff --git a/homeassistant/components/esphome/translations/pl.json b/homeassistant/components/esphome/translations/pl.json index a2e56e09802..c74b3d57e93 100644 --- a/homeassistant/components/esphome/translations/pl.json +++ b/homeassistant/components/esphome/translations/pl.json @@ -23,7 +23,7 @@ }, "user": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "port": "Port" }, "description": "Wprowad\u017a ustawienia po\u0142\u0105czenia [ESPHome](https://esphomelib.com/) w\u0119z\u0142a.", diff --git a/homeassistant/components/flume/translations/lb.json b/homeassistant/components/flume/translations/lb.json index aad8a496a11..67f18d61547 100644 --- a/homeassistant/components/flume/translations/lb.json +++ b/homeassistant/components/flume/translations/lb.json @@ -16,6 +16,7 @@ "password": "Passwuert", "username": "Benotzernumm" }, + "description": "Fir k\u00ebnnen op Flume Personal API z'acc\u00e9d\u00e9ieren muss du eng 'Client ID' an eng 'Client Secret' op https://portal.flumetech.com/settings#token ufroen.", "title": "Verbann dech mat dengem Flume Kont." } } diff --git a/homeassistant/components/flume/translations/pl.json b/homeassistant/components/flume/translations/pl.json new file mode 100644 index 00000000000..55dfceac11f --- /dev/null +++ b/homeassistant/components/flume/translations/pl.json @@ -0,0 +1,24 @@ +{ + "config": { + "abort": { + "already_configured": "To konto jest ju\u017c skonfigurowane." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "client_id": "Identyfikator klienta", + "client_secret": "Has\u0142o klienta", + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Aby uzyska\u0107 dost\u0119p do API Flume, musisz poprosi\u0107 o 'ID klienta\u201d i 'klucz tajny klienta' na stronie https://portal.flumetech.com/settings#token", + "title": "Po\u0142\u0105cz z kontem Flume" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/flunearyou/translations/pl.json b/homeassistant/components/flunearyou/translations/pl.json new file mode 100644 index 00000000000..e674d422903 --- /dev/null +++ b/homeassistant/components/flunearyou/translations/pl.json @@ -0,0 +1,18 @@ +{ + "config": { + "abort": { + "already_configured": "Wsp\u00f3\u0142rz\u0119dne s\u0105 ju\u017c zarejestrowane." + }, + "error": { + "general_error": "Nieznany b\u0142\u0105d" + }, + "step": { + "user": { + "data": { + "latitude": "Szeroko\u015b\u0107 geograficzna", + "longitude": "D\u0142ugo\u015b\u0107 geograficzna" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/freebox/translations/pl.json b/homeassistant/components/freebox/translations/pl.json index 084dd70ee52..9df523af0fb 100644 --- a/homeassistant/components/freebox/translations/pl.json +++ b/homeassistant/components/freebox/translations/pl.json @@ -15,7 +15,7 @@ }, "user": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "port": "Port" }, "title": "Freebox" diff --git a/homeassistant/components/fritzbox/translations/pl.json b/homeassistant/components/fritzbox/translations/pl.json new file mode 100644 index 00000000000..50ffd461d4c --- /dev/null +++ b/homeassistant/components/fritzbox/translations/pl.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "Ten AVM FRITZ!Box jest ju\u017c skonfigurowany.", + "already_in_progress": "Konfiguracja AVM FRITZ!Box jest ju\u017c w toku.", + "not_found": "W sieci nie znaleziono obs\u0142ugiwanego urz\u0105dzenia AVM FRITZ!Box." + }, + "error": { + "auth_failed": "Nazwa u\u017cytkownika i/lub has\u0142o s\u0105 nieprawid\u0142owe." + }, + "flow_title": "AVM FRITZ!Box: {name}", + "step": { + "confirm": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Czy chcesz skonfigurowa\u0107 {name}?", + "title": "AVM FRITZ! Box" + }, + "user": { + "data": { + "host": "Nazwa hosta lub adres IP", + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "description": "Wprowad\u017a informacje o urz\u0105dzeniu AVM FRITZ! Box.", + "title": "AVM FRITZ! Box" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/glances/translations/pl.json b/homeassistant/components/glances/translations/pl.json index b0dcfe0c36f..25179e951ad 100644 --- a/homeassistant/components/glances/translations/pl.json +++ b/homeassistant/components/glances/translations/pl.json @@ -10,7 +10,7 @@ "step": { "user": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "name": "Nazwa", "password": "Has\u0142o", "port": "Port", diff --git a/homeassistant/components/group/translations/lb.json b/homeassistant/components/group/translations/lb.json index 7eab2528c34..aaa9e7b9d81 100644 --- a/homeassistant/components/group/translations/lb.json +++ b/homeassistant/components/group/translations/lb.json @@ -13,5 +13,5 @@ "unlocked": "Net gespaart" } }, - "title": "Gruppe" + "title": "Grupp" } \ No newline at end of file diff --git a/homeassistant/components/heos/translations/pl.json b/homeassistant/components/heos/translations/pl.json index fbba14d88d6..0c0b9ade13f 100644 --- a/homeassistant/components/heos/translations/pl.json +++ b/homeassistant/components/heos/translations/pl.json @@ -9,8 +9,8 @@ "step": { "user": { "data": { - "access_token": "Host", - "host": "Host" + "access_token": "Nazwa hosta lub adres IP", + "host": "Nazwa hosta lub adres IP" }, "description": "Wprowad\u017a nazw\u0119 hosta lub adres IP urz\u0105dzenia Heos (najlepiej pod\u0142\u0105czonego przewodowo do sieci).", "title": "Po\u0142\u0105czenie z Heos" diff --git a/homeassistant/components/homekit_controller/translations/lb.json b/homeassistant/components/homekit_controller/translations/lb.json index 148d344eaea..c840cb4e9fc 100644 --- a/homeassistant/components/homekit_controller/translations/lb.json +++ b/homeassistant/components/homekit_controller/translations/lb.json @@ -36,5 +36,5 @@ } } }, - "title": "HomeKit Accessoire" + "title": "HomeKit Kontroller" } \ No newline at end of file diff --git a/homeassistant/components/hue/translations/pl.json b/homeassistant/components/hue/translations/pl.json index fa9f3f5abc5..b1f635026e6 100644 --- a/homeassistant/components/hue/translations/pl.json +++ b/homeassistant/components/hue/translations/pl.json @@ -17,7 +17,7 @@ "step": { "init": { "data": { - "host": "Host" + "host": "Nazwa hosta lub adres IP" }, "title": "Wybierz mostek Hue" }, @@ -26,5 +26,26 @@ "title": "Hub Link" } } + }, + "device_automation": { + "trigger_subtype": { + "button_1": "pierwszy przycisk", + "button_2": "drugi przycisk", + "button_3": "trzeci przycisk", + "button_4": "czwarty przycisk", + "dim_down": "nast\u0105pi zmniejszenie jasno\u015bci", + "dim_up": "nast\u0105pi zwi\u0119kszenie jasno\u015bci", + "double_buttons_1_3": "Przyciski pierwszy i trzeci", + "double_buttons_2_4": "Przyciski drugi i czwarty", + "turn_off": "Nast\u0105pi wy\u0142\u0105czenie", + "turn_on": "Nast\u0105pi w\u0142\u0105czenie" + }, + "trigger_type": { + "remote_button_long_release": "\"{subtype}\" zostanie zwolniony po d\u0142ugim naci\u015bni\u0119ciu", + "remote_button_short_press": "\"{subtype}\" zostanie naci\u015bni\u0119ty", + "remote_button_short_release": "\"{subtype}\" zostanie zwolniony", + "remote_double_button_long_press": "Obydwa \"{subtype}\" zostanie zwolniony po d\u0142ugim naci\u015bni\u0119ciu", + "remote_double_button_short_press": "Obydwa \"{subtype}\" zostanie zwolniony" + } } } \ No newline at end of file diff --git a/homeassistant/components/icloud/translations/pl.json b/homeassistant/components/icloud/translations/pl.json index a4c7f1f8d9c..20e3f8c2fb4 100644 --- a/homeassistant/components/icloud/translations/pl.json +++ b/homeassistant/components/icloud/translations/pl.json @@ -20,7 +20,7 @@ "user": { "data": { "password": "Has\u0142o", - "username": "E-mail", + "username": "Adres e-mail", "with_family": "Z rodzin\u0105" }, "description": "Wprowad\u017a dane uwierzytelniaj\u0105ce", diff --git a/homeassistant/components/ipp/translations/pl.json b/homeassistant/components/ipp/translations/pl.json index 0de012d7163..8bc57941cb6 100644 --- a/homeassistant/components/ipp/translations/pl.json +++ b/homeassistant/components/ipp/translations/pl.json @@ -1,7 +1,34 @@ { "config": { "abort": { + "already_configured": "Ta drukarka jest ju\u017c skonfigurowana.", + "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia z drukark\u0105.", + "connection_upgrade": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z drukark\u0105 z powodu konieczno\u015bci uaktualnienia po\u0142\u0105czenia.", + "ipp_error": "Wyst\u0105pi\u0142 b\u0142\u0105d IPP.", + "ipp_version_error": "Wersja IPP nie obs\u0142ugiwana przez drukark\u0119.", "parse_error": "Nie mo\u017cna przeanalizowa\u0107 odpowiedzi z drukarki." + }, + "error": { + "connection_error": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia z drukark\u0105.", + "connection_upgrade": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z drukark\u0105. Spr\u00f3buj ponownie z zaznaczon\u0105 opcj\u0105 SSL/TLS." + }, + "flow_title": "Drukarka: {name}", + "step": { + "user": { + "data": { + "base_path": "\u015acie\u017cka wzgl\u0119dna do drukarki", + "host": "Nazwa hosta lub adres IP", + "port": "Port", + "ssl": "Drukarka obs\u0142uguje komunikacj\u0119 przez SSL/TLS", + "verify_ssl": "Drukarka u\u017cywa prawid\u0142owego certyfikatu" + }, + "description": "Skonfiguruj drukark\u0119 za pomoc\u0105 protoko\u0142u IPP (Internet Printing Protocol) w celu integracji z Home Assistant.", + "title": "Po\u0142\u0105cz swoj\u0105 drukark\u0119" + }, + "zeroconf_confirm": { + "description": "Czy chcesz doda\u0107 drukark\u0119 o nazwie `{name}` do Home Assistant'a?", + "title": "Wykryto drukark\u0119" + } } } } \ No newline at end of file diff --git a/homeassistant/components/islamic_prayer_times/translations/pl.json b/homeassistant/components/islamic_prayer_times/translations/pl.json new file mode 100644 index 00000000000..a706e6a0596 --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/pl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "Wymagana jest tylko jedna instancja." + }, + "step": { + "user": { + "description": "Czy chcesz skonfigurowa\u0107 Islamskie czasy modlitwy?", + "title": "Skonfiguruj Islamskie czasy modlitwy" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "calc_method": "Metoda kalkulacji modlitwy" + } + } + } + }, + "title": "Islamskie czasy modlitwy" +} \ No newline at end of file diff --git a/homeassistant/components/konnected/translations/pl.json b/homeassistant/components/konnected/translations/pl.json index f41ceea26f4..860d90536da 100644 --- a/homeassistant/components/konnected/translations/pl.json +++ b/homeassistant/components/konnected/translations/pl.json @@ -96,6 +96,7 @@ "data": { "activation": "Wyj\u015bcie, gdy w\u0142\u0105czone", "momentary": "Czas trwania impulsu (ms) (opcjonalnie)", + "more_states": "Konfigurowanie dodatkowych stan\u00f3w dla tej strefy", "name": "Nazwa (opcjonalnie)", "pause": "Przerwa mi\u0119dzy impulsami (ms) (opcjonalnie)", "repeat": "Ilo\u015b\u0107 powt\u00f3rze\u0144 (-1=niesko\u0144czenie) (opcjonalnie)" diff --git a/homeassistant/components/local_ip/translations/pl.json b/homeassistant/components/local_ip/translations/pl.json index c5ae118ef2c..5f8b977dc6e 100644 --- a/homeassistant/components/local_ip/translations/pl.json +++ b/homeassistant/components/local_ip/translations/pl.json @@ -1,5 +1,8 @@ { "config": { + "abort": { + "single_instance_allowed": "Dozwolona jest tylko jedna konfiguracja z lokalnym adresem IP." + }, "step": { "user": { "data": { diff --git a/homeassistant/components/lock/translations/lb.json b/homeassistant/components/lock/translations/lb.json index 634e51234d7..879f98b6498 100644 --- a/homeassistant/components/lock/translations/lb.json +++ b/homeassistant/components/lock/translations/lb.json @@ -20,5 +20,5 @@ "unlocked": "Net gespaart" } }, - "title": "Schlass" + "title": "Sp\u00e4ren" } \ No newline at end of file diff --git a/homeassistant/components/mailgun/translations/lb.json b/homeassistant/components/mailgun/translations/lb.json index e416bdc6a64..10504b88214 100644 --- a/homeassistant/components/mailgun/translations/lb.json +++ b/homeassistant/components/mailgun/translations/lb.json @@ -5,7 +5,7 @@ "one_instance_allowed": "N\u00ebmmen eng eenzeg Instanz ass n\u00e9ideg." }, "create_entry": { - "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, mussen [Webhooks mat Mailgun]({mailgun_url}) ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/x-www-form-urlencoded\n\nLiest [Dokumentatioun]({docs_url}) w\u00e9i een Automatiounen ariicht welch eingehend Donn\u00e9\u00eb trait\u00e9ieren." + "default": "Fir Evenementer un Home Assistant ze sch\u00e9cken, mussen [Webhooks mat Mailgun]({mailgun_url}) ageriicht ginn.\n\nF\u00ebllt folgend Informatiounen aus:\n\n- URL: `{webhook_url}`\n- Method: POST\n- Content Type: application/json\n\nLiest [Dokumentatioun]({docs_url}) w\u00e9i een Automatiounen ariicht welch eingehend Donn\u00e9\u00eb trait\u00e9ieren." }, "step": { "user": { diff --git a/homeassistant/components/mikrotik/translations/pl.json b/homeassistant/components/mikrotik/translations/pl.json index 44ee1ad4403..20b0348570c 100644 --- a/homeassistant/components/mikrotik/translations/pl.json +++ b/homeassistant/components/mikrotik/translations/pl.json @@ -11,7 +11,7 @@ "step": { "user": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "name": "Nazwa", "password": "Has\u0142o", "port": "Port", diff --git a/homeassistant/components/minecraft_server/translations/pl.json b/homeassistant/components/minecraft_server/translations/pl.json index c5e1abdf729..77d83f37174 100644 --- a/homeassistant/components/minecraft_server/translations/pl.json +++ b/homeassistant/components/minecraft_server/translations/pl.json @@ -11,7 +11,7 @@ "step": { "user": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "name": "Nazwa" }, "description": "Skonfiguruj instancj\u0119 serwera Minecraft, aby umo\u017cliwi\u0107 monitorowanie.", diff --git a/homeassistant/components/monoprice/translations/pl.json b/homeassistant/components/monoprice/translations/pl.json index d0a3d1751a7..300c19e92b7 100644 --- a/homeassistant/components/monoprice/translations/pl.json +++ b/homeassistant/components/monoprice/translations/pl.json @@ -21,5 +21,20 @@ "title": "Po\u0142\u0105cz z urz\u0105dzeniem" } } + }, + "options": { + "step": { + "init": { + "data": { + "source_1": "Nazwa \u017ar\u00f3d\u0142a #1", + "source_2": "Nazwa \u017ar\u00f3d\u0142a #2", + "source_3": "Nazwa \u017ar\u00f3d\u0142a #3", + "source_4": "Nazwa \u017ar\u00f3d\u0142a #4", + "source_5": "Nazwa \u017ar\u00f3d\u0142a #5", + "source_6": "Nazwa \u017ar\u00f3d\u0142a #6" + }, + "title": "Konfiguruj \u017ar\u00f3d\u0142a" + } + } } } \ No newline at end of file diff --git a/homeassistant/components/nut/translations/pl.json b/homeassistant/components/nut/translations/pl.json index 94ffb76bb8d..32fab6f325b 100644 --- a/homeassistant/components/nut/translations/pl.json +++ b/homeassistant/components/nut/translations/pl.json @@ -23,7 +23,7 @@ }, "user": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "password": "Has\u0142o", "port": "Port", "username": "Nazwa u\u017cytkownika" diff --git a/homeassistant/components/nws/translations/pl.json b/homeassistant/components/nws/translations/pl.json new file mode 100644 index 00000000000..3da4d1f3ea8 --- /dev/null +++ b/homeassistant/components/nws/translations/pl.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "api_key": "Klucz API (e-mail)", + "latitude": "Szeroko\u015b\u0107 geograficzna", + "longitude": "D\u0142ugo\u015b\u0107 geograficzna", + "station": "Kod stacji METAR" + }, + "description": "Je\u015bli nie podasz kodu stacji METAR, do znalezienia najbli\u017cszej stacji zostan\u0105 u\u017cyte szeroko\u015b\u0107 i d\u0142ugo\u015b\u0107 geograficzna.", + "title": "Po\u0142\u0105cz z National Weather Service" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/owntracks/translations/pl.json b/homeassistant/components/owntracks/translations/pl.json index f27d6a35c4d..38d5891edd8 100644 --- a/homeassistant/components/owntracks/translations/pl.json +++ b/homeassistant/components/owntracks/translations/pl.json @@ -4,7 +4,7 @@ "one_instance_allowed": "Wymagana jest tylko jedna instancja." }, "create_entry": { - "default": "\n\nNa Androidzie, otw\u00f3rz [aplikacj\u0119 OwnTracks]({android_url}), id\u017a do: ustawienia -> po\u0142aczenia. Zmie\u0144 nast\u0119puj\u0105ce ustawienia:\n - Tryb: Private HTTP\n - Host: {webhook_url}\n - Identyfikacja:\n - Nazwa u\u017cytkownika: ``\n - ID urz\u0105dzenia: ``\n\nNa iOS, otw\u00f3rz [aplikacj\u0119 OwnTracks]({ios_url}), naci\u015bnij ikon\u0119 (i) w lewym g\u00f3rnym rogu -> ustawienia. Zmie\u0144 nast\u0119puj\u0105ce ustawienia:\n - Tryb: HTTP\n - URL: {webhook_url}\n - W\u0142\u0105cz uwierzytelnianie\n - ID u\u017cytkownika: ``\n\n{secret}\n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." + "default": "\n\nNa Androidzie, otw\u00f3rz [aplikacj\u0119 OwnTracks]({android_url}), id\u017a do: ustawienia -> po\u0142\u0105czenia. Zmie\u0144 nast\u0119puj\u0105ce ustawienia:\n - Tryb: Private HTTP\n - Host: {webhook_url}\n - Identyfikacja:\n - Nazwa u\u017cytkownika: ``\n - ID urz\u0105dzenia: ``\n\nNa iOS, otw\u00f3rz [aplikacj\u0119 OwnTracks]({ios_url}), naci\u015bnij ikon\u0119 (i) w lewym g\u00f3rnym rogu -> ustawienia. Zmie\u0144 nast\u0119puj\u0105ce ustawienia:\n - Tryb: HTTP\n - URL: {webhook_url}\n - W\u0142\u0105cz uwierzytelnianie\n - ID u\u017cytkownika: ``\n\n{secret}\n\nZapoznaj si\u0119 z [dokumentacj\u0105]({docs_url}), by pozna\u0107 szczeg\u00f3\u0142y." }, "step": { "user": { diff --git a/homeassistant/components/panasonic_viera/translations/pl.json b/homeassistant/components/panasonic_viera/translations/pl.json new file mode 100644 index 00000000000..7a880c33265 --- /dev/null +++ b/homeassistant/components/panasonic_viera/translations/pl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Ten telewizor Panasonic Viera jest ju\u017c skonfigurowany.", + "not_connected": "Zdalne po\u0142\u0105czenie z telewizorem Panasonic Viera zosta\u0142o utracone. Sprawd\u017a logi, aby uzyska\u0107 wi\u0119cej informacji.", + "unknown": "Nieznany b\u0142\u0105d, sprawd\u017a logi aby uzyska\u0107 wi\u0119cej szczeg\u00f3\u0142\u00f3w" + }, + "error": { + "invalid_pin_code": "Podany kod PIN jest nieprawid\u0142owy", + "not_connected": "Nie uda\u0142o si\u0119 nawi\u0105za\u0107 zdalnego po\u0142\u0105czenia z telewizorem Panasonic Viera." + }, + "step": { + "pairing": { + "data": { + "pin": "PIN" + }, + "description": "Wprowad\u017a kod PIN wy\u015bwietlony na ekranie telewizora", + "title": "Parowanie" + }, + "user": { + "data": { + "host": "Adres IP", + "name": "Nazwa" + }, + "description": "Wprowad\u017a adres IP telewizora Panasonic Viera", + "title": "Skonfiguruj telewizor" + } + } + }, + "title": "Panasonic Viera" +} \ No newline at end of file diff --git a/homeassistant/components/powerwall/translations/ca.json b/homeassistant/components/powerwall/translations/ca.json index f2a598770a5..2416a2bf7f2 100644 --- a/homeassistant/components/powerwall/translations/ca.json +++ b/homeassistant/components/powerwall/translations/ca.json @@ -5,7 +5,8 @@ }, "error": { "cannot_connect": "No s'ha pogut connectar, torna-ho a provar", - "unknown": "Error inesperat" + "unknown": "Error inesperat", + "wrong_version": "El teu Powerwall utilitza una versi\u00f3 de programari no compatible. L'hauries d'actualitzar o informar d\u2019aquest problema perqu\u00e8 sigui solucionat." }, "step": { "user": { diff --git a/homeassistant/components/powerwall/translations/es.json b/homeassistant/components/powerwall/translations/es.json index 0489feb2709..2f8ffcf787f 100644 --- a/homeassistant/components/powerwall/translations/es.json +++ b/homeassistant/components/powerwall/translations/es.json @@ -5,7 +5,8 @@ }, "error": { "cannot_connect": "No se pudo conectar, por favor int\u00e9ntelo de nuevo", - "unknown": "Error inesperado" + "unknown": "Error inesperado", + "wrong_version": "tu powerwall utiliza una versi\u00f3n de software que no es compatible. Considera actualizar o informar de este problema para que pueda resolverse." }, "step": { "user": { diff --git a/homeassistant/components/powerwall/translations/lb.json b/homeassistant/components/powerwall/translations/lb.json index 9f1e0670d64..1722daf7479 100644 --- a/homeassistant/components/powerwall/translations/lb.json +++ b/homeassistant/components/powerwall/translations/lb.json @@ -5,7 +5,8 @@ }, "error": { "cannot_connect": "Feeler beim verbannen, prob\u00e9ier w.e.g. nach emol.", - "unknown": "Onerwaarte Feeler" + "unknown": "Onerwaarte Feeler", + "wrong_version": "Deng Powerwall benotzt eng Software Versioun d\u00e9i net \u00ebnnerst\u00ebtzt ass. Betruecht een Upgrade ze maachen oder d\u00ebst ze mellen, sou dass et ka gel\u00e9ist ginn." }, "step": { "user": { diff --git a/homeassistant/components/powerwall/translations/no.json b/homeassistant/components/powerwall/translations/no.json index 0c105f26168..a688a9ad8c4 100644 --- a/homeassistant/components/powerwall/translations/no.json +++ b/homeassistant/components/powerwall/translations/no.json @@ -5,7 +5,8 @@ }, "error": { "cannot_connect": "Klarte ikke \u00e5 koble til, vennligst pr\u00f8v igjen", - "unknown": "Uventet feil" + "unknown": "Uventet feil", + "wrong_version": "Powerwall bruker en programvareversjon som ikke st\u00f8ttes. Vennligst vurder \u00e5 oppgradere eller rapportere dette problemet, s\u00e5 det kan l\u00f8ses." }, "step": { "user": { diff --git a/homeassistant/components/powerwall/translations/pl.json b/homeassistant/components/powerwall/translations/pl.json index aa4ea4da94f..cfb277179ed 100644 --- a/homeassistant/components/powerwall/translations/pl.json +++ b/homeassistant/components/powerwall/translations/pl.json @@ -5,7 +5,8 @@ }, "error": { "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", - "unknown": "Niespodziewany b\u0142\u0105d." + "unknown": "Niespodziewany b\u0142\u0105d.", + "wrong_version": "Powerwall u\u017cywa wersji oprogramowania, kt\u00f3ra nie jest obs\u0142ugiwana. Rozwa\u017c uaktualnienie lub zg\u0142oszenie tego problemu, aby mo\u017cna go by\u0142o rozwi\u0105za\u0107." }, "step": { "user": { diff --git a/homeassistant/components/powerwall/translations/ru.json b/homeassistant/components/powerwall/translations/ru.json index 4f5f75dc644..cf3b1cd4ba0 100644 --- a/homeassistant/components/powerwall/translations/ru.json +++ b/homeassistant/components/powerwall/translations/ru.json @@ -5,7 +5,8 @@ }, "error": { "cannot_connect": "\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437.", - "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430." + "unknown": "\u041d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430.", + "wrong_version": "\u0412\u0430\u0448 powerwall \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u0435 \u043e\u0431 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435, \u0447\u0442\u043e\u0431\u044b \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0438\u0442\u044c." }, "step": { "user": { diff --git a/homeassistant/components/powerwall/translations/zh-Hant.json b/homeassistant/components/powerwall/translations/zh-Hant.json index 91bb4b61801..8883e669a85 100644 --- a/homeassistant/components/powerwall/translations/zh-Hant.json +++ b/homeassistant/components/powerwall/translations/zh-Hant.json @@ -5,7 +5,8 @@ }, "error": { "cannot_connect": "\u9023\u7dda\u5931\u6557\uff0c\u8acb\u518d\u8a66\u4e00\u6b21", - "unknown": "\u672a\u9810\u671f\u932f\u8aa4" + "unknown": "\u672a\u9810\u671f\u932f\u8aa4", + "wrong_version": "\u4e0d\u652f\u63f4\u60a8\u6240\u4f7f\u7528\u7684 Powerwall \u7248\u672c\u3002\u8acb\u8003\u616e\u9032\u884c\u5347\u7d1a\u6216\u56de\u5831\u6b64\u554f\u984c\u3001\u4ee5\u671f\u554f\u984c\u53ef\u4ee5\u7372\u5f97\u89e3\u6c7a\u3002" }, "step": { "user": { diff --git a/homeassistant/components/roomba/translations/lb.json b/homeassistant/components/roomba/translations/lb.json index 70671503e51..2771b3f5b2a 100644 --- a/homeassistant/components/roomba/translations/lb.json +++ b/homeassistant/components/roomba/translations/lb.json @@ -14,6 +14,7 @@ "host": "Host Numm oder IP Adresse", "password": "Passwuert" }, + "description": "De Prozess fir BLID an Passwuert opzeruffen ass fir de Moment manuell. Folleg w.e.g. de Schr\u00ebtt d\u00e9i an der Dokumentatioun op https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials beschriwwe sinn.", "title": "Mam Apparat verbannen" } } diff --git a/homeassistant/components/roomba/translations/pl.json b/homeassistant/components/roomba/translations/pl.json new file mode 100644 index 00000000000..3772d6a08c5 --- /dev/null +++ b/homeassistant/components/roomba/translations/pl.json @@ -0,0 +1,32 @@ +{ + "config": { + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "blid": "BLID", + "certificate": "Certyfikat", + "continuous": "Ci\u0105g\u0142y", + "delay": "Op\u00f3\u017anienie", + "host": "Nazwa hosta lub adres IP", + "password": "Has\u0142o" + }, + "description": "Obecnie pobieranie BLID i has\u0142a jest procesem r\u0119cznym. Prosz\u0119 post\u0119powa\u0107 zgodnie z instrukcjami zawartymi w dokumentacji pod adresem: https://www.home-assistant.io/integrations/roomba/#retrieving-your-credentials.", + "title": "Po\u0142\u0105cz z urz\u0105dzeniem" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "continuous": "Ci\u0105g\u0142y", + "delay": "Op\u00f3\u017anienie" + } + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/smartthings/translations/lb.json b/homeassistant/components/smartthings/translations/lb.json index 623e00870b8..af1e70eedd8 100644 --- a/homeassistant/components/smartthings/translations/lb.json +++ b/homeassistant/components/smartthings/translations/lb.json @@ -1,6 +1,7 @@ { "config": { "abort": { + "invalid_webhook_url": "Home Assistant ass net richteg konfigur\u00e9iert fir Updates vun SmartThings z'empf\u00e4nken.\nWebhook URL ass ong\u00eblteg:\n>{webhook_url}\n\u00c4nner deng Konfiguratioun sou w\u00e9i an den [Instruktioune]({component_url}) start Home Assistant fr\u00ebsch an prob\u00e9ier nach eemol.", "no_available_locations": "Keng disponibel Smartthings Standuerte fir am Home Assistant anzeriichten." }, "error": { @@ -8,7 +9,7 @@ "token_forbidden": "De Jeton huet net d\u00e9i n\u00e9ideg OAuth M\u00e9iglechkeeten.", "token_invalid_format": "De Jeton muss am UID/GUID Format sinn", "token_unauthorized": "De Jeton ass ong\u00eblteg oder net m\u00e9i autoris\u00e9iert.", - "webhook_error": "SmartThings konnt den an der 'base_url' defin\u00e9ierten Endpoint net valid\u00e9ieren. Iwwerpr\u00e9ift d'Viraussetzunge vun d\u00ebser Komponente" + "webhook_error": "SmartThings konnt d'Webhook URL valid\u00e9ieren. Stell s\u00e9cher dass d'URL vum Internet aus ereechbar ass a prob\u00e9ier nach eemol." }, "step": { "authorize": { @@ -25,11 +26,12 @@ "data": { "location_id": "Standuert" }, + "description": "Wiel SmartThings Standuert aus fir en am Home Assistant dob\u00e4i ze setzen. Dann geht eng nei F\u00ebnster op mat engem Login an fir d'Installatioun vun der Integratioun am Home Assistanr z'erlaaben.", "title": "Standuert auswielen" }, "user": { - "description": "Gitt w.e.g. ee [Pers\u00e9inlechen Acc\u00e8s Jeton]({token_url}) vu SmartThings an dee via [d'Instruktiounen] ({component_url}) erstallt gouf.", - "title": "Pers\u00e9inlechen Acc\u00e8ss Jeton uginn" + "description": "SmartThings g\u00ebtt ageriicht fir Push Aktualis\u00e9ierungen un Home Assistant ze sch\u00e9cken un d'Adresse:\n>{webhook_url}\n\nFalls d\u00ebs net korrekt ass, \u00e4nner deng Konfiguratioun, start Home Assistant fr\u00ebsch a prob\u00e9ier nach emol.", + "title": "Callback URL confirm\u00e9ieren" } } } diff --git a/homeassistant/components/smartthings/translations/pl.json b/homeassistant/components/smartthings/translations/pl.json index 0b6f347873c..517127a5091 100644 --- a/homeassistant/components/smartthings/translations/pl.json +++ b/homeassistant/components/smartthings/translations/pl.json @@ -1,5 +1,9 @@ { "config": { + "abort": { + "invalid_webhook_url": "Home Assistant nie jest poprawnie skonfigurowany do otrzymywania danych od SmartThings. Adres URL webhook jest nieprawid\u0142owy: \n > {webhook_url} \n\n Zaktualizuj konfiguracj\u0119 zgodnie z [instrukcj\u0105]({component_url}), uruchom ponownie Home Assistant i spr\u00f3buj ponownie.", + "no_available_locations": "Nie ma dost\u0119pnych lokalizacji SmartThings do skonfigurowania w Home Assistant." + }, "error": { "app_setup_error": "Nie mo\u017cna skonfigurowa\u0107 SmartApp. Spr\u00f3buj ponownie.", "token_forbidden": "Token nie ma wymaganych zakres\u00f3w OAuth.", @@ -8,6 +12,21 @@ "webhook_error": "SmartThings nie mo\u017ce sprawdzi\u0107 poprawno\u015bci punktu ko\u0144cowego skonfigurowanego w `base_url`. Sprawd\u017a wymagania dotycz\u0105ce komponentu." }, "step": { + "authorize": { + "title": "Autoryzuj Home Assistant'a" + }, + "pat": { + "data": { + "access_token": "Token dost\u0119pu" + }, + "title": "Wprowad\u017a osobisty token dost\u0119pu" + }, + "select_location": { + "data": { + "location_id": "Lokalizacja" + }, + "title": "Wybierz lokalizacj\u0119" + }, "user": { "description": "Wprowad\u017a [token dost\u0119pu osobistego]({token_url}) SmartThings, kt\u00f3ry zosta\u0142 utworzony zgodnie z [instrukcj\u0105]({component_url}).", "title": "Wprowad\u017a osobisty token dost\u0119pu" diff --git a/homeassistant/components/soma/translations/pl.json b/homeassistant/components/soma/translations/pl.json index 8d83b05e736..dc71b001bde 100644 --- a/homeassistant/components/soma/translations/pl.json +++ b/homeassistant/components/soma/translations/pl.json @@ -13,7 +13,7 @@ "step": { "user": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "port": "Port" }, "description": "Wprowad\u017a ustawienia po\u0142\u0105czenia SOMA Connect.", diff --git a/homeassistant/components/sun/translations/no.json b/homeassistant/components/sun/translations/no.json index de709024d22..8597fea2ce5 100644 --- a/homeassistant/components/sun/translations/no.json +++ b/homeassistant/components/sun/translations/no.json @@ -1,3 +1,9 @@ { + "state": { + "_": { + "above_horizon": "Over horisonten", + "below_horizon": "Under horisonten" + } + }, "title": "Sol" } \ No newline at end of file diff --git a/homeassistant/components/synology_dsm/translations/es.json b/homeassistant/components/synology_dsm/translations/es.json index c2f00b0874c..122f8bef51d 100644 --- a/homeassistant/components/synology_dsm/translations/es.json +++ b/homeassistant/components/synology_dsm/translations/es.json @@ -4,6 +4,7 @@ "already_configured": "El host ya est\u00e1 configurado." }, "error": { + "connection": "Error de conexi\u00f3n: comprueba tu host, puerto y ssl", "login": "Error de inicio de sesi\u00f3n: comprueba tu nombre de usuario y contrase\u00f1a", "missing_data": "Faltan datos: por favor, vuelva a intentarlo m\u00e1s tarde o pruebe con otra configuraci\u00f3n", "otp_failed": "La autenticaci\u00f3n de dos pasos fall\u00f3, vuelva a intentar con un nuevo c\u00f3digo de acceso", diff --git a/homeassistant/components/synology_dsm/translations/it.json b/homeassistant/components/synology_dsm/translations/it.json index 0de4e3bbccd..e7ce33ec43c 100644 --- a/homeassistant/components/synology_dsm/translations/it.json +++ b/homeassistant/components/synology_dsm/translations/it.json @@ -8,7 +8,7 @@ "missing_data": "Dati mancanti: si prega di riprovare pi\u00f9 tardi o un'altra configurazione", "otp_failed": "Autenticazione in due fasi fallita, riprovare con un nuovo codice di accesso" }, - "flow_title": "Synology DSM {nome} ({host})", + "flow_title": "Synology DSM {name} ({host})", "step": { "2sa": { "data": { @@ -24,7 +24,7 @@ "ssl": "Utilizzare SSL/TLS per connettersi al NAS", "username": "Nome utente" }, - "description": "Vuoi impostare {nome} ({host})?", + "description": "Vuoi impostare {name} ({host})?", "title": "Synology DSM" }, "user": { diff --git a/homeassistant/components/synology_dsm/translations/lb.json b/homeassistant/components/synology_dsm/translations/lb.json index 1db4f2a193c..5453b078a3e 100644 --- a/homeassistant/components/synology_dsm/translations/lb.json +++ b/homeassistant/components/synology_dsm/translations/lb.json @@ -4,6 +4,7 @@ "already_configured": "Apparat ass scho konfigur\u00e9iert" }, "error": { + "connection": "Feeler beim verbannen Iwwerpr\u00e9if w.e.g. den Numm, Passwuert & SSL", "login": "Feeler beim Login: iwwerpr\u00e9if de Benotzernumm & Passwuert", "missing_data": "Donn\u00e9\u00ebe feelen, prob\u00e9ier sp\u00e9ider oder mat enger aner Konfiguratioun", "otp_failed": "Feeler mam 2-Faktor-Authentifikatiouns, prob\u00e9ier mat engem neie Code", diff --git a/homeassistant/components/synology_dsm/translations/no.json b/homeassistant/components/synology_dsm/translations/no.json index a10b28b5386..d9e24638f72 100644 --- a/homeassistant/components/synology_dsm/translations/no.json +++ b/homeassistant/components/synology_dsm/translations/no.json @@ -4,12 +4,13 @@ "already_configured": "Verten er allerede konfigurert" }, "error": { + "connection": "Tilkoblingsfeil: sjekk verten, porten og ssl", "login": "P\u00e5loggingsfeil: Vennligst sjekk brukernavnet ditt og passordet ditt", "missing_data": "Manglende data: Pr\u00f8v p\u00e5 nytt senere eller en annen konfigurasjon", "otp_failed": "To-trinns autentisering mislyktes. Pr\u00f8v p\u00e5 nytt med en ny passkode", "unknown": "Ukjent feil: sjekk loggene for \u00e5 f\u00e5 flere detaljer" }, - "flow_title": "Synology DSM {name} ( {host} )", + "flow_title": "Synology DSM {name} ({host})", "step": { "2sa": { "data": { diff --git a/homeassistant/components/synology_dsm/translations/pl.json b/homeassistant/components/synology_dsm/translations/pl.json index d7045b9d1f6..d7714de27eb 100644 --- a/homeassistant/components/synology_dsm/translations/pl.json +++ b/homeassistant/components/synology_dsm/translations/pl.json @@ -4,10 +4,20 @@ "already_configured": "Host jest ju\u017c skonfigurowany." }, "error": { - "login": "B\u0142\u0105d logowania: sprawd\u017a nazw\u0119 u\u017cytkownika i has\u0142o" + "connection": "B\u0142\u0105d po\u0142\u0105czenia: sprawd\u017a host, port i SSL", + "login": "B\u0142\u0105d logowania: sprawd\u017a nazw\u0119 u\u017cytkownika i has\u0142o", + "missing_data": "Brakuj\u0105ce dane: spr\u00f3buj ponownie p\u00f3\u017aniej lub skorzystaj z innej konfiguracji", + "otp_failed": "Uwierzytelnianie dwuetapowe nie powiod\u0142o si\u0119, spr\u00f3buj ponownie z nowym kodem dost\u0119pu", + "unknown": "Nieznany b\u0142\u0105d, sprawd\u017a logi aby uzyska\u0107 wi\u0119cej szczeg\u00f3\u0142\u00f3w" }, "flow_title": "Synology DSM {name} ({host})", "step": { + "2sa": { + "data": { + "otp_code": "Kod" + }, + "title": "Synology DSM: Uwierzytelnianie dwusk\u0142adnikowe" + }, "link": { "data": { "api_version": "Wersja DSM", @@ -22,7 +32,7 @@ "user": { "data": { "api_version": "Wersja DSM", - "host": "Host", + "host": "Nazwa hosta lub adres IP", "password": "Has\u0142o", "port": "Port (opcjonalnie)", "ssl": "U\u017cyj SSL/TLS, aby po\u0142\u0105czy\u0107 si\u0119 z serwerem NAS", diff --git a/homeassistant/components/tado/translations/lb.json b/homeassistant/components/tado/translations/lb.json index e84720a2de1..91a81f03177 100644 --- a/homeassistant/components/tado/translations/lb.json +++ b/homeassistant/components/tado/translations/lb.json @@ -25,6 +25,7 @@ "data": { "fallback": "Fallback Modus aktiv\u00e9ieren" }, + "description": "Fallback Modus wiesselt op Smarte Z\u00e4itplang beim n\u00e4chsten ausf\u00e9ieren nodeems eng Zon ausgewielt gouf.", "title": "Tado Optiounen \u00e4nneren" } } diff --git a/homeassistant/components/tado/translations/pl.json b/homeassistant/components/tado/translations/pl.json new file mode 100644 index 00000000000..65a23d58359 --- /dev/null +++ b/homeassistant/components/tado/translations/pl.json @@ -0,0 +1,29 @@ +{ + "config": { + "abort": { + "already_configured": "Urz\u0105dzenie jest ju\u017c skonfigurowane." + }, + "error": { + "cannot_connect": "Nie mo\u017cna nawi\u0105za\u0107 po\u0142\u0105czenia, spr\u00f3buj ponownie.", + "invalid_auth": "Niepoprawne uwierzytelnienie", + "no_homes": "Brak dom\u00f3w powi\u0105zanych z tym kontem Tado.", + "unknown": "Niespodziewany b\u0142\u0105d." + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Po\u0142\u0105cz z kontem Tado" + } + } + }, + "options": { + "step": { + "init": { + "title": "Dostosuj opcje Tado" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tellduslive/translations/pl.json b/homeassistant/components/tellduslive/translations/pl.json index 3ee83236d7e..c07f9de7b3d 100644 --- a/homeassistant/components/tellduslive/translations/pl.json +++ b/homeassistant/components/tellduslive/translations/pl.json @@ -16,7 +16,7 @@ }, "user": { "data": { - "host": "Host" + "host": "Nazwa hosta lub adres IP" }, "description": "Puste", "title": "Wybierz punkt ko\u0144cowy." diff --git a/homeassistant/components/totalconnect/translations/pl.json b/homeassistant/components/totalconnect/translations/pl.json new file mode 100644 index 00000000000..58a0f7018da --- /dev/null +++ b/homeassistant/components/totalconnect/translations/pl.json @@ -0,0 +1,19 @@ +{ + "config": { + "abort": { + "already_configured": "Konto jest ju\u017c skonfigurowane." + }, + "error": { + "login": "B\u0142\u0105d logowania: sprawd\u017a swoj\u0105 nazw\u0119 u\u017cytkownika i has\u0142o" + }, + "step": { + "user": { + "data": { + "password": "Has\u0142o", + "username": "Nazwa u\u017cytkownika" + }, + "title": "Total Connect" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/tradfri/translations/pl.json b/homeassistant/components/tradfri/translations/pl.json index 379a554e0c3..028956ec6b3 100644 --- a/homeassistant/components/tradfri/translations/pl.json +++ b/homeassistant/components/tradfri/translations/pl.json @@ -12,7 +12,7 @@ "step": { "auth": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "security_code": "Kod bezpiecze\u0144stwa" }, "description": "Mo\u017cesz znale\u017a\u0107 kod bezpiecze\u0144stwa z ty\u0142u bramki.", diff --git a/homeassistant/components/transmission/translations/pl.json b/homeassistant/components/transmission/translations/pl.json index 20b4f8e55a9..52efb32b551 100644 --- a/homeassistant/components/transmission/translations/pl.json +++ b/homeassistant/components/transmission/translations/pl.json @@ -11,7 +11,7 @@ "step": { "user": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "name": "Nazwa", "password": "Has\u0142o", "port": "Port", diff --git a/homeassistant/components/unifi/translations/pl.json b/homeassistant/components/unifi/translations/pl.json index bc7466a32db..db35a0b3c6a 100644 --- a/homeassistant/components/unifi/translations/pl.json +++ b/homeassistant/components/unifi/translations/pl.json @@ -12,7 +12,7 @@ "step": { "user": { "data": { - "host": "Host", + "host": "Nazwa hosta lub adres IP", "password": "Has\u0142o", "port": "Port", "site": "Identyfikator witryny", @@ -28,7 +28,8 @@ "client_control": { "data": { "block_client": "Klienci z kontrol\u0105 dost\u0119pu do sieci", - "new_client": "Dodaj nowego klienta do kontroli dost\u0119pu do sieci" + "new_client": "Dodaj nowego klienta do kontroli dost\u0119pu do sieci", + "poe_clients": "Zezwalaj na kontrol\u0119 POE klient\u00f3w" }, "description": "Konfigurowanie kontroli klienta\n\nUtw\u00f3rz prze\u0142\u0105czniki dla numer\u00f3w seryjnych, dla kt\u00f3rych chcesz kontrolowa\u0107 dost\u0119p do sieci.", "title": "UniFi opcje 2/3" diff --git a/homeassistant/components/upnp/translations/lb.json b/homeassistant/components/upnp/translations/lb.json index 3e9ef97585b..9fb009f0935 100644 --- a/homeassistant/components/upnp/translations/lb.json +++ b/homeassistant/components/upnp/translations/lb.json @@ -26,7 +26,7 @@ "enable_sensors": "Trafic Sensoren dob\u00e4isetzen", "igd": "UPnP/IGD" }, - "title": "Konfiguratiouns Optiounen fir UPnP/IGD" + "title": "Konfiguratiouns Optiounen" } } } diff --git a/homeassistant/components/vera/translations/pl.json b/homeassistant/components/vera/translations/pl.json new file mode 100644 index 00000000000..baafc324bea --- /dev/null +++ b/homeassistant/components/vera/translations/pl.json @@ -0,0 +1,31 @@ +{ + "config": { + "abort": { + "already_configured": "Kontroler jest ju\u017c skonfigurowany.", + "cannot_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 z kontrolerem za pomoc\u0105 adresu {base_url}" + }, + "step": { + "user": { + "data": { + "exclude": "Identyfikatory urz\u0105dze\u0144 Vera do wykluczenia z Home Assistant.", + "lights": "Identyfikatory prze\u0142\u0105cznik\u00f3w Vera, kt\u00f3re maj\u0105 by\u0107 traktowane jako \u015bwiat\u0142a w Home Assistant.", + "vera_controller_url": "Adres URL kontrolera" + }, + "description": "Podaj adres URL kontrolera Vera. Powinien on wygl\u0105da\u0107 tak: http://192.168.1.161:3480.", + "title": "Skonfiguruj kontroler Vera" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "exclude": "Identyfikatory urz\u0105dze\u0144 Vera do wykluczenia z Home Assistant.", + "lights": "Identyfikatory prze\u0142\u0105cznik\u00f3w Vera, kt\u00f3re maj\u0105 by\u0107 traktowane jako \u015bwiat\u0142a w Home Assistant." + }, + "description": "Szczeg\u00f3\u0142owe informacje na temat parametr\u00f3w opcjonalnych mo\u017cna znale\u017a\u0107 w dokumentacji Vera: https://www.home-assistant.io/integrations/vera/. Uwaga: Wszelkie zmiany tutaj b\u0119d\u0105 wymaga\u0142y ponownego uruchomienia serwera Home Assistant. Aby wyczy\u015bci\u0107 warto\u015bci, wpisz spacj\u0119.", + "title": "Opcje kontrolera Vera" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/vizio/translations/lb.json b/homeassistant/components/vizio/translations/lb.json index 3cd7c1526ee..48267a23126 100644 --- a/homeassistant/components/vizio/translations/lb.json +++ b/homeassistant/components/vizio/translations/lb.json @@ -7,8 +7,8 @@ "error": { "cant_connect": "Konnt sech net mam Apparat verbannen. [Iwwerpr\u00e9ift Dokumentatioun] (https://www.home-assistant.io/integrations/vizio/) a stellt s\u00e9cher dass:\n- Den Apparat ass un\n- Den Apparat ass mam Netzwierk verbonnen\n- D'Optiounen d\u00e9i dir aginn hutt si korrekt\nier dir d'Verbindung nees prob\u00e9iert", "complete_pairing failed": "Feeler beim ofschl\u00e9isse vun der Kopplung. Iwwerpr\u00e9if dass de PIN korrekt an da de Fernsee nach \u00ebmmer ugeschalt a mam Netzwierk verbonnen ass ier de n\u00e4chste Versuch gestart g\u00ebtt.", - "host_exists": "Vizio Apparat mat d\u00ebsem Host ass scho konfigur\u00e9iert.", - "name_exists": "Vizio Apparat mat d\u00ebsen Numm ass scho konfigur\u00e9iert." + "host_exists": "VIZIO Apparat mat d\u00ebsem Host ass scho konfigur\u00e9iert.", + "name_exists": "VIZIO Apparat mat d\u00ebsen Numm ass scho konfigur\u00e9iert." }, "step": { "pair_tv": { @@ -19,11 +19,11 @@ "title": "Kopplungs Prozess ofschl\u00e9issen" }, "pairing_complete": { - "description": "D\u00e4in Visio SmartCast Apparat ass elo mam Home Assistant verbonnen.", + "description": "D\u00e4in VIZIO SmartCast Apparat ass elo mam Home Assistant verbonnen.", "title": "Kopplung ofgeschloss" }, "pairing_complete_import": { - "description": "D\u00e4in Visio SmartCast Apparat ass elo mam Home Assistant verbonnen.\n\nD\u00e4in Acc\u00e8s Jeton ass '**{access_token}**'.", + "description": "D\u00e4in VIZIO SmartCast Apparat ass elo mam Home Assistant verbonnen.\n\nD\u00e4in Acc\u00e8s Jeton ass '**{access_token}**'.", "title": "Kopplung ofgeschloss" }, "user": { @@ -34,7 +34,7 @@ "name": "Numm" }, "description": "Een Access Jeton g\u00ebtt nn\u00ebmme fir Fernseher gebraucht. Wann Dir e Fernseh konfigur\u00e9iert a keen Access Jeton hutt, da loosst et eidel fir duerch dee Pairing Prozess ze goen.", - "title": "Vizo Smartcast Apparat ariichten" + "title": "VIZIO Smartcast Apparat ariichten" } } }, @@ -47,7 +47,7 @@ "volume_step": "Lautst\u00e4erkt Schr\u00ebtt Gr\u00e9isst" }, "description": "Falls du ee Smart TV hues kanns du d'Quelle L\u00ebscht optionell filteren andeems du d'Apps auswiels d\u00e9i soll mat abegraff oder ausgeschloss ginn.", - "title": "Vizo Smartcast Optiounen aktualis\u00e9ieren" + "title": "VIZIO Smartcast Optiounen aktualis\u00e9ieren" } } } diff --git a/homeassistant/components/vizio/translations/pl.json b/homeassistant/components/vizio/translations/pl.json index 392ae0f47f3..2d586bc3e36 100644 --- a/homeassistant/components/vizio/translations/pl.json +++ b/homeassistant/components/vizio/translations/pl.json @@ -6,6 +6,7 @@ }, "error": { "cant_connect": "Nie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z urz\u0105dzeniem. [Przejrzyj dokumentacj\u0119] (https://www.home-assistant.io/integrations/vizio/) i ponownie sprawd\u017a, czy: \n - urz\u0105dzenie jest w\u0142\u0105czone,\n - urz\u0105dzenie jest pod\u0142\u0105czone do sieci,\n - wprowadzone warto\u015bci s\u0105 prawid\u0142owe,\n przed pr\u00f3b\u0105 ponownego przes\u0142ania.", + "complete_pairing failed": "Nie mo\u017cna uko\u0144czy\u0107 parowania. Upewnij si\u0119, \u017ce podany kod PIN jest prawid\u0142owy, a telewizor jest zasilany i pod\u0142\u0105czony do sieci przed ponownym przes\u0142aniem.", "host_exists": "Urz\u0105dzenie Vizio z okre\u015blonym hostem jest ju\u017c skonfigurowane.", "name_exists": "Urz\u0105dzenie Vizio o okre\u015blonej nazwie jest ju\u017c skonfigurowane." }, @@ -13,12 +14,16 @@ "pair_tv": { "data": { "pin": "PIN" - } + }, + "description": "Tw\u00f3j telewizor powinien wy\u015bwietla\u0107 kod. Wprowad\u017a ten kod do formularza, a nast\u0119pnie przejd\u017a do nast\u0119pnego kroku, aby zako\u0144czy\u0107 parowanie.", + "title": "Ko\u0144czenie procesu parowania" }, "pairing_complete": { + "description": "Twoje urz\u0105dzenie VIZIO SmartCast jest teraz po\u0142\u0105czone z Home Assistant'em.", "title": "Parowanie zako\u0144czone" }, "pairing_complete_import": { + "description": "Twoje urz\u0105dzenie VIZIO SmartCast jest teraz po\u0142\u0105czone z Home Assistant'em.\n\nTw\u00f3j token dost\u0119powy to '**{access_token}**'.", "title": "Parowanie zako\u0144czone" }, "user": { @@ -28,6 +33,7 @@ "host": ":", "name": "Nazwa" }, + "description": "Token dost\u0119powy potrzebny jest tylko dla telewizor\u00f3w. Je\u015bli konfigurujesz telewizor i nie masz jeszcze tokenu dost\u0119powego, pozostaw go pusty aby przej\u015b\u0107 przez proces parowania.", "title": "Konfiguracja klienta Vizio SmartCast" } } diff --git a/homeassistant/components/wled/translations/lb.json b/homeassistant/components/wled/translations/lb.json index 13cfb7bc911..7657e1a12cc 100644 --- a/homeassistant/components/wled/translations/lb.json +++ b/homeassistant/components/wled/translations/lb.json @@ -1,24 +1,24 @@ { "config": { "abort": { - "already_configured": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", - "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + "already_configured": "D\u00ebsen WLED Apparat ass scho konfigur\u00e9iert.", + "connection_error": "Feeler beim verbannen mam WLED Apparat." }, "error": { - "connection_error": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + "connection_error": "Feeler beim verbannen mam WLED Apparat." }, - "flow_title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", + "flow_title": "WLED: {name}", "step": { "user": { "data": { "host": "Numm oder IP Adresse" }, - "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", - "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + "description": "D\u00e4in WLED als Integratioun mam Home Assistant ariichten.", + "title": "D\u00e4in WLED verbannen" }, "zeroconf_confirm": { - "description": "Wykryto urz\u0105dzenie [%key:component::wled::title%]", - "title": "Wykryto urz\u0105dzenie [%key:component::wled::title%]" + "description": "Soll de WLED mam Numm `{name}` am Home Assistant dob\u00e4i gesaat ginn?", + "title": "Entdeckten WLED Apparat" } } } diff --git a/homeassistant/components/zwave/translations/lb.json b/homeassistant/components/zwave/translations/lb.json index 6ef36dff82e..7abe764c2a1 100644 --- a/homeassistant/components/zwave/translations/lb.json +++ b/homeassistant/components/zwave/translations/lb.json @@ -20,14 +20,14 @@ }, "state": { "_": { - "dead": "Net Ereechbar", + "dead": "Doud", "initializing": "Initialis\u00e9iert", "ready": "Bereet", "sleeping": "Schl\u00e9ift" }, "query_stage": { - "dead": "Net Ereechbar ({query_stage})", - "initializing": "Initialis\u00e9iert ( {query_stage} )" + "dead": "Doud", + "initializing": "Initialis\u00e9iert" } } } \ No newline at end of file From aca1c5a5f823dfa5b306afe70d064946031047b5 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 29 Apr 2020 12:04:53 +0200 Subject: [PATCH 59/63] Update translations for FRITZ!Box --- .../components/fritzbox/translations/en.json | 3 +- .../components/fritzbox/translations/es.json | 3 +- .../components/fritzbox/translations/it.json | 32 +++++++++++++++++++ .../components/fritzbox/translations/no.json | 6 ++-- .../components/fritzbox/translations/pl.json | 3 +- 5 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 homeassistant/components/fritzbox/translations/it.json diff --git a/homeassistant/components/fritzbox/translations/en.json b/homeassistant/components/fritzbox/translations/en.json index dbfd329a128..d5d889a9083 100644 --- a/homeassistant/components/fritzbox/translations/en.json +++ b/homeassistant/components/fritzbox/translations/en.json @@ -3,7 +3,8 @@ "abort": { "already_configured": "This AVM FRITZ!Box is already configured.", "already_in_progress": "AVM FRITZ!Box configuration is already in progress.", - "not_found": "No supported AVM FRITZ!Box found on the network." + "not_found": "No supported AVM FRITZ!Box found on the network.", + "not_supported": "Connected to AVM FRITZ!Box but it's unable to control Smart Home devices." }, "error": { "auth_failed": "Username and/or password are incorrect." diff --git a/homeassistant/components/fritzbox/translations/es.json b/homeassistant/components/fritzbox/translations/es.json index bb28593958c..05f956d2382 100644 --- a/homeassistant/components/fritzbox/translations/es.json +++ b/homeassistant/components/fritzbox/translations/es.json @@ -3,7 +3,8 @@ "abort": { "already_configured": "Este AVM FRITZ!Box ya est\u00e1 configurado.", "already_in_progress": "La configuraci\u00f3n del AVM FRITZ!Box ya est\u00e1 en progreso.", - "not_found": "No se encontr\u00f3 ning\u00fan AVM FRITZ!Box compatible en la red." + "not_found": "No se encontr\u00f3 ning\u00fan AVM FRITZ!Box compatible en la red.", + "not_supported": "Conectado a AVM FRITZ!Box pero no es capaz de controlar dispositivos Smart Home." }, "error": { "auth_failed": "Usuario y/o contrase\u00f1a incorrectos." diff --git a/homeassistant/components/fritzbox/translations/it.json b/homeassistant/components/fritzbox/translations/it.json new file mode 100644 index 00000000000..de0f1e0e918 --- /dev/null +++ b/homeassistant/components/fritzbox/translations/it.json @@ -0,0 +1,32 @@ +{ + "config": { + "abort": { + "already_configured": "Questo AVM FRITZ!Box \u00e8 gi\u00e0 configurato.", + "already_in_progress": "La configurazione di AVM FRITZ!Box \u00e8 gi\u00e0 in corso.", + "not_found": "Nessun AVM FRITZ!Box supportato trovato sulla rete." + }, + "error": { + "auth_failed": "Nome utente e/o password non sono corretti." + }, + "flow_title": "AVM FRITZ!Box: {name}", + "step": { + "confirm": { + "data": { + "password": "Password", + "username": "Nome utente" + }, + "description": "Vuoi impostare {name}?", + "title": "AVM FRITZ!Box" + }, + "user": { + "data": { + "host": "Host o indirizzo IP", + "password": "Password", + "username": "Nome utente" + }, + "description": "Inserisci le informazioni del tuo AVM FRITZ!Box .", + "title": "AVM FRITZ!Box" + } + } + } +} \ No newline at end of file diff --git a/homeassistant/components/fritzbox/translations/no.json b/homeassistant/components/fritzbox/translations/no.json index c523c7412d9..b6a7fe0641f 100644 --- a/homeassistant/components/fritzbox/translations/no.json +++ b/homeassistant/components/fritzbox/translations/no.json @@ -8,7 +8,7 @@ "error": { "auth_failed": "Brukernavn og/eller passord er feil." }, - "flow_title": "AVM FRITZ!Box: {name}", + "flow_title": "", "step": { "confirm": { "data": { @@ -16,7 +16,7 @@ "username": "Brukernavn" }, "description": "Vil du sette opp {name} ?", - "title": "AVM FRITZ!Box" + "title": "" }, "user": { "data": { @@ -25,7 +25,7 @@ "username": "Brukernavn" }, "description": "Skriv inn AVM FRITZ!Box informasjonen.", - "title": "AVM FRITZ!Box" + "title": "" } } } diff --git a/homeassistant/components/fritzbox/translations/pl.json b/homeassistant/components/fritzbox/translations/pl.json index 50ffd461d4c..8c9d58c3c42 100644 --- a/homeassistant/components/fritzbox/translations/pl.json +++ b/homeassistant/components/fritzbox/translations/pl.json @@ -3,7 +3,8 @@ "abort": { "already_configured": "Ten AVM FRITZ!Box jest ju\u017c skonfigurowany.", "already_in_progress": "Konfiguracja AVM FRITZ!Box jest ju\u017c w toku.", - "not_found": "W sieci nie znaleziono obs\u0142ugiwanego urz\u0105dzenia AVM FRITZ!Box." + "not_found": "W sieci nie znaleziono obs\u0142ugiwanego urz\u0105dzenia AVM FRITZ!Box.", + "not_supported": "Po\u0142\u0105czony z AVM FRITZ! Box, ale nie jest w stanie kontrolowa\u0107 urz\u0105dze\u0144 Smart Home." }, "error": { "auth_failed": "Nazwa u\u017cytkownika i/lub has\u0142o s\u0105 nieprawid\u0142owe." From 1e23019df89c3d564abc8aa4b9d0ad48845fec75 Mon Sep 17 00:00:00 2001 From: Rami Mosleh Date: Wed, 29 Apr 2020 14:38:20 +0300 Subject: [PATCH 60/63] Fix Islamic prayer times naming (#34784) --- .../components/islamic_prayer_times/const.py | 13 ++++-- .../components/islamic_prayer_times/sensor.py | 4 +- .../islamic_prayer_times/strings.json | 2 +- .../islamic_prayer_times/translations/en.json | 40 +++++++++---------- .../islamic_prayer_times/test_sensor.py | 4 +- 5 files changed, 36 insertions(+), 27 deletions(-) diff --git a/homeassistant/components/islamic_prayer_times/const.py b/homeassistant/components/islamic_prayer_times/const.py index 5a9007689d9..ee7512c2d7a 100644 --- a/homeassistant/components/islamic_prayer_times/const.py +++ b/homeassistant/components/islamic_prayer_times/const.py @@ -1,12 +1,19 @@ """Constants for the Islamic Prayer component.""" DOMAIN = "islamic_prayer_times" NAME = "Islamic Prayer Times" -SENSOR_SUFFIX = "Prayer" PRAYER_TIMES_ICON = "mdi:calendar-clock" -SENSOR_TYPES = ["Fajr", "Sunrise", "Dhuhr", "Asr", "Maghrib", "Isha", "Midnight"] +SENSOR_TYPES = { + "Fajr": "prayer", + "Sunrise": "time", + "Dhuhr": "prayer", + "Asr": "prayer", + "Maghrib": "prayer", + "Isha": "prayer", + "Midnight": "time", +} -CONF_CALC_METHOD = "calc_method" +CONF_CALC_METHOD = "calculation_method" CALC_METHODS = ["isna", "karachi", "mwl", "makkah"] DEFAULT_CALC_METHOD = "isna" diff --git a/homeassistant/components/islamic_prayer_times/sensor.py b/homeassistant/components/islamic_prayer_times/sensor.py index d1f4baa90bc..92a0a491d8d 100644 --- a/homeassistant/components/islamic_prayer_times/sensor.py +++ b/homeassistant/components/islamic_prayer_times/sensor.py @@ -5,7 +5,7 @@ from homeassistant.const import DEVICE_CLASS_TIMESTAMP from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.entity import Entity -from .const import DATA_UPDATED, DOMAIN, PRAYER_TIMES_ICON, SENSOR_SUFFIX, SENSOR_TYPES +from .const import DATA_UPDATED, DOMAIN, PRAYER_TIMES_ICON, SENSOR_TYPES _LOGGER = logging.getLogger(__name__) @@ -33,7 +33,7 @@ class IslamicPrayerTimeSensor(Entity): @property def name(self): """Return the name of the sensor.""" - return f"{self.sensor_type} {SENSOR_SUFFIX}" + return f"{self.sensor_type} {SENSOR_TYPES[self.sensor_type]}" @property def unique_id(self): diff --git a/homeassistant/components/islamic_prayer_times/strings.json b/homeassistant/components/islamic_prayer_times/strings.json index ebbea482122..857ce4c2dff 100644 --- a/homeassistant/components/islamic_prayer_times/strings.json +++ b/homeassistant/components/islamic_prayer_times/strings.json @@ -15,7 +15,7 @@ "step": { "init": { "data": { - "calc_method": "Prayer calculation method" + "calculation_method": "Prayer calculation method" } } } diff --git a/homeassistant/components/islamic_prayer_times/translations/en.json b/homeassistant/components/islamic_prayer_times/translations/en.json index 155a693ab1f..4db928c0ede 100644 --- a/homeassistant/components/islamic_prayer_times/translations/en.json +++ b/homeassistant/components/islamic_prayer_times/translations/en.json @@ -1,23 +1,23 @@ { - "config": { - "abort": { - "one_instance_allowed": "Only a single instance is necessary." - }, - "step": { - "user": { - "description": "Do you want to set up Islamic Prayer Times?", - "title": "Set up Islamic Prayer Times" - } - } + "config": { + "abort": { + "one_instance_allowed": "Only a single instance is necessary." }, - "options": { - "step": { - "init": { - "data": { - "calc_method": "Prayer calculation method" - } - } + "step": { + "user": { + "description": "Do you want to set up Islamic Prayer Times?", + "title": "Set up Islamic Prayer Times" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "calculation_method": "Prayer calculation method" } - }, - "title": "Islamic Prayer Times" -} \ No newline at end of file + } + } + }, + "title": "Islamic Prayer Times" +} diff --git a/tests/components/islamic_prayer_times/test_sensor.py b/tests/components/islamic_prayer_times/test_sensor.py index 4954287b864..0579664ae7b 100644 --- a/tests/components/islamic_prayer_times/test_sensor.py +++ b/tests/components/islamic_prayer_times/test_sensor.py @@ -23,6 +23,8 @@ async def test_islamic_prayer_times_sensors(hass): for prayer in PRAYER_TIMES: assert ( - hass.states.get(f"sensor.{prayer}_prayer").state + hass.states.get( + f"sensor.{prayer}_{islamic_prayer_times.const.SENSOR_TYPES[prayer]}" + ).state == PRAYER_TIMES_TIMESTAMPS[prayer].isoformat() ) From dad0109eca466c276f3f1257b547cdbd4fdbb206 Mon Sep 17 00:00:00 2001 From: Quentame Date: Wed, 29 Apr 2020 13:41:37 +0200 Subject: [PATCH 61/63] Bump python-synology to 0.7.3 (#34847) --- homeassistant/components/synology_dsm/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/synology_dsm/manifest.json b/homeassistant/components/synology_dsm/manifest.json index 5834217b6ea..bb3c5ce3aec 100644 --- a/homeassistant/components/synology_dsm/manifest.json +++ b/homeassistant/components/synology_dsm/manifest.json @@ -2,7 +2,7 @@ "domain": "synology_dsm", "name": "Synology DSM", "documentation": "https://www.home-assistant.io/integrations/synology_dsm", - "requirements": ["python-synology==0.7.2"], + "requirements": ["python-synology==0.7.3"], "codeowners": ["@ProtoThis", "@Quentame"], "config_flow": true, "ssdp": [ diff --git a/requirements_all.txt b/requirements_all.txt index 3b83396e81d..b252313922d 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1680,7 +1680,7 @@ python-sochain-api==0.0.2 python-songpal==0.11.2 # homeassistant.components.synology_dsm -python-synology==0.7.2 +python-synology==0.7.3 # homeassistant.components.tado python-tado==0.8.1 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 60bfa682121..033c6580820 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -650,7 +650,7 @@ python-miio==0.5.0.1 python-nest==4.1.0 # homeassistant.components.synology_dsm -python-synology==0.7.2 +python-synology==0.7.3 # homeassistant.components.tado python-tado==0.8.1 From e7e0f049d1c747d5aacce3b208dab6c66685dcd6 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 29 Apr 2020 13:52:10 +0200 Subject: [PATCH 62/63] Update translations for Islamic Prayer Times --- .../islamic_prayer_times/translations/ca.json | 2 +- .../islamic_prayer_times/translations/en.json | 42 +++++++++---------- .../islamic_prayer_times/translations/es.json | 2 +- .../islamic_prayer_times/translations/it.json | 23 ++++++++++ .../islamic_prayer_times/translations/lb.json | 2 +- .../islamic_prayer_times/translations/nl.json | 2 +- .../islamic_prayer_times/translations/no.json | 2 +- .../islamic_prayer_times/translations/pl.json | 2 +- .../islamic_prayer_times/translations/ru.json | 2 +- .../translations/zh-Hant.json | 2 +- 10 files changed, 52 insertions(+), 29 deletions(-) create mode 100644 homeassistant/components/islamic_prayer_times/translations/it.json diff --git a/homeassistant/components/islamic_prayer_times/translations/ca.json b/homeassistant/components/islamic_prayer_times/translations/ca.json index f57986d2ffd..6b01d442df8 100644 --- a/homeassistant/components/islamic_prayer_times/translations/ca.json +++ b/homeassistant/components/islamic_prayer_times/translations/ca.json @@ -14,7 +14,7 @@ "step": { "init": { "data": { - "calc_method": "M\u00e8tode de c\u00e0lcul dels temps" + "calculation_method": "M\u00e8tode de c\u00e0lcul dels temps" } } } diff --git a/homeassistant/components/islamic_prayer_times/translations/en.json b/homeassistant/components/islamic_prayer_times/translations/en.json index 4db928c0ede..e9781c17fb1 100644 --- a/homeassistant/components/islamic_prayer_times/translations/en.json +++ b/homeassistant/components/islamic_prayer_times/translations/en.json @@ -1,23 +1,23 @@ { - "config": { - "abort": { - "one_instance_allowed": "Only a single instance is necessary." - }, - "step": { - "user": { - "description": "Do you want to set up Islamic Prayer Times?", - "title": "Set up Islamic Prayer Times" - } - } - }, - "options": { - "step": { - "init": { - "data": { - "calculation_method": "Prayer calculation method" + "config": { + "abort": { + "one_instance_allowed": "Only a single instance is necessary." + }, + "step": { + "user": { + "description": "Do you want to set up Islamic Prayer Times?", + "title": "Set up Islamic Prayer Times" + } } - } - } - }, - "title": "Islamic Prayer Times" -} + }, + "options": { + "step": { + "init": { + "data": { + "calculation_method": "Prayer calculation method" + } + } + } + }, + "title": "Islamic Prayer Times" +} \ No newline at end of file diff --git a/homeassistant/components/islamic_prayer_times/translations/es.json b/homeassistant/components/islamic_prayer_times/translations/es.json index b7eeb0db8c8..8dc6c5e5cf8 100644 --- a/homeassistant/components/islamic_prayer_times/translations/es.json +++ b/homeassistant/components/islamic_prayer_times/translations/es.json @@ -14,7 +14,7 @@ "step": { "init": { "data": { - "calc_method": "M\u00e9todo de c\u00e1lculo de la oraci\u00f3n" + "calculation_method": "M\u00e9todo de c\u00e1lculo de la oraci\u00f3n" } } } diff --git a/homeassistant/components/islamic_prayer_times/translations/it.json b/homeassistant/components/islamic_prayer_times/translations/it.json new file mode 100644 index 00000000000..02f3c5df2ec --- /dev/null +++ b/homeassistant/components/islamic_prayer_times/translations/it.json @@ -0,0 +1,23 @@ +{ + "config": { + "abort": { + "one_instance_allowed": "\u00c8 necessaria solo una singola istanza." + }, + "step": { + "user": { + "description": "Vuoi impostare i tempi di preghiera islamici?", + "title": "Impostare i tempi di preghiera islamici" + } + } + }, + "options": { + "step": { + "init": { + "data": { + "calculation_method": "Metodo di calcolo della preghiera" + } + } + } + }, + "title": "Tempi di preghiera islamica" +} \ No newline at end of file diff --git a/homeassistant/components/islamic_prayer_times/translations/lb.json b/homeassistant/components/islamic_prayer_times/translations/lb.json index 7cdf0beb385..7ba93417436 100644 --- a/homeassistant/components/islamic_prayer_times/translations/lb.json +++ b/homeassistant/components/islamic_prayer_times/translations/lb.json @@ -14,7 +14,7 @@ "step": { "init": { "data": { - "calc_method": "Gebieder Berechnungsmethod" + "calculation_method": "Gebieder Berechnungsmethod" } } } diff --git a/homeassistant/components/islamic_prayer_times/translations/nl.json b/homeassistant/components/islamic_prayer_times/translations/nl.json index b0cab2d938d..2f69b417998 100644 --- a/homeassistant/components/islamic_prayer_times/translations/nl.json +++ b/homeassistant/components/islamic_prayer_times/translations/nl.json @@ -14,7 +14,7 @@ "step": { "init": { "data": { - "calc_method": "Berekeningsmethode voor het gebed" + "calculation_method": "Berekeningsmethode voor het gebed" } } } diff --git a/homeassistant/components/islamic_prayer_times/translations/no.json b/homeassistant/components/islamic_prayer_times/translations/no.json index ea5e7ae807b..59e601648ff 100644 --- a/homeassistant/components/islamic_prayer_times/translations/no.json +++ b/homeassistant/components/islamic_prayer_times/translations/no.json @@ -14,7 +14,7 @@ "step": { "init": { "data": { - "calc_method": "Metode for beregning av b\u00f8nn" + "calculation_method": "Metode for beregning av b\u00f8nn" } } } diff --git a/homeassistant/components/islamic_prayer_times/translations/pl.json b/homeassistant/components/islamic_prayer_times/translations/pl.json index a706e6a0596..b0f87a15404 100644 --- a/homeassistant/components/islamic_prayer_times/translations/pl.json +++ b/homeassistant/components/islamic_prayer_times/translations/pl.json @@ -14,7 +14,7 @@ "step": { "init": { "data": { - "calc_method": "Metoda kalkulacji modlitwy" + "calculation_method": "Metoda kalkulacji modlitwy" } } } diff --git a/homeassistant/components/islamic_prayer_times/translations/ru.json b/homeassistant/components/islamic_prayer_times/translations/ru.json index 95635fb6802..799c4bc5500 100644 --- a/homeassistant/components/islamic_prayer_times/translations/ru.json +++ b/homeassistant/components/islamic_prayer_times/translations/ru.json @@ -14,7 +14,7 @@ "step": { "init": { "data": { - "calc_method": "\u041c\u0435\u0442\u043e\u0434 \u0440\u0430\u0441\u0447\u0435\u0442\u0430" + "calculation_method": "\u041c\u0435\u0442\u043e\u0434 \u0440\u0430\u0441\u0447\u0435\u0442\u0430" } } } diff --git a/homeassistant/components/islamic_prayer_times/translations/zh-Hant.json b/homeassistant/components/islamic_prayer_times/translations/zh-Hant.json index 568b634d903..34773b88ac0 100644 --- a/homeassistant/components/islamic_prayer_times/translations/zh-Hant.json +++ b/homeassistant/components/islamic_prayer_times/translations/zh-Hant.json @@ -14,7 +14,7 @@ "step": { "init": { "data": { - "calc_method": "\u7948\u79b1\u8a08\u7b97\u65b9\u5f0f" + "calculation_method": "\u7948\u79b1\u8a08\u7b97\u65b9\u5f0f" } } } From 50144e883e8fa3c9c18f8cde4b5f556a43f4d3c7 Mon Sep 17 00:00:00 2001 From: Franck Nijhof Date: Wed, 29 Apr 2020 14:15:35 +0200 Subject: [PATCH 63/63] Bumped version to 0.109.0 --- homeassistant/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/const.py b/homeassistant/const.py index a38664dd332..a30c0f0bdc5 100644 --- a/homeassistant/const.py +++ b/homeassistant/const.py @@ -1,7 +1,7 @@ """Constants used by Home Assistant components.""" MAJOR_VERSION = 0 MINOR_VERSION = 109 -PATCH_VERSION = "0b5" +PATCH_VERSION = "0" __short_version__ = f"{MAJOR_VERSION}.{MINOR_VERSION}" __version__ = f"{__short_version__}.{PATCH_VERSION}" REQUIRED_PYTHON_VER = (3, 7, 0)