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 1605fc751f..39fff8b6ea 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 c7f2c32b4e..a3af2a7031 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 0000000000..994cc3c8fb --- /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 0000000000..edee94a8e0 --- /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 0000000000..26b88fe4d2 --- /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 0000000000..b464235997 --- /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 77ce7025f7..2dc5a14249 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 300fad7261..c9a1ad15a8 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 3942e8eff5..c71f43eca7 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 89307b4c1f..a78ecdcf8e 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 0000000000..4f76c66c4f --- /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 98a82bd80a..45e5af4672 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 a139a4b997..e1a9583e03 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 0cd41e650f..b385af86ce 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 0000000000..6515658d6a --- /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 0000000000..89c332cea2 --- /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 0000000000..83e574aa2e --- /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 b023bd03cb..a178860d42 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 0000000000..b464235997 --- /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 0000000000..c7081cd694 --- /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 0000000000..8c62d2806c --- /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 0000000000..4617a07a5b --- /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 0000000000..bd20deada0 --- /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 0000000000..b464235997 --- /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 0000000000..98180e1124 --- /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 0000000000..98180e1124 --- /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 2f6ee5c2d4..271ada378c 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 01fac1581c..7103b9f75d 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 6bf7487c04..790feb0c5f 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 5364519638..c6d81d985b 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 a55c593326..a71678deec 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 0000000000..420196bb05 --- /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 41399a76ad..a3c741ce0e 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 6f5a7cd523..8ed4695367 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 0000000000..c09e8c63d1 --- /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 0000000000..025d58f519 --- /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 0000000000..b464235997 --- /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 0000000000..286cd58dd8 --- /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 0000000000..d0a3d1751a --- /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 0776c148e9..ef17b29156 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 0000000000..74220a6518 --- /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 0000000000..b464235997 --- /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 0000000000..0819834fcc --- /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 0000000000..b464235997 --- /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 e379229ec3..b09d2c5592 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 0000000000..b464235997 --- /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 0000000000..4ebc88bb1c --- /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 0000000000..590b9c90e1 --- /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 0000000000..d5a09a0b24 --- /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 0000000000..5cf966fc9e --- /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 0000000000..79bc899c47 --- /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 0d9831f1dc..e9d63f1114 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 4312910653..ebf1df9c18 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 0000000000..b464235997 --- /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 5f59144727..0151782bf1 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 0000000000..286cd58dd8 --- /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 cf59614e8a..cf2e8155df 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 4c2511bbc7..6391dc4d73 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 0000000000..b8a454fbab --- /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 d5234ea301..731ab4ad9a 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 7e65645928..b7e40798e8 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 0000000000..4bd578b953 --- /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 8ed10616a5..f593ac2618 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 5d6f5e53c5..bda3e337dd 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 2c65153932..446b2d6a13 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 0000000000..b464235997 --- /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 0000000000..0df67a9418 --- /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 da6809f49b..0f7314e662 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 0421228d0f..6b238362fd 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 3c1bfdbd8b..123385313e 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 a23a0fc746..6da89c0e3d 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 ef7a096468..58d57124db 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 395907056e..4df94dd323 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 0000000000..286cd58dd8 --- /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 45f939cb85..5ffd902214 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 42221f7ae8..2c810af8ea 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 3d5641b45a..72026949c7 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 8728a3003e..dd7ae5aead 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 d34899a621..79d1339bde 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 d9e2d2bd9c..ca5e4756cf 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 ae0e119c08..963195e6f6 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 f2fd3d3af0..3fbed6955d 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 c478270f8b..c1e8cf553d 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 c0b1fe782c..8c17de5e99 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 b54132c689..c7abd809b8 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 b90fd52fe5..d00525f995 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 57ee345584..41814a1e68 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 16fc13cb56..f728aa5d8a 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 32f0bf3792..e17437f01e 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 17b98b7c91..9a9283256c 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 c6c508136b..a76393e350 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 403075989e..ca0e214345 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 9e4c01e144..7b2095c4a2 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 f728aa5d8a..8c89391d06 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 e17437f01e..77c12ead2c 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 3e52b9f54b..7f8caf8390 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 fa0c7554a0..f6cdc7c57c 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 5c0f310896..248769099a 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 9b5f70a95e..75c6d49d15 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 248769099a..25b2b0381e 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 75c6d49d15..290b70953a 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 68b5586207..dcd81dc68d 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 889e6c192e..877efdd68f 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 91e501da28..e2daf1e376 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 253fae8bd3..e1e968c035 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 b6c224080a..c68d9f0279 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 094fde70dc..0000000000 --- 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 61a922d17f..95181114e7 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 bcadac953a..12d12082a3 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 1536a87569..8abdbbbbae 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 36c63c7b99..e0b50fa371 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 39fff8b6ea..67feb6c7b1 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 8d1527b193..4085233436 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 1074aaa68b..25c6adeac5 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 b8e5415592..dba35ae138 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 508626b43f..f65b810d69 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 4f08c4c37d..cbe6dcdb18 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 cdad3f6da9..385f410b7a 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 c0350353b4..65513db357 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 431785f7c6..05937cc3ee 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 2ca7fdf46e..2b1e9c7782 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 8691dc51c0..0a48891738 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 140d7e638a..4e6fc867f2 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 43bae9dc3b..e14e2f5c68 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 2b4563dab8..0a2c19a8cd 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 dc1f5c11b5..a45469c8f9 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 8420a1bea7..bb6dcaa2fe 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 d73812c207..10de8564fc 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 508626b43f..f65b810d69 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 1070730ba9..2474851cce 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 c1e8cf553d..025b295902 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 9a9283256c..66f752ffaf 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 dfef579559..f75605eaaf 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 c760440e63..a6d72ca222 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 8c89391d06..94af7482de 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 77c12ead2c..fe3a3fea75 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 b9fdcb085e..56bbe76a04 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 76fe619cc1..ea6c1e81e6 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 743b169c86..91b67e28c7 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 bb6dcaa2fe..9b94b77ca4 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 67feb6c7b1..1366103113 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 c8c5fc4d49..c799656df8 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 ee4293effe..a0985e5497 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 c27a0262a4..cd4a01e9a2 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 2474851cce..b08b950a59 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 82023eb9e1..e49f4f1407 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 94af7482de..91a2078957 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 fe3a3fea75..83fa0a4a75 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 025b295902..4b09e51645 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 1366103113..212c860b10 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 1b086f5815..ffcdb499c3 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 0790ece933..f0a059fc5b 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 2685064a94..9ba35a510d 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 be7e0f3e97..327d9ecc52 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 d00525f995..c58b0d819e 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 41814a1e68..50860f9663 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 f6a1620575..e5b93399c4 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 7297812249..ef25487183 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 212c860b10..b39da04426 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 ffcdb499c3..816855b46a 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 c7abd809b8..f3fd52a74a 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 91a2078957..77514b1bd5 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 83fa0a4a75..e31e6699f5 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 f75605eaaf..f75f164aca 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 a6d72ca222..2d3ae82227 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 77514b1bd5..123b5226e8 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 e31e6699f5..4215169f16 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 b39da04426..d585411c98 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 d8866051c6..2d9a644c70 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 2c442f5c3a..e64b2f3169 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 1a9463da15..77ab1425c8 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 8258c0e86e..cb73ed656f 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 1d2a5edd96..3479d59ee9 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 a655743685..1153d7c3b9 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 0000000000..b02a20e09a --- /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 0000000000..4b4a534655 --- /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 0000000000..f1c734dc93 --- /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 0000000000..aa1c6a90d2 --- /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 e13feac92b..840ede020f 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 d37ef1b014..95f8a4d6ef 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 5a045e14a9..ad15de831c 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 f0f19754b0..5b79e58e12 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 2ac458963f..837af04785 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 1d1bde6a26..6ca0b54106 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 74911d92d0..5464ce9e74 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 69e8ea6d38..d5f78eccf0 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 0000000000..6246d8997d --- /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 0000000000..dcb32f3eed --- /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 0000000000..14da45b8eb --- /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 9a64abadb6..37366eee6d 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 0000000000..d306894f7d --- /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 ab96460dc7..c6f2dfbf18 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 e1a9583e03..d9d64070c8 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 33afc930e8..aad8a496a1 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 4617a07a5b..3d8c94ab5b 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 4fb50788fc..865860a5ad 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 0000000000..a896cab087 --- /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 cbdb31e3b3..02a4924d59 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 0000000000..b0cab2d938 --- /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 a404e1747e..8d141a5f35 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 0000000000..bff4192f01 --- /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 49f47d3fa3..fa7dc4da26 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 6a3e33222f..054e3bf964 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 b35af6e1ba..0fb2a8c703 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 79bc899c47..1f38ff9c44 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 0000000000..ae5f27fb7c --- /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 08933fc16f..70671503e5 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 9c60191705..623e00870b 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 3c5f2c2a6b..5453b078a3 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 ba10353948..e84720a2de 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 b961d12e5a..e2a6b6a09c 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 c7811e2cd0..1cfd9c72c4 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 23825000fd..a75e63e9b5 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 f6e9a6c2c4..901cde0dab 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 f773ec1850..3fbb0ae50b 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 442420b1c5..3438829597 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 c82271a9ff..f3eb4009f0 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 857a460fa0..4636338240 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 95ce591747..1bcc60c80f 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 82e4c122c3..a8b2d29656 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 3479d59ee9..ecc8999fd1 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 f8791895d5..695ca3a752 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 0000000000..f9d40a035a --- /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 0000000000..3652210f7b --- /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 c41b240779..1de8e74ec8 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 c3704326d3..e6e22abc33 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 0000000000..faac5e9c57 --- /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 0000000000..5f16553c64 --- /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 18199edf85..2c472277b0 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 31bf427196..561b3442d2 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 23b3602744..3399960dd3 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 36c18ea34f..fdd036f26a 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 2f4b9a1171..a0f79d0417 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 0000000000..c9c7107d9c --- /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 8d8e15d218..4174226ab5 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 8fd7a0ca75..13a5ca0815 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 cef5c22c87..969d9b2e4d 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 2662eab36e..050229dbf0 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 de6ca6f483..5ecea7db65 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 32c3f892e5..659cec2039 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 2d65458665..08c2f54ba7 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 f5749ebf2c..624298c04e 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 74d1e6981b..6a74c3969b 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 0000000000..3b6eae14ba --- /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 1f8ca1cc10..a121d9bb46 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 0000000000..f7278a6c43 --- /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 b58e39a621..5449e1b553 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 aacabe11ed..2af7814575 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 9c57347651..383b1a9412 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 ff241531ec..b987c7b2b7 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 a77d66c02f..9748da483b 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 8ae4c30e15..baa5200f26 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 ce1bba1bb5..4892d7a45c 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 f593ac2618..f3ec177fb6 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 9218af96d5..a0ca9a3627 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 ad15de831c..c2f00b0874 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 5577885f40..4859b10073 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 ff7b3b6661..d2085b7a09 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 5453b078a3..1db4f2a193 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 5b79e58e12..a10b28b538 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 837af04785..c09999b892 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 6ca0b54106..1558008cd3 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 0000000000..08561ee43a --- /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 0000000000..fac8916a54 --- /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 0d4f83366d..45e5c525e3 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 6dc104d71d..14f8f47222 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 4cf59263fe..d1581b026c 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 52f4ba34e3..41de2e3aae 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 ecd936975b..99438e10a8 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 f53113a6b6..d2013b0f17 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 0000000000..ff9c8ebe20 --- /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 26b88fe4d2..ace565408f 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 0000000000..e2b57f18e7 --- /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 0000000000..a7a8a15c20 --- /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 654cbbd0bb..5f1bd39058 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 911c0011db..376072b975 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 f82a7f2e90..b7d77ad7b1 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 95a7cfb308..c208e035d5 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 0000000000..f113b12783 --- /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 6dd87e8471..27eac52143 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 b44e5fd894..a1641a24fc 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 8c62d2806c..5072d62374 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 0000000000..f95cac200e --- /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 bf3b5329d2..e4b98d1030 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 45d2a28d35..b92ccd177e 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 0000000000..0de012d716 --- /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 c9c7107d9c..85020d2bf5 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 cdf339d389..2ed12ab175 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 5cddc5b082..793ab5bfa7 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 b83083fd6e..02927228c3 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 bb0eabe775..94bb529aa6 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 5cf966fc9e..dc9bfc3c92 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 0000000000..3029352436 --- /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 0000000000..4cd5a4897a --- /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 0151782bf1..0224ce76fc 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 8e0acaaaa0..1fbd4abada 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 f3ec177fb6..f593ac2618 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 a0ca9a3627..625bec2c5a 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 0000000000..de48b719ea --- /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 0000000000..d7045b9d1f --- /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 c09999b892..d136f17139 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 1558008cd3..4e2173324c 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 0000000000..3fa024bb95 --- /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 0000000000..9504ef064e --- /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 0000000000..d2c211a7c7 --- /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 0000000000..e8196f3981 --- /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 24c7829a14..4d1b5a7eb6 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 0000000000..0a9092c288 --- /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 0000000000..a4fb25b59c --- /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 b39e5c1669..99e98c4aa9 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 9534bad6df..902da2bff7 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 123b5226e8..cc936d74e0 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 4215169f16..dab571c7a8 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 816855b46a..b4265aa01f 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 d6b43dc4b7..c73578de64 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 e3b30cec9a..2f6e5de588 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 f46ba1611a..5dbef37d9b 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 64816acaaf..b8d791f032 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 b8d791f032..b9b3f51f60 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 b4265aa01f..25a81333bd 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 4cb5b7bcdc..227aeedf84 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 c73578de64..8bfd992347 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 8f91d4e1de..d8c1410599 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 9a8d617721..f153a47e2a 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 d25ebb7221..97109decae 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 7d3bea4c99..f7e95c50c8 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 f3fd52a74a..5834217b6e 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 cc936d74e0..d92897ce29 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 dab571c7a8..1d71140dd4 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 f75f164aca..9759c38af7 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 2d3ae82227..938427eadd 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 d92897ce29..3b83396e81 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 1d71140dd4..60bfa68212 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 d585411c98..a38664dd33 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 7b2886b660..71264e906e 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 d5f78eccf0..52e55242a0 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 77ab1425c8..a528c98e04 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 cb73ed656f..8687a2ead0 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 0000000000..e931c1fc10 --- /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 cc53bafb57..7473c62f66 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 900022c470..4e9722bb20 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 099945f620..1f92392058 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 8407a8429b..9b0e4bc584 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 840ede020f..4d898ec75f 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 e4444c3f0c..2e2f65bc00 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 0b9f336e9c..a9bff09864 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 3787d37750..864a3603f3 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 f113b12783..6151129746 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 0000000000..3a445b1008 --- /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 e797c38781..94ff88f971 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 fcc37de1d2..6ce1c17e5d 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 8d00a3d98e..9bfc78af28 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 a2e56e0980..c74b3d57e9 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 aad8a496a1..67f18d6154 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 0000000000..55dfceac11 --- /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 0000000000..e674d42290 --- /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 084dd70ee5..9df523af0f 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 0000000000..50ffd461d4 --- /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 b0dcfe0c36..25179e951a 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 7eab2528c3..aaa9e7b9d8 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 fbba14d88d..0c0b9ade13 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 148d344eae..c840cb4e9f 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 fa9f3f5abc..b1f635026e 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 a4c7f1f8d9..20e3f8c2fb 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 0de012d716..8bc57941cb 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 0000000000..a706e6a059 --- /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 f41ceea26f..860d90536d 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 c5ae118ef2..5f8b977dc6 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 634e51234d..879f98b649 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 e416bdc6a6..10504b8821 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 44ee1ad440..20b0348570 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 c5e1abdf72..77d83f3717 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 d0a3d1751a..300c19e92b 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 94ffb76bb8..32fab6f325 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 0000000000..3da4d1f3ea --- /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 f27d6a35c4..38d5891edd 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 0000000000..7a880c3326 --- /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 f2a598770a..2416a2bf7f 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 0489feb270..2f8ffcf787 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 9f1e0670d6..1722daf747 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 0c105f2616..a688a9ad8c 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 aa4ea4da94..cfb277179e 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 4f5f75dc64..cf3b1cd4ba 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 91bb4b6180..8883e669a8 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 70671503e5..2771b3f5b2 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 0000000000..3772d6a08c --- /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 623e00870b..af1e70eedd 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 0b6f347873..517127a509 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 8d83b05e73..dc71b001bd 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 de709024d2..8597fea2ce 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 c2f00b0874..122f8bef51 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 0de4e3bbcc..e7ce33ec43 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 1db4f2a193..5453b078a3 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 a10b28b538..d9e24638f7 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 d7045b9d1f..d7714de27e 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 e84720a2de..91a81f0317 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 0000000000..65a23d5835 --- /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 3ee83236d7..c07f9de7b3 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 0000000000..58a0f7018d --- /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 379a554e0c..028956ec6b 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 20b4f8e55a..52efb32b55 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 bc7466a32d..db35a0b3c6 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 3e9ef97585..9fb009f093 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 0000000000..baafc324be --- /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 3cd7c1526e..48267a2312 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 392ae0f47f..2d586bc3e3 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 13cfb7bc91..7657e1a12c 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 6ef36dff82..7abe764c2a 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 dbfd329a12..d5d889a908 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 bb28593958..05f956d238 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 0000000000..de0f1e0e91 --- /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 c523c7412d..b6a7fe0641 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 50ffd461d4..8c9d58c3c4 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 5a9007689d..ee7512c2d7 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 d1f4baa90b..92a0a491d8 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 ebbea48212..857ce4c2df 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 155a693ab1..4db928c0ed 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 4954287b86..0579664ae7 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 5834217b6e..bb3c5ce3ae 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 3b83396e81..b252313922 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 60bfa68212..033c658082 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 f57986d2ff..6b01d442df 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 4db928c0ed..e9781c17fb 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 b7eeb0db8c..8dc6c5e5cf 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 0000000000..02f3c5df2e --- /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 7cdf0beb38..7ba9341743 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 b0cab2d938..2f69b41799 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 ea5e7ae807..59e601648f 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 a706e6a059..b0f87a1540 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 95635fb680..799c4bc550 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 568b634d90..34773b88ac 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 a38664dd33..a30c0f0bdc 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)